Indholdsfortegnelse:

Ramadanlys - Hjemmeautomatisering IOT: 6 trin
Ramadanlys - Hjemmeautomatisering IOT: 6 trin

Video: Ramadanlys - Hjemmeautomatisering IOT: 6 trin

Video: Ramadanlys - Hjemmeautomatisering IOT: 6 trin
Video: Home Assistant. Урок 9.4 ADD-ON - Xiaomi Gateway 3, интеграция в zigbee2mqtt 2024, November
Anonim
Ramadanlys | Hjemmeautomatisering IOT
Ramadanlys | Hjemmeautomatisering IOT

Da Ramadan banker på døren, lyser byer over hele verden op og forbereder sig på fastemåneden. Lys hænges på offentlige pladser og på tværs af byens gader samt på ydervægge i huse, der er tændt om natten, indtil solen står op om morgenen.

I dette projekt vil jeg gerne dele mit bidrag, hvor jeg automatiserer belysningen af disse dekorationer baseret på Adhan -tider og tilføjer dette til mit smart home -system.

Trin 1: Teori

Grundlæggende er det lettere og mere anvendeligt at automatisere belysningen baseret på f.eks. Sollysintensitet. Jeg vil dog gerne have, at dette har ånden i den hellige måned, det vil sige, at lysene tændes, så længe folk får lov at spise i fastemåneden. Især lyser tændt fra Maghrib Adhan til Fajr Adhan hver dag uden menneskelig interaktion.

Trin 2: Design

Nedenfor angiver jeg kravene/mulighederne for dette projekt:

  • Systemet skal kunne behandles automatisk ved opstart.
  • Systemet bør være i stand til periodisk at udføre beslutningsalgoritmen (ON/OFF).
  • Systemet skal kunne kalde API på daglig basis.
  • Systemet skal være i stand til at gendanne sig efter uplanlagt genstart.
  • Systemet bør udføre beslutningsalgoritmen (ON/OFF) ved øjeblikkelig modtagelse af data.
  • Systemet bør give en switch til at tænde for autopilot -tilstand (automatisk tilstand).
  • Systemet bør give en switch til manuelt at tænde/slukke lysene.
  • Når den manuelle kontakt aktiveres, skal den manuelle tilstand være OFF.
  • Når Automatisk tilstand er TIL, skal resultatet af beslutningsalgoritmen afspejles på den manuelle omskifter TIL/FRA.

Trin 3: Tekniske detaljer: API

Tekniske detaljer: API
Tekniske detaljer: API

For at gøre teorien anvendelig, er det påkrævet at kende Adhan -tiden på daglig basis siden dens variabel og handle på den for at tænde/slukke lysene/dekorationerne.

Til dette formål besluttede jeg at bruge en lokationsbaseret API til at betjene dataene (tid til Adhan)

muslimsalat.com/api/#location

  • Denne API giver en række muligheder og konfigurationsparametre beskrevet i dokumentationslinket ovenfor.
  • Det anbefales at bruge din egen API_key, som er gratis ved registrering.
  • I mit design er jeg interesseret i en daglig tidslinje.
  • Den returnerede tid er i 12 -timers format (AM/PM).
  • Med hensyn til placeringen ville jeg ønske, om denne API kunne give mere præcise muligheder for placeringer som koordinater geografiske koordinatsystem (breddegrad og længdegrad). På denne måde kan denne API f.eks. Forsynes med et bynavn, og det er i de fleste tilfælde ganske nok. Desværre var resultaterne af min specifikke by ganske forudindtaget i flere tests, og der var et par minutters forskel, når man sammenlignede Adhan -tid mellem API -resultater og den faktiske tid for Adhan i min by. På den anden side matchede resultaterne perfekt, da jeg leverede en tæt by mod nord, og jeg holdt fast ved det!
  • API -url'en, jeg bruger, er: https://muslimsalat.com/.json? Key =

Trin 4: Tekniske detaljer: Hardware

Tekniske detaljer: Hardware
Tekniske detaljer: Hardware

For nemheds skyld forlader jeg hardwaren ude af processen med at synkronisere med API'en og tidsberegningen ved at delegere disse operationer til mit hjemmeautomatiseringssystem. Dette vil give mig mere kontrol, hvis jeg vil justere API -kilden og beregningsalgoritmen.

Når det er sagt, brugte jeg en ESP8266 (NodeMCU) til at oprette forbindelse til det lokale netværk via WIFI og et relæmodul som en aktuator. NodeMCU vil bruge MQTT -protokollen og lytte efter et bestemt emne for at få kommandoer til at tænde/slukke relæet. Så simpelt som det!

Trin 5: Tekniske detaljer: Tilslutning af prikker | Hjemmeautomatisering

Tekniske detaljer: Tilslutning af prikker | Hjemmeautomatisering
Tekniske detaljer: Tilslutning af prikker | Hjemmeautomatisering
Tekniske detaljer: Tilslutning af prikker | Hjemmeautomatisering
Tekniske detaljer: Tilslutning af prikker | Hjemmeautomatisering
Tekniske detaljer: Tilslutning af prikker | Hjemmeautomatisering
Tekniske detaljer: Tilslutning af prikker | Hjemmeautomatisering

Min RaspberryPi har en nodereret instans, der er i stand til at håndtere alt, hvad jeg har brug for til dette projekt. Det har også en MQTT -server installeret til at offentliggøre vores meddelelser.

Først troede jeg, at jeg kunne hente API -dataene på daglig basis kl. 9.00 og udtrække både Fajr- og Mahgrib Adhan -tider og blive ved med at sammenligne den aktuelle tid med disse variabler, dvs.

hvert 30 sek:

hvis: Mahgrib <NU <Fajr true | tænde lyset | offentliggøre en ON -meddelelse til det angivne MQTT -emne ellers: sluk

For at sammenligne tid konverterer jeg timer leveret af API'en fra hh: mm (AM/PM) til fuld datoformat ved at indstille datodelen til en ubetydelig dato i historien f.eks. (1/1/1970), da vi sammenligner tiden kun til det aktuelle tidspunkt (datodelen konverteres også).

Desværre fungerer dette kun i simple tilfælde. Antag tilfældet, når strømmen afbrydes, eller systemet genstarter af en ikke -planlagt årsag. Hvis dette tilfælde opstår før kl. 12.00, er vi stadig i den sikre side, men efter kl. 12.00 vil dette mislykkes i vores enkle algoritme.

For at give et eksempel, lad os få Magrib Adhan kl. 19:30 og Fajr kl. 16:10. Når systemet starter op, sender det en ny anmodning om at hente de tidligere nævnte data. Hvis klokken nu er 01:45, forventer vi, at vores algoritme vender tilbage til sandheden, men faktisk vil det ikke være, fordi 01:45 er mindre end Fajr (4:10 AM), men ikke er større end Magrib (19:30). Det er fordi vi forener datoen mellem alle variabler. Nedenfor er den endelige version af algoritmen (indtil videre):

hvert 30 sek:

hvis ((magrib.getHours ()> = 12 && fajr.getHours () <= 12) || fajr <maghrib) {fajr.setDate (fajr.getDate ()+1); // håndtere spændende dage endTime if (now.getHours () <= 12) {now.setDate (now.getDate ()+1); // håndtere spændende dage currentTime}} // nedenfor er den tidligere kodeblok, hvis: Mahgrib <NU <Fajr true | tænde lyset | offentliggøre en ON -meddelelse til det angivne MQTT -emne ellers: false | sluk

Hele processen i processen er annoteret i billedet ovenfor.

Med hensyn til UI tilføjede jeg 2 switches til UI/interface:

  1. En omskifter til at vende denne proces automatisk eller manuelt.
  2. En kontakt til at tænde/slukke lysene manuelt.

Trin 6: Indpakning

Tiden flyver for aldrig at blive husket. Ved at lave sådanne enkle 1-dags projekter kan du få vejret i denne hurtige bane og hjælpe dig med at genoplive dine bløde færdigheder over tid.

Jeg forsøgte lige så meget i dette projekt at holde det enkelt og genanvendeligt over hele kloden.

Stem venligst for denne instruktive, hvis du synes, at dette projekt fortjener.

Glædelig ramadan!

Anbefalede: