Innholdsfortegnelse:

Ramadanlys - Hjemmeautomatisering IOT: 6 trinn
Ramadanlys - Hjemmeautomatisering IOT: 6 trinn

Video: Ramadanlys - Hjemmeautomatisering IOT: 6 trinn

Video: Ramadanlys - Hjemmeautomatisering IOT: 6 trinn
Video: Lesson 29: Car-7 Controlling SunFounder Smart Car using Remote Controller | Robojax 2024, November
Anonim
Ramadanlys | Hjemmeautomatisering IOT
Ramadanlys | Hjemmeautomatisering IOT

Når Ramadan banker på døren, lyser byer over hele verden opp og forbereder seg på fastemåneden. Lys henges på offentlige torg og på tvers av byens gater, så vel som på yttervegger i hus som er tent om natten til solen kommer opp om morgenen.

I dette prosjektet vil jeg dele mitt bidrag, der jeg automatiserer belysningen av disse dekorasjonene basert på Adhan -tider og legger dette til i mitt smarte hjemmesystem.

Trinn 1: Teori

I utgangspunktet er det lettere og mer aktuelt å automatisere belysningen basert på for eksempel sollysintensitet. Imidlertid vil jeg at dette skal ha ånden til den hellige måneden, det vil si at lysene tennes så lenge folk får spise i løpet av fastemåneden. Spesielt lyser det fra Maghrib Adhan til Fajr Adhan hver dag uten menneskelig interaksjon.

Trinn 2: Design

Nedenfor vil jeg liste opp kravene/evnene til dette prosjektet:

  • Systemet skal kunne behandles automatisk ved oppstart.
  • Systemet bør være i stand til periodisk å utføre beslutningsalgoritmen (ON/OFF).
  • Systemet bør kunne kalle API på daglig basis.
  • Systemet skal kunne gjenopprette seg etter uplanlagt omstart.
  • Systemet bør utføre beslutningsalgoritmen (ON/OFF) når den mottar data umiddelbart.
  • Systemet bør gi en bryter for å slå på autopilotmodus (automatisk modus).
  • Systemet bør gi en bryter for å slå lysene PÅ/AV manuelt.
  • Når den manuelle bryteren utløses, bør manuell modus settes til AV.
  • Når Automatisk modus er PÅ, bør resultatet av beslutningsalgoritmen gjenspeiles på den manuelle bryteren PÅ/AV.

Trinn 3: Tekniske detaljer: API

Tekniske detaljer: API
Tekniske detaljer: API

For å gjøre teorien anvendelig, er det nødvendig å kjenne til Adhan -tiden på daglig basis siden den er variabel og handle på den for å slå på/av lysene/dekorasjonene.

For dette formålet bestemte jeg meg for å bruke et stedsbasert API for å vise dataene (tid for Adhan)

muslimsalat.com/api/#location

  • Dette API -et gir en rekke alternativer og konfigurasjonsparametere beskrevet i dokumentasjonskoblingen ovenfor.
  • Det anbefales å bruke din egen API_key som er gratis ved registrering.
  • I mitt design er jeg interessert i en daglig tidslinje.
  • Tiden som returneres er i 12 -timers format (AM/PM).
  • Når det gjelder plasseringen, ønsket jeg om dette API kunne gi mer nøyaktige alternativer for steder som geografiske koordinatsystemer (breddegrad og lengdegrad). For denne måten kan dette API -et for eksempel få et bynavn, og dette er ganske nok i de fleste tilfeller. Dessverre var resultatene av min spesifikke by ganske forutinntatt i flere tester, og det var et par minutters forskjell når vi sammenlignet Adhan -tid mellom API -resultater og den faktiske tiden for Adhan i byen min. På den annen side var resultatene perfekt matchet da jeg ga en nær by i nord og jeg holdt meg til det!
  • API -nettadressen jeg bruker er: https://muslimsalat.com/.json? Key =

Trinn 4: Tekniske detaljer: Maskinvare

Tekniske detaljer: Maskinvare
Tekniske detaljer: Maskinvare

For enkelhets skyld forlater jeg maskinvaren ut av prosessen med å synkronisere med API og tidsberegningen ved å delegere disse operasjonene til mitt hjemmeautomatiseringssystem. Dette vil gi meg mer kontroll hvis jeg vil justere API -kilden og beregningsalgoritmen.

Når det er sagt, brukte jeg en ESP8266 (NodeMCU) til å koble til det lokale nettverket via WIFI og en relemodul som en aktuator. NodeMCU vil bruke MQTT -protokollen og lytte etter et bestemt emne for å få kommandoer for å slå reléet på/av. Så enkelt som det!

Trinn 5: Tekniske detaljer: Koble til prikkene. Hjemmeautomatisering

Tekniske detaljer: Connecting the Dots | Hjemmeautomatisering
Tekniske detaljer: Connecting the Dots | Hjemmeautomatisering
Tekniske detaljer: Connecting the Dots | Hjemmeautomatisering
Tekniske detaljer: Connecting the Dots | Hjemmeautomatisering
Tekniske detaljer: Connecting the Dots | Hjemmeautomatisering
Tekniske detaljer: Connecting the Dots | Hjemmeautomatisering

Min RaspberryPi har en noderert forekomst som er i stand til å håndtere alt jeg trenger for dette prosjektet. Den har også en MQTT -server installert for å publisere meldingene våre.

Først trodde jeg at jeg kunne hente API -dataene på daglig basis klokken 09.00 og pakke ut både Fajr og Mahgrib Adhan -tider og fortsette å sammenligne nåværende tid med disse variablene:

hvert 30 sekund:

hvis: Mahgrib <NÅ <Fajr true | slå på lysene | publiser en PÅ -melding til det angitte MQTT -emnet ellers: slå av

For å sammenligne tid konverterer jeg timer levert av API fra hh: mm (AM/PM) til full datoformat ved å sette datodelen til en ubetydelig dato i historien f.eks. (1/1/1970) siden vi sammenligner tiden bare til gjeldende tid (datodelen blir også konvertert).

Dessverre vil dette bare fungere i enkle saker. Anta at når strømmen går av eller systemet starter på nytt av en ikke -planlagt grunn. Hvis dette tilfellet oppstår før kl. 12.00, er vi fremdeles på den sikre siden, men etter kl. 12.00 svikter dette vår enkle algoritme.

For å gi et eksempel, la oss ha Magrib Adhan kl. 19:30 og Fajr kl. 16:10. Når systemet starter opp vil det sende en ny forespørsel om å hente dataene nevnt tidligere. Hvis klokken nå er 01:45 forventer vi at algoritmen vår kommer tilbake til sannheten, men faktisk vil den ikke gjøre det fordi 01:45 er mindre enn Fajr (4:10 AM), men ikke større enn Magrib (19:30). Dette er fordi vi forener datoen mellom alle variablene. Nedenfor er den endelige versjonen av algoritmen (så langt):

hvert 30 sekund:

hvis ((magrib.getHours ()> = 12 && fajr.getHours () <= 12) || fajr <maghrib) {fajr.setDate (fajr.getDate ()+1); // håndtere spennende dager endTime if (now.getHours () <= 12) {now.setDate (now.getDate ()+1); // håndter som strekker seg over dager currentTime}} // nedenfor er den forrige kodeblokken hvis: Mahgrib <NÅ <Fajr true | slå på lysene | publiser en PÅ -melding til det angitte MQTT -emnet else: false | skru av

Den komplette flyt av prosessen er merket i bildet ovenfor.

Når det gjelder UI, la jeg til 2 brytere til UI/grensesnittet:

  1. En bryter for å slå denne prosessen automatisk eller manuelt.
  2. En bryter for å slå lysene PÅ/AV manuelt.

Trinn 6: Innpakning

Tiden flyr for aldri å bli husket. Gjør du slike enkle 1-dagers prosjekter kan du få pusten i denne raske banen og hjelpe deg med å gjenopplive dine myke ferdigheter over tid.

Jeg prøvde så mye i dette prosjektet å holde det enkelt og gjenbrukbart over hele verden.

Vennligst stem på dette instruerbare hvis du synes dette prosjektet fortjener.

Gledelig Ramadan!

Anbefalt: