Три устройства, одно помещение и никакого общего правила
В помещении с тёплым полом и кондиционером есть два способа изменить температуру, а увлажнитель добавляет третий путь — к тому, как ощущается климат в комнате. Если у каждого устройства свой термостат, они начнут работать друг против друга.
Типичный сбой выглядит буднично, но обходится дорого: контур тёплого пола прогревает помещение до порога, при котором кондиционер начинает охлаждать, и весь вечер они работают друг против друга. Никаких аварий, ничего не ломается, температура в комнате примерно такая, как нужно, а счёт за энергию тихо удваивается.
Решение — не более совершенный термостат. Нужно одно правило, которое управляет всеми выходами в зоне.
Зона нечувствительности и ошибка внутри неё
Для каждой зоны задаётся зона нечувствительности вокруг уставки — здесь ±0,5 °C. Ниже неё — нагрев. Выше — охлаждение. Внутри — ничего не делать.
Именно в последней ветке реализации чаще всего ошибаются. Возникает соблазн внутри диапазона сохранять предыдущее состояние: температура ведь и так почти в норме. Но как раз удержание позволяет контуру отопления работать дальше, пока не будет пересечён порог охлаждения. Зона нечувствительности нужна, чтобы защитить компрессоры и приводы клапанов от частых коротких циклов, а не чтобы оборудование продолжало работать.
if (temperature < setpoint - hysteresis) {
write(cfg.heater, true);
if (hasCooler) write(cfg.cooler, false);
} else if (temperature > setpoint + hysteresis) {
write(cfg.heater, false);
if (hasCooler) write(cfg.cooler, coolingAllowed);
} else {
// Inside the dead band - release both outputs.
write(cfg.heater, false);
if (hasCooler) write(cfg.cooler, false);
}Флаг сезона — чтобы тёплый день не запустил охлаждение
Дом в режиме отопления не должен включать кондиционер из-за того, что одна комната с окнами на юг прогрелась после обеда. Один общий флаг сезона блокирует охлаждение во всех зонах, и правило зоны проверяет его, прежде чем запросить охлаждение. Один переключатель — одно место, где его меняют.
Один датчик описывает одну точку на одной стене
Контур регулирования хорош ровно настолько, насколько хорошо значение, которое он получает. Отдельный датчик показывает температуру там, где его установили. В помещении с остеклённым фасадом, тёплым полом и сквозняком в других точках той же комнаты температура отличается на несколько градусов — и регулятор гонится за значением, которое почти ничего не описывает.
Поэтому зона работает по агрегированному значению нескольких датчиков, которое публикуется как одна величина. Но у простого усреднения есть слабое место: датчик, «зависший» на правдоподобных 22 °C, не выглядит неисправным, а усреднение просто размазывает его ошибку по всей зоне. Сравнение каждого показания с медианой группы позволяет выявить такой датчик.
var reference = median(readings);
used = readings.filter(function (value) {
return Math.abs(value - reference) <= cfg.maxDeviation;
});
// Below three readings there is no majority to compare against,
// so the check stands down rather than guessing.
if (used.length === 0) used = readings;Что делать, если значения нет
Неисправный датчик обычно передаёт null или пустую строку. Если отбросить его и работать с оставшимися, зона продолжит работать. Если же корректных значений не осталось совсем, выходы сохраняют последнее состояние, а правило записывает предупреждение в журнал.
Здесь удержание — правильное поведение по умолчанию. Зона, которая час держит последнее состояние, — это проблема комфорта. Зона, которая действует по ошибочному показанию, — это лопнувшая труба или компрессор, работающий при закрытом клапане.
Чек-лист климатической зоны
- Всеми выходами в зоне управляет одно правило — отоплением, охлаждением и всем, что влияет на ощущение климата в помещении.
- В зоне нечувствительности оба выхода отключаются, а не сохраняют предыдущее состояние.
- Охлаждение блокируется флагом сезона, общим для всех зон.
- Температура зоны — агрегированное значение, а не показание одного датчика.
- Выбросы отсекаются по медиане, а не попадают в среднее.
- Некорректное показание фиксирует выходы и вызывает предупреждение — но никогда ими не управляет.
- Новая зона добавляется блоком конфигурации, а не копией программы.
Как это работает на объекте
Эта логика работает в доме площадью 350 м² с семью зонами. В опубликованном экспорте адресов видны все уставки, текущие температуры и выходы отопления, с которыми работают правила, — с поиском и выгрузкой в CSV.
Кейс: климат в доме 350 м² с полным экспортом адресовУслуга: программирование KNX