Inhoudsopgave:

Ramadan Lichten - Domotica IOT: 6 stappen
Ramadan Lichten - Domotica IOT: 6 stappen

Video: Ramadan Lichten - Domotica IOT: 6 stappen

Video: Ramadan Lichten - Domotica IOT: 6 stappen
Video: Loxone Smart Home Cabinet 2024, Juli-
Anonim
Ramadan Lichten | Domotica IOT
Ramadan Lichten | Domotica IOT

Terwijl de Ramadan op de deur klopt, lichten steden over de hele wereld op en bereiden ze zich voor op de vastenmaand. Lichten worden opgehangen op openbare pleinen en in de straten van de stad, evenals op buitenmuren van huizen die 's nachts worden verlicht totdat de zon 's ochtends opkomt.

In dit project wil ik mijn bijdrage delen, waarin ik het oplichten van deze decoraties automatiseer op basis van Adhan-tijden en dit toevoeg aan mijn smart home-systeem.

Stap 1: Theorie

In principe is het eenvoudiger en beter toepasbaar om de verlichting te automatiseren op basis van bijvoorbeeld zonlichtintensiteit. Ik zou echter willen dat dit de geest van de heilige maand heeft, dat wil zeggen, de lichten zullen aangaan zolang mensen mogen eten tijdens de vastenmaand. In het bijzonder branden de lichten elke dag vanaf Maghrib Adhan tot Fajr Adhan zonder enige menselijke interactie.

Stap 2: Ontwerp

Hieronder zal ik de vereisten/mogelijkheden van dit project opsommen:

  • Het systeem zou automatisch moeten kunnen verwerken bij het opstarten.
  • Het systeem moet het beslissingsalgoritme (AAN/UIT) periodiek kunnen uitvoeren.
  • Het systeem zou dagelijks API moeten kunnen aanroepen.
  • Het systeem moet kunnen herstellen van een ongeplande herstart.
  • Het systeem moet het beslissingsalgoritme (AAN/UIT) uitvoeren bij onmiddellijke ontvangst van gegevens.
  • Het systeem moet voorzien zijn van een schakelaar voor het inschakelen van de stuurautomaatmodus (Automatische modus).
  • Het systeem moet een schakelaar bieden om de lichten handmatig AAN/UIT te zetten.
  • Door de handmatige schakelaar te activeren, moet de handmatige modus op UIT worden gezet.
  • Wanneer de automatische modus AAN staat, moet het resultaat van het beslissingsalgoritme worden weergegeven op de handmatige AAN/UIT-schakelaar.

Stap 3: Technische details: de API

Technische details: de API
Technische details: de API

Om de theorie toepasbaar te maken, is het vereist om de Adhan-tijd op dagelijkse basis te kennen, aangezien deze variabel is, en ernaar te handelen om de lichten/decoraties aan of uit te zetten.

Voor dit doel heb ik besloten om een locatiegebaseerde API te gebruiken om de gegevens te leveren (tijd voor Adhan)

muslimsalat.com/api/#location

  • Deze API biedt een verscheidenheid aan opties en configuratieparameters die worden beschreven in de documentatielink hierboven.
  • Het wordt aanbevolen om uw eigen API_key te gebruiken die gratis is bij registratie.
  • In mijn ontwerp ben ik geïnteresseerd in een dagelijkse tijdlijn.
  • De geretourneerde tijd is in 12-uursnotatie (AM/PM).
  • Wat de locatie betreft, zou ik willen dat deze API nauwkeurigere opties zou kunnen bieden voor locaties, zoals het geografische coördinatensysteem voor coördinaten (breedtegraad en lengtegraad). Op deze manier kan deze API bijvoorbeeld worden voorzien van een plaatsnaam en dit is in de meeste gevallen voldoende. Helaas waren de resultaten van mijn specifieke stad behoorlijk bevooroordeeld in meerdere tests en er waren een paar minuten verschil bij het vergelijken van de Adhan-tijd tussen API-resultaten en de werkelijke tijd van Adhan in mijn stad. Aan de andere kant waren de resultaten perfect op elkaar afgestemd toen ik een stad in het noorden aanleverde en ik hield me eraan!
  • De API-url die ik gebruik is:https://muslimsalat.com/.json?key=

Stap 4: Technische details: hardware

Technische details: Hardware
Technische details: Hardware

Voor de eenvoud laat ik de hardware buiten het synchronisatieproces met de API en de tijdberekening door deze bewerkingen te delegeren aan het domoticasysteem van mij. Dit geeft me meer controle als ik de API-bron en het berekeningsalgoritme wil aanpassen.

Dat gezegd hebbende, gebruikte ik een ESP8266 (NodeMCU) om via WIFI verbinding te maken met het lokale netwerk en een relaismodule als actuator. De NodeMCU gebruikt het MQTT-protocol en luistert naar een specifiek onderwerp om opdrachten te krijgen om het relais in of uit te schakelen. Zo simpel is het!

Stap 5: Technische details: de punten aansluiten | Domotica

Technische details: de punten verbinden | Domotica
Technische details: de punten verbinden | Domotica
Technische details: de punten verbinden | Domotica
Technische details: de punten verbinden | Domotica
Technische details: de punten verbinden | Domotica
Technische details: de punten verbinden | Domotica

Mijn RaspberryPi heeft een genoderde instantie die in staat is om alles aan te kunnen wat ik nodig heb voor dit project. Het heeft ook een MQTT-server geïnstalleerd om onze berichten te publiceren.

In eerste instantie dacht ik dat ik de API-gegevens dagelijks om 9.00 uur kan ophalen en zowel Fajr- als Mahgrib Adhan-tijden kan extraheren en de huidige tijd kan blijven vergelijken met deze variabelen, namelijk:

elke 30 sec:

als: Mahgrib < NU < Fajr waar | doe de lichten aan | publiceer een AAN-bericht naar het opgegeven MQTT-onderwerp anders: uitschakelen

Om de tijd te vergelijken, converteer ik de uren die door de API worden geleverd van hh: mm (AM / PM) naar het volledige datumformaat door het datumgedeelte in te stellen op een verwaarloosbare datum in de geschiedenis, bijvoorbeeld (1/1/1970) omdat we de tijd vergelijken alleen naar de huidige tijd (datumgedeelte wordt ook geconverteerd).

Helaas werkt dit alleen in ongecompliceerde gevallen. Stel dat de elektrische stroom uitvalt of het systeem opnieuw opstart om een ongeplande reden. Als dit geval zich voor 12 uur voordoet, zitten we nog steeds aan de veilige kant, maar na 12 uur zal ons eenvoudige algoritme falen.

Om een voorbeeld te geven, laten we Magrib Adhan hebben om 19:30 uur en Fajr om 4:10 uur. Wanneer het systeem opstart, stuurt het een nieuw verzoek om de eerder genoemde gegevens op te halen. Als de tijd nu 1:45 uur is, verwachten we dat ons algoritme true retourneert, maar in feite zal dit niet het geval zijn omdat 1:45 uur minder is dan Fajr (4:10 uur) maar niet groter is dan Magrib (19:30 uur). Dit komt omdat we de datum tussen alle variabelen verenigen. Hieronder staat de definitieve versie van het algoritme (tot nu toe):

elke 30 sec:

if ((magrib.getHours() >=12 && fajr.getHours() <=12) || fajr < maghrib) { fajr.setDate(fajr.getDate()+1); // omgaan met dagen eindtijd if (now.getHours() <=12) { now.setDate(now.getDate()+1); // omgaan met dagen currentTime } } // hieronder is het vorige codeblok als: Mahgrib < NOW < Fajr true | doe de lichten aan | publiceer een ON-bericht naar het opgegeven MQTT-onderwerp anders: false | uitschakelen

De volledige stroom van het proces is geannoteerd in de bovenstaande afbeelding.

In termen van UI heb ik 2 schakelaars toegevoegd aan de UI/interface:

  1. Een schakelaar om dit proces Automatisch of Handmatig te zetten.
  2. Een schakelaar om de lichten handmatig in of uit te schakelen.

Stap 6: Afronden

De tijd vliegt om nooit meer terug te roepen. Door zulke eenvoudige 1-daagse projecten te doen, kun je op deze snelle weg op adem komen en je soft skills in de loop van de tijd nieuw leven inblazen.

Ik heb in dit project zoveel geprobeerd om het overal ter wereld eenvoudig en herbruikbaar te houden.

Stem alstublieft op deze instructable als u denkt dat dit project het verdient.

Fijne Ramadan!

Aanbevolen: