Inhaltsverzeichnis:

Ramadan-Lichter - Hausautomation IOT - Gunook
Ramadan-Lichter - Hausautomation IOT - Gunook

Video: Ramadan-Lichter - Hausautomation IOT - Gunook

Video: Ramadan-Lichter - Hausautomation IOT - Gunook
Video: Twinkly App Controlled Smart Christmas Lights - Christmas Designers 2024, November
Anonim
Ramadan-Lichter | Hausautomation IOT
Ramadan-Lichter | Hausautomation IOT

Während der Ramadan an die Tür klopft, leuchten Städte weltweit und bereiten sich auf den Fastenmonat vor. Lichter hängen auf öffentlichen Plätzen und über Stadtstraßen sowie an Außenwänden von Häusern, die nachts beleuchtet werden, bis die Sonne am Morgen aufgeht.

In diesem Projekt möchte ich meinen Beitrag teilen, in dem ich das Aufleuchten dieser Dekorationen nach Adhan-Zeiten automatisiere und zu meinem Smart Home System hinzufüge.

Schritt 1: Theorie

Grundsätzlich ist es einfacher und anwendbarer, die Beleuchtung beispielsweise basierend auf der Sonneneinstrahlung zu automatisieren. Ich möchte jedoch, dass dies den Geist des Heiligen Monats hat, dh die Lichter werden angehen, solange die Menschen während des Fastenmonats essen dürfen. Insbesondere sind die Lichter von Maghrib Adhan bis Fajr Adhan jeden Tag ohne menschliche Interaktion an.

Schritt 2: Design

Im Folgenden werde ich die Anforderungen / Fähigkeiten dieses Projekts auflisten:

  • Das System sollte in der Lage sein, beim Booten automatisch zu verarbeiten.
  • Das System sollte in der Lage sein, den Entscheidungsalgorithmus (EIN/AUS) periodisch auszuführen.
  • Das System sollte in der Lage sein, die API täglich aufzurufen.
  • Das System sollte in der Lage sein, sich nach einem ungeplanten Neustart zu erholen.
  • Das System sollte den Entscheidungsalgorithmus (EIN/AUS) beim Empfangen von Daten sofort ausführen.
  • Das System sollte einen Schalter zum Einschalten des Autopilot-Modus (Automatikmodus) bereitstellen.
  • Das System sollte einen Schalter zum manuellen Ein- und Ausschalten der Lichter bereitstellen.
  • Durch Auslösen des Handschalters sollte der Handbetrieb auf AUS gesetzt werden.
  • Wenn der Automatikmodus eingeschaltet ist, sollte das Ergebnis des Entscheidungsalgorithmus auf dem manuellen Schalter ON/OFF widergespiegelt werden.

Schritt 3: Technische Details: die API

Technische Details: die API
Technische Details: die API

Um die Theorie anwendbar zu machen, ist es erforderlich, die Adhan-Zeit auf Tagesbasis seit ihrer Variablen zu kennen und darauf zu reagieren, um die Lichter/Dekorationen ein- und auszuschalten.

Zu diesem Zweck habe ich mich entschieden, eine standortbasierte API zu verwenden, um die Daten bereitzustellen (Zeit für Adhan)

muslimsalat.com/api/#location

  • Diese API bietet eine Vielzahl von Optionen und Konfigurationsparametern, die im obigen Dokumentationslink beschrieben sind.
  • Es wird empfohlen, einen eigenen API_key zu verwenden, der bei der Registrierung kostenlos ist.
  • In meinem Design interessiere ich mich für eine tägliche Zeitleiste.
  • Die zurückgegebene Zeit ist im 12-Stunden-Format (AM/PM).
  • In Bezug auf den Standort hätte ich mir gewünscht, dass diese API genauere Optionen für Standorte wie Koordinaten geographisches Koordinatensystem (Breitengrad und Längengrad) bereitstellen könnte. Auf diese Weise kann diese API beispielsweise mit einem Städtenamen versehen werden und das reicht in den meisten Fällen völlig aus. Leider waren die Ergebnisse meiner spezifischen Stadt in mehreren Tests ziemlich verzerrt und beim Vergleich der Adhan-Zeit zwischen den API-Ergebnissen und der tatsächlichen Zeit von Adhan in meiner Stadt gab es einige Minuten Unterschied. Auf der anderen Seite waren die Ergebnisse perfekt, als ich eine nahe gelegene Stadt im Norden zur Verfügung stellte und dabei blieb!
  • Die von mir verwendete API-URL lautet:

Schritt 4: Technische Details: Hardware

Technische Details: Hardware
Technische Details: Hardware

Der Einfachheit halber lasse ich die Hardware bei der Synchronisierung mit der API und der Zeitberechnung aus, indem ich diese Vorgänge an mein Hausautomationssystem delegiere. Dies gibt mir mehr Kontrolle, wenn ich die API-Quelle und den Berechnungsalgorithmus optimieren möchte.

Trotzdem habe ich einen ESP8266 (NodeMCU) verwendet, um mich über WIFI mit dem lokalen Netzwerk und ein Relaismodul als Aktor zu verbinden. Die NodeMCU verwendet das MQTT-Protokoll und hört auf ein bestimmtes Thema, um Befehle zum Ein- und Ausschalten des Relais zu erhalten. So einfach ist das!

Schritt 5: Technische Details: Verbinden der Punkte | Heimautomatisierung

Technische Details: Punkte verbinden | Heimautomatisierung
Technische Details: Punkte verbinden | Heimautomatisierung
Technische Details: Punkte verbinden | Heimautomatisierung
Technische Details: Punkte verbinden | Heimautomatisierung
Technische Details: Verbinden der Punkte | Heimautomatisierung
Technische Details: Verbinden der Punkte | Heimautomatisierung

Mein RaspberryPi enthält eine mit Knoten versehene Instanz, die alles verarbeiten kann, was ich für dieses Projekt benötige. Es hat auch einen MQTT-Server installiert, um unsere Nachrichten zu veröffentlichen.

Zuerst dachte ich, dass ich die API-Daten täglich um 9 Uhr morgens abrufen und sowohl die Fajr- als auch die Mahgrib-Adhan-Zeit extrahieren und die aktuelle Zeit mit diesen Variablen vergleichen kann:

alle 30 Sek.:

if: Mahgrib < JETZT < Fajr true | mach das Licht an | eine ON-Nachricht zum angegebenen MQTT-Thema veröffentlichen sonst: ausschalten

Zum Vergleichen der Zeit konvertiere ich die von der API bereitgestellten Stunden von hh:mm(AM/PM) in das vollständige Datumsformat, indem ich den Datumsteil auf ein vernachlässigbares Datum in der Geschichte setze, z. B. (1.01.1970), da wir die Zeit vergleichen nur auf die aktuelle Uhrzeit (Datumsanteil wird ebenfalls umgerechnet).

Leider funktioniert dies nur in einfachen Fällen. Angenommen, die Stromversorgung fällt aus oder das System startet aus einem ungeplanten Grund neu. Wenn dieser Fall vor 12 Uhr auftritt, sind wir immer noch auf der sicheren Seite, aber nach 12 Uhr schlägt unser einfacher Algorithmus fehl.

Um ein Beispiel zu geben, nehmen wir Magrib Adhan um 19:30 Uhr und Fajr um 4:10 Uhr. Wenn das System hochfährt, sendet es eine neue Anforderung zum Abrufen der zuvor erwähnten Daten. Wenn die Zeit jetzt 1:45 Uhr ist, erwarten wir, dass unser Algorithmus wahr zurückgibt, aber tatsächlich wird dies nicht der Fall sein, da 1:45 Uhr weniger als Fajr (4:10 Uhr) ist, aber nicht größer als Magrib (19.30 Uhr). Dies liegt daran, dass wir das Datum zwischen allen Variablen vereinen. Unten ist die endgültige Version des Algorithmus (bisher):

alle 30 Sek.:

if ((magrib.getHours() >=12 && fajr.getHours() <=12) || fajr < maghrib) { fajr.setDate(fajr.getDate()+1); // Handle über Tage hinweg endTime if (now.getHours() <=12) { now.setDate(now.getDate()+1); // behandelt mehrere Tage currentTime } } // unten ist der vorherige Codeblock if: Mahgrib < NOW < Fajr true | mach das Licht an | eine ON-Nachricht zum angegebenen MQTT-Thema veröffentlichen else: false | schalte aus

Der vollständige Ablauf des Prozesses ist im obigen Bild annotiert.

In Bezug auf die Benutzeroberfläche habe ich der Benutzeroberfläche / Schnittstelle 2 Schalter hinzugefügt:

  1. Ein Schalter, um diesen Prozess automatisch oder manuell zu aktivieren.
  2. Ein Schalter zum manuellen Ein- und Ausschalten der Lichter.

Schritt 6: Einpacken

Die Zeit vergeht wie im Fluge, um nie wieder erinnert zu werden. Mit solchen einfachen 1-Tages-Projekten können Sie auf dieser Überholspur durchatmen und Ihre Soft Skills im Laufe der Zeit wiederbeleben.

Ich habe in diesem Projekt so viel versucht, um es einfach und weltweit wiederverwendbar zu halten.

Bitte stimmen Sie für dieses instructable ab, wenn Sie der Meinung sind, dass dieses Projekt es verdient.

Fröhlichen Ramadan!

Empfohlen: