Satura rādītājs:

Ramadāna gaismas - Mājas automatizācija IOT: 6 soļi
Ramadāna gaismas - Mājas automatizācija IOT: 6 soļi

Video: Ramadāna gaismas - Mājas automatizācija IOT: 6 soļi

Video: Ramadāna gaismas - Mājas automatizācija IOT: 6 soļi
Video: Умный ZigBee выключатель Somgoms без нулевой линии – на симисторе автоматизация дома 2024, Novembris
Anonim
Ramadāna gaismas | Mājas automatizācija IOT
Ramadāna gaismas | Mājas automatizācija IOT

Ramadānam klauvējot pie durvīm, pilsētas visā pasaulē iedegas un gatavojas gavēņa mēnesim. Gaismas tiek piekārtas publiskos laukumos un pāri pilsētas ielām, kā arī pie mājas ārsienām, kas tiek apgaismotas naktīs, līdz saule uzlec no rīta.

Šajā projektā es vēlos dalīties ar savu ieguldījumu, kurā, pamatojoties uz Adhana laikiem, automatizēju šo rotājumu iedegšanu un pievienoju to savai viedās mājas sistēmai.

1. solis: teorija

Būtībā ir vieglāk un piemērotāk automatizēt apgaismojumu, piemēram, pamatojoties uz saules gaismas intensitāti. Tomēr es gribētu, lai tam būtu svētā mēneša gars, tas ir, gaismas iedegsies tik ilgi, kamēr cilvēkiem būs atļauts ēst badošanās mēnesī. Jo īpaši gaismas tiek ieslēgtas no Maghrib Adhan līdz Fajr Adhan katru dienu bez jebkādas cilvēku mijiedarbības.

2. solis: projektēšana

Zemāk es uzskaitīšu šī projekta prasības/iespējas:

  • Sistēmai jāspēj automātiski apstrādāt sāknēšanas laikā.
  • Sistēmai jāspēj periodiski izpildīt lēmuma (IESLĒGTS/IZSLĒGTS) algoritmu.
  • Sistēmai vajadzētu būt iespējai izsaukt API katru dienu.
  • Sistēmai vajadzētu būt iespējai atgūties no neplānotas restartēšanas.
  • Sistēmai jāizpilda lēmuma (IESLĒGŠANAS/IZSLĒGŠANAS) algoritms, saņemot datus uzreiz.
  • Sistēmai vajadzētu nodrošināt slēdzi, lai ieslēgtu autopilota režīmu (automātiskais režīms).
  • Sistēmai vajadzētu nodrošināt slēdzi, lai manuāli ieslēgtu/izslēgtu gaismas.
  • Ieslēdzot manuālo slēdzi, manuālajam režīmam jābūt izslēgtam.
  • Kad automātiskais režīms ir ieslēgts, lēmuma algoritma rezultāts jāatspoguļo manuālajā slēdzī ON/OFF.

3. darbība. Tehniskā informācija: API

Tehniskā informācija: API
Tehniskā informācija: API

Lai teorija būtu piemērojama, ir jāzina Adhana laiks katru dienu kopš tā mainīgā un jārīkojas, lai ieslēgtu/izslēgtu gaismas/rotājumus.

Šim nolūkam es nolēmu datu apkalpošanai izmantot uz atrašanās vietu balstītu API (laiks Adhanam)

muslimsalat.com/api/#location

  • Šī API nodrošina dažādas iespējas un konfigurācijas parametrus, kas aprakstīti iepriekš dokumentācijas saitē.
  • Ieteicams izmantot savu API_ atslēgu, kas reģistrēšanās laikā ir bezmaksas.
  • Manā dizainā mani interesē ikdienas laika grafiks.
  • Atgrieztais laiks ir 12 stundu formātā (AM/PM).
  • Attiecībā uz atrašanās vietu es vēlējos, lai šī API varētu sniegt precīzākas iespējas tādām atrašanās vietām kā koordinātu ģeogrāfisko koordinātu sistēma (platums un garums). Šādā veidā šo API var nodrošināt, piemēram, ar pilsētas nosaukumu, un vairumā gadījumu tas ir pilnīgi pietiekami. Diemžēl manas konkrētās pilsētas rezultāti vairākos testos bija diezgan neobjektīvi, un, salīdzinot Adhan laiku starp API rezultātiem un faktisko Adhan laiku manā pilsētā, bija pāris minūšu atšķirība. No otras puses, rezultāti bija perfekti saskaņoti, kad es nodrošināju tuvu pilsētu uz ziemeļiem un pie tā pieturējos!
  • API URL, ko izmantoju, ir: https://muslimsalat.com/.json? Key =

4. darbība. Tehniskā informācija: aparatūra

Tehniskā informācija: Aparatūra
Tehniskā informācija: Aparatūra

Vienkāršības labad es izslēdzu aparatūru no sinhronizācijas ar API un laika aprēķināšanas procesa, deleģējot šīs darbības manai mājas automatizācijas sistēmai. Tas man dos lielāku kontroli, ja vēlos pielāgot API avotu un aprēķina algoritmu.

To sakot, es izmantoju ESP8266 (NodeMCU), lai izveidotu savienojumu ar vietējo tīklu, izmantojot WIFI, un releja moduli kā izpildmehānismu. NodeMCU izmantos MQTT protokolu un klausīsies konkrētu tēmu, lai saņemtu komandas releja ieslēgšanai/izslēgšanai. Tik vienkārši!

5. darbība. Tehniskā informācija: punktu savienošana | Mājas automatizācija

Tehniskā informācija: punktu savienošana | Mājas automatizācija
Tehniskā informācija: punktu savienošana | Mājas automatizācija
Tehniskā informācija: punktu savienošana | Mājas automatizācija
Tehniskā informācija: punktu savienošana | Mājas automatizācija
Tehniskā informācija: punktu savienošana | Mājas automatizācija
Tehniskā informācija: punktu savienošana | Mājas automatizācija

Manā RaspberryPi ir saspiests eksemplārs, kas spēj apstrādāt visu, kas man vajadzīgs šim projektam. Tam ir arī instalēts MQTT serveris, lai publicētu mūsu ziņas.

Sākumā es domāju, ka es varu iegūt API datus katru dienu pulksten 9:00 un iegūt gan Fajr, gan Mahgrib Adhan laikus un turpināt salīdzināt pašreizējo laiku ar šiem mainīgajiem lielumiem:

ik pēc 30 sekundēm:

ja: Mahgrib <TAGAD <Fajr taisnība | ieslēgt gaismas | publicējiet ON ziņu norādītajai MQTT tēmai citādi: izslēdziet

Laika salīdzināšanai es konvertēju API nodrošinātās stundas no hh: mm (AM/PM) uz pilnu datuma formātu, iestatot datuma daļu uz nenozīmīgu datumu vēsturē, piemēram, (1/1/1970), jo mēs salīdzinām laiku tikai pašreizējam laikam (tiek konvertēta arī datuma daļa).

Diemžēl tas darbosies tikai tiešos gadījumos. Pieņemsim, ka gadījums, kad neplānota iemesla dēļ pazūd elektrība vai sistēma tiek restartēta. Ja šis gadījums notiek pirms pulksten 12:00, mēs joprojām esam drošā pusē, bet pēc pulksten 12:00 mūsu vienkāršais algoritms neizdosies.

Lai minētu piemēru, pieņemsim Magrib Adhan 19:30 un Fajr 4:10 AM. Kad sistēma sāk darboties, tā nosūtīs jaunu pieprasījumu iegūt iepriekš minētos datus. Ja pašlaik ir pulksten 1:45, mēs sagaidām, ka mūsu algoritms atgriezīs patiesību, bet patiesībā tas nenotiks, jo 01:45 ir mazāks par Fadžru (4:10), bet nav lielāks par Magribu (19:30). Tas ir tāpēc, ka mēs apvienojam datumu starp visiem mainīgajiem. Zemāk ir algoritma galīgā versija (līdz šim):

ik pēc 30 sekundēm:

if ((magrib.getHours ()> = 12 && fajr.getHours () <= 12) || fajr <maghrib) {fajr.setDate (fajr.getDate ()+1); // apstrādāt aptverošās dienas endTime if (now.getHours () <= 12) {now.setDate (now.getDate ()+1); // apstrādāt aptverošās dienas currentTime}}} // zemāk ir iepriekšējais koda bloks, ja: Mahgrib <NOW <Fajr true | ieslēgt gaismas | publicēt ON ziņu norādītajai MQTT tēmai else: false | izslēgt

Visa procesa gaita ir atzīmēta iepriekš redzamajā attēlā.

Attiecībā uz lietotāja interfeisu es pievienoju 2 slēdžus lietotāja saskarnei/saskarnei:

  1. Slēdzis, lai šo procesu ieslēgtu automātiski vai manuāli.
  2. Slēdzis, lai manuāli ieslēgtu/izslēgtu gaismas.

6. darbība: iesaiņošana

Laiks skrien nekad, lai to neatcerētos. Veicot šādus vienkāršus vienas dienas projektus, varat atvilkt elpu šajā ātrajā joslā un laika gaitā palīdzēt atjaunot mīkstās prasmes.

Es šajā projektā centos, lai tas būtu vienkāršs un atkārtoti izmantojams visā pasaulē.

Lūdzu, balsojiet par šo pamācību, ja uzskatāt, ka šis projekts ir pelnījis.

Laimīgu Ramadānu!

Ieteicams: