Sadržaj:

Ramazanska svjetla - Kućna automatizacija IOT: 6 koraka
Ramazanska svjetla - Kućna automatizacija IOT: 6 koraka

Video: Ramazanska svjetla - Kućna automatizacija IOT: 6 koraka

Video: Ramazanska svjetla - Kućna automatizacija IOT: 6 koraka
Video: Šepak - prvi dan Ramazana - podjela 245 iftara na kućne pragove 2024, Juli
Anonim
Ramazanska svjetla | Kućna automatizacija IOT
Ramazanska svjetla | Kućna automatizacija IOT

Dok Ramazan kuca na vrata, gradovi širom svijeta se pale i pripremaju za mjesec posta. Svjetla su okačena na javne trgove i preko gradskih ulica, kao i na vanjske zidove kuća osvijetljene tokom noći sve dok sunce ne izađe ujutro.

U ovom projektu želio bih podijeliti svoj doprinos, u kojem automatiziram osvjetljavanje ovih ukrasa na osnovu vremena Adhan i dodajem ovo u svoj sistem pametne kuće.

Korak 1: Teorija

U osnovi, lakše je i primjenjivije automatizirati osvjetljenje na osnovu intenziteta sunčeve svjetlosti, na primjer. Međutim, želio bih da ovo ima duh svetog mjeseca, to jest, svjetla će se paliti sve dok je ljudima dozvoljeno da jedu tokom mjeseca posta. Konkretno, svjetla su uključena od Maghrib Adhana do Fajr Adhana svaki dan bez ikakve ljudske interakcije.

Korak 2: Dizajnirajte

U nastavku ću navesti zahtjeve/mogućnosti ovog projekta:

  • Sistem bi trebao imati mogućnost automatske obrade pri pokretanju.
  • Sistem bi trebao biti u mogućnosti periodično izvršavati algoritam odlučivanja (ON/OFF).
  • Sistem bi trebao biti u mogućnosti svakodnevno pozivati API.
  • Sistem bi se trebao moći oporaviti od neplaniranog ponovnog pokretanja.
  • Sistem bi trebao izvršiti algoritam odlučivanja (UKLJ./ISKLJ.) Nakon trenutnog primanja podataka.
  • Sistem bi trebao omogućiti prekidač za uključivanje načina autopilota (Automatski način rada).
  • Sistem bi trebao omogućiti prekidač za ručno uključivanje/isključivanje svjetla.
  • Aktiviranje ručnog prekidača treba postaviti ručni način rada na OFF.
  • Kada je Automatski način rada UKLJUČEN, rezultat algoritma odlučivanja trebao bi se odraziti na ručni prekidač za uključivanje/isključivanje.

Korak 3: Tehnički detalji: API

Tehnički detalji: API
Tehnički detalji: API

Da bi teorija bila primjenjiva, potrebno je svakodnevno poznavati ezansko vrijeme od njegove varijable i djelovati prema njemu za paljenje/gašenje svjetla/ukrasa.

U tu sam svrhu odlučio koristiti API zasnovan na lokaciji za posluživanje podataka (vrijeme za Adhana)

muslimsalat.com/api/#location

  • Ovaj API pruža niz opcija i konfiguracijskih parametara opisanih u gornjoj dokumentacijskoj vezi.
  • Preporučuje se korištenje vlastitog API_ključa koji je besplatan pri registraciji.
  • U mom dizajnu zanima me dnevna vremenska linija.
  • Vraćeno vrijeme je u 12 -časovnom formatu (AM/PM).
  • Što se tiče lokacije, želio bih ako ovaj API može pružiti preciznije opcije za lokacije poput koordinatnog sistema geografskih koordinata (zemljopisna širina i dužina). Na ovaj način, ovom API -ju se može dati naziv grada, na primjer, što je u većini slučajeva sasvim dovoljno. Nažalost, rezultati mog konkretnog grada bili su prilično pristrani u više testova i bilo je par minuta razlike kada se uporedi vrijeme Adhana između rezultata API -ja i stvarnog vremena Adhana u mom gradu. S druge strane, rezultati su se savršeno poklopili kada sam osigurao bliski grad na sjeveru i držao sam ga se!
  • Url API -ja koji koristim je: https://muslimsalat.com/.json? Key =

Korak 4: Tehnički detalji: Hardver

Tehnički detalji: Hardver
Tehnički detalji: Hardver

Radi jednostavnosti, izostavljam hardver iz procesa sinhronizacije s API -jem i izračunavanja vremena delegiranjem ovih operacija na moj sistem kućne automatizacije. Ovo će mi dati veću kontrolu ako želim prilagoditi API izvor i algoritam izračuna.

Uzimajući to u obzir, koristio sam ESP8266 (NodeMCU) za povezivanje na lokalnu mrežu putem WIFI -a i relejni modul kao pokretač. NodeMCU će koristiti MQTT protokol i osluškivati određenu temu kako bi dobio naredbe za uključivanje/isključivanje releja. Tako jednostavno!

Korak 5: Tehnički detalji: Povezivanje tačaka | Kućna automatizacija

Tehnički detalji: Povezivanje tačaka | Kućna automatizacija
Tehnički detalji: Povezivanje tačaka | Kućna automatizacija
Tehnički detalji: Povezivanje tačaka | Kućna automatizacija
Tehnički detalji: Povezivanje tačaka | Kućna automatizacija
Tehnički detalji: Povezivanje tačaka | Kućna automatizacija
Tehnički detalji: Povezivanje tačaka | Kućna automatizacija

Moj RaspberryPi sadrži instancu s čvorom koja može podnijeti sve što mi je potrebno za ovaj projekt. Takođe ima instaliran MQTT server za objavljivanje naših poruka.

U početku sam mislio da mogu dohvatiti API podatke na dnevnoj bazi u 9 sati ujutro i izdvojiti Fajr i Mahgrib Adhan vrijeme i nastaviti uspoređivati trenutno vrijeme sa ovim varijablama, a to je:

svakih 30 sekundi:

if: Mahgrib <SADA <Fajr true | upalite svjetla | objavite ON poruku na specificiranu temu MQTT -a; drugo: isključite

Za upoređivanje vremena, pretvaram sate koje pruža API iz hh: mm (AM/PM) u format punog datuma postavljajući dio datuma na zanemariv datum u istoriji, npr. (1/1/1970) budući da upoređujemo vrijeme samo u trenutno vrijeme (dio datuma se također pretvara).

Nažalost, ovo će funkcionirati samo u direktnim slučajevima. Pretpostavimo slučaj nestanka struje ili ponovnog pokretanja sistema iz neplaniranog razloga. Ako se ovaj slučaj dogodi prije 12 sati, i dalje smo na sigurnoj strani, ali nakon 12 sati ovo neće uspjeti u našem jednostavnom algoritmu.

Da navedemo primjer, uzmimo Magrib Adhan u 19:30 i Fajr u 04:10. Kada se sistem pokrene, poslat će novi zahtjev za dohvaćanje ranije spomenutih podataka. Ako je vrijeme sada 1:45 ujutro, očekujemo da će se naš algoritam vratiti kao tačno, ali u stvari neće jer je 1:45 ujutro manje od Fajra (4:10 ujutro), ali nije veće od Magriba (19:30). To je zato što objedinjujemo datum između svih varijabli. Ispod je konačna verzija algoritma (do sada):

svakih 30 sekundi:

if ((magrib.getHours ()> = 12 && fajr.getHours () <= 12) || fajr <maghrib) {fajr.setDate (fajr.getDate ()+1); // obrađuje rasponske dane endTime if (now.getHours () <= 12) {now.setDate (now.getDate ()+1); // ručka koja se proteže kroz dane currentTime}} // ispod je prethodni kodni blok if: Mahgrib <SADA <Fajr true | upalite svjetla | objavite ON poruku navedenoj temi MQTT else: false | ugasiti

Kompletan tok procesa označen je na gornjoj slici.

Što se tiče korisničkog sučelja, dodao sam 2 prekidača na korisničko sučelje/sučelje:

  1. Prekidač za uključivanje ovog procesa u automatsko ili ručno.
  2. Prekidač za ručno uključivanje/isključivanje svjetla.

Korak 6: Zaključak

Vrijeme leti i nikada se ne može opozvati. Rad na tako jednostavnim jednodnevnim projektima omogućava vam da uhvatite dah u ovoj brzoj traci i pomaže vam da s vremenom oživite svoje meke vještine.

Potrudio sam se u ovom projektu da bude jednostavan i za višekratnu upotrebu širom svijeta.

Ljubazno glasajte za ovo uputstvo ako mislite da ovaj projekt zaslužuje.

Sretan Ramazan!

Preporučuje se: