[[toc]]
Все знакомы с проблемами ЖКХ в потрепанных жилых фондах. Мой дом не исключение. Зимой холодно и при отключениях воды завоздушиваются стояки ГВС. И в том и другом случае достаточно сложно доказывать УК, что температуры не соответствуют нормам. Особенно отопления.
Для контроля решено было использовать 4-х канальное реле Modkam, которое существует в формате 4-х канального датчика температуры. Устройство на базе универсально прошивки для zigbee устройств PTVO. Купил я его здесь. Устройство доставило мне массу проблем: то его не спаришь, то оно отваливается. Рекомендации вендора не помогали и я забросил проект в долгий ящик.
После публикации статьи о навыке Алисы для умного дома Яндекс, который я разработал еще в начале 2023 года, один из пользователей отметил, что пользуется навыком WQTT. Я попробовал навык в работе. И, там же, в документации, наткнулся на проект ESP Easy - это универсальная прошивка, но для устройств на базе ESP.
В итоге, на базе ESP получил решение, которое умеет:
- собирать данные с 6-ти сенсоров типа DS18B20, подключенных по витой паре на шлейфе до 25 метров
- отправлять данные на SLS и mqtt и далее в Алису для сбора исторических данных
Далее: сенсор - это один сенсор DS18B20, датчик - это группа сенсоров.
Let's begin
В проекте были использованы:
- ESP-32S на отладочной плате DEVKIT v1
- сенсоры DS18B20
- контроллер умного дома SLS
Сенсоры подключены к ESP по классической схеме с подтягивающим резистором 4k7 двух-парным кабелем типа витая пара. По одной паре питание, по другой - сигнал. Питание всей схемы от источника +5v - обычный USB-зарядник. Сигнал на GPIO-17.
Сенсоры крепил к стоякам через термоинтерфейс с очисткой от краски. Где-то на изоленту, где-то на кабельные стяжки.
По прошивке ESP достаточно много материала в сети, в том числе и в рунете. Поэтому останавливаться на этом не будем.
Сенсоров подключаются через плагин Environment - 1-Wire Temperature. Данный плагин поддерживает до 4-х сенсоров и позволяет передавать данные на контроллер одним пакетом или показание каждого сенсора отдельными пакетами. Правильно подключенные сенсоры прошивка определяет и их можно выбирать из списка. ID конкретных сенсоров можно определять как самой ESPEasy, подключая их по одному или изменяя их температуру и считывая показания в прошивке, так и с помощью различных тестеров типа GM328.
Для добавления датчиков переходим на вкладку Devices
, нажимаем кнопку Add
, заполняем:
Device
- выбрать плагинEnvironment - 1-Wire Temperature
Name
- желаемое имя. Поскольку плагин поддерживает до 4 сенсоров, я распределил их по назначению: 4 на отопление и 2 на ГВСEnabled
- включить обработку датчикаGPIO ← TX
- pin, к которому подключены сенсоры DS18B20Number Output Values
- количество сенсоров на данном плагине. В моем случае 4 -Quad
и 2 -Dual
Single event with all values
- выкл - отдельное событие по каждому сенсору; вкл - значения всех сенсоры в одном событииSend to Controller
- отправка на контроллер умного дома, настроенный на первой позиции на вкладке Controllers. Например mqtt брокер.Interval
- желаемый интервал обработки в сек.
Нажимаем кнопку Submit
, после чего подгружаются датчики и их можно прописать в полях Device Address 1-4
. Также, если на одном пине только один датчик, можно включить опцию Auto Select Sensor
для автоматического определения подключенного сенсора.
В разделе Values
можно настроить:
Name
- имя сенсораFormula
- пересчет значения. Например, для калибровки или для приведения ед. измерения.Stats
- сохранять статистику. ESPEasy может хранить до 64 сэмплов на значение и строить графики, считать различные агрегатные функции: сумма, среднее, минимальное, максимальное и т.п.Decimals
- количество знаков после запятой в передаваемом значении
В итоге получаем такой датчик:
ESPEasy умеет отправлять собираемые данные на различные контроллеры по готовым совместимым с ними протоколам, а также можно настроить отправку самостоятельно на вкладке Rules
Передавать данные я решил на SLS в Объект типа JSON. Это нужно для последующего вывода датчиков на дашборд SLS и возможно сбора данных в Influx DB - это если меня не устроит как собираются исторические данные в Алисе. Наработки на этот счет у меня уже есть. Кстати, в Influx ESPEasy данные отправлять умеет сама.
Поскольку из ESPEasy данные передавать на MQTT я не собираюсь, то контроллеры настраивать нет необходимости. Однако, разберем как это делается.
Напомню, что для передачи значений на контроллер из плагина, контроллер должен быть первым в списке.
Для добавления контроллера переходим на вкладку Controllers, нажимаем кнопку Add
, заполняем и сохраняем по кнопке Submit
:
в скрипт init.lua
добавить код:
obj.setType('water', 'JSON') -- создать объект с типом JSON
obj.setType('heating', 'JSON')
obj.setShare('water', true) -- включить передачу на MQTT брокер
obj.setShare('heating', true)
obj.set('water', '{}') -- задать начальное значение для совместимости с некоторыми UI
obj.set('heating', '{}')
Для формирования JSON будем использовать подсистему правил ESPEasy.
На вкладке Tools
нажимаем кнопку Advanced Settings
и включаем работу правил
На вкладке Rules пишем правила:
on water#All do
//Publish,%sysname%/water,'{"name":"{substring:0:5:%eventname%}","t_toilet":%eventvalue1%,"t_kitchen":%eventvalue2%}'
PostToHTTP,http://192.168.1.247/api/obj?token=slsAPItoken&name=water&value={"t_toilet":%eventvalue1%%2C"t_kitchen":%eventvalue2%%2C"name":"{substring:0:5:%eventname%}"}
endon
on heating#All do
//Publish,%sysname%/heating,'{"name":"{substring:0:7:%eventname%}","t_zal":%eventvalue1%,"t_kitchen":%eventvalue2%,"t_kinder":%eventvalue3%}'
PostToHTTP,http://192.168.1.247/api/obj?token=slsAPItoken&name=heating&value={"t_zal":%eventvalue1%%2C"t_kitchen":%eventvalue2%%2C"t_kinder":%eventvalue3%}
endon
Правила отправляют данные с датчиков в объекты SLS посредством функции obj.set(). Также, в коде можно видеть закомментированные строчки кода Publish...
- этим кодом данные можно напрямую отправлять на настроенный MQTT контроллер. В моем случае на MQTT данные отправляет SLS по изменению объектов.
Для интеграции с Алисой я использую свой навык Умный фунтик. Также, из существующих навыков мне понравился сервис WQTT, благодаря которому я и познакомился с ESPEasy. Данный проект будем интегрировать через него.
WQTT - это ни что иное как облачный брокер Mosquitto с интеграцией в голосовые ассистенты. На данный момент (22.11.2023) доступны Алиса и Маруся.
В меню Settings
-> Link
-> MQTT Setup
прописать реквизиты доступа к брокеру, полученные при регистрации и доступные на странице брокера.
На странице Настройки добавляем устройство по кнопке Добавить устройство
-> из выпадающего списка выбрать устройство типа Датчик. Далее заполнить Название датчика и комнату, в которой он установлен. Для удобства я создал виртуальную комнату Контроль ЖКУ
Комнаты, если их нет, создаются, а существующее доступны к выбору из выпадающего списка.
Сохраняем и продолжаем.
В созданный датчик добавляем сенсоры по кнопке Добавить
. Тип датчика выбираем Float
и прописываем топик вида ZigbeeSLS/obj/heating$.t_kitchen
, где heating
- это топик, а t_kitchen
- это значение в JSON payload
Сохраняем сенсор и сохраняем датчик. Также добавляем остальные датчики
На дашборде получаем:
Enjoy ;)
PS Помогу разобраться с премудростями автоматизиции в SLS. В режиме удаленного доступа покажу и расскажу как реализовать Ваши идеи.
Также, Вы можете поддержать меня здесь. Любые суммы, даже самые маленькие мотивируют на разработку чего-то нового и улучшение уже существующего.