Spisu treści:

Światła Ramadanu - Automatyka domowa IOT: 6 kroków
Światła Ramadanu - Automatyka domowa IOT: 6 kroków

Wideo: Światła Ramadanu - Automatyka domowa IOT: 6 kroków

Wideo: Światła Ramadanu - Automatyka domowa IOT: 6 kroków
Wideo: RAMADAN | Spacer po City Walk w czasie Ramadanu 2024, Lipiec
Anonim
Światła Ramadanu | Automatyka domowa IOT
Światła Ramadanu | Automatyka domowa IOT

Gdy Ramadan puka do drzwi, miasta na całym świecie rozświetlają się i przygotowują na miesiąc postu. Światła wiszą na placach i ulicach miast, a także na zewnętrznych ścianach domów oświetlonych nocą do wschodu słońca.

W tym projekcie chciałbym podzielić się moim wkładem, w którym automatyzuję rozświetlanie tych dekoracji na podstawie czasów Adhana i dodaję to do mojego systemu inteligentnego domu.

Krok 1: Teoria

Zasadniczo łatwiej i lepiej można zautomatyzować oświetlenie na podstawie np. natężenia światła słonecznego. Jednak chciałbym, żeby to było w duchu świętego miesiąca, to znaczy, że światła będą się włączać tak długo, jak długo ludzie będą mogli jeść podczas miesiąca postu. W szczególności światła zapalają się od Maghrib Adhan do Fajr Adhan każdego dnia bez interakcji z ludźmi.

Krok 2: Projekt

Poniżej wymienię wymagania/możliwości tego projektu:

  • System powinien być w stanie automatycznie przetwarzać podczas uruchamiania.
  • System powinien mieć możliwość okresowego wykonywania algorytmu decyzyjnego (ON/OFF).
  • System powinien mieć możliwość codziennego wywoływania API.
  • System powinien być w stanie odzyskać sprawność po nieplanowanym ponownym uruchomieniu.
  • System powinien wykonać algorytm decyzyjny (ON/OFF) po otrzymaniu danych natychmiast.
  • System powinien zapewnić przełącznik do włączania trybu autopilota (tryb automatyczny).
  • System powinien zapewniać przełącznik do ręcznego włączania/wyłączania świateł.
  • Wyzwolenie przełącznika ręcznego powinno wyłączyć tryb ręczny.
  • Gdy tryb automatyczny jest włączony, wynik algorytmu decyzyjnego powinien być odzwierciedlony na ręcznym przełączniku ON/OFF.

Krok 3: Szczegóły techniczne: API

Szczegóły techniczne: API
Szczegóły techniczne: API

Aby ta teoria miała zastosowanie, wymagana jest znajomość czasu Adhan na co dzień, ponieważ jest on zmienny i działa zgodnie z nim, aby włączyć/wyłączyć światła/dekoracje.

W tym celu zdecydowałem się na wykorzystanie API opartego na lokalizacji do obsługi danych (czas na Adhan)

muslimsalat.com/api/#lokalizacja

  • Ten interfejs API udostępnia różne opcje i parametry konfiguracyjne opisane w powyższym łączu do dokumentacji.
  • Zaleca się korzystanie z własnego API_key, który jest bezpłatny przy rejestracji.
  • W moim projekcie interesuje mnie codzienna oś czasu.
  • Zwracany czas jest w formacie 12 godzin (AM/PM).
  • Jeśli chodzi o lokalizację, żałowałem, że ten interfejs API może zapewnić dokładniejsze opcje dla lokalizacji, takich jak współrzędne układu współrzędnych geograficznych (szerokość i długość geograficzna). W tym celu ten interfejs API może być wyposażony na przykład w nazwę miasta, co w większości przypadków jest wystarczające. Niestety wyniki w moim konkretnym mieście były dość stronnicze w wielu testach i było kilka minut różnicy przy porównywaniu czasu Adhan między wynikami API a rzeczywistym czasem Adhan w moim mieście. Z drugiej strony wyniki były idealnie dopasowane, gdy podałem miasto blisko północy i trzymałem się go!
  • Adres URL interfejsu API, którego używam, to:

Krok 4: Szczegóły techniczne: sprzęt

Szczegóły techniczne: sprzęt
Szczegóły techniczne: sprzęt

Dla uproszczenia wyłączam sprzęt z procesu synchronizacji z API i obliczania czasu, delegując te operacje do mojego systemu automatyki domowej. Daje mi to większą kontrolę, jeśli chcę poprawić źródło API i algorytm obliczeń.

Mając to na uwadze, użyłem ESP8266 (NodeMCU) do połączenia z siecią lokalną przez WIFI i moduł przekaźnika jako siłownik. NodeMCU użyje protokołu MQTT i nasłuchuje określonego tematu, aby uzyskać polecenia włączenia/wyłączenia przekaźnika. Tak proste jak to!

Krok 5: Szczegóły techniczne: Łączenie kropek | Automatyka domowa

Szczegóły techniczne: Łączenie kropek | Automatyka domowa
Szczegóły techniczne: Łączenie kropek | Automatyka domowa
Szczegóły techniczne: Łączenie kropek | Automatyka domowa
Szczegóły techniczne: Łączenie kropek | Automatyka domowa
Szczegóły techniczne: Łączenie kropek | Automatyka domowa
Szczegóły techniczne: Łączenie kropek | Automatyka domowa

Moje RaspberryPi posiada instancję z węzłami, która jest w stanie obsłużyć wszystko, czego potrzebuję do tego projektu. Posiada również zainstalowany serwer MQTT do publikowania naszych wiadomości.

Na początku myślałem, że mogę pobierać dane API codziennie o 9 rano i wyodrębniać czasy Fajr i Mahgrib Adhan oraz porównywać aktualny czas z tymi zmiennymi, czyli:

co 30 sekund:

jeśli: Mahgrib < TERAZ < Fajr prawda | włącz światła | opublikuj komunikat ON do określonego tematu MQTT w przeciwnym razie: wyłącz

Aby porównać czas, konwertuję godziny dostarczone przez API z hh:mm(AM/PM) na pełny format daty, ustawiając część daty na nieistotną datę w historii, np. (1.01.2070), ponieważ porównujemy czas tylko do aktualnego czasu (część daty jest również przeliczana).

Niestety zadziała to tylko w prostych przypadkach. Załóżmy przypadek, w którym energia elektryczna spada lub system uruchamia się ponownie z nieplanowanego powodu. Jeśli taki przypadek zdarzy się przed północą, nadal jesteśmy po bezpiecznej stronie, ale po północy nasz prosty algorytm zawiedzie.

Aby dać przykład, weźmy Magrib Adhan o 19:30 i Fajr o 4:10. Po uruchomieniu systemu wyśle nowe żądanie pobrania danych wspomnianych wcześniej. Jeśli teraz jest godzina 1:45, oczekujemy, że nasz algorytm zwróci prawdę, ale w rzeczywistości tak się nie stanie, ponieważ 1:45 to mniej niż Fajr (4:10), ale nie jest większe niż Magrib (7:30). Dzieje się tak, ponieważ łączymy datę między wszystkimi zmiennymi. Poniżej ostateczna wersja algorytmu (jak dotąd):

co 30 sekund:

if ((magrib.getHours() >=12 && fajr.getHours() <=12) || fajr < maghrib) { fajr.setDate(fajr.getDate()+1); // obsługuj obejmujące dni endTime if (now.getHours() <=12) { now.setDate(now.getDate()+1); // obsługuj spanning days currentTime } } // poniżej znajduje się poprzedni blok kodu, jeśli: Mahgrib < NOW < Fajr true | włącz światła | opublikuj komunikat ON do określonego tematu MQTT else: false | wyłączyć coś

Pełny przebieg procesu jest opisany na powyższym obrazku.

Jeśli chodzi o interfejs użytkownika, dodałem 2 przełączniki do interfejsu/interfejsu:

  1. Przełącznik, aby włączyć ten proces automatycznie lub ręcznie.
  2. Przełącznik do ręcznego włączania/wyłączania świateł.

Krok 6: Podsumowanie…

Czas leci, by nigdy go nie wspominać. Wykonywanie tak prostych jednodniowych projektów pozwala złapać oddech na tym szybkim pasie i pomóc z czasem ożywić swoje miękkie umiejętności.

W tym projekcie starałem się, aby był prosty i wielokrotnego użytku na całym świecie.

Uprzejmie zagłosuj na tę instrukcję, jeśli uważasz, że ten projekt zasługuje.

Szczęśliwego ramadanu!

Zalecana: