Доброго времени. К написанию данной статьи подтолкнула ситуация, что вроде элементарная задача получить данные с установленного модуля Sprut.hub в родительский WirenBoard, вызвала определенные сложности. Поиском находится разрозненная информация. В чатах вопрос всплывал не единожды. Пока в памяти свежо, как это делается, и что бы потом самому не вспоминать, описал поэтапно, что, где и как.
Исходные данные:
Контроллер WirenBoard 7. Версия ПО на момент написания wb-2401.
Установленный модуль расширения Sprut.stick ZigBee
Термостат c али с интерфейсом Zigbee.
Контроллер настроен, Sprut настроен, термостат к Sprut подключен и управляется.
Задача: организовать управление отоплением в дачном домике с помощью внешнего термостата.
Первое
В первую очередь необходимо в Sprut.hub в разделе «Мосты» http://ip_вашего_контроллера/bridges создать новый Мост. Для этого:
нажимаем плюсик в верхнем правом углу и выбираем пункт «Создать мост»,
в открывшемся окне выбираем Тип моста — «MQTT»,
указываем желаемое имя, к примеру «MQTTSPRUT».
После добавления, данный мост появляется в левой части в списке.
открываем настройки только что созданного моста (три точки),
редактируем (если необходимо) адрес и порт (я оставил у себя как есть),
на вкладке «Экспертные» правим Префикс (если необходимо).
Все, мост готов, устройства в него добавляются автоматически (если не отключили в пункте выше).
Второе
Проверяем, что необходимое устройство публикует информацию. Я использую MQTT Explorer, очень удобное, бесплатное приложение. Для этого:
запускаем MQTT Explorer,
создаем новое подключение к своем серверу, (указываем IP адрес, порт, логин/пароль (если установлен).
Если все сделано правильно, то увидим сервер и выпадающий список

Раскрываем выпадающий список и ищем в нем необходимое нам устройство, и нужные параметры. Вот так это выглядит у меня.

При выделение нужного параметра, программа в правой части показывает ссылку на топик данного параметра, которые нам пригодится в правилах WirenBoard.
Третье
Переходим на сам контроллер и создаем новое правило.
Я всегда стараюсь по возможности присваивать устройства, ссылки на топики переменным, что бы в случаи замены устройства, достаточно один раз его было поправить в переменной, а сам код не трогать.
Объявляем две переменные:
TargetTemperatura — целевая температура нашего виртуального термостата, с которой мы уже будем работать при управление отоплением,
MQTT_TargetTemperatura - это ссылка на топик с нужным параметром физического термостата, который подключен к Sprut.hub. Ссылка взять из MQTT Explorer.
var TargetTemperatura = «01_virtual_termostat/TemperaturaTarget»; var MQTT_TargetTemperatura = «Sprut.hub/accessories/35/13/18»;
- задаем описание виртуального термостата:
var Termostat = { TemperaturaTarget: { title: «Целевая температура», type: «range», order: 0, value: 22, max: 35, min: 10 }, };
создаем опрос с получением данных из физического термостата, чтением его топика и записываем полученные значения в виртуальный термостат:
trackMqtt(MQTT_TargetTemperatura, function(message){ dev[«01_VirtualTermostat/TemperaturaTarget»] = parseInt(message.value); });
создаем виртуальный термостат:
defineVirtualDevice('01_VirtualTermostat', { title: 'Управление отоплением', cells: Termostat, });
Сохраняем правило. Переходим на страницу Устройства в WirenBoard. Если все сделано правильно, то там должно появиться новое устройство «Управление отоплением» с параметром «Целевая температура». При изменении целевой температуры на физическом термостате, она меняется и в виртуальном.
Если необходимо обратная передача данных (при изменении целевой температуры виртуального термотстата), необходимо добавить процедуру:
defineRule(»Целевая температура», { whenChanged: «01_virtual_termostat/TemperaturaTarget», then: function (newValue) { dev[MQTT_TargetTemperatura] = dev[«11_VirtualTermostat/TemperaturaTarget»]; } });
Но с моим термостатом это не работает. Пока не разобрался в чем дело. Или сам термостат (вряд ли), или что-то сделал не так.
Собственно все. Спасибо.
