Включение ТП в неустановленное время

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


помогите найти причину самопроизвольного включения ТП.
diag_output_ANNXOEMQ_2025-08-22-19.17.27.zip (434,6 КБ)

// Глобальные переменные
var SETPOINT = 22;
var HYST = 1;
var enabled = true;

// Виртуальное устройство для термостата
defineVirtualDevice(‘vdForThermostat’, {
title: ‘Virtual device for Thermostat’,
cells: {
btnStartStop: {
title: ‘Start/Stop’,
type: ‘pushbutton’
},
setpoint: {
title: ‘Уставка’,
type: ‘range’,
value: 27,
max: 35,
min: 20
},
enabled: {
title: ‘Разрешено’,
type: ‘switch’,
value: true
},
ReadOnlySwitch: {
title: “Read-Only Switch”,
type: “switch”,
value: false,
readonly: true
},
}
});

// Обработчик изменения уставки
defineRule(‘updateSetpoint’, {
whenChanged: ‘vdForThermostat/setpoint’,
then: function(newValue, devName, cellName) {
SETPOINT = parseInt(newValue); // Обновляем глобальную переменную SETPOINT
// dev[“virtualDevice”][“ReadOnlySwitch”] = newValue;
debug(‘Новая уставка ТП Лоджия: {}’, SETPOINT);
}
});

// Правило управления термостатом
var thermostatRule = defineRule(‘thermostat’, {
whenChanged: ‘wb-w1/28-00000fabb48a’,
then: function(newValue, devName, callName) {
debug(‘Температура ТП лоджия = {}’, newValue);

// Проверяем температуру
if (newValue <= SETPOINT - HYST) {
  if (!dev['wb-mr6c_236/K5']) { // Включаем нагрев
    dev['wb-mr6c_236/K5'] = true;
    log('Нагрев ТП лоджия включен');
  }
} else if (newValue >= SETPOINT + HYST) {
  if (dev['wb-mr6c_236/K5']) { // Выключаем нагрев
    dev['wb-mr6c_236/K5'] = false;
    log('Нагрев ТП лоджия выключен');
  }
}

}
});

debug(‘Термостат Лоджия включен авторун’)
// Правило обработки кнопки Start/Stop
defineRule(‘buttonTrigger’, {
whenChanged: [‘wb-grio/A1_IN’, ‘vdForThermostat/btnStartStop’],
then: function(newValue, devName, cellName) {
if (devName === ‘wb-grio’ && !newValue) {
return;
}

if (enabled) {
  disableRule(thermostatRule);

// disableRule(cronStopRule);
// disableRule(cronStartRule);
enabled = false;
dev[‘wb-mr6c_236/K5’] = false;
enabled = false;
dev[“vdForThermostat”][“ReadOnlySwitch”] = false;
debug(‘Термостат Лоджия выключен’);
}
else {
enableRule(thermostatRule);
// enableRule(cronStopRule);
// enableRule(cronStartRule);
enabled = true;
dev[“vdForThermostat”][“ReadOnlySwitch”] = true;
debug(‘Термостат Лоджия включен’);
}
}
})

// Правило автоматического включения термостата
//var cronStartRule = defineRule(‘cronStartThermostatTrigger’, {
// when: cron(‘0 7 * * *’), // Включается каждый день в 07:00
// then: function() {
// enableRule(thermostatRule);
// dev[‘vdForThermostat/enabled’] = true;
// debug(‘Термостат cron лоджия включен’);
// }
//});

// Правило автоматического выключения термостата
//var cronStopRule = defineRule(‘cronStopThermostatTrigger’, {
// when: cron(‘0 1 * * *’), // Выключается каждый день в 01:00
// then: function() {
// disableRule(thermostatRule);
// dev[‘vdForThermostat/enabled’] = false;
// dev[‘wb-mr6c_236/K5’] = false;
// debug(‘Термостат cron лоджия выключен’);
// }
//})

реле тож на графике видно что включается

Добрый день!

Рекомендую проверить показания датчика температуры в момент сработки — нет ли аномального поведения, например, обнуления значений. Желательно вывести температуру датчика в лог при срабатывании реле. Судя по графику, вероятный источник проблемы — именно датчик.

Также рекомендую переделать правило на использование готового сценария. Сценарии теперь доступны в релизе, подробнее — здесь.

Добрый день, удалось ли решить вопрос?

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

Добрый день!

В коде управление реле завязано напрямую на wb-w1/28-00000fabb48a. Если датчик периодически отдаёт аномальное значение, то условие

if (newValue <= SETPOINT - HYST)

срабатывает, и реле включается.

Рекомендую:

  • записывать температуру в лог при каждом переключении реле — это поможет отследить момент ошибки
  • добавить защиту от ошибочных значений, например, фильтрацию выбросов или проверку диапазона допустимых температур

Добрый день,
Удалось ли решить вопрос?

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


29.812
а датчик считывает 21.937

Добрый день!

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

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

Добрый день!

Попробуйте пересоздать сценарий, удалив старый и создав новый.

1 сообщение было перенесено в новую тему: Проблема со сценарием термостата

Добрый день!

Смог воспроизвести “некорректное” отображение температуры в сценарии.
Это ожидаемое поведение, так как для сценария создаётся собственный топик для текущей температуры. При отключении сценария температура не изменяется, так как виртуальное устройство «термостат» фактически отключено.

Добрый день,
Удалось ли решить вопрос?


Да ,все ок, действительно температура остается с верхней точке пока повторно не включишь.
Спасибо.

1 лайк