Kazalo:

Ramazanske luči - Domača avtomatizacija IOT: 6 korakov
Ramazanske luči - Domača avtomatizacija IOT: 6 korakov

Video: Ramazanske luči - Domača avtomatizacija IOT: 6 korakov

Video: Ramazanske luči - Domača avtomatizacija IOT: 6 korakov
Video: КУПИЛ КУСОК ПОДЧЕРЁВКА И ПРИГОТОВИЛ Тако. BBQ. как у La Capital 2024, November
Anonim
Ramazanske luči | Domača avtomatizacija IOT
Ramazanske luči | Domača avtomatizacija IOT

Ko Ramadan potrka na vrata, se mesta po vsem svetu prižgejo in pripravijo na mesec posta. Luči visijo na javnih trgih in po mestnih ulicah ter na zunanjih stenah hiš, osvetljenih ponoči, dokler sonce ne zaide zjutraj.

V tem projektu bi rad delil svoj prispevek, v katerem avtomatiziram osvetlitev teh okraskov na podlagi časa Adhana in to dodam v svoj sistem pametnega doma.

1. korak: Teorija

V bistvu je lažje in bolj primerno avtomatizirati razsvetljavo na primer na podlagi intenzivnosti sončne svetlobe. Želim pa, da bi to imelo duh svetega meseca, to je, da se bodo luči prižgale, dokler bodo ljudje lahko jedli v mesecu posta. Zlasti luči svetijo od Maghrib Adhana do Fajr Adhana vsak dan brez človeške interakcije.

2. korak: Oblikovanje

Spodaj bom navedel zahteve/zmogljivosti tega projekta:

  • Sistem bi moral imeti možnost samodejnega procesiranja ob zagonu.
  • Sistem bi moral biti sposoben redno izvajati algoritem odločanja (VKLOP/IZKLOP).
  • Sistem bi moral imeti možnost, da vsak dan kliče API.
  • Sistem bi se moral opomoči od nenačrtovanega ponovnega zagona.
  • Sistem mora izvesti algoritem odločitve (ON/OFF) takoj, ko prejme podatke.
  • Sistem mora zagotoviti stikalo za vklop načina avtopilota (samodejni način).
  • Sistem mora omogočiti stikalo za ročno vklop/izklop luči.
  • S sprožitvijo ročnega stikala morate ročni način nastaviti na OFF.
  • Ko je samodejni način vklopljen, mora biti rezultat algoritma odločitve prikazan na ročnem stikalu za vklop/izklop.

3. korak: Tehnične podrobnosti: API

Tehnične podrobnosti: API
Tehnične podrobnosti: API

Da bi teorija postala uporabna, je treba dnevno poznati adhanski čas od njegove spremenljivke in nanj ukrepati, da vklopi/izklopi luči/okraske.

V ta namen sem se odločil uporabiti lokacijski API za serviranje podatkov (čas za Adhana)

muslimsalat.com/api/#location

  • Ta API ponuja različne možnosti in konfiguracijske parametre, opisane v zgornji povezavi do dokumentacije.
  • Priporočamo uporabo lastnega ključa API_, ki je ob registraciji brezplačen.
  • Pri mojem oblikovanju me zanima dnevna časovnica.
  • Vrnjeni čas je v 12 -urnem formatu (AM/PM).
  • Kar zadeva lokacijo, sem si želel, če bi ta API lahko zagotovil natančnejše možnosti za lokacije, kot so koordinatni geografski koordinatni sistem (zemljepisna širina in dolžina). Za ta način je temu API -ju na primer mogoče dati ime mesta, kar je v večini primerov povsem dovolj. Žal so bili rezultati mojega določenega mesta v več testih precej pristranski in pri primerjavi časa Adhan med rezultati API in dejanskim časom Adhan v mojem mestu je bilo nekaj minut razlike. Po drugi strani pa so se rezultati popolnoma ujemali, ko sem zagotovil bližnje mesto na severu in sem se ga držal!
  • URL API -ja, ki ga uporabljam, je: https://muslimsalat.com/.json? Key =

4. korak: Tehnične podrobnosti: Strojna oprema

Tehnične podrobnosti: Strojna oprema
Tehnične podrobnosti: Strojna oprema

Zaradi poenostavitve strojne opreme ne puščam v procesu sinhronizacije z API -jem in izračunu časa, tako da te operacije prenesem na svoj sistem za domačo avtomatizacijo. Tako bom imel več nadzora, če želim prilagoditi vir API -ja in algoritem izračuna.

Ob tem sem uporabil ESP8266 (NodeMCU) za povezavo z lokalnim omrežjem prek WIFI in relejni modul kot aktuator. NodeMCU bo uporabljal protokol MQTT in poslušal določeno temo, da bi prejel ukaze za vklop/izklop releja. Tako preprosto!

5. korak: Tehnične podrobnosti: Povezovanje pik | Domača avtomatizacija

Tehnične podrobnosti: Povezovanje pik | Domača avtomatizacija
Tehnične podrobnosti: Povezovanje pik | Domača avtomatizacija
Tehnične podrobnosti: Povezovanje pik | Domača avtomatizacija
Tehnične podrobnosti: Povezovanje pik | Domača avtomatizacija
Tehnične podrobnosti: Povezovanje pik | Domača avtomatizacija
Tehnične podrobnosti: Povezovanje pik | Domača avtomatizacija

Moj RaspberryPi vsebuje primerek z vozliščem, ki je sposoben obdelati vse, kar potrebujem za ta projekt. Nameščen je tudi strežnik MQTT za objavo naših sporočil.

Sprva sem mislil, da lahko podatke API vzamem na dnevni bazi ob 9.00 in izluščim čas Fajr in Mahgrib Adhan ter primerjam trenutni čas s temi spremenljivkami, to je:

vsakih 30 sekund:

če: Mahgrib <ZDAJ <Fajr res | prižgi luči | objavite sporočilo o vklopu za določeno temo MQTT; drugače: izklopite

Za primerjavo časa pretvorim ure, ki jih zagotavlja API, iz hh: mm (AM/PM) v celoten datum, tako da del datuma nastavim na zanemarljiv datum v zgodovini, npr. (1/1/1970), saj primerjamo čas samo v trenutni čas (del datuma se tudi pretvori).

Na žalost bo to delovalo le v neposrednih primerih. Predpostavimo primer izpada električne energije ali ponovnega zagona sistema iz nenačrtovanega razloga. Če se ta primer zgodi pred 12. uro, smo še vedno na varni strani, po 12. uri pa to ne bo uspelo z našim preprostim algoritmom.

Za primer navedimo Magriba Adhana ob 19.30 in Fajra ob 4.10. Ko se sistem zažene, bo poslal novo zahtevo za pridobitev prej omenjenih podatkov. Če je ura zdaj 1:45, pričakujemo, da se bo naš algoritem vrnil v resnico, v resnici pa se ne bo zgodilo, ker je 1:45 zjutraj manj kot Fajr (4:10 AM), ni pa večji od Magriba (7:30 PM). To je zato, ker združimo datum med vsemi spremenljivkami. Spodaj je končna različica algoritma (doslej):

vsakih 30 sekund:

if ((magrib.getHours ()> = 12 && fajr.getHours () <= 12) || fajr <maghrib) {fajr.setDate (fajr.getDate ()+1); // ročaj, ki zajema dneve endTime if (now.getHours () <= 12) {now.setDate (now.getDate ()+1); // ročaj, ki zajema dneve currentTime}} // spodaj je prejšnji kodni blok, če: Mahgrib <NOW <Fajr true | prižgi luči | objavite sporočilo ON za določeno temo MQTT else: false | ugasni

Celoten potek postopka je označen na zgornji sliki.

Kar zadeva uporabniški vmesnik, sem v uporabniški vmesnik/vmesnik dodal 2 stikala:

  1. Stikalo za vklop samodejnega ali ročnega postopka.
  2. Stikalo za ročni vklop/izklop luči.

6. korak: Zaključek.

Čas beži, da se nikoli ne spomni. Izvajanje takšnih preprostih enodnevnih projektov vam omogoča, da na tem hitrem pasu zadihate in vam sčasoma oživi mehke sposobnosti.

V tem projektu sem se trudil, da bi bil preprost in za večkratno uporabo po vsem svetu.

Vljudno glasujte za ta navodila, če menite, da si projekt zasluži.

Vesel ramazan!

Priporočena: