# Управление радиаторами с изменяемой температурой

**URL:** <https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119>\
**Category:** Rule Engine\
**Tags:** wb-rules\
**Created:** [October 26, 2022, 10:53am UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119 "2022-10-26T10:53:11Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Andrey\_K](https://support.wirenboard.com/user_avatar/support.wirenboard.com/andrey_k/32/6915_2.png) [@Andrey\_K](https://support.wirenboard.com/u/Andrey_K)\
**Post date:** [October 26, 2022, 10:53am UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119/1 "2022-10-26T10:53:11Z")

</div>

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

Есть идея сделать возможность установки температуры в комнате через несколько кнопок включения радиатора: то есть будут кнопки “выключить”, “20 градусов”, “23 градуса”, “24 градуса”. Когда одна включается, другие выключаются и выполняется один из циклов. Делаю через два whenChanged, но выдает ошибку. Подскажите, что делаю не так или может как правильнее это реализовать?

defineRule(“heater\_control sleeping room”, {  
whenChanged: [“Radiators/Спальня\_24”],  
then: function (newValue, devName, cellName) {  
if (newValue) {  
whenChanged: “wb-msw-v3\_11/Temperature”,  
then: function (newValue, devName, cellName) {  
if ( newValue1 \> 24) { //температура  
dev[“wb-gpio”][“EXT2\_R3A2”] = true;  
} else {  
dev[“wb-gpio”][“EXT2\_R3A2”] = false;  
}  
}  
}  
})

---

<div class="post-metadata">

**Author:** ![BrainRoot](https://avatars.discourse-cdn.com/v2/letter/b/c2a13f/32.png) [@BrainRoot](https://support.wirenboard.com/u/BrainRoot)\
**Post date:** [October 26, 2022, 11:59am UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119/3 "2022-10-26T11:59:43Z")

</div>

Добрый день.  
whenChanged не может быть **вложенным**. Точнее может, но выполнится один раз. Посмотрите для примера [Как сделать, чтобы в WB-MRWL3 единовременно включалось только 1 реле? - #5 от пользователя BrainRoot](https://support.wirenboard.com/t/kak-sdelat-chtoby-v-wb-mrwl3-edinovremenno-vklyuchalos-tolko-1-rele/5514/5)

---

<div class="post-metadata">

**Author:** ![Andrey\_K](https://support.wirenboard.com/user_avatar/support.wirenboard.com/andrey_k/32/6915_2.png) [@Andrey\_K](https://support.wirenboard.com/u/Andrey_K)\
**Post date:** [October 26, 2022, 12:55pm UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119/4 "2022-10-26T12:55:29Z")

</div>

А ответ на вопрос где?)

Как сделать возможность регулировать температуру батареи?

---

<div class="post-metadata">

**Author:** ![BrainRoot](https://avatars.discourse-cdn.com/v2/letter/b/c2a13f/32.png) [@BrainRoot](https://support.wirenboard.com/u/BrainRoot)\
**Post date:** [October 26, 2022, 1:04pm UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119/5 "2022-10-26T13:04:37Z")

</div>

Я использую для регулировки контрол range виртуального устройства. Но и кнопками - тоже можно, как один из вариантов.  
Возможно я не совсем правильно понял вопрос, переформулируйте пожалуйста.

---

<div class="post-metadata">

**Author:** ![Andrey\_K](https://support.wirenboard.com/user_avatar/support.wirenboard.com/andrey_k/32/6915_2.png) [@Andrey\_K](https://support.wirenboard.com/u/Andrey_K)\
**Post date:** [October 26, 2022, 1:08pm UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119/6 "2022-10-26T13:08:21Z")

</div>

Вопрос в том, как сделать возможность регулировки температуры батареи? Я привел пример кода, там используется два whenChanged, что, получается, невозможно. Как лучше сделать? Меня устроит и вариант с кнопками, чтобы при нажатии на кнопку включалось определенное правило, либо с range. Желательно пример кода (хотя бы структуру понять, как включать правило с кнопки и как использовать range в данном контексте).

---

<div class="post-metadata">

**Author:** ![BrainRoot](https://avatars.discourse-cdn.com/v2/letter/b/c2a13f/32.png) [@BrainRoot](https://support.wirenboard.com/u/BrainRoot)\
**Post date:** [October 26, 2022, 2:18pm UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119/7 "2022-10-26T14:18:58Z")

</div>

range:

```auto
//10_26_test_01.js

defineRule({
whenChanged: "10_26_test_01/setnVal",
then: function (newValue, devName, cellName) {
  log ("{}: Вход 10_26_test_01", devName, newValue);
  
},
});

defineVirtualDevice("10_26_test_01", {
  title: "10_26_test_01",
  cells: {
    setnVal: {
        title: "Name for range",
	    type: "range",
	    value: 25,
        max: 50,
	}
  }
});

```

С кнопками:

```auto
//10_26_test_01.js

defineRule({
whenChanged: "10_26_test_01/setnVal",
then: function (newValue, devName, cellName) {
  log ("{}: Вход 10_26_test_01", devName, newValue);
  
},
});

defineRule({
whenChanged: "10_26_test_01/b1",
then: function (newValue, devName, cellName) {
  log ("{}: Вход 10_26_test_01", cellName, newValue);
  
},
});

defineRule({
whenChanged: "10_26_test_01/b2",
then: function (newValue, devName, cellName) {
  log ("{}: Вход 10_26_test_01", cellName, newValue);
  
},
});

defineVirtualDevice("10_26_test_01", {
  title: "10_26_test_01",
  cells: {
    setnVal: {
        title: "Name for range",
	    type: "range",
	    value: 25,
        max: 50,
        forceDefault: true,
        order: 1
	},
    b1: {
      type: "pushbutton",
      value: false,
      order: 2
      
    },
    b2: {
      type: "pushbutton",
      order: 3
      
    },
  }
});

```

---

<div class="post-metadata">

**Author:** ![Andrey\_K](https://support.wirenboard.com/user_avatar/support.wirenboard.com/andrey_k/32/6915_2.png) [@Andrey\_K](https://support.wirenboard.com/u/Andrey_K)\
**Post date:** [November 16, 2022, 5:47am UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119/8 "2022-11-16T05:47:03Z")

</div>

Прописал кнопку так:  
defineVirtualDevice(“Rad temp”, {  
title: “Rad temp”,  
cells: {  
Tempsleep: {  
title: “Name for range”,  
type: “range”,  
value: 25,  
max: 50,  
forceDefault: true,  
order: 1  
},

}  
});

Правило - так:  
defineRule(“heater\_control sleeping room”, {  
whenChanged: “wb-msw-v3\_11/Temperature”,  
then: function (newValue, devName, cellName) {  
if ( newValue1 \> “Rad temp/Tempsleep”) {  
dev[“wb-gpio”][“EXT2\_R3A2”] = true;  
} else {  
dev[“wb-gpio”][“EXT2\_R3A2”] = false;  
}  
}  
})

Не работает че-то) Есть подозрение, что в этой строке ошибка:  
if ( newValue1 \> “Rad temp/Tempsleep”) {

Не подскажете, как прописать правильно?

И сразу подскажите, как скриптом задать температуру на данном Range? Тоже семантика интересует…

---

<div class="post-metadata">

**Author:** ![BrainRoot](https://avatars.discourse-cdn.com/v2/letter/b/c2a13f/32.png) [@BrainRoot](https://support.wirenboard.com/u/BrainRoot)\
**Post date:** [November 16, 2022, 7:30am UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119/9 "2022-11-16T07:30:26Z")

</div>

> [@Andrey\_K](#):
>
> if ( newValue1 \> “Rad temp/Tempsleep”) {

Не совсем понятно, вы сравниваете значение со **строкой**? А какое значение в переменной newValue1, кстати?

---

<div class="post-metadata">

**Author:** ![Andrey\_K](https://support.wirenboard.com/user_avatar/support.wirenboard.com/andrey_k/32/6915_2.png) [@Andrey\_K](https://support.wirenboard.com/u/Andrey_K)\
**Post date:** [November 16, 2022, 7:40am UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119/10 "2022-11-16T07:40:52Z")

</div>

Вообще, я сравниваю с числом 24, это здесь пытаюсь понять, как сравнивать со значением.

С NewValue1 - ошибся, вообще просто NewValue

---

<div class="post-metadata">

**Author:** ![BrainRoot](https://avatars.discourse-cdn.com/v2/letter/b/c2a13f/32.png) [@BrainRoot](https://support.wirenboard.com/u/BrainRoot)\
**Post date:** [November 16, 2022, 8:29am UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119/11 "2022-11-16T08:29:47Z")

</div>

> [@Andrey\_K](#):
>
> это здесь пытаюсь понять, как сравнивать со значением

Если значение **контрола** - то оно получается как `dev["Rad temp/Tempsleep"]`  
А сравнивать строку и число - результаты будут недетерминированы.

---

<div class="post-metadata">

**Author:** ![Andrey\_K](https://support.wirenboard.com/user_avatar/support.wirenboard.com/andrey_k/32/6915_2.png) [@Andrey\_K](https://support.wirenboard.com/u/Andrey_K)\
**Post date:** [November 17, 2022, 9:09pm UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119/12 "2022-11-17T21:09:22Z")

</div>

Спасибо! Заработало!

Создал в Homekit термостат, он при включении на нагрев выдает топик “HEAT”, я хочу, чтобы батарея включалась только при включении термостата на нагрев.

defineRule(“heater\_control sleeping room”, {  
whenChanged: “wb-msw-v3\_11/Temperature”,  
then: function (newValue, devName, cellName) {  
if ( newValue \> dev[“Rad temp/Tempsleep”], dev[“Thermo/Thermosleep”]==“HEAT”) {  
dev[“wb-gpio”][“EXT2\_R3A2”] = true;  
} else {  
dev[“wb-gpio”][“EXT2\_R3A2”] = false;  
}  
}  
})

То есть должно выполняться два условия: температура и топик HEAT. Я так понимаю, что я прописал “или”? Как мне сделать условие “И”?

---

<div class="post-metadata">

**Author:** ![BrainRoot](https://avatars.discourse-cdn.com/v2/letter/b/c2a13f/32.png) [@BrainRoot](https://support.wirenboard.com/u/BrainRoot)\
**Post date:** [November 18, 2022, 7:36am UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119/13 "2022-11-18T07:36:27Z")

</div>

> [@Andrey\_K](#):
>
> Я так понимаю, что я прописал “или”?

Не совсем понял. Где условие?

> [@Andrey\_K](#):
>
> Как мне сделать условие “И”?

> **[Логические операторы](https://learn.javascript.ru/logical-operators)**

---

<div class="post-metadata">

**Author:** ![Andrey\_K](https://support.wirenboard.com/user_avatar/support.wirenboard.com/andrey_k/32/6915_2.png) [@Andrey\_K](https://support.wirenboard.com/u/Andrey_K)\
**Post date:** [November 19, 2022, 2:01am UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119/14 "2022-11-19T02:01:15Z")

</div>

> [@Andrey\_K](#):
>
> dev[“Thermo/Thermosleep”]==“HEAT”

Пишет, что ошибка в строке  
if ( newValue \> dev[“Rad temp/Tempsleep”]&&dev[“Thermo/Thermosleep”]==“HEAT”)

---

<div class="post-metadata">

**Author:** ![BrainRoot](https://avatars.discourse-cdn.com/v2/letter/b/c2a13f/32.png) [@BrainRoot](https://support.wirenboard.com/u/BrainRoot)\
**Post date:** [November 20, 2022, 2:58pm UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119/15 "2022-11-20T14:58:41Z")

</div>

А что за ошибка? При выполнении?

```auto
if ((newValue > dev["Rad temp/Tempsleep"]) && (dev["Thermo/Thermosleep"]=="HEAT")) {

```

Работает вполне нормально.

---

<div class="post-metadata">

**Author:** ![Andrey\_K](https://support.wirenboard.com/user_avatar/support.wirenboard.com/andrey_k/32/6915_2.png) [@Andrey\_K](https://support.wirenboard.com/u/Andrey_K)\
**Post date:** [November 20, 2022, 9:51pm UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119/16 "2022-11-20T21:51:30Z")

</div>

> [@BrainRoot](#):
>
> `if ((newValue > dev["Rad temp/Tempsleep"]) && (dev["Thermo/Thermosleep"]=="HEAT")) {`

Мистика какая-то… Сейчас не дает ошибку при сохранении…

Только что выяснилась очень странная вещь. Когда подключаюсь к веб интерфейсу через компьютер и через телефон показываются разные данные. То есть я изменяю показания термостата в applehome, они передаются на range в wb, в веб-интерфейсе пк значение изменяется, в веб телефона - нет. Более того mqtt тоже разные значения. Обновлял страницу по несколько раз. Когда через веб пк меняю значение, то в веб мобильного тоже меняются. Получается значения разные и не понятно, где правильные.

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

---

<div class="post-metadata">

**Author:** ![BrainRoot](https://avatars.discourse-cdn.com/v2/letter/b/c2a13f/32.png) [@BrainRoot](https://support.wirenboard.com/u/BrainRoot)\
**Post date:** [November 21, 2022, 8:45am UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119/17 "2022-11-21T08:45:14Z")

</div>

“Правильные” - те сто в mqtt.

> [@Andrey\_K](#):
>
> в веб-интерфейсе пк значение изменяется, в веб телефона - нет.

Что такое "в веб телефона? браузер, его версия?

> [@Andrey\_K](#):
>
> Правило не видит изменения температуры тоже, то есть батарея не включается, когда изменяю через термостат applehome…

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

---

<div class="post-metadata">

**Author:** ![Andrey\_K](https://support.wirenboard.com/user_avatar/support.wirenboard.com/andrey_k/32/6915_2.png) [@Andrey\_K](https://support.wirenboard.com/u/Andrey_K)\
**Post date:** [November 24, 2022, 10:15am UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119/18 "2022-11-24T10:15:30Z")

</div>

В итоге ситуация следующая:

> **[IMG\_0095.MOV](https://drive.google.com/file/d/1x0cE-ENAU89zcWs_qY3XFq9rqIoKuZ8T/view?usp=sharing)**
>
> Google Drive file.

То есть изменяю температуру в apple homekit, она меняется в mqtt, но обновив страницу она возвращается назад. Причем, в apple homekit она назад не меняется. Если через браузер ползунком поменять температуру, то все работает. В чем может быть проблема?

---

<div class="post-metadata">

**Author:** ![Andrey\_K](https://support.wirenboard.com/user_avatar/support.wirenboard.com/andrey_k/32/6915_2.png) [@Andrey\_K](https://support.wirenboard.com/u/Andrey_K)\
**Post date:** [December 25, 2022, 8:48pm UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119/19 "2022-12-25T20:48:33Z")

</div>

Здравствуйте! Подскажете, в чем может быть проблема? Или как обойти?

Прилагаю скрины настроек моста

 ![Снимок экрана 2022-12-25 в 23.46.48](https://support.wirenboard.com/uploads/default/original/2X/0/05f92cd26f5eb3df5af1873432117de18d5866c1.png)  
 ![Снимок экрана 2022-12-25 в 23.47.03](https://support.wirenboard.com/uploads/default/original/2X/f/f319fb086a44a131902cc61664a544088ede9ec8.png)

---

<div class="post-metadata">

**Author:** ![BrainRoot](https://avatars.discourse-cdn.com/v2/letter/b/c2a13f/32.png) [@BrainRoot](https://support.wirenboard.com/u/BrainRoot)\
**Post date:** [December 26, 2022, 2:28pm UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119/20 "2022-12-26T14:28:56Z")

</div>

Я вижу на двух скриншотах топики, похожие на соответствующие конвенции.  
Соответственно вопросы:  
Что на скиншотах?  
Что записывается и в какой топик? Как при этом сам топик изменяется? И, что важно - чем это изменение отличается от ожидаемого?

---

<div class="post-metadata">

**Author:** ![Aleksandr\_Khlebnikov](https://support.wirenboard.com/user_avatar/support.wirenboard.com/aleksandr_khlebnikov/32/16067_2.png) [@Aleksandr\_Khlebnikov](https://support.wirenboard.com/u/Aleksandr_Khlebnikov)\
**Post date:** [September 18, 2024, 1:19pm UTC](https://support.wirenboard.com/t/upravlenie-radiatorami-s-izmenyaemoj-temperaturoj/13119/21 "2024-09-18T13:19:56Z")

</div>


