miwany
06.Ноябрь.2024 13:11:16
1
Написать правило за вознаграждение:
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
}
}
});
Пояснения:
Топики температуры и влажности:
/devices/wb-msw-v4_1_2/controls/Temperature
— значение температуры T1.
/devices/wb-msw-v4_1_2/controls/Humidity
— значение T2 (влажность). Замените на свой реальный топик для T2.
Реле:
/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;
}
}
});
Не тестировал.
miwany
22.Ноябрь.2024 04:30:52
10
Написал правило, но почему то не работает (реле не вкл / выкл)…
где что надо подправить ?
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
}
}
});
Добрый день,
Добавил в скрипт немного вам отладочной информации.
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: выключено");
}
}
});
Рекомендую ссылки на основные статьи по написанию правил:
ссылка на гит и на википедию
miwany
24.Ноябрь.2024 10:59:05
14
Так почему не срабатывает правило ? Куда посмотреть ?
Добрый день!
Для проверки работы правила рекомендую добавить логирующую функцию на каждое действие. Эта функция должна выводить информацию о срабатывании правила. Пример таких функций я разместил выше на основе скрипта.
Также для диагностики проблемы прошу предоставить архив с диагностической информацией контроллера. Инструкция по созданию архива описана в документации .
Если потребуется дополнительная помощь, пишите!
miwany
24.Ноябрь.2024 11:25:07
16
приложен диагностический архив, доступен только сотрудникам поддержки
(378,9 КБ)
приложил архив
miwany
25.Ноябрь.2024 11:56:56
19
Не смотрели архив ?
Позавчера перезагрузил контроллер, после этого началась чехарда с датчиками температуры, то все красное, то вообще связи нет (датчики и отключал и подключал, несколько раз контроллер выключал / включал, нет порядка)…
Добрый день!
По данной проблеме наблюдаются ошибки, связанные с KNX. В логах фиксируется следующее:
WirenboardKNX: E00000064: [19:router] router: setup router: failed
WirenboardKNX: F00000105: [12:server] Link down, terminating
Рекомендую:
Проверить физическое подключение KNX-оборудования.
Убедиться в корректности конфигурации маршрутизатора KNX.
miwany
25.Ноябрь.2024 13:26:01
21
Я переподключился к Интерфейс RS485-1, правило так и не срабатывает…
miwany
26.Ноябрь.2024 05:05:50
23
Вот так написано правило…
defineRule("termostat", {
whenChanged: [
"/devices/wb-w1/controls/28-011449b828aa", // Топик датчика температуры котла T1
"/devices/wb-w1/controls/28-01204dc4005c", // Топик датчика температуры бойлера T2
"/devices/wb-mr6c_219/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 (T2 < 49) {
dev["wb-mr6c_219"]["K1"] = 1; // Включаем реле К1
log("Реле К1: включено");
} else if (T2 > 51) {
dev["wb-mr6c_219"]["K1"] = 0; // Выключаем реле К1
log("Реле К1: выключено");
}
}
});
Вот что выводится под ключом…
Добрый день!
Внешне ошибок не вижу, но немного подкорректировал, добавив логирующую информацию.
Рекомендации:
Проверьте правильность топиков и всю остальную информацию.
Напоминаю про полезные ссылки для написания правил:
defineRule("termostat", {
whenChanged: [
"/devices/wb-w1/controls/28-011449b828aa", // Топик датчика температуры котла T1
"/devices/wb-w1/controls/28-01204dc4005c" // Топик датчика температуры бойлера T2
],
then: function () {
log("Rule triggered");
// Проверка доступности устройств и параметров
if (!dev["wb-w1"] || !dev["wb-w1"]["28-011449b828aa"] || !dev["wb-w1"]["28-01204dc4005c"] || !dev["wb-mr6c_219"]) {
log("Error: One or more devices or parameters are unavailable.");
return;
}
// Получение значений температур
var T1 = dev["wb-w1"]["28-011449b828aa"]; // Температура котла
var T2 = dev["wb-w1"]["28-01204dc4005c"]; // Температура бойлера
// Проверка валидности значений
if (typeof T1 !== "number" || typeof T2 !== "number") {
log("Error: Invalid temperature values. T1: {}, T2: {}", T1, T2);
return;
}
log("T1 (котел): {}°C", T1);
log("T2 (бойлер): {}°C", T2);
// Управление реле с проверкой текущего состояния
if (T2 < 49 && dev["wb-mr6c_219"]["K1"] !== 1) {
dev["wb-mr6c_219"]["K1"] = 1;
log("Реле К1: включено");
} else if (T2 > 51 && dev["wb-mr6c_219"]["K1"] !== 0) {
dev["wb-mr6c_219"]["K1"] = 0;
log("Реле К1: выключено");
} else {
log("Температура бойлера в допустимом диапазоне (49–51°C). Реле К1 не изменяется.");
}
}
});
miwany
04.Декабрь.2024 00:49:30
31
Это выводится под ключом:
2024-12-04 07:46:55using file /var/lib/wirenboard/wbrules-persistent.db for persistent DB
2024-12-04 07:46:55DAC: no config file
2024-12-04 07:46:55add your rules to /etc/wb-rules/
Добрый день!
Рекомендую разделить логику следующим образом:
Создайте отдельное виртуальное устройство для вывода температуры.
Создайте отдельное виртуальное устройство для управления реле.
Начнём с простого, чтобы выявить, где именно логика не отрабатывает.
Так же для диагностики проблемы пришлите, пожалуйста, архив с диагностической информацией контроллера. Создание архива описано в документации .
miwany
04.Декабрь.2024 07:26:12
33
приложен диагностический архив, доступен только сотрудникам поддержки
(415,3 КБ)
Добрый день!
Удалось ли вам создать простые правила?
miwany
08.Декабрь.2024 09:28:18
37
Нет, не удалось… Отправил контроллер назад производителю…