гаджеты и прочие приборы,  дом,  софт,  стройка

Подключение модулей Sonoff к OpenHAB через MQTT

Для автоматизации дома я использую разные стандарты и подсистемы. Наиболее критичная — отопление управляется через KNX, остальные системы шлюзуюся в проводной Ethernet, где в том числе подаётся PoE питание от инвертора с парой 100Ач аккумуляторов. Однако, проводов не всегда хватает и появляются новые «хотелки» особенно в плане управления освещением, которое наименее критично, но всё же хочется иметь на нём некую логику управления. В частности, возникают точки куда просто совсем нет витой пары, например, беседка во дворе, но гирлянды там хочется включать не каждый день, например. Для этих целей я решил применить WiFi контроллеры Sonoff так как было понятно как их подружить с OpenHAB, который у меня отвечает за сценарии управления освещением в частности и служит платформой интеграции разных систем и стандартов. Сразу скажу, что у меня развёрнута WiFi сеть из 5 точек доступа бесшовным переключением и с них раздаётся 3 совсем разных сети. Одна из них DMZ, другая гостевая и третья внутренняя в двух диапазонах и так как все быстрые устройства живут в домашней сети на 5ГГц, то сеть 2,4 как раз годится для неспешных устройств и никаких гостей там не бывает. Ровно это стечение исходных данных подтолкнуло меня не париться с очередным протоколом (рассматривался ZigBee), а использовать готовую отлично работающую и всё покрывающую инфраструктуру.

Прошивка модулей

Для прошивки потребуется:

  • Скачать саму прошивку Sonoff/Tasmota отсюда, внимательно почитав что там написано;
  • USB-serial адаптер с возможностью выбора напряжения 3,3 Вольта (это важно ибо пишут, что подача 5 Вольт может быть фатальна) и выводом на провода. Моём случае это BTE13-009 купленный когда-то давно на Ali;
  • ПО для прошивки контроллера;
  • На всякий случай терминальная программа для доступа к консоли (для MacOS я использовал вот эту, но есть много иных). Так же через консоль можно поменять часовую зону и установить время отличное от NTP (установка по умолчанию) команда «timezone HH:MM». Впрочем, команды можно и иначе передавать контроллерам https://github.com/arendst/Sonoff-Tasmota/wiki/Commands.

Если на плате нет разъёма, то надо его припаять. и подключать согласно разметке на плате. В частности на контроллерах TH10 разъёма нет, а вот на 4CH он есть сразу с завода.

GND подключаем к GND, VCC3,3 к VCC3,3, а вот TX к RX и наоборот RX к ТX, с последними может быть путаница, но их переключение безболезненно. После подачи питания контроллеры Sonoff начинают равномерно мигать синим светодиодом. Полезно после включения проверить работает ли управление кнопкой по звуку реле и индикации красного светодиода.

  • Запускаем программу NodeMCU, в ней указываем нужный порт USB-Serial, скорость 115200, режим прошивки DOUT (годится только он), включаем стирание flash-памяти.
  • Отключаем питание, например, выдернув один проводок;
  • Нажимаем кнопку (любую);
  • Подключаем питание;
  • Отпускаем кнопку;
  • Запускаем процесс прошивки в программе.

Использование кнопок в прошивке описано тут.

Настройка модулей

После успешной прошивки устройство нужно перезагрузить выключением и включение питания (достаточно один проводок дёрнуть и обратно аккуратно воткнуть). Далее подключиться к контроллеру через WiFi сеть с названием sonoff-NNNN без пароля по адресу http://192.168.4.1. В меню настроек выбрать поиск сетей и выбрать нужную сеть для подключения или прописать SSID на память. Указать пароль для доступа к сети. После этого устройство перезагрузится и на консоль сообщит какой IP-адрес оно получило от DHCP-сервера. Можно смотреть на консоль, а можно найти устройство в списке выданных адресов DHCP-сервера по упоминанию Sonoff в имени хоста. Ну и можно сканером его найти. Ну и далее просто подключиться опять же к контроллеру броузером. переключаем в нём в разделе Modules нужный тип контроллера и проверим работоспособность кнопок что б быть уверенным, что всё работает штатно. Из замеченных глюков одним разом выбрать модель контроллера и подключенного датчика у меня не получилось, то есть модель датчика не запомнилась просто. Если есть внешний датчик, то надо проверить его после подключения. Данные с него отображаются вместе с индикацией переключателя.

Настройка MQTT

Сервер

По идее в OpenHAB есть свой read-only MQTT брокер и можно им ограничиться, но я решил поставить отдельный сервер на ту же машинку, где крутится OpenHAB (в моём случае это PasberyPi в некоем специальном исполнении. В качестве сервер а я использовал Mosquitto от Eclipse, который весьма популярен и есть в частности в репозитории raspbian. В комплекте с сервером идут и утилиты для тестирования как в качестве клиента, так и в качестве подписчика. Сами настройки сервер минимальны, разве что надо определиться с тем будет доступ по паролю или нет. Если совсем не хочется делать сеть локальной и автономной, то, конечно, же есть публичные сервисы и даже совершенно бесплатные, но лично я бы их использовал только для разработки и отладки, но никак не для боевого применения, конечно.

Контроллер

В конфигурации в разделе MQTT нужно указать параметры куда и как подключаться (я использую авторизованный доступ, так что, прописываю логин и пароль, но, к сожалению, шифрование тут не поддерживается, так что, можно и без пароля, конечно ибо по сути всё равно вся безопасность на уровне пароля от WiFi-сети получается ну и степенью изолированности сети определяется, конечно.

Так же полезно переименовать название MQTT-клиента (Client) и MQTT-топика (Topic) что бы идентифицировать устройство. Как вариант использование последних 6 цифр MAC-адреса, но можно пойти своим путём, конечно.

Результат я контролирую на консоли MQTT-сервера.

Конфигурация OpenHAB 2.4

Для удобства я делаю предварительные настройки в PaperUI, а правила и sitemap уже редактирую вручную.

Первым делом надо добавить AddOnns -> Bindings -> MQTT Binding. После этого нужно вручную добавить две сущности (дословно things переводится как «вещь», но мне кажется что «сущность» более точно отражает смысл в данном контексте): MQTT Broker и Generic MQTT Things. При добавлении брокера нужно указать адрес сервера, опционально раздел (вкладку) отображения (Location) для удобства и если необходимо, то параметры безопасности (логин пароль или сертификат). При настройке Generic MQTT Things нужно просто выбрать брокер и опционально раздел.

В Configuration -> Things найти Generic MQTT Things и там далее добавлять каналы (Channels) и внитри них уже компоненты (items). Название сущности (things) тут логично указывать своё. По задумке OpenHAB, точне SmartHome от Eclipse, сущность соответсвует физическому объекту, а каналы его свойствам, насколько я понимаю эти абстракции.

При создании Channels нужно указывать :

  • Тип канала, например, выключатель или число;
  • ID канала (произвольный, но лучше читаемый);
  • Название канала (label) для отображения;
  • MQTT топик для получения состояния можно сразу с шаблоном JSONPATH для выделения значений из JSON-ответов, например, «stat/sonoff-490666/RESULT:state:JSONPATH($.POWER3)«;
  • MQTT топик для отправки команд (я встречал примеры с явным указанием, что ON надо транслировать в ON, но и без них прекрасно работает), например, «cmnd/sonoff-492698/POWER3«;
  • не забыть нажать кнопку SAVE!!!

В случае если датчик выдаёт два или больше полезных значений, то под каждое нужно создавать канал в котором указывать JSONPATH для выделения искомого значения из JSON. Например, это температура «tele/sonoff-3314C0/SENSOR:state:JSONPATH:$.AM2301.Temperature«, а это влажность «tele/sonoff-3314C0/SENSOR:state:JSONPATH:$.AM2301.Humidity» с того же датчика. Посмотреть что сообщает клиент брокеру можно используя вот такую утилиту, которая ставится вместе с сервером, в данном случае с Mosquitto: «mosquitto_sub -h 192.168.51.7 -t +/sonoff-3314C0/# -v» тут вот контроллер присылал примерно такое: «tele/sonoff-3314C0/SENSOR {«Time»:»2019-04-22T13:04:19″,»AM2301″:{«Temperature»:26.5,»Humidity»:42.2},»TempUnit»:»C»}«. Если есть сомнения в JSONPATH шаблонах, то их легко проверить на сайте https://jsonpath.curiousconcept.com/ где указывается как исходный JSON, шаблон и получаемый результат. Важное замечание: OpenHAB обрабатывает значения по мере их поступления, то есть после того как вы написали правило нужно ещё и подождать пока контроллер отправит сообщение брокеру с данными!

После создания каналов нужно к каждому из них привязать items. Для этого нужно нажать на синий кружок если у него центр или на скобки вверх-вниз после иконки корзины справа в строке канала. Профиль указываем по умолчанию, а в меню «Please select the item to link:» выбираем » + Create new item…» и далее выбираем имя items (я делаю читаемые имена так как sitemap редактирую в текстовом виде), Важно указать отображаемое название чтобы потом не путаться, у и тип тут тоже указывается. По идее можно к одному каналу создавать несколько items с разными типами, но на мой взгляд удобнее и логичнее создавать новые каналы если много переменных.

После создания Item в разделе Control PaperUI появляется панелька соответствующая сущности со всеми созданными в ней компонентами. Где их можно уже наблюдать или управлять реле.

На этом настройка закончена и можно оформлять внешний вид и сценарии управления.

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

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

Спасибо!

Теперь редакторы в курсе.