Проблема с управлением через MQTT топики

Добрый день! Подскажите пожалуйста, в чем может быть проблема?
У меня написан сценарий автомазизации. При отправке команды по заданию нового значения Tmax (Температура ВЫКЛ. тепловентилятора) с помощью MQTT, оно сохраняется и отображается на Веб-интерфейсе контроллера, но правила по регулированию температуры перестают работать. (По сценарию тепловентилятор должен отключиться по достижению определенной температуры) Если же задать значение Tmax (Температура ВЫКЛ. тепловентилятора) через Веб-интерфейс, то сценарий срабатывает.
Ниже прилагаю код автоматизации и скриншот с подпиской на топик и отправкой нового значения, а так же версией контроллера.

    title: 'Автоматизация',
    cells: {
        Alarm1: {
            type: 'switch',
            title: 'Тепловентилятор',
            value: false,
            readonly: false,
            order: 2,
        },
        Alarm2: {
            type: 'switch',
            title: 'Сплит-система',
            value: false,
            readonly: false,
            order: 1,
        },
        Tmax: {
            type: 'range',
            title: 'Температура ВЫКЛ. тепловентилятора',
            value: 9,
            max: 50,
            min: -30,
            order: 3,
            readonly: false,
        },
        Tmin: {
            type: 'range',
            title: 'Температура ВКЛ. тепловентилятора',
            value: 4,
            max: 40,
            min: -30,
            order: 4,
            readonly: false,
        },
      Alarm3: {
            type: 'switch',
            title: 'Аварийное ВЫКЛ. тепловентилятора',
            value: false,
            readonly: false,
            order: 5,
        }
    }
});

var timerId = null; 
var timerActive = false; 

var fanHeaterMainSensor = defineRule('fanHeaterMainSensor', {
    whenChanged: ["wb-ms_112/Temperature"],
    then: function () {
        if (dev["wb-ms_112/Temperature"] < dev['Automation/Tmin'] && !timerActive) {
            timerActive = true;
            dev["wb-gpio/EXT1_K2"] = true;
            timerId = setTimeout(function () {
                dev["wb-gpio/EXT1_K2"] = false;
                timerActive = false;
            }, 1800000);
        }
        if (dev["wb-ms_112/Temperature"] > dev['Automation/Tmax']) {
            dev["wb-gpio/EXT1_K2"] = false; 
            if (timerActive) {
                clearTimeout(timerId); 
                timerActive = false; 
            }
        }
    },
});

var fanHeaterReservedSensor = defineRule('fanHeaterReservedSensor', {
    whenChanged: ["wb-msw-v4_103/Temperature"],
    then: function () { 
        if (dev["wb-msw-v4_103/Temperature"] < dev['Automation/Tmin'] && !timerActive) {
            timerActive = true;
            dev["wb-gpio/EXT1_K2"] = true;
            timerId = setTimeout(function () {
                dev["wb-gpio/EXT1_K2"] = false;
                timerActive = false;
            }, 1800000); 
        }
        if (dev["wb-msw-v4_103/Temperature"] > dev['Automation/Tmax']) {
            dev["wb-gpio/EXT1_K2"] = false; 
            if (timerActive) {
                clearTimeout(timerId); 
                timerActive = false; 
            }
        }
    },
});

disableRule(fanHeaterReservedSensor);

trackMqtt("/devices/wb-ms_112/controls/Temperature/meta/error", function (message) {
    log.info("name: {}, value: {}".format(message.topic, message.value))
    if (message.value == "r") {
      disableRule(fanHeaterMainSensor);
      enableRule(fanHeaterReservedSensor);
    }
    if (message.value == "") {
      enableRule(fanHeaterMainSensor);
      disableRule(fanHeaterReservedSensor);
    }
});

trackMqtt("/devices/Automation/controls/Alarm3", function (message) {
    log.info("name: {}, value: {}".format(message.topic, message.value))
    if (message.value == "1") {
       dev["wb-gpio/EXT1_K2"] = false;
      disableRule(fanHeaterMainSensor);
    }
    if (message.value == "0") {
        enableRule(fanHeaterMainSensor);
      dev["wb-gpio/EXT1_K2"] = true;
    }
});

trackMqtt("/devices/wb-gpio/controls/A1_IN", function (message) {
    log.info("name: {}, value: {}".format(message.topic, message.value))
    if (message.value == "1") {
        dev["wb-gpio/EXT1_K1"] = false;
        dev["wb-gpio/EXT1_K2"] = false;
        disableRule(fanHeaterMainSensor);
    }
    if (message.value == "0") {
        enableRule(fanHeaterMainSensor);
    }
});

defineRule("conditionerSwitch1", {
    whenChanged: ["wb-gpio/EXT1_K1"],
    then: function () {
        dev["Automation/Alarm2"] = dev["wb-gpio/EXT1_K1"];
    },
});

defineRule("conditionerSwitch2", {
    whenChanged: ["Automation/Alarm2"],
    then: function () {
        dev["wb-gpio/EXT1_K1"] = dev["Automation/Alarm2"];
    },
});

defineRule("fanHeaterSwitch1", {
    whenChanged: ["Automation/Alarm1"],
    then: function () {
        dev["wb-gpio/EXT1_K2"] = dev["Automation/Alarm1"];
    },
});

defineRule("fanHeaterSwitch2", {
    whenChanged: ["wb-gpio/EXT1_K2"],
    then: function () {
        dev["Automation/Alarm1"] = dev["wb-gpio/EXT1_K2"];
    },
});```

Добрый день.

Как вижу из скриншота вы публикуете значение в топик. Это - неправильно.
Обратите внимание что публиковать уставки надо в подтопик: MQTT в контроллерах Wiren Board — Wiren Board
то есть в /on.

Для примера - подпишитесь на топик(обязательно с подтопиками, рекурсивно) и измените значение из интерфейса - получите пример публикации.

PS: благодарю за отличное оформление вопроса. Сразу понятно что делаете и как.

2 лайка

Добрый день,
Удалось ли решить вопрос?

Добрый день! Да, получилось, спасибо большое!
Добавил в mosquitto_pub -h 192.168.0.30 -t ‘/devices/Automation/controls/Tmax/on’ -m ‘15’ -r
“/on”, и сценарии заработали.

1 лайк