Съдържание:

Рамазански светлини - Домашна автоматизация IOT: 6 стъпки
Рамазански светлини - Домашна автоматизация IOT: 6 стъпки

Видео: Рамазански светлини - Домашна автоматизация IOT: 6 стъпки

Видео: Рамазански светлини - Домашна автоматизация IOT: 6 стъпки
Видео: Aqara T1 - новая Zigbee лента с белыми и адресными светодиодами, обзор и тестирование 2024, Юли
Anonim
Рамазански светлини | Домашна автоматизация IOT
Рамазански светлини | Домашна автоматизация IOT

Докато Рамадан чука на вратата, градовете по света светват и се подготвят за месеца на гладуване. Светлините са окачени на обществени площади и по улиците на града, както и по външните стени на къщи, осветени през нощта, докато слънцето изгрее сутрин.

В този проект бих искал да споделя моя принос, в който автоматизирам осветяването на тези декорации въз основа на времената на Adhan и добавям това към моята система за интелигентен дом.

Стъпка 1: Теория

По принцип е по -лесно и по -приложимо да се автоматизира осветлението въз основа например на интензитета на слънчевата светлина. Бих искал обаче това да има духа на светия месец, тоест светлините ще се включват, докато на хората е позволено да се хранят по време на постния месец. По -специално, светлините са включени от Магриб Адхан до Фаджр Адхан всеки ден без човешко взаимодействие.

Стъпка 2: Дизайн

По -долу ще изброя изискванията/възможностите на този проект:

  • Системата трябва да може да обработва автоматично при стартиране.
  • Системата трябва да може да изпълнява периодично алгоритъма за вземане на решение (ON/OFF).
  • Системата трябва да може да извиква API ежедневно.
  • Системата трябва да може да се възстанови от непланирано рестартиране.
  • Системата трябва да изпълни алгоритъма за решение (ВКЛ./ИЗКЛ.) При незабавно получаване на данни.
  • Системата трябва да осигури превключвател за включване на режима на автопилот (автоматичен режим).
  • Системата трябва да осигури превключвател за ръчно включване/изключване на светлините.
  • Задействането на ръчния превключвател трябва да зададе ръчния режим на OFF.
  • Когато автоматичният режим е ВКЛЮЧЕН, резултатът от алгоритъма за вземане на решение трябва да се отрази на ръчното превключване ON/OFF.

Стъпка 3: Технически подробности: API

Технически подробности: API
Технически подробности: API

За да стане теорията приложима, е необходимо да се знае езанското време на дневна база от неговата променлива и да се въздейства върху него, за да се включат/изключат светлините/декорациите.

За тази цел реших да използвам базиран на местоположението API за обслужване на данните (време за Adhan)

muslimsalat.com/api/#location

  • Този API предоставя разнообразие от опции и конфигурационни параметри, описани в документационната връзка по -горе.
  • Препоръчва се да използвате свой собствен API_key, който е безплатен при регистрация.
  • В моя дизайн се интересувам от дневна хронология.
  • Върнатото време е във формат 12 часа (AM/PM).
  • По отношение на местоположението, пожелавах, ако този API може да предостави по -точни опции за местоположения като координатна система с географски координати (географска ширина и дължина). За този начин този API може да бъде снабден с име на град например и това е напълно достатъчно в повечето случаи. За съжаление, резултатите от моя конкретен град бяха доста предубедени в множество тестове и имаше няколко минути разлика при сравняване на времето на Adhan между резултатите от API и действителното време на Adhan в моя град. От друга страна, резултатите бяха перфектно съвпаднали, когато осигурих близък град на север и се придържах към него!
  • URL адресът на API, който използвам, е: https://muslimsalat.com/.json? Key =

Стъпка 4: Технически подробности: Хардуер

Технически подробности: Хардуер
Технически подробности: Хардуер

За по -просто, оставям хардуера извън процеса на синхронизиране с API и изчисляването на времето, като делегирам тези операции на моята система за домашна автоматизация. Това ще ми даде повече контрол, ако искам да оправя източника на API и алгоритъма за изчисление.

Като казах това, използвах ESP8266 (NodeMCU) за свързване към локалната мрежа чрез WIFI и релеен модул като задвижващ механизъм. NodeMCU ще използва протокол MQTT и ще слуша за конкретна тема, за да получи команди за включване/изключване на релето. Толкова просто!

Стъпка 5: Технически подробности: Свързване на точките Домашна автоматизация

Технически подробности: Свързване на точките Домашна автоматизация
Технически подробности: Свързване на точките Домашна автоматизация
Технически подробности: Свързване на точките Домашна автоматизация
Технически подробности: Свързване на точките Домашна автоматизация
Технически подробности: Свързване на точките Домашна автоматизация
Технически подробности: Свързване на точките Домашна автоматизация

Моят RaspberryPi притежава нодиран екземпляр, който е в състояние да обработва всичко, от което се нуждая за този проект. Той също така има инсталиран MQTT сървър за публикуване на нашите съобщения.

Отначало си помислих, че мога да извличам API данните на дневна база в 9 часа сутринта и да извличам както Fajr, така и Mahgrib Adhan времената и да продължа да сравнявам текущото време с тези променливи, а именно:

на всеки 30 секунди:

ако: Mahgrib <СЕГА <Fajr true | включете светлините | публикувайте съобщение ON в посочената тема за MQTT иначе: изключете

За да сравня времето, преобразувам часовете, предоставени от API, от hh: mm (AM/PM) във формат за пълна дата, като задавам датната част на незначителна дата в историята, например (1/1/1970), тъй като сравняваме времето само към текущия час (частта от датата също се преобразува).

За съжаление, това ще работи само в ясни случаи. Да предположим случая, когато електрическото захранване спадне или системата се рестартира по непланирана причина. Ако този случай се случи преди 12 часа сутринта, ние все още сме на сигурно място, но след 12 часа това ще се провали с нашия прост алгоритъм.

За да дадем пример, нека имаме Magrib Adhan в 19:30 и Fajr в 4:10 сутринта. Когато системата се зареди, тя ще изпрати нова заявка за извличане на данните, споменати по -рано. Ако в момента е 1:45 сутринта, очакваме нашият алгоритъм да се върне истина, но всъщност няма да стане, защото 1:45 сутринта е по -малко от Fajr (4:10 AM), но не е по -голямо от Magrib (19:30 PM). Това е така, защото обединяваме датата между всички променливи. По -долу е финалната версия на алгоритъма (досега):

на всеки 30 секунди:

if ((magrib.getHours ()> = 12 && fajr.getHours () <= 12) || fajr <maghrib) {fajr.setDate (fajr.getDate ()+1); // обработка на обхващащи дни endTime if (now.getHours () <= 12) {now.setDate (now.getDate ()+1); // дръжка, обхващаща дни currentTime}} // по -долу е предишният код код, ако: Mahgrib <СЕГА <Fajr true | включете светлините | публикува съобщение ON към посочената тема на MQTT else: false | изключи

Пълният поток на процеса е отбелязан в горното изображение.

По отношение на потребителския интерфейс, добавих 2 превключвателя към потребителския интерфейс/интерфейс:

  1. Превключвател за превключване на този процес в автоматичен или ръчен.
  2. Превключвател за ръчно включване/изключване на осветлението.

Стъпка 6: Приключване

Времето лети никога, за да не бъде припомнено. Правенето на такива прости еднодневни проекти ви позволява да си поемете дъх в тази бърза лента и да ви помогне да съживите меките си умения с течение на времето.

Опитах се толкова много в този проект да го поддържам прост и за многократна употреба по целия свят.

Моля, гласувайте за тази инструкция, ако смятате, че този проект заслужава.

Честит Рамадан!

Препоръчано: