Статья

Сенсорная панель с подключением по ModBus

Введение

Когда в проекте моего умного дома встал вопрос по управлению электрическим тёплым полом, то появилось сразу много вопросов, как это делать. В планировке было заложено четыре контура тёплого пола – кухня, ванная, холл и прихожая. Все контуры расположены очень близко друг от друга, поэтому удобнее было бы управлять ими всеми с одной точки, расположенной в холле. Самым простым решением было бы расположить четыре панели управления и на каждую из них завести датчик и реле. Городить «батарею» одинаковых датчиков не хотелось, была предпринята попытка всё завести в одно устройство. В процессе было решено отказаться от регулировки температуры с панели управления, а датчики по 1-wire завести напрямую в WirenBoard. От управления требовалась возможность включать/выключать пол и показывать его текущее состояние. При поиске решения для управления была найдена статья Николая Дубровна на Хабре от 2018 года. В статье описывалась сенсорная панель модели 15D от компании Shenzhen GTD IOT Technology. После прочтения, решил заказать себе аналогичную на Alibaba.

О панели

К достоинствам панели можно отнести:

Вполне симпатичный дизайн в белом или чёрном цвете.
Подключение по ModBus RTU.

Возможность сделать панель на 2, 3, 4, 6, 8 или 10 кнопок (плюс любые другие надписи).

Возможность кастомизации иконок и надписей под ними (русский текст сделали без проблем).
Фоновая подсветка панели.
Отдельные цветовые индикаторы на каждую кнопку.Питание 12-24В.

Установка в стандартный китайский квадратный подрозетник (для панелей до 8 кнопок).

Панели изначально ориентированы на обустройство систем в отелях или больших домах, но кастомизация творит чудеса. После обсуждения с менеджером, был сделан заказ и рисунок-макет на панель белого цвета на 4 кнопки, с подсветкой лунного цвета и индикаторами красного. Заказ оплатил через PayPal. Через несколько дней панель была готова и после финального подтверждения по фотографии отправилась ко мне через EMS. В итоге ко мне приехала вот такая панель.

Для подключения на WirenBoard был выделен отдельный второй порт RS-485 с параметрами:

скорость передачи данных - 19200 бит/с;количество передаваемых бит – 8;количество стоповых бит – 1;контроль чётности – нет проверки.

Регистры получены из скромного pdf-документа от производителя:

Все кнопки могут работать в двух режимах, в зависимости от регистра 47:

Режим переключателя. После каждого нажатия, значение регистра 0-3 меняется с 0 на 1 и обратно.

Режим «Clear On Read». В данном режиме, после нажатия, значение регистра меняется с 0 на 1, и возвращается автоматически в 0 после опроса по Modbus.

Режим работы светодиодов управляются отдельно регистрами 30-33. При установке в 0, светодиоды зажигаются автоматически после нажатия на время, указанное в регистре 48. При установке в 1, управляются отдельно регистрами 10-13.

Для моего назначения был нужен режим переключения и ручное управление светодиодами, так что регистры 30-33 и 47 были поменяны в значение 1 через командную строку. Значение этих регистров оказались энергонезависимым и больше их править не пришлось.

Подключение к WirenBoard

Для интеграции в WirenBoard был написан файл описания и закинут в /usr/share/wb-mqtt-serial/templates.

{ "device_type": "switch-md15", "device": { "name": "switch-md15", "id": "md15", "enabled": true, "channels": [{ "name": "Switch1", "reg_type": "holding", "address": "0x00", "type": "switch" }, { "name": "Switch2", "reg_type": "holding", "address": "0x01", "type": "switch" }, { "name": "Switch3", "reg_type": "holding", "address": "0x02", "type": "switch" }, { "name": "Switch4", "reg_type": "holding", "address": "0x03", "type": "switch" }, { "name": "LED1", "reg_type": "holding", "address": "0x0a", "type": "switch" }, { "name": "LED2", "reg_type": "holding", "address": "0x0b", "type": "switch" }, { "name": "LED3", "reg_type": "holding", "address": "0x0c", "type": "switch" }, { "name": "LED4", "reg_type": "holding", "address": "0x0d", "type": "switch" }, { "name": "Backlight", "reg_type": "holding", "address": "0x18", "type": "switch" } ] } }

В настройках порта девайс занял свое место на порту RS-485-2. В процессе установки выяснилось, что нужно поставить задержку между чтением регистров в 2000 мкс в скрытых настройках подключенного устройства на порту, иначе панель просто не успевала обрабатывать запросы и WirenBoard её терял.

Описывать подключение датчиков температуры и настройку скриптов для включения/выключения реле, к которому подключены маты электрического тёплого пола, не буду. Каждому виднее, как это сделать. Я использовал Node-RED.

Подключение к Sprut.Hub

Для этого, в отличии и WirenBoard, не пришлось писать файл описания, так как панель уже поддерживается в СпрутХаб начиная с версии 1.6.5.

Поскольку СпрутХаб изначально сделан на автоматический опрос устройств ModBus и добавлении его по регистру-идентификатору, но увы мир не идеален и моя панель не содержит идентификатор, был сделан файл-заглушка и закинут в папку /mnt/data/makesimple/.SprutHub/data/Controllers/ModBus/2/Predefined.json

Ждём веб интерфейс, который позволит добавлять такие неидеальные девайсы без конфигов вообще.

[ { "id": "141", "manufacturer": "GTD", "model": "MD-15" } ]

Выводы

В итоге я получил то, что хотел - красивое и простое управление всеми четырьмя контурами тёплых полов и индикацию их состояния. Да, ModBus накладывает кучу ограничений:

задержки в реакции из-за поллинга;

связанная с этим плохая реализация двойного или длительного нажатия;

ограничение по количеству устройств на шине, иначе они просто не будут успевать опрашиваться и будет еще более дикая задержка.

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


Видео работы не хватает прям =(

Возможно ли менять параметры связи для панели по RS-485?
boudrate, parity, stopbits...

Скорость - да (смотри регистр 50), остальное - нет. 


Вернуться назад

Устройства


Вернуться назад