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, Srpanj
Anonim
Ramazanska svjetla | Kućna automatizacija IOT
Ramazanska svjetla | Kućna automatizacija IOT

Dok Ramazan kuca na vrata, gradovi diljem svijeta svijetle i pripremaju se za mjesec posta. Svjetla su okačena na javne trgove i po gradskim ulicama, 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 temelju vremena Adhan i dodajem to u svoj sustav pametne kuće.

Korak 1: Teorija

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

Korak 2: Dizajn

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

  • Sustav bi trebao imati mogućnost automatske obrade pri pokretanju.
  • Sustav bi trebao biti u mogućnosti povremeno izvršavati algoritam odlučivanja (ON/OFF).
  • Sustav bi trebao biti u mogućnosti svakodnevno pozivati API.
  • Sustav bi se trebao moći oporaviti od neplaniranog ponovnog pokretanja.
  • Sustav bi trebao izvršiti algoritam odlučivanja (ON/OFF) nakon trenutnog primanja podataka.
  • Sustav bi trebao osigurati prekidač za uključivanje načina autopilota (Automatski način rada).
  • Sustav bi trebao omogućiti prekidač za ručno uključivanje/isključivanje svjetla.
  • Pokretanje ručnog prekidača treba postaviti ručni način rada na OFF.
  • Kada je Automatski način rada UKLJUČEN, rezultat algoritma donošenja odluke 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

Kako 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 na temelju lokacije za posluživanje podataka (vrijeme za Adhana)

muslimsalat.com/api/#location

  • Ovaj API nudi 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 točnije opcije za lokacije poput koordinatnog sustava geografskih koordinata (zemljopisna širina i dužina). Za ovaj način, ovom API -u može se na primjer dati naziv grada, š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 došlo je do par minuta razlike u usporedbi Adhan vremena između API rezultata 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 sinkronizacije s API -jem i računanja vremena delegiranjem ovih operacija u moj sustav kućne automatizacije. To će mi dati veću kontrolu ako želim prilagoditi izvor API -ja i algoritam izračuna.

Uzimajući to u obzir, koristio sam ESP8266 (NodeMCU) za povezivanje s lokalnom mrežom 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. Jednostavno!

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

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

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

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

svakih 30 sekundi:

ako: Mahgrib <SADA <Fajr istina | upali svjetla | objavite ON poruku na navedenu temu MQTT -a: isključite

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

Nažalost, ovo će djelovati samo u otvorenim slučajevima. Pretpostavimo slučaj pada električne energije ili ponovnog pokretanja sustava iz neplaniranog razloga. Ako se ovaj slučaj dogodi prije 12 sati, i dalje smo na sigurnoj strani, ali nakon 12 sati ovo će propasti u našem jednostavnom algoritmu.

Za primjer, uzmimo Magrib Adhan u 19:30 i Fajr u 04:10. Kad se sustav pokrene, poslat će novi zahtjev za dohvaćanje prethodno spomenutih podataka. Ako je trenutačno 1:45 sati, očekujemo da će se naš algoritam vratiti točno, ali u stvari neće jer je 1:45 sati manje od Fajra (4:10 AM), ali nije veće od Magriba (7:30 PM). To je zato što objedinjujemo datum između svih varijabli. U nastavku 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 blok koda ako: Mahgrib <SADA <Fajr true | upali svjetla | objaviti poruku ON na navedenu temu MQTT -a else: false | isključiti

Cjelokupni tijek procesa označen je na gornjoj slici.

U smislu korisničkog sučelja, korisničkom sučelju/sučelju dodao sam 2 prekidača:

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

Korak 6: Završavanje

Vrijeme leti nikad se ne može podsjetiti. Izvođenje takvih jednostavnih jednodnevnih projekata omogućuje vam da dođete do daha u ovoj brzoj traci i s vremenom vam oživi meke vještine.

Potrudio sam se u ovom projektu učiniti ga jednostavnim i za višekratnu upotrebu diljem svijeta.

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

Sretan Ramazan!

Preporučeni: