Cuprins:

Ramadan Lights - Domotică IOT: 6 pași
Ramadan Lights - Domotică IOT: 6 pași

Video: Ramadan Lights - Domotică IOT: 6 pași

Video: Ramadan Lights - Domotică IOT: 6 pași
Video: knx wiring vs manual 2024, Iulie
Anonim
Ramadan Lights | Domotică IOT
Ramadan Lights | Domotică IOT

În timp ce Ramadanul bate la ușă, orașele din întreaga lume se aprind și se pregătesc pentru luna postului. Luminile sunt agățate în piețele publice și pe străzile orașului, precum și pe pereții exteriori ai caselor aprinse în timpul nopții până când soarele răsare dimineața.

În acest proiect, aș dori să împărtășesc contribuția mea, în care automatizez iluminarea acestor decorațiuni pe baza timpului Adhan și adaug acest lucru la sistemul meu inteligent de casă.

Pasul 1: Teorie

Practic, este mai ușor și mai aplicabil să automatizezi iluminatul pe baza intensității soarelui, de exemplu. Cu toate acestea, aș vrea ca acesta să aibă spiritul lunii sfinte, adică luminile se vor aprinde atât timp cât oamenii au voie să mănânce în timpul lunii de post. În special, luminile sunt pornite de la Maghrib Adhan până la Fajr Adhan în fiecare zi, fără nicio interacțiune umană.

Pasul 2: Proiectare

Mai jos voi lista cerințele / capacitățile acestui proiect:

  • Sistemul ar trebui să poată procesa automat la pornire.
  • Sistemul ar trebui să poată executa periodic algoritmul deciziei (ON / OFF).
  • Sistemul ar trebui să poată apela API zilnic.
  • Sistemul ar trebui să poată recupera după repornirea neplanificată.
  • Sistemul ar trebui să execute algoritmul de decizie (ON / OFF) la primirea instantanee a datelor.
  • Sistemul ar trebui să furnizeze un comutator pentru activarea modului pilot automat (modul automat).
  • Sistemul ar trebui să ofere un comutator pentru pornirea / oprirea manuală a luminilor.
  • Declanșarea comutatorului manual ar trebui să seteze modul manual pe OPRIT.
  • Când modul automat este PORNIT, rezultatul algoritmului de decizie ar trebui să se reflecte pe comutatorul manual PORNIT / OPRIT.

Pasul 3: Detalii tehnice: API-ul

Detalii tehnice: API
Detalii tehnice: API

Pentru a face teoria aplicabilă, este necesar să cunoașteți timpul Adhan pe baze zilnice de la variabila sa și să acționați asupra ei pentru a porni / opri luminile / decorațiunile.

În acest scop, am decis să folosesc un API bazat pe locație pentru a difuza datele (timp pentru Adhan)

muslimsalat.com/api/#location

  • Acest API oferă o varietate de opțiuni și parametri de configurare descriși în legătura de documentare de mai sus.
  • Este recomandat să utilizați propriul API_key, care este gratuit la înregistrare.
  • În proiectarea mea, mă interesează o cronologie zilnică.
  • Timpul returnat este în format de 12 ore (AM / PM).
  • În ceea ce privește locația, mi-am dorit dacă acest API ar putea oferi opțiuni mai precise pentru locații precum sistemul de coordonate geografice de coordonate (latitudine și longitudine). În acest mod, acest API poate fi furnizat, de exemplu, cu un nume de oraș și acest lucru este suficient în majoritatea cazurilor. Din păcate, rezultatele orașului meu specific au fost destul de părtinitoare în mai multe teste și au existat câteva minute de diferență la compararea timpului Adhan între rezultatele API și timpul real al lui Adhan în orașul meu. Pe de altă parte, rezultatele au fost perfect potrivite atunci când am oferit un oraș apropiat spre nord și m-am ținut de el!
  • URL-ul API pe care îl folosesc este: https://muslimsalat.com/.json? Key =

Pasul 4: Detalii tehnice: Hardware

Detalii tehnice: Hardware
Detalii tehnice: Hardware

Pentru simplitate, las hardware-ul în afara procesului de sincronizare cu API-ul și calculul timpului prin delegarea acestor operațiuni Sistemului meu de automatizare la domiciliu. Acest lucru îmi va oferi mai mult control dacă vreau să modificăm sursa API și algoritmul de calcul.

Acestea fiind spuse, am folosit un ESP8266 (NodeMCU) pentru a mă conecta la rețeaua locală prin WIFI și un modul de releu ca actuator. NodeMCU va utiliza protocolul MQTT și va asculta un subiect specific pentru a obține comenzi pentru a porni / opri releul. Simplu ca buna ziua!

Pasul 5: Detalii tehnice: Conectarea punctelor | Domotică

Detalii tehnice: Conectarea punctelor | Domotică
Detalii tehnice: Conectarea punctelor | Domotică
Detalii tehnice: Conectarea punctelor | Domotică
Detalii tehnice: Conectarea punctelor | Domotică
Detalii tehnice: Conectarea punctelor | Domotică
Detalii tehnice: Conectarea punctelor | Domotică

RaspberryPi-ul meu deține o instanță nodered, care este capabilă să gestioneze tot ce am nevoie pentru acest proiect. De asemenea, are instalat un server MQTT pentru publicarea mesajelor noastre.

La început, m-am gândit că pot prelua datele API pe baze zilnice la ora 9:00 și pot extrage atât timpurile Fajr, cât și Mahgrib Adhan și compar în continuare ora curentă cu aceste variabile, adică:

fiecare 30 de secunde:

dacă: Mahgrib <ACUM <Fajr true | aprinde luminile | publicați un mesaj ON pe subiectul specificat MQTT altfel: opriți

Pentru compararea timpului, convertesc orele furnizate de API de la hh: mm (AM / PM) la formatul de dată completă, setând porțiunea de dată la o dată neglijabilă în istorie, de exemplu (1/1/1970), deoarece comparăm ora numai la ora curentă (porțiunea de dată este, de asemenea, convertită).

Din păcate, acest lucru va funcționa numai în cazuri directe. Să presupunem că atunci când curentul electric scade sau sistemul repornește dintr-un motiv neplanificat. Dacă acest caz apare înainte de 12AM, atunci suntem încă în siguranță, dar după 12AM acest lucru va eșua algoritmul nostru simplu.

Pentru a da un exemplu, să-l avem pe Magrib Adhan la 7:30 PM și Fajr la 4:10 AM. Când sistemul pornește, va trimite o nouă solicitare pentru a prelua datele menționate anterior. Dacă acum este ora 1:45 AM, ne așteptăm ca algoritmul nostru să revină adevărat, dar de fapt nu va fi pentru că 1:45 AM este mai mic decât Fajr (4:10 AM), dar nu este mai mare decât Magrib (19:30 PM). Acest lucru se datorează faptului că unim data între toate variabilele. Mai jos este versiunea finală a algoritmului (până acum):

fiecare 30 de secunde:

if ((magrib.getHours ()> = 12 && fajr.getHours () <= 12) || fajr <maghrib) {fajr.setDate (fajr.getDate () + 1); // gestionați zilele de întindere endTime if (now.getHours () <= 12) {now.setDate (now.getDate () + 1); // gestionați zilele de întindere currentTime}} // mai jos este blocul de cod anterior dacă: Mahgrib <ACUM <Fajr true | aprinde luminile | publicați un mesaj ON la subiectul MQTT specificat altfel: false | opriți

Fluxul complet al procesului este adnotat în imaginea de mai sus.

În ceea ce privește interfața de utilizare, am adăugat 2 comutatoare la interfața de utilizare / interfață:

  1. Un comutator pentru a transforma acest proces automat sau manual.
  2. Un comutator pentru a porni / opri manual luminile.

Pasul 6: încheierea

Timpul zboară să nu fie amintit niciodată. Realizarea unor astfel de proiecte simple de o zi vă permite să respirați pe această bandă rapidă și să vă ajutați să vă revigorați abilitățile soft în timp.

Am încercat la fel de mult în acest proiect să-l păstrez simplu și reutilizabil pe tot globul.

Vă rugăm să votați pentru acest lucru instructiv dacă credeți că acest proiect merită.

Ramadan fericit!

Recomandat: