Управление Тёплым полом на WB6 с помощью WBIO-DO-R10A-8

Здравствуйте!

Хочу настроить управление электрическим тёплым полом с помощью скрипта. Написал следующий код:

// Настройки
var relay = "wb-gpio/EXT1_R3A5"; // MQTT-канал реле
var minTemp = 30.0; // температура для включения
var maxTemp = 34.0; // температура для выключения
var tempSensor = "wb-w1/28-062370f5bcd8"; // ID датчика температуры

// Правило управления реле
defineRule("floor_heating_control", {
  whenChanged: tempSensor, // Срабатывает при изменении температуры
  then: function (newValue, devName, cellName) {
    var currentTemp = parseFloat(newValue); // Преобразуем значение в число
    if (currentTemp < minTemp) {
      dev[relay] = 1; // Включаем реле
      log.info("Реле включено. Температура: " + currentTemp + "°C");
    } else if (currentTemp > maxTemp) {
      dev[relay] = 0; // Выключаем реле
      log.info("Реле выключено. Температура: " + currentTemp + "°C");
    }
  }
});

// Логирование при старте
log.info("Скрипт управления реле загружен. Используется канал: " + relay);

Проблема: скрипт не может включить/выключить реле, хотя реле работает нормально при ручном управлении, например, через web UI или с помощью команды:

 mosquitto_pub -t "/devices/wb-gpio/controls/EXT1_R3A5/on" -m "1"
 mosquitto_pub -t "/devices/wb-gpio/controls/EXT1_R3A5/on" -m "0"

Реле меняет состояние на включено/выключено через эти команды, но скрипт не включает/выключает реле

Может быть, правило не имеет доступа к WBIO-DO-R10A-8 или к каналу wb-gpio/EXT1_R3A5? и другим. Почему скрипт не включает и не выключает реле?

Вот что пишут логи:

defineRule: floor_heating_control
Скрипт управления реле загружен. Используется канал: wb-gpio/EXT1_R3A5
Реле включено. Температура: 29.5°C
Реле включено. Температура: 29.562°C

Контроллер: Wirenboard 6.7.2
Версия прошивки: wb-2410

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

приложен диагностический архив, доступен только сотрудникам поддержки
(339,2 КБ)

Вы присваиваете целый тип булевой переменной. Так - не надо делать, можно конечно надеяться на автоматическое приведение типов - но это порочная практика, способная вызвать весьма нетривиальную отладку впоследствии.

Здравствуйте!

Спасибо за помощь, теперь понял, в чём была проблема.

Обновил код:

// Настройки
var relay = "wb-gpio/EXT1_R3A5"; // MQTT-канал реле
var minTemp = 30.0; // температура для включения
var maxTemp = 34.0; // температура для выключения
var tempSensor = "wb-w1/28-062370f5bcd8"; // ID датчика температуры

defineRule("floor_heating_control", {
  whenChanged: tempSensor,
  then: function (newValue, devName, cellName) {
    var currentTemp = parseFloat(newValue); // Преобразуем значение в число

    if (currentTemp < minTemp) {
      dev[relay] = true; 
      log.info("Реле включено. Температура: " + currentTemp + "°C");
    } else if (currentTemp > maxTemp) {
      dev[relay] = false; 
      log.info("Реле выключено. Температура: " + currentTemp + "°C");
    }
  }
});

// Логирование при старте
log.info("Скрипт управления реле загружен. Используется канал: " + relay);

Теперь реле включается и выключается автоматически.