Skip to content

Latest commit

 

History

History
174 lines (103 loc) · 14.9 KB

Readme.md

File metadata and controls

174 lines (103 loc) · 14.9 KB

[[toc]]

Контроль температуры удаленных объектов

Все знакомы с проблемами ЖКХ в потрепанных жилых фондах. Мой дом не исключение. Зимой холодно и при отключениях воды завоздушиваются стояки ГВС. И в том и другом случае достаточно сложно доказывать УК, что температуры не соответствуют нормам. Особенно отопления.

Для контроля решено было использовать 4-х канальное реле Modkam, которое существует в формате 4-х канального датчика температуры. Устройство на базе универсально прошивки для zigbee устройств PTVO. Купил я его здесь. Устройство доставило мне массу проблем: то его не спаришь, то оно отваливается. Рекомендации вендора не помогали и я забросил проект в долгий ящик.

После публикации статьи о навыке Алисы для умного дома Яндекс, который я разработал еще в начале 2023 года, один из пользователей отметил, что пользуется навыком WQTT. Я попробовал навык в работе. И, там же, в документации, наткнулся на проект ESP Easy - это универсальная прошивка, но для устройств на базе ESP.

В итоге, на базе ESP получил решение, которое умеет:

  • собирать данные с 6-ти сенсоров типа DS18B20, подключенных по витой паре на шлейфе до 25 метров
  • отправлять данные на SLS и mqtt и далее в Алису для сбора исторических данных

Далее: сенсор - это один сенсор DS18B20, датчик - это группа сенсоров.

Let's begin

Что в итоге

Железо

В проекте были использованы:

Сенсоры подключены к ESP по классической схеме с подтягивающим резистором 4k7 двух-парным кабелем типа витая пара. По одной паре питание, по другой - сигнал. Питание всей схемы от источника +5v - обычный USB-зарядник. Сигнал на GPIO-17.

Сенсоры крепил к стоякам через термоинтерфейс с очисткой от краски. Где-то на изоленту, где-то на кабельные стяжки.

Настройка ESP

По прошивке ESP достаточно много материала в сети, в том числе и в рунете. Поэтому останавливаться на этом не будем.

Настройка сенсоров

Сенсоров подключаются через плагин Environment - 1-Wire Temperature. Данный плагин поддерживает до 4-х сенсоров и позволяет передавать данные на контроллер одним пакетом или показание каждого сенсора отдельными пакетами. Правильно подключенные сенсоры прошивка определяет и их можно выбирать из списка. ID конкретных сенсоров можно определять как самой ESPEasy, подключая их по одному или изменяя их температуру и считывая показания в прошивке, так и с помощью различных тестеров типа GM328.

Для добавления датчиков переходим на вкладку Devices, нажимаем кнопку Add, заполняем:

  • Device - выбрать плагин Environment - 1-Wire Temperature
  • Name - желаемое имя. Поскольку плагин поддерживает до 4 сенсоров, я распределил их по назначению: 4 на отопление и 2 на ГВС
  • Enabled - включить обработку датчика
  • GPIO ← TX - pin, к которому подключены сенсоры DS18B20
  • Number 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 - количество знаков после запятой в передаваемом значении

В итоге получаем такой датчик:

Настройка передачи на SLS

ESPEasy умеет отправлять собираемые данные на различные контроллеры по готовым совместимым с ними протоколам, а также можно настроить отправку самостоятельно на вкладке Rules

Передавать данные я решил на SLS в Объект типа JSON. Это нужно для последующего вывода датчиков на дашборд SLS и возможно сбора данных в Influx DB - это если меня не устроит как собираются исторические данные в Алисе. Наработки на этот счет у меня уже есть. Кстати, в Influx ESPEasy данные отправлять умеет сама.

Настройка соединения с брокером MQTT

Поскольку из ESPEasy данные передавать на MQTT я не собираюсь, то контроллеры настраивать нет необходимости. Однако, разберем как это делается.

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

Для добавления контроллера переходим на вкладку Controllers, нажимаем кнопку Add, заполняем и сохраняем по кнопке Submit:

Настройка объектов в SLS

в скрипт 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 в объекты SLS

Для формирования 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 по изменению объектов.

Интеграция SLS с Алисой через навык WQTT

Для интеграции с Алисой я использую свой навык Умный фунтик. Также, из существующих навыков мне понравился сервис WQTT, благодаря которому я и познакомился с ESPEasy. Данный проект будем интегрировать через него.

WQTT - это ни что иное как облачный брокер Mosquitto с интеграцией в голосовые ассистенты. На данный момент (22.11.2023) доступны Алиса и Маруся.

Настройка SLS

В меню Settings -> Link -> MQTT Setup прописать реквизиты доступа к брокеру, полученные при регистрации и доступные на странице брокера.

Настройка WQTT

На странице Настройки добавляем устройство по кнопке Добавить устройство -> из выпадающего списка выбрать устройство типа Датчик. Далее заполнить Название датчика и комнату, в которой он установлен. Для удобства я создал виртуальную комнату Контроль ЖКУ Комнаты, если их нет, создаются, а существующее доступны к выбору из выпадающего списка.

Сохраняем и продолжаем.

В созданный датчик добавляем сенсоры по кнопке Добавить. Тип датчика выбираем Float и прописываем топик вида ZigbeeSLS/obj/heating$.t_kitchen, где heating - это топик, а t_kitchen - это значение в JSON payload

Сохраняем сенсор и сохраняем датчик. Также добавляем остальные датчики

На дашборде получаем:

Добавление датчиков в УДЯ

Enjoy ;)


PS Помогу разобраться с премудростями автоматизиции в SLS. В режиме удаленного доступа покажу и расскажу как реализовать Ваши идеи.

Также, Вы можете поддержать меня здесь. Любые суммы, даже самые маленькие мотивируют на разработку чего-то нового и улучшение уже существующего.