INHOUDSOPGAWE:

Ramadan Ligte - Home Automation IOT: 6 stappe
Ramadan Ligte - Home Automation IOT: 6 stappe

Video: Ramadan Ligte - Home Automation IOT: 6 stappe

Video: Ramadan Ligte - Home Automation IOT: 6 stappe
Video: EAE-KNX Ramadan Webinars 2024, Julie
Anonim
Ramadan Ligte | Tuisautomatisering IOT
Ramadan Ligte | Tuisautomatisering IOT

Terwyl Ramadan aan die deur klop, brand stede wêreldwyd op en berei hulle voor op die maand vas. Ligte word op openbare pleine en oor stadstrate gehang, asook aan die buitemure van huise wat gedurende die nagte verlig word totdat die son in die oggend opkom.

In hierdie projek wil ek my bydrae deel waarin ek die versiering van hierdie versierings outomatiseer op grond van Adhan -tye, en dit byvoeg tot my slimhuisstelsel.

Stap 1: Teorie

Dit is basies makliker en meer toepaslik om die beligting te outomatiseer op grond van byvoorbeeld sonligintensiteit. Ek wil egter hê dat die gees van die heilige maand is, dit wil sê, die ligte sal aanskakel solank mense gedurende die vasmaand mag eet. In die besonder, elke dag brand die ligte van Maghrib Adhan tot Fajr Adhan sonder enige menslike interaksie.

Stap 2: Ontwerp

Hieronder lys ek die vereistes/vermoëns van hierdie projek:

  • Die stelsel behoort outomaties te kan verwerk tydens die opstart.
  • Die stelsel moet die besluit (AAN/UIT) algoritme periodiek kan uitvoer.
  • Die stelsel behoort daagliks API te kan skakel.
  • Die stelsel behoort te kan herstel van onbeplande herbegin.
  • Die stelsel moet die besluit (AAN/UIT) algoritme uitvoer wanneer data onmiddellik ontvang word.
  • Die stelsel moet 'n skakelaar bied om die outomatiese pilootmodus (outomatiese modus) aan te skakel.
  • Die stelsel moet 'n skakelaar verskaf om die ligte met die hand aan/af te skakel.
  • As die handskakelaar geaktiveer word, moet die handmatige modus op OFF wees.
  • As die outomatiese modus AAN is, moet die resultaat van die besluitalgoritme op die handskakelaar AAN/UIT verskyn.

Stap 3: Tegniese besonderhede: die API

Tegniese besonderhede: die API
Tegniese besonderhede: die API

Om die teorie toepaslik te maak, is dit nodig om die Adhan -tyd op 'n daaglikse basis te ken sedert sy veranderlike en daarop te werk om die ligte/versierings aan/uit te skakel.

Vir hierdie doel het ek besluit om 'n ligging-gebaseerde API te gebruik om die data te bedien (tyd vir Adhan)

muslimsalat.com/api/#location

  • Hierdie API bied 'n verskeidenheid opsies en konfigurasieparameters wat in die dokumentasie skakel hierbo beskryf word.
  • Dit word aanbeveel om u eie API_key te gebruik, wat gratis is by registrasie.
  • In my ontwerp stel ek belang in 'n daaglikse tydlyn.
  • Die terugbesorgde tyd is in 12 uur -formaat (AM/PM).
  • Wat die ligging betref, wou ek hê dat hierdie API meer akkurate opsies kan bied vir plekke soos geografiese koördinate stelsel (breedtegraad en lengtegraad). Op hierdie manier kan hierdie API byvoorbeeld 'n stadsnaam kry, en dit is in die meeste gevalle voldoende. Ongelukkig was die resultate van my spesifieke stad baie bevooroordeeld in verskeie toetse, en daar was 'n paar minute se verskil tussen Adhan -tyd tussen API -resultate en die werklike tyd van Adhan in my stad. Aan die ander kant was die resultate perfek ooreenstem toe ek 'n nabye stad in die noorde bied en ek daarby hou!
  • Die API -URL wat ek gebruik, is: https://muslimsalat.com/.json? Key =

Stap 4: Tegniese besonderhede: Hardeware

Tegniese besonderhede: hardeware
Tegniese besonderhede: hardeware

Vir die eenvoud, laat ek die hardeware uit die proses om te sinchroniseer met die API en die tydberekening deur hierdie bewerkings aan my tuisstelsel te delegeer. Dit sal my meer beheer gee as ek die API -bron en die berekeningsalgoritme wil aanpas.

Dit gesê, ek het 'n ESP8266 (NodeMCU) gebruik om via WIFI en 'n relaismodule as 'n aandrywer aan te sluit op die plaaslike netwerk. Die NodeMCU gebruik die MQTT -protokol en luister na 'n spesifieke onderwerp om opdragte te kry om die aflos aan/uit te skakel. So eenvoudig soos dit!

Stap 5: Tegniese besonderhede: Verbind die kolletjies | Tuis outomatisering

Tegniese besonderhede: Verbind die kolletjies | Tuis outomatisering
Tegniese besonderhede: Verbind die kolletjies | Tuis outomatisering
Tegniese besonderhede: Verbind die kolletjies | Tuis outomatisering
Tegniese besonderhede: Verbind die kolletjies | Tuis outomatisering
Tegniese besonderhede: Verbind die kolletjies | Tuis outomatisering
Tegniese besonderhede: Verbind die kolletjies | Tuis outomatisering

My RaspberryPi het 'n genoteerde instansie wat alles wat ek nodig het vir hierdie projek kan hanteer. Daar is ook 'n MQTT -bediener geïnstalleer om ons boodskappe te publiseer.

Aanvanklik het ek gedink dat ek die API -data daagliks om 09:00 op die daaglikse basis kan haal en die Fajr- en Mahgrib Adhan -tye kan uittrek en die huidige tyd kan vergelyk met hierdie veranderlikes:

elke 30 sekondes:

as: Mahgrib <NOU <Fajr waar | skakel die ligte aan | publiseer 'n AAN -boodskap vir die gespesifiseerde MQTT -onderwerp anders: skakel af

Om tyd te vergelyk, omskakel ek ure wat deur die API verskaf is van hh: mm (AM/PM) na die volledige datumformaat deur die datumgedeelte in te stel op 'n onbeduidende datum in die geskiedenis, bv. (1/1/1970), aangesien ons die tyd vergelyk slegs na die huidige tyd (datumgedeelte word ook omgeskakel).

Ongelukkig sal dit slegs in eenvoudige gevalle werk. Gestel die geval is wanneer die elektrisiteit afbreek of die stelsel om 'n onbeplande rede weer begin. As hierdie geval voor 12:00 voorkom, is ons steeds aan die veilige kant, maar na 12:00 sal ons eenvoudige algoritme misluk.

Om 'n voorbeeld te gee, laat ons Magrib Adhan om 19:30 en Fajr om 04:10. As die stelsel begin, sal dit 'n nuwe versoek stuur om die data wat vroeër genoem is, te gaan haal. As die tyd nou 01:45 is, verwag ons dat ons algoritme waar sal wees, maar in werklikheid sal dit nie gebeur nie, want 01:45 is minder as Fajr (04:10), maar is nie groter as Magrib nie (19:30). Dit is omdat ons die datum tussen alle veranderlikes verenig. Hieronder is die finale weergawe van die algoritme (tot dusver):

elke 30 sekondes:

as ((magrib.getHours ()> = 12 && fajr.getHours () <= 12) || fajr <maghrib) {fajr.setDate (fajr.getDate ()+1); // hanteer spanningsdae endTime if (now.getHours () <= 12) {now.setDate (now.getDate ()+1); // hanteer spanningsdae currentTime}} // hieronder is die vorige kodeblok as: Mahgrib <NOU <Fajr waar | skakel die ligte aan | publiseer 'n AAN -boodskap vir die gespesifiseerde MQTT -onderwerp anders: vals | skakel af

Die volledige vloei van die proses word in die bostaande prent geannoteer.

Wat UI betref, het ek 2 skakelaars by die UI/koppelvlak gevoeg:

  1. 'N Skakelaar om hierdie proses outomaties of handmatig te draai.
  2. 'N Skakelaar om die ligte met die hand aan/uit te skakel.

Stap 6: Afsluiting

Die tyd vlieg om nooit herroep te word nie. Deur sulke eenvoudige projekte van een dag te doen, kan u asemhaal in hierdie vinnige baan en u help om u sagte vaardighede mettertyd te laat herleef.

Ek het soveel probeer in hierdie projek om dit eenvoudig en herbruikbaar oor die hele wêreld te hou.

Stem asseblief vir hierdie instruksies as u dink dat hierdie projek verdien.

Gelukkige Ramadan!

Aanbeveel: