Доброго времени. К написанию данной статьи подтолкнула ситуация, что вроде элементарная задача получить данные с установленного модуля Sprut.hub в родительский WirenBoard, вызвала определенные сложности. Поиском находится разрозненная информация. В чатах вопрос всплывал не единожды. Пока в памяти свежо, как это делается, и что бы потом самому не вспоминать, описал поэтапно, что, где и как.

Исходные данные:

  1. Контроллер WirenBoard 7. Версия ПО на момент написания wb-2401.

  2. Установленный модуль расширения Sprut.stick ZigBee

  3. Термостат c али с интерфейсом Zigbee.

  4. Контроллер настроен, 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»];
 }
 });

Но с моим термостатом это не работает. Пока не разобрался в чем дело. Или сам термостат (вряд ли), или что-то сделал не так.

Собственно все. Спасибо.

Комментарии (0)