Умный дом своими руками. Часть 4. Инфраструктура — пожарный извещатель.

Введение:

В данной статье будет рассмотрен вариант интеграции обычного автономного пожарного извещателя (датчика дыма) в систему Majordomo. Будем использовать вывод пожарного извещателя на котором при его сработке появляется напряжение равное напряжению питанию (обычно данный вывод используется для работы таких извещателей в шлейфе при проводном подключении). Отслеживать состояние этого вывода (через делитель напряжения) будем при помощи Wi-Fi микроконтроллера  ESP8266. Далее по протоколу MQTT информация будет доставляться в систему умного дома MajorDoMo и обрабатываться при помощи Простых Устройств. Для получения более подробной картины, пожарный извещатель дополнен температурным сенсором.

Компоненты:

В системе будут использованы следующие компоненты:

  1. Автономный пожарный извещатель.
  2. Wi-fi микроконтроллер на базе ESP8266.
  3. Источник питания 5в 1A
  4. Литий ионный аккумулятор 18650
  5. плата защиты и зарядки Li-ion 1S на TP4050
  6. Несколько диодов Шоттки для развязки аккумуляторного и сетевого питания
  7. Повышающий DC-DC преобразователь MT3608 для питания извещателя
  8. Понижающий DC-DC преобразователь Mini-360 DC для питания ESP8266 
  9. Датчик температуры DS18B20.
  10. Алюминиевый корпус и внешняя Wi-Fi антенна (в моем случае)

Схема подключения и принцип работы:

Напряжение от источника питания 5в поступает на плату зарядки (TP4050) и через диод Шоттки на вход повышающего преобразователя (MT3608). На этот же вход, тоже через диод Шоттки поступает напряжение с выхода платы TP4050, только его величина уже равна напряжению на аккумуляторе. А так, как оно всегда меньше 5в (максимум 4,2), то при наличии питания от сети на вход повышающего преобразователя будет поступать питание от сетевого источника питания (5В), а при пропадании — моментально будет задействован аккумулятор.  Практика показывает бесперебойность питания при таких переключениях. С выхода MT3608 напряжение, величиной в 10 вольт поступает на вход питания пожарного извещателя и на DC-DC преобразователь MINI-360, который нужен для формирования 5в напряжения питания платы D1-Mini и для фантомного питания термодатчика DS18B20. Для контроля наличия сетевого питания, напряжение с  источника питания подается на вход D1-Mini GPIO-14 (D5) через делитель напряжения. Для контроля уровня заряда аккумулятора, напряжение с платы зарядки через делитель напряжения подается на аналоговый вход A0 (ADC0) платы D1-Mini.

С питанием разобрались. Теперь сигнальные линии. Выход аварии с пожарного извещателя через резистивный делитель подключен ко входу  GPIO-13 (D7) платы D1-Mini. А сигнальный вывод термодатчика DS18B20 подключен ко входу GPIO-5 (D1) платы D1 Mini. К нему же через резистор 4,7к подается напряжение 5В для обеспечения паразитного питания датчика.

Конструкция:

Температурный датчик размещен в корпусе пожарного извещателя, а все остальные компоненты разместились в алюминиевом корпусе от сгоревшего светодиодного драйвера. Т.к. корпус алюминиевый, для уверенного приема Wi-Fi, к ESP8266 пришлось подключить внешнюю антенну. Пожарный извещатель и корпус со всеми остальными компонентами соединен четырьмя проводами.

 

Прошивка ESP8266:

Использован проект WiFi-iot.com На скриншоте ниже отмечены необходимые опции. Подробности прошивки модуля можно узнать из статьи про MQTT, с тем лишь исключением, что для платы D1-Mini  не нужен внешний USB-UART, она имеет таковой уже на борту и подключается просто к USB.

После прошивки и подключения к Wi-Fi (это произойдет автоматически, если в конструкторе были заданы «Настройки по умолчанию») необходимо настроить модуль. Для начала на вкладке Main следует задать внятное имя, что бы потом его можно было просто найти в MajorDoMo, затем на закладке Hardware активировать DS18B20 (не забыть задать правильный GPIO) и аналоговый вход ADC. На закладке Servers настроить подключение к брокеру MQTT.

На вкладке GPIO настроить входы, на 1-wire отсканировать термодатчик, а на вкладке ADC активировать калибровочную таблицу и собственно ее создать (инструкцию искать на сайте wifi-iot), для того чтобы измерения АЦП (напряжение на аккумуляторе) перевести в удобоваримый вид.

Настройка MajorDoMo:

Для начала проверим передает ли наше устройство данные по MQTT. Для этого проследуем в Панель управления>Устройства>MQTT,  находим там наш пожарный извещатель и видим кучу пришедших значений, к которым мы еще вернемся.

Теперь  необходимо создать соответствующее Простое Устройство (ПУ), для этого идем в Панель управления > Устройства > Простые устройства. Здесь нам нужно создать 2 новых ПУ с типами: Датчик температуры и Датчик дыма. Автоматически создадутся связанные объекты, к свойствам которых нужно будет привязывать параметры полученные по MQTT от наших физических устройств.

Теперь вернемся к MQTT и привяжем получаемые данные к свойствам объектов. В первую очередь нас будут интересовать /FireSensor/input13 (сработка датчика) и /FireSensor/dsw1 (температура).

На остальные параметры так же можно настроить какую-то реакцию системы…

Оповещение:

Настройки оповещения выходят за рамки данной статьи, но она была бы не полной без описания базовых моментов. Итак, для начала необходимо настроить ПУ. Идем в Панель управления > Устройства > Простые устройства, выбираем пожарный датчик, на вкладке Настройки  «Допустимое время отсутствия данных» ставим 1. Переходим на вкладку Действия, где вписываем следующий код на PHP:

if (getGlobal("Smoke01.status") == 1) {
say('сработка пожарного датчика', 2);
}

Теперь проверка доступности модуля ESP8266. Делается это посредством свойства Alive, объекта Smoke01, но для того, что бы можно было привязать какое-то действие к событию смены состояния свойства alive, необходимо добавить соответствующий метод в родительском объекте. Итак, идем в Панель управления > Объекты > SDevices и жмем кнопку редактировать, а затем на вкладке Методы добавляем новый метод AliveUpdate. Затем переходим в Свойства > Alive и в выпадающем списке «Запускать метод при изменении» выбираем AliveUpdate.

Теперь переходим в наш объект: Панель управления > Объекты > SDevices > Ssmoke > Smoke01, где на вкладке методы нажимаем кнопку «настроить» напротив метода AliveUpdate. В поле «Код» вписываем следующее:

if ($params['NEW_VALUE'] == $params['OLD_VALUE']) return;
if (getGlobal("Smoke01.alive") == 0) {
say('пожарный датчик не доступен', 2);
}
else {
say('пожарный датчик снова доступен', 2);
}

Теперь о главном 🙂 Как же эти оповещения будут приходить к вам на телефон? А вот тут вариантов масса, лично я для себя выбрал сервис Notify.Event. Необходимо в нем зарегистрироваться, создать свой канал, затем в настройках канала добавить источник нотификаций API и получить ключ API. Затем установить в MajorDoMo из маркета дополнений одноименный модуль, в настройках которого необходимо ввести полученный ключ API. И в конце-концов необходимо вернуться в панель управления на сайте Notify.Event и подписаться на свой канал любым доступным мессенджером (вайбер, телеграмм и т.п.). Таким образом, в виде оповещений будет приходить всё, что Алиса в MajorDoMo проговаривает голосом.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *