Innehållsförteckning:

Ramadan Lights - Hemmautomation IOT: 6 steg
Ramadan Lights - Hemmautomation IOT: 6 steg

Video: Ramadan Lights - Hemmautomation IOT: 6 steg

Video: Ramadan Lights - Hemmautomation IOT: 6 steg
Video: Основные ошибки при возведении перегородок из газобетона #5 2024, Juli
Anonim
Ramadan Lights | Hemmautomation IOT
Ramadan Lights | Hemmautomation IOT

När Ramadan knackar på dörren lyser städer över hela världen upp och förbereder sig för fastemånaden. Ljus hängs på offentliga torg och över stadens gator samt på ytterväggar i hus som lyser under nätterna tills solen kommer upp på morgonen.

I det här projektet vill jag dela med mig av mitt bidrag, där jag automatiserar belysningen av dessa dekorationer baserat på Adhan -tider och lägger till detta i mitt smarta hemsystem.

Steg 1: Teori

I grund och botten är det lättare och mer tillämpbart att automatisera belysningen baserat på till exempel solljusintensitet. Jag skulle dock vilja att detta skulle ha andan av den heliga månaden, det vill säga att lamporna tänds så länge människor får äta under fastemånaden. I synnerhet lyser lamporna från Maghrib Adhan till Fajr Adhan varje dag utan mänsklig interaktion.

Steg 2: Design

Nedan listar jag kraven/möjligheterna för detta projekt:

  • Systemet ska kunna bearbetas automatiskt vid uppstart.
  • Systemet bör regelbundet kunna utföra beslutsalgoritmen (ON/OFF).
  • Systemet ska kunna anropa API dagligen.
  • Systemet ska kunna återhämta sig efter oplanerad omstart.
  • Systemet bör köra beslutsalgoritmen (ON/OFF) när det tar emot data direkt.
  • Systemet bör tillhandahålla en omkopplare för att slå på autopilotläget (automatiskt läge).
  • Systemet bör tillhandahålla en omkopplare för att manuellt slå på/stänga av lamporna.
  • Om den manuella omkopplaren aktiveras bör det manuella läget vara AV.
  • När automatiskt läge är PÅ, bör resultatet av beslutsalgoritmen reflekteras på den manuella omkopplaren PÅ/AV.

Steg 3: Tekniska detaljer: API: et

Tekniska detaljer: API: et
Tekniska detaljer: API: et

För att göra teorin tillämplig är det nödvändigt att känna till Adhan -tiden på daglig basis sedan dess variabel och agera på den för att slå på/av lamporna/dekorationerna.

För detta ändamål bestämde jag mig för att använda ett platsbaserat API för att visa data (tid för Adhan)

muslimsalat.com/api/#location

  • Detta API tillhandahåller en mängd olika alternativ och konfigurationsparametrar som beskrivs i dokumentationslänken ovan.
  • Det rekommenderas att använda din egen API_key som är gratis vid registrering.
  • I min design är jag intresserad av en daglig tidslinje.
  • Tid som returneras är i 12 -timmarsformat (AM/PM).
  • När det gäller platsen önskade jag om detta API kunde ge mer exakta alternativ för platser som geografiska koordinatsystem för koordinater (latitud och longitud). För detta sätt kan detta API till exempel förses med ett stadsnamn och detta är i de flesta fall tillräckligt. Tyvärr var resultaten från min specifika stad ganska partiska i flera tester och det var ett par minuters skillnad när man jämför Adhan -tid mellan API -resultat och den faktiska tiden för Adhan i min stad. Å andra sidan var resultaten perfekt matchade när jag gav en nära stad i norr och jag höll mig till det!
  • API -webbadressen jag använder är: https://muslimsalat.com/.json? Key =

Steg 4: Tekniska detaljer: Hårdvara

Tekniska detaljer: Hårdvara
Tekniska detaljer: Hårdvara

För enkelhetens skull lämnar jag hårdvaran ur processen att synkronisera med API: n och tidsberäkningen genom att delegera dessa operationer till mitt hemautomationssystem. Detta ger mig mer kontroll om jag vill justera API -källan och beräkningsalgoritmen.

Med det sagt använde jag en ESP8266 (NodeMCU) för att ansluta till det lokala nätverket via WIFI och en relämodul som ett ställdon. NodeMCU kommer att använda MQTT -protokoll och lyssna efter ett specifikt ämne för att få kommandon för att slå på/av reläet. Så enkelt som det!

Steg 5: Tekniska detaljer: Ansluta prickarna | Hemautomation

Tekniska detaljer: Anslutning av prickar | Hemautomation
Tekniska detaljer: Anslutning av prickar | Hemautomation
Tekniska detaljer: Anslutning av prickar | Hemautomation
Tekniska detaljer: Anslutning av prickar | Hemautomation
Tekniska detaljer: Anslutning av prickar | Hemautomation
Tekniska detaljer: Anslutning av prickar | Hemautomation

Min RaspberryPi har en kodad instans som kan hantera allt jag behöver för detta projekt. Den har också en MQTT -server installerad för att publicera våra meddelanden.

Först tänkte jag att jag kan hämta API -data på dagliga baser vid 9:00 och extrahera både Fajr och Mahgrib Adhan -tider och fortsätta jämföra den aktuella tiden med dessa variabler som är:

var 30: e sekund:

om: Mahgrib <NU <Fajr true | tänd lamporna | publicera ett PÅ -meddelande till det angivna MQTT -ämnet annars: stäng av

För att jämföra tid konverterar jag timmar från API: et från hh: mm (AM/PM) till fullständigt datumformat genom att ställa in datumdelen till ett försumbart datum i historien t.ex. (1/1/1970) eftersom vi jämför tiden endast till aktuell tid (datumdel omvandlas också).

Tyvärr fungerar detta bara i raka fall. Anta att fallet när strömmen går av eller om systemet startar om av en oplanerad anledning. Om det här fallet inträffar före kl. 12.00 är vi fortfarande på den säkra sidan, men efter kl. 12.00 misslyckas detta med vår enkla algoritm.

För att ge ett exempel, låt oss ha Magrib Adhan kl. 19:30 och Fajr kl. 16:10. När systemet startar kommer det att skicka en ny begäran om att hämta data som nämnts tidigare. Om klockan nu är 01:45 förväntar vi oss att vår algoritm ska återvända till sanningen, men i själva verket kommer det inte att ske eftersom 01:45 är mindre än Fajr (4:10 AM) men inte är större än Magrib (19:30). Detta beror på att vi förenar datumet mellan alla variabler. Nedan är den slutliga versionen av algoritmen (hittills):

var 30: e sekund:

if ((magrib.getHours ()> = 12 && fajr.getHours () <= 12) || fajr <maghrib) {fajr.setDate (fajr.getDate ()+1); // hantera spännande dagar endTime if (now.getHours () <= 12) {now.setDate (now.getDate ()+1); // hantera spänner dagar currentTime}} // nedan är det tidigare kodblocket om: Mahgrib <NU <Fajr true | tänd lamporna | publicera ett PÅ -meddelande till det angivna MQTT -ämnet annars: false | Stäng av

Det fullständiga flödet av processen är kommenterat i bilden ovan.

När det gäller UI lade jag till 2 switchar till UI/interface:

  1. En omkopplare för att aktivera denna process automatisk eller manuell.
  2. En strömbrytare för att tända/släcka lamporna manuellt.

Steg 6: Avsluta.

Tiden flyger för att aldrig komma ihåg. Genom att göra sådana enkla 1-dagars projekt kan du andas i denna snabba bana och hjälpa dig att återuppliva dina mjuka färdigheter över tid.

Jag försökte lika mycket i detta projekt att hålla det enkelt och återanvändbart över hela världen.

Vänligen rösta på detta instruerbara om du tycker att detta projekt förtjänar.

Glad ramadan!

Rekommenderad: