Оглавление:

Огни Рамадана - Домашняя автоматизация IOT: 6 шагов
Огни Рамадана - Домашняя автоматизация IOT: 6 шагов

Видео: Огни Рамадана - Домашняя автоматизация IOT: 6 шагов

Видео: Огни Рамадана - Домашняя автоматизация IOT: 6 шагов
Видео: Стих: Новый год ХАРАМ ...Дед Мороз баран😂😂😂 2024, Ноябрь
Anonim
Огни Рамадана | Домашняя автоматизация IOT
Огни Рамадана | Домашняя автоматизация IOT

Когда Рамадан стучится в дверь, города по всему миру загораются и готовятся к месяцу поста. Огни висят на площадях и городских улицах, а также на внешних стенах домов, освещенных по ночам до восхода солнца.

В этом проекте я хотел бы поделиться своим вкладом, в котором я автоматизирую зажигание этих украшений на основе времени азана и добавляю это в свою систему умного дома.

Шаг 1: теория

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

Шаг 2: Дизайн

Ниже я перечислю требования / возможности этого проекта:

  • Система должна иметь возможность автоматически обрабатывать данные при загрузке.
  • Система должна иметь возможность периодически выполнять алгоритм принятия решения (ВКЛ / ВЫКЛ).
  • Система должна иметь возможность ежедневно вызывать API.
  • Система должна иметь возможность восстановиться после незапланированного перезапуска.
  • Система должна выполнить алгоритм принятия решения (ВКЛ / ВЫКЛ) при получении данных немедленно.
  • В системе должен быть переключатель для включения режима автопилота (автоматический режим).
  • В системе должен быть предусмотрен переключатель для ручного включения / выключения света.
  • При срабатывании ручного переключателя ручной режим должен быть выключен.
  • Когда автоматический режим включен, результат алгоритма принятия решения должен отражаться на ручном переключателе ВКЛ / ВЫКЛ.

Шаг 3. Технические детали: API

Технические детали: API
Технические детали: API

Чтобы теория была применима, необходимо знать время азана на ежедневной основе, начиная с его переменной, и действовать в соответствии с ним, чтобы включать / выключать свет / украшения.

Для этого я решил использовать API на основе местоположения для обслуживания данных (время для Adhan).

muslimsalat.com/api/#location

  • Этот API предоставляет множество опций и параметров конфигурации, описанных в ссылке на документацию выше.
  • Рекомендуется использовать собственный API_key, который предоставляется бесплатно при регистрации.
  • В моем дизайне меня интересует ежедневный график.
  • Возвращаемое время отображается в 12-часовом формате (AM / PM).
  • Что касается местоположения, мне хотелось бы, чтобы этот API мог предоставлять более точные параметры для местоположений, таких как координаты географической системы координат (широта и долгота). Таким образом, этот API может быть снабжен, например, названием города, и этого в большинстве случаев вполне достаточно. К сожалению, результаты для моего конкретного города были довольно предвзятыми в нескольких тестах, и разница в пару минут при сравнении времени Адхана между результатами API и фактическим временем Адхана в моем городе. С другой стороны, результаты были идеально согласованы, когда я указал близлежащий город на севере и придерживался его!
  • Я использую URL-адрес API: https://muslimsalat.com/.json? Key =

Шаг 4: Технические детали: оборудование

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

Для простоты я оставляю оборудование вне процесса синхронизации с API и расчета времени, делегируя эти операции моей системе домашней автоматизации. Это даст мне больше контроля, если я захочу настроить источник API и алгоритм расчета.

При этом я использовал ESP8266 (NodeMCU) для подключения к локальной сети через WIFI и релейный модуль в качестве исполнительного механизма. NodeMCU будет использовать протокол MQTT и прослушивать определенную тему, чтобы получить команды для включения / выключения реле. Так просто!

Шаг 5: Технические детали: Соединение точек | Домашняя автоматизация

Технические детали: соединяя точки | Домашняя автоматизация
Технические детали: соединяя точки | Домашняя автоматизация
Технические детали: соединяя точки | Домашняя автоматизация
Технические детали: соединяя точки | Домашняя автоматизация
Технические детали: соединяя точки | Домашняя автоматизация
Технические детали: соединяя точки | Домашняя автоматизация

Мой RaspberryPi содержит нодированный экземпляр, способный обрабатывать все, что мне нужно для этого проекта. На нем также установлен сервер MQTT для публикации наших сообщений.

Сначала я подумал, что могу получать данные API ежедневно в 9 утра и извлекать время как Фаджр, так и Махгриб Адхан, и продолжать сравнивать текущее время с этими переменными, а именно:

каждые 30 секунд:

если: Махгриб <СЕЙЧАС <Фаджр правда | включи свет | опубликовать сообщение ON в указанной теме MQTT иначе: выключить

Для сравнения времени я конвертирую часы, предоставляемые API, из чч: мм (AM / PM) в формат полной даты, устанавливая часть даты на незначительную дату в истории, например (01.01.1970), поскольку мы сравниваем время только на текущее время (также преобразуется часть даты).

К сожалению, это сработает только в простых случаях. Предположим, случай, когда пропало электричество или система перезапустилась по незапланированной причине. Если этот случай произойдет до 12 часов утра, тогда мы все еще в безопасности, но после 12 часов утра наш простой алгоритм не сработает.

В качестве примера давайте устроим Магриб Азан в 19:30 и Фаджр в 4:10 утра. Когда система загружается, она отправляет новый запрос на выборку данных, упомянутых ранее. Если время сейчас 1:45, мы ожидаем, что наш алгоритм вернет истину, но на самом деле это не так, потому что 1:45 утра меньше, чем Фаджр (4:10 утра), но не больше, чем Магриб (7:30 вечера). Это потому, что мы объединяем дату между всеми переменными. Ниже представлена окончательная версия алгоритма (пока что):

каждые 30 секунд:

если ((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 <NOW <Fajr true | включи свет | опубликовать сообщение ON в указанной теме MQTT else: false | выключать

Полный поток процесса аннотирован на изображении выше.

Что касается UI, я добавил 2 переключателя в UI / interface:

  1. Переключатель, позволяющий включить автоматический или ручной режим.
  2. Переключатель для включения / выключения света вручную.

Шаг 6. Заключение

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

Я старался изо всех сил в этом проекте, чтобы он был простым и пригодным для повторного использования по всему миру.

Пожалуйста, проголосуйте за эту инструкцию, если считаете, что этот проект заслуживает.

Счастливого Рамадана!

Рекомендуемые: