Cuprins:
- Pasul 1: Teorie
- Pasul 2: Proiectare
- Pasul 3: Detalii tehnice: API-ul
- Pasul 4: Detalii tehnice: Hardware
- Pasul 5: Detalii tehnice: Conectarea punctelor | Domotică
- Pasul 6: încheierea
Video: Ramadan Lights - Domotică IOT: 6 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
Î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
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
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ă
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ță:
- Un comutator pentru a transforma acest proces automat sau manual.
- 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:
MQTT Mood Lights cu ESP32: 4 pași (cu imagini)
MQTT Mood Lights With ESP32: Fusesem tentat de ceva timp să urc pe carul cu LED-uri, așa că am fugit și am luat o bandă LED cu care să mă jucăresc. Am ajuns să fac aceste lumini de dispoziție. Acestea pot fi controlate cu MQTT, făcând posibilă adăugarea a tot felul de smart-uri. Acesta este un
Neopixel Bike Lights: 8 pași
Neopixel Bike Lights: În acest instructiv, vom face o lampă neopixel pentru a face bicicleta să pară mai răcoroasă noaptea, fie o puteți conecta la telefonul dvs. prin WiFi, fie doar cu un nano Arduino și butonul momentan pentru a comuta prin moduri Nu pot să
Muzică Reactive Mood Lights: 5 pași (cu imagini)
Music Reactive Mood Lights: Introducere și fundal. Înapoi în primul an (primăvara anului 2019), am vrut să-mi arunc camera de dormit. Mi-a venit ideea de a-mi construi propriile lumini de dispoziție care să reacționeze la muzica pe care o ascultam la căști. Sincer, nu aveam nicio informație specială
Kaonashi No Face Sound Reactive Lights: 3 pași
Kaonashi No Face Sound Reactive Lights: Pentru a intra în spiritul lucrurilor, puneți lumini cu șiruri. Dar nu ar fi mișto dacă ai putea canaliza luminile astfel încât să se aprindă când se aud sunete? Face Kaonashi sau No Face (din filmul clasic Spirited Away) masca de față sună strin reactiv
Music Reactive Multicolor LED Lights - Senzor de detectare a sunetului Arduino - Banda LED RGB: 4 pași
Music Reactive Multicolor LED Lights | Senzor de detectare a sunetului Arduino | Banda LED RGB: Proiect cu lumini LED multicolore reactive la muzică. În acest proiect, s-au folosit o bandă LED 5050 RGB simplă (nu LED-ul adresabil WS2812), senzor de detectare a sunetului Arduino și adaptor de 12V