Obsah:

Ramadánová světla - Domácí automatizace IOT: 6 kroků
Ramadánová světla - Domácí automatizace IOT: 6 kroků

Video: Ramadánová světla - Domácí automatizace IOT: 6 kroků

Video: Ramadánová světla - Domácí automatizace IOT: 6 kroků
Video: Baník Blog Podcast #32: Hvězdné fotbalové války 2024, Červenec
Anonim
Ramadánová světla | Domácí automatizace IOT
Ramadánová světla | Domácí automatizace IOT

Jak ramadán klepe na dveře, města po celém světě se rozzáří a připraví se na měsíc půstu. Světla jsou zavěšena na veřejných prostranstvích a v ulicích měst i na vnějších stěnách domů osvětlených v noci, dokud ráno nevyjde slunce.

V tomto projektu bych se chtěl podělit o svůj příspěvek, ve kterém automatizuji rozsvícení těchto dekorací na základě Adhanových časů a přidávám je do svého systému inteligentní domácnosti.

Krok 1: Teorie

V zásadě je snazší a použitelnější automatizovat osvětlení například na základě intenzity slunečního světla. Chtěl bych však, aby to mělo ducha svatého měsíce, to znamená, že světla se rozsvítí, dokud budou lidé během půstního měsíce moci jíst. Zejména světla každý den začínají od Maghriba Adhana až po Fajra Adhana bez jakékoli lidské interakce.

Krok 2: Design

Níže uvedu požadavky/možnosti tohoto projektu:

  • Systém by měl být schopen automaticky zpracovávat při spuštění.
  • Systém by měl být schopen pravidelně provádět rozhodovací (ON/OFF) algoritmus.
  • Systém by měl být schopen volat API na denní bázi.
  • Systém by měl být schopen zotavit se z neplánovaného restartu.
  • Systém by měl okamžitě po přijetí dat provést rozhodovací (ON/OFF) algoritmus.
  • Systém by měl poskytnout přepínač pro zapnutí režimu autopilota (automatický režim).
  • Systém by měl poskytnout přepínač pro ruční zapnutí/vypnutí světel.
  • Aktivací ručního spínače by měl být manuální režim nastaven na VYPNUTO.
  • Když je automatický režim zapnutý, výsledek rozhodovacího algoritmu by se měl projevit na ručním spínači ZAP/VYP.

Krok 3: Technické detaily: API

Technické detaily: API
Technické detaily: API

Aby byla teorie použitelná, je nutné znát čas Adhan na denních základnách od jeho proměnné a podle toho zapínat/vypínat světla/dekorace.

Za tímto účelem jsem se rozhodl použít k poskytování dat API založené na poloze (čas pro Adhan)

muslimsalat.com/api/#location

  • Toto API poskytuje řadu možností a konfiguračních parametrů popsaných v odkazu na dokumentaci výše.
  • Doporučujeme použít vlastní API_key, který je při registraci zdarma.
  • V mém návrhu mě zajímá denní harmonogram.
  • Vrácený čas je ve 12hodinovém formátu (AM/PM).
  • Pokud jde o umístění, přál jsem si, aby toto API mohlo poskytovat přesnější možnosti pro umístění, jako je systém zeměpisných souřadnic souřadnic (zeměpisná šířka a délka). Tímto způsobem může být tomuto API poskytnuto například jméno města a to ve většině případů stačí. Výsledky mého konkrétního města byly ve více testech bohužel velmi zkreslené a při porovnání času Adhan mezi výsledky API a skutečným časem Adhan v mém městě došlo k pár minutovému rozdílu. Na druhou stranu byly výsledky perfektně sladěny, když jsem poskytl blízké město na severu a toho jsem se držel!
  • URL, kterou používám, je: https://muslimsalat.com/.json? Key =

Krok 4: Technické detaily: Hardware

Technické detaily: Hardware
Technické detaily: Hardware

Pro jednoduchost ponechávám hardware mimo proces synchronizace s API a výpočet času delegováním těchto operací na můj domácí automatizační systém. To mi poskytne větší kontrolu, pokud chci vyladit zdroj API a algoritmus výpočtu.

Když to bylo řečeno, použil jsem ESP8266 (NodeMCU) pro připojení k místní síti přes WIFI a reléový modul jako pohon. NodeMCU bude používat protokol MQTT a poslouchat konkrétní téma, aby získal příkazy k zapnutí/vypnutí relé. Tak jednoduché!

Krok 5: Technické detaily: Připojení teček | Automatizace domácnosti

Technické detaily: Připojení teček | Automatizace domácnosti
Technické detaily: Připojení teček | Automatizace domácnosti
Technické detaily: Připojení teček | Automatizace domácnosti
Technické detaily: Připojení teček | Automatizace domácnosti
Technické detaily: Připojení teček | Automatizace domácnosti
Technické detaily: Připojení teček | Automatizace domácnosti

Můj RaspberryPi obsahuje uzlovanou instanci, která je schopná zvládnout vše, co pro tento projekt potřebuji. Má také nainstalovaný server MQTT pro publikování našich zpráv.

Zpočátku jsem si myslel, že mohu načíst data API na denních základnách v 9:00 a extrahovat časy Fajr a Mahgrib Adhan a porovnávat aktuální čas s těmito proměnnými, což je:

každých 30 sekund:

pokud: Mahgrib <NYNÍ <Fajr pravda | zapnout světla | publikovat zprávu ON na zadané téma MQTT jinak: vypnout

Pro porovnávání času převádím hodiny poskytované rozhraním API z hh: mm (AM/PM) na plný formát data tak, že nastavím část data na zanedbatelné datum v historii, např. (1/1/1970), protože porovnáváme čas pouze na aktuální čas (část data se také převede).

Bohužel to bude fungovat pouze v přímých případech. Předpokládejme případ, kdy dojde k výpadku elektrického proudu nebo restartování systému z neplánovaného důvodu. Pokud k tomuto případu dojde před 12:00, jsme stále na bezpečné straně, ale po 12:00 to náš jednoduchý algoritmus selže.

Jako příklad uvedeme Magrib Adhan v 19:30 a Fajr v 4:10. Když se systém spustí, odešle nový požadavek na načtení dříve zmíněných dat. Pokud je nyní čas 1:45 AM, očekáváme, že se náš algoritmus vrátí na true, ale ve skutečnosti to nebude, protože 1:45 AM je menší než Fajr (4:10 AM), ale není větší než Magrib (19:30). Důvodem je, že sjednocujeme datum mezi všemi proměnnými. Níže je konečná verze algoritmu (zatím):

každých 30 sekund:

if ((magrib.getHours ()> = 12 && fajr.getHours () <= 12) || fajr <maghrib) {fajr.setDate (fajr.getDate ()+1); // zpracování spanning days endTime if (now.getHours () <= 12) {now.setDate (now.getDate ()+1); // handle spanning days currentTime}} // níže je předchozí blok kódu, pokud: Mahgrib <NOW <Fajr true | zapnout světla | publikovat ON zprávu na zadané téma MQTT else: false | vypnout

Kompletní průběh procesu je anotován na výše uvedeném obrázku.

Pokud jde o uživatelské rozhraní, přidal jsem do uživatelského rozhraní/rozhraní 2 přepínače:

  1. Přepínač, který tento proces zapne automaticky nebo ručně.
  2. Přepínač pro ruční zapnutí/vypnutí světel.

Krok 6: Zabalení

Čas letí, aby se na něj nikdy nevzpomínalo. Provádění takových jednoduchých jednodenních projektů vám umožní v tomto rychlém pruhu nadechnout a pomůže vám časem oživit vaše měkké dovednosti.

V tomto projektu jsem se snažil tolik, aby byl jednoduchý a opakovaně použitelný po celém světě.

Laskavě Hlasujte pro tento návod, pokud si myslíte, že si tento projekt zaslouží.

Šťastný Ramadán!

Doporučuje: