Доброго времени. К написанию данной статьи подтолкнула ситуация, что вроде элементарная задача получить данные с установленного модуля 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/TemperaturaPolRoom»;
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»];
}
});
Но с моим термостатом это не работает. Пока не разобрался в чем дело. Или сам термостат (вряд ли), или что-то сделал не так.
Собственно все. Спасибо.