Интеграция WB с ESP8266 через MQTT

Имеется некое самодельное устройство на ESP8266 , которое управляет теплым полом (считывает показания с датчиков пола и включает клапана на гребенке). Хочу подвязать все это дело к WB.
Подскажите правильную последовательность действий.
Итак, я хочу , чтобы все температурные значения с ESP транслировались в топики MQTT , а также, чтобы я мог управлять клапанами на ESP через правила WB.
Также я хочу видеть температуры/управлять клапанами на вкладке Devices/Widgets.
Общение ESP с WB будет проходить по WiFi посредством MQTT. (если кто подскажет стабильную либу + RS-485 железяку для Modbus RTU для нормальной работы Modbus slave под ESP8266 Wemos буду признателен. Переделывать под ESP32 лень)

Насколько я понимаю, действовать я должен так: для ESP я компилирую код, который будет подключаться по TCP к MQTT серверу WB и обмениваться сообщениями, с этим вопросов нет, тут все просто, если надо будет кому, я потом опишу.

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

Пробовал это делать через Rules через defineVirtualDevice ,но тут 2 проблемы:
1). Во первых если я задаю , к примеру, значение через
mosquitto_pub -t "/devices/ESP/controls/Temperature" -m "22"
, то канал в “MQTT Channels” и отладка по mosquitto_sub обновляется нормально, но событие whenChanged не срабатывает. Хотя, если я вешаю событие на type: “switch”,
mosquitto_pub -t "/devices/ESP/controls/sw/on" -m "1"
то whenChanged работает как надо

код правил вот такой:

defineVirtualDevice("ESP", {
    title: "Отопление",
    cells: {
        "Temperature": {
            type: "Temperature",
            },
        "sw": {
            type: "switch",
            value: false,
        }
    }
})

defineRule("test_esp", {
  whenChanged: "ESP/Temperature",
  then: function (newValue, devName, cellName) {
            log.info("TEST {} ",newValue);
    }
})

2). И второе, если я задаю defineVirtualDevice чисто в Rules, то не вижу контролов в Devices/Widgets. Как мне его определить глобально в систему? Через wb-mqtt-serial.conf ?

Оказывается нужна была перезагрузка. :slight_smile: Устройство появилось в Devices, могу теперь взаимодествовать с ним.

Однако проблему №1 не могу победить. Событие whenChanged срабатывает только на switch , остальные типы при попытке изменения извне игнорирует.
Хотя , если сделать поле radonly:false или Range, при изменении со вкладки Devices сработка whenChanged идет. А вот через mosquitto_pub - никак.

Фуф, ура!, и это победил. Оказывается надо так: :slight_smile:
mosquitto_pub -t "/devices/ESP/controls/Temperature/on" -m 12

почему-то думал, что on это только для булевых switch-ей

1 лайк

В общем получилось связать мою железяку с WB, общение в обе стороны работает отлично. Температура с esp шки публикуется в соответствующие топики WB. Также esp подписывается на switch топики и ждет от WB команды, а при получении парсит и включает/выключает соотвествующий клапан.

Если кому надо, прикрепляю мои куски кода
правила для WB создающее виртуальное устройство (нужна перезагрузка контроллера)
danfos_rule.js (1.4 КБ)

мой кусок кода для контроллера wemos lite esp8266
mqtt.ino (3.4 КБ)

для работы с mqtt взял либу PubSubClient

для platformio установка: knolleary/PubSubClient"
pio lib install “knolleary/PubSubClient”

События на температуры из ESPшки нормально отрабатывают, правда это уже небольшой рудимент. У меня есть датчики и в стяжке в каждой комнате, и вверху . Раньше контроллер управлял температурой на основании данных из стяжки, теперь буду ориентироваться на 1wire датчики под потолком, которые подключены к WB. И WB теперь у меня управляет и теплыми полами и радиаторами отопления. Такой вот умный дом. :slight_smile:
Теперь можно бесконечно играться комбинируя отопление радиаторами и теплыми полами. Радиаторы быстро нагоняют температуру воздуха, а теплые полы дольше её поддерживают. Такая схема изначально не планировалась, просто так получилось.

В целом получается достаточно бюджетное решение для умного отопления. В последствии заменю ESPшку на WB, просто лень пока там все перекоммутировать.
Кстати а вот что мне нужно купить чтобы снимать температуру с 8 термо датчиков NTC (danfos) и управлять 8ю 24в клапанами ?
Сейчас радиаторными клапанами я управляю через [WBIO-DO-HS-8] , но к теплым полам у меня доступ только из гребенки там только RS-485. Брать переходник или есть какое твердотельное modbus реле на 8 портов ?

1 лайк

Нет, перезагрузка точно не нужна. После сохранения сткрипта через web-интерфейс - wb-rules перезапускается и правло начинает работать сразу. Если создаете правило копированием.редактированием файла - достаточно перезапустить wb-rules.

Для NTC у нас есть Модуль аналоговых входов WB-MAI11 — Wiren Board
Для клапанов - оптимально применить Модуль дискретных выходов WBIO-DO-HS-8 — Wiren Board или Модуль дискретных выходов типа «сухой контакт» WBIO-DO-SSR-8 — Wiren Board
Они не щелкают. Ну и можно сделать неполное открытие “медленным ШИМ”. через WB-MIO сейчас Modbus твердотельных нет.

Не могли бы вы загрузить данное правило сменив ему расширение файла?
.js не получается скачать, а посмотреть на ваше решение данной задачи очень хотелось бы.

1 лайк