Скрипт не реагирует на изменение топика MQTT

Сделал скрипт для термостата. В нем создаётся виртуальное устройство в котором есть поле уставка и текущая температура.

При изменении уставки через web интерфейс все работает корректно. Но если я изменяю значение уставки с помощью публикации в топик MQTT извне, то происходит странное: В топике MQTT значение уставки меняется, в веб интерфейсе WB в поле “уставка” новое значение меняется, но сам термостат новое значение не получает.
Почему так происходит?

var t ="wb-msw-v4_79/Temperature";
var rele="wb-mr6c_175/K2";
var t_name="Thermostat";
var hyst=0.2;
var setpoint ="Thermostat/setpoint"

defineVirtualDevice(t_name, {
    title: t_name,
    cells: {
	   setpoint: {
       type:"temperature",
      value:"",
      readonly:false

    
    },
      temperature: {
      type:"temperature",
      value:"",
      forceDefault: false  
        
      }
    }
    
});

defineRule("change_t", {
  whenChanged: t,
  then: function (newValue, devName, cellName) {
  dev[t_name+"/temperature"] = newValue;
      	if ( newValue < dev[setpoint] - hyst) { //если температура датчика меньше уставки - гистерезис
      	dev[rele] = true;
    	}
    	if ( newValue > dev[setpoint] + hyst) { //если температура датчика больше виртуальной уставки + гистерезис
      	dev[rele] = false;
    	}
  }
});

defineRule("change_sp", {
  whenChanged: setpoint,
  then: function (newValue, devName, cellName) {
  	dev[setpoint] = newValue;

      	if ( dev[t] < dev[setpoint]-hyst) { //если температура датчика меньше уставки - гистерезис
      	dev[rele] = true;
    	}
      	if ( dev[t] > dev[setpoint]+hyst) { //если температура датчика больше виртуальной уставки + гистерезис
      	dev[rele] = false;
    	}
    
  }
});

Я обычно поступаю так - создаю виртуальное устройство, и в дополнительный топик /set пишу данные, необходимые для изменения без ретэйна. (Аналог /on в релюшках)
В правилах через функцию trackMqtt его отслеживаю, и по результатам проверки изменяю параметры виртуального устройства: dev[…] = message.value;
Дальше можно уже писать defineRule, все будет отрабатывать.

Не могу утверждать, что это самый оптимальный способ, пусть другие участники поправят, если есть лучше.

так как таких топиков-изменений может быть много, я пишу один
trackMqtt(‘…/…/+/set’)
и дальше уже через split разбираю топик, и через switch/if выбираю что и где надо поменять