Написать правило

Написать правило за вознаграждение:

  • T2 < 60 и T1 <= 60 - включить реле К1
  • T2 < 60 и T1 >= 70 - выключить реле К1
  • T2 >= 60 и T1 <= 60 - включить реле К1
  • T2 >= 60 и T1 >= 70 - выключить реле К1

Контроллер Wiren Board 8.4, Модуль реле 6-канальный WB-MR6C v.2, Датчики температуры 1-wire DS18B20

Добрый день,

Обычно в этом сообществе принято помогать друг другу, и вы можете рассчитывать на отзывчивость и поддержку.Т ак же можно обратиться в Telegram-чат Wiren Board, где вы, скорее всего, получите опыт других пользователей в кратчайшие сроки.

Также можно ознакомиться с основами создания правил для движка wb-rules:

Пример простого правила для вашей задачи:

defineRule("temperature_control_K1", {
  whenChanged: [
    "/devices/wb-msw-v4_1_2/controls/Temperature",  // Топик датчика температуры T1
    "/devices/wb-msw-v4_1_2/controls/Humidity"     // Топик датчика влажности T2 для примера второй метрики 
  ],
  then: function () {
    var T1 = dev["wb-msw-v4_1_2"]["Temperature"];  // Значение температуры
    var T2 = dev["wb-msw-v4_1_2"]["Humidity"];     // Значение влажности

    if (T1 <= 60) {
      dev["wb-mdm3_27"]["K1"] = true;  // Включаем реле К1
    } else if (T1 >= 70) {
      dev["wb-mdm3_27"]["K1"] = false; // Выключаем реле К1
    }
  }
});

Пояснения:

  1. Топики температуры и влажности:
  • /devices/wb-msw-v4_1_2/controls/Temperature — значение температуры T1.
  • /devices/wb-msw-v4_1_2/controls/Humidity — значение T2 (влажность). Замените на свой реальный топик для T2.
  1. Реле:
  • /devices/wb-mdm3_27/controls/K1 — реле, которое будет управляться. Замените на ваш реальный топик реле, если отличается.

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

Если же требуется профессиональная помощь, рекомендую обратиться к интеграторам, которые смогут оперативно настроить и оптимизировать вашу систему.

1 лайк

Добрый день.
Вижу пример так:

//11_06_test_01.js

var tSensor1="hwmon/CPU Temperature";
var tSensor2="hwmon/CPU Temperature";
var oRelay1="wb-gpio/A1_OUT";
var oRelay2="wb-gpio/A2_OUT";
var oRelay3="wb-gpio/A3_OUT";


defineRule("whenChanged tSensor", {
    whenChanged: [tSensor1, tSensor2], // топик, при изменении которого сработает правило
      then: function (newValue, devName, cellName) {
        log.info(newValue, cellname);
        T1 = dev[tSensor1];
        T2 = dev[tSensor2];
        if(T1<=60 && T2<60){
          dev[oRelay1] = true;
        }
        if(T1>=70 && T2<60){
          dev[oRelay1] = false;
        }
        if(T1<=60 && T2>=60){
          dev[oRelay1] = true;
        }
        if(T1>=70 && T2>=60){
          dev[oRelay1] = false;
        }
    }
});

Не тестировал.

Написал правило, но почему то не работает (реле не вкл / выкл)…
где что надо подправить ?

defineRule("termostat", {
  whenChanged: [
    "/devices/wb-w1/controls/28-011449b828aa",				// Топик датчика температуры котла T1		
    "/devices/wb-w1/controls/28-01204dc4005c",				// Топик датчика температуры бойлера T2
	"/devices/wb-mr6c_219_2/controls/K1"					// Топик реле К1
  ],
  then: function () {
    var T1 = dev["28-011449b828aa"]["Temperature"];			// Значение температуры котла Т1
    var T2 = dev["28-01204dc4005c"]["Temperature"];			// Значение температуры бойлера Т2

    if (T1 <= 38) {
      dev["wb-mr6c_219_2"]["K1"] = true;					// Включаем реле К1
    } else if (T1 >= 40) {
      dev["wb-mr6c_219_2"]["K1"] = false;					// Выключаем реле К1
    }
  }
});

image

Добрый день,
Добавил в скрипт немного вам отладочной информации.



defineRule("termostat", {
  whenChanged: [
    "/devices/wb-w1/controls/28-011449b828aa",  // Топик датчика температуры котла T1
    "/devices/wb-w1/controls/28-01204dc4005c", // Топик датчика температуры бойлера T2
    "/devices/wb-mr6c_219_2/controls/K1"       // Топик реле К1
  ],
  then: function () {
    log("Rule triggered");
    
    var T1 = dev["wb-w1"]["28-011449b828aa"];  // Значение температуры котла Т1
    var T2 = dev["wb-w1"]["28-01204dc4005c"];  // Значение температуры бойлера Т2

    log("T1 (котел): " + T1 + "°C");
    log("T2 (бойлер): " + T2 + "°C");

    if (T1 <= 38) {
      dev["wb-mr6c_219_2"]["K1"] = 1; // Включаем реле К1
      log("Реле К1: включено");
    } else if (T1 >= 40) {
      dev["wb-mr6c_219_2"]["K1"] = 0; // Выключаем реле К1
      log("Реле К1: выключено");
    }
  }
});

Рекомендую ссылки на основные статьи по написанию правил:
ссылка на гит и на википедию