Правило с датчиком zigbee

Здравствуйте, с датчиком zigbee не отрабатывает правило, как только меняю в правиле датчик на 1 wire, правило отрабатывает, датчик zigbee в девайсах отображается, значения меняются в реальном времени, но в правиле такое ощущение что он не внесен

defineVirtualDevice("Tp1", {
title:"TP1",
cells: {
"temperature": {
type:"range",
value: 18,
max: 32  
},
}
});



defineRule("Tpf1", {
whenChanged: "0xa4c13880d46d7c67/temperature",
then: function (newValue, devName, cellName) {
if (newValue<dev["Tp1/temperature"]) {
dev["wb-gpio"]["EXT1_K12"] = true;
} {
if (newValue>dev["Tp1/temperature"]) {
dev["wb-gpio"]["EXT1_K12"] = false;
} {
if (newValue<dev["Tp1/temperature"]) {
dev["wb-gpio"]["EXT1_K14"] = true;
} {
if (newValue>dev["Tp1/temperature"]) {
dev["wb-gpio"]["EXT1_K14"] = false;
}
}
}
}
}
});	

Добрый день.
А тип значения какой?
Советую вывести в лоог в правиле значение и его тип для проверки.

А по подробнее можно?)

Ну тип как бы и в каналах mqtt отображается как temperature

значение typeof(newValue) вывести.

Отображаться - может как угодно, важно что в meta/type указано. Ну и как значение передается

Строка получается?

Можно конкретнее, как вывести лог именно этого? Я не совсем понимаю)

В тело функции добавить строку:

log.info("Сработало правило, newValue:", newValue, "тип:", typeof(newValue))

Получилось?

да вроде, а где смотреть?

в лесу был, не мог залезть на контроллер)

Нашел, тип number

Отлично. А тип второго участника сравнения, который участвует в if?
Ну и записать можно ведь так:

if (newValue<dev["Tp1/temperature"]) {
  dev["wb-gpio"]["EXT1_K12"] = true;
  dev["wb-gpio"]["EXT1_K14"] = true;
}
if (newValue>dev["Tp1/temperature"]) {
dev["wb-gpio"]["EXT1_K12"] = false;
dev["wb-gpio"]["EXT1_K14"] = false;
}

потому как конструкция

if () {
}
{
if () {
}
{
if () {
}
{
if () {
}
}
}
}

Мне, напрмиер непонятна по смыслу.

ну сравнивается виртуальная шкала range с датчиком number

И еще такой вопрос, есть ли возможность считывать значение датчика почаще? например когда изменяется уставка, в виртуальном устройстве, а то датчик присылает значение раз в 30 минут, и реле изменяет свое значение только после изменения значения температуры. Напрягает, когда уставку поменял а реле еще пол часа не реагирует)

И да, понаблюдав пол часа понял что правило срабатывает, но именно по изменению показания датчика, что капец неудобно))

Это, насколько я понимаю zigbee зависит только от датчика, как сама возможность настройки частоты передачи так и ее метод.

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

Поставлю вопрос по другому, правило может видеть сколько конкретно показывает датчик, без изменения его показаний, как бы реагируя на его прошлое состояние, и при задании уставки сравнивать саму уставку не ожидая пока датчик выдаст новую температуру через пол часа а сравнивать с тем показанием которое в данный момент записано?)

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

whenChanged: ["0xa4c13880d46d7c67/temperature", "Tp1/temperature"],

Не помогло(