У меня на wirenboard 7 есть 6-ти канальное реле, 4 из которых управляют клапанами тёплого пола, и ещё несколько месяцев назад они работали, так, как и задумывалось:
При уставке ниже, чем комнатная температура, реле выключало канал, а при уставке выше, канал включался.
Затем на время тёплого сезона я выключил эти термостаты за ненадобностью, и сейчас при включении происходит непонятная мне вещь: один термостат работает как надо, а три других включают реле, а при понижении уставки канал остаётся включённым, при том что скрипты одинаковые, меняются только id каналов и датчиков температуры 1-wire;
Вот пример того термостата, который работает корректно:
// Переменная для хранения значения температуры
var currentTemperature = 22;
defineVirtualDevice('up_down_K4', {
title: 'Термостат K4',
cells: {
Value: {
title: 'Value',
type: 'temperature',
value: currentTemperature,
order: 1,
},
Up: {
title: 'Up',
type: 'pushbutton',
order: 2,
},
Down: {
title: 'Down',
type: 'pushbutton',
order: 3,
},
},
});
defineRule('test_up_down_K4_buttons', {
whenChanged: ['up_down_K4/Up', 'up_down_K4/Down'],
then: function (newValue, devName, cellName) {
if (devName === 'up_down_K4' && (cellName === 'Up' || cellName === 'Down')) {
var oldValue = currentTemperature;
var newValue = cellName === 'Up' ? oldValue + 0.5 : oldValue - 0.5;
// Ограничиваем значение в диапазоне от 15 до 35
newValue = Math.max(15, Math.min(35, newValue));
currentTemperature = newValue; // Обновляем текущее значение температуры
dev['up_down_K4/Value'] = newValue; // Обновляем значение виртуального устройства
}
},
});
defineRule("control_K4", {
whenChanged: ["wb-w1/28-00000fabbe76", "up_down_K4/Value"],
then: function (newValue, devName, cellName) {
var sensorTemperature = dev["wb-w1/28-00000fabbe76"]; // Текущая температура с датчика
var setPointTemperature = dev["up_down_K4/Value"]; // Уставка температуры
// Температура для выключения реле
var turnOffTemperature = setPointTemperature + 1;
// Температура для включения реле
var turnOnTemperature = setPointTemperature - 1;
// Проверяем, нужно ли включить или выключить реле
if (sensorTemperature > turnOffTemperature) {
dev["wb-mr6cu_177/K4"] = false; // Выключаем реле
} else if (sensorTemperature < turnOnTemperature) {
dev["wb-mr6cu_177/K4"] = true; // Включаем реле
}
// Если температура находится в диапазоне, не меняем состояние реле
}
});
А вот пример того, который только включает, но не выключает:
// Переменная для хранения значения температуры
var currentTemperature = 22;
defineVirtualDevice('up_down_K2', {
title: 'Термостат K2',
cells: {
Value: {
title: 'Value',
type: 'temperature',
value: currentTemperature,
order: 1,
},
Up: {
title: 'Up',
type: 'pushbutton',
order: 2,
},
Down: {
title: 'Down',
type: 'pushbutton',
order: 3,
},
},
});
defineRule('test_up_down_K2_buttons', {
whenChanged: ['up_down_K2/Up', 'up_down_K2/Down'],
then: function (newValue, devName, cellName) {
if (devName === 'up_down_K2' && (cellName === 'Up' || cellName === 'Down')) {
var oldValue = currentTemperature;
var newValue = cellName === 'Up' ? oldValue + 0.5 : oldValue - 0.5;
// Ограничиваем значение в диапазоне от 15 до 35
newValue = Math.max(15, Math.min(35, newValue));
currentTemperature = newValue; // Обновляем текущее значение температуры
dev['up_down_K2/Value'] = newValue; // Обновляем значение виртуального устройства
}
},
});
defineRule("control_K2", {
whenChanged: ["wb-w1/28-00000dcdf8e4", "up_down_K2/Value"],
then: function (newValue, devName, cellName) {
var sensorTemperature = dev["wb-w1/28-00000dcdf8e4"]; // Текущая температура с датчика
var setPointTemperature = dev["up_down_K2/Value"]; // Уставка температуры
// Температура для выключения реле
var turnOffTemperature = setPointTemperature + 1;
// Температура для включения реле
var turnOnTemperature = setPointTemperature - 1;
// Проверяем, нужно ли включить или выключить реле
if (sensorTemperature > turnOffTemperature) {
dev["wb-mr6cu_177/K2"] = false; // Выключаем реле
} else if (sensorTemperature < turnOnTemperature) {
dev["wb-mr6cu_177/K2"] = true; // Включаем реле
}
// Если температура находится в диапазоне, не меняем состояние реле
}
});
В чём может быть проблема? Ещё несколько месяцев назад всё работало корректно, из изменений я разве что обновлял wirenboard через SSH