Pull to refresh

От желания управлять газовым котлом удалённо до полной автоматизации отопления дома

Level of difficultyMedium
Reading time6 min
Views34K

В статье расскажу про свой путь разработки DIY железок для работы с Home Assistant с целью автоматизации отопления в частном доме.

Глава 0. Предыстория

Захотелось построить дом. Дом построили, встал вопрос с отоплением и управлением, а так как в доме иногда отсутствовали по несколько месяцев, то переплачивать за газ не очень-то и хотелось. Газа ведь магистрального нет, но «мы скоро проведем». До этого «скоро» закопали газгольдер, а газ там в +-10 раз дороже магистрального. Пытливый ум решил: будем поддерживать в доме температуру 15 градусов, когда там никого нет. Как это сделать? Повесить контроллер/термостат для котла. Есть ли готовые решения на рынке? Есть, но мало. Или плохо искал.

Глава 1. Изучаем рынок

На рынке есть некоторые готовые решения, например, ZONT. Для большинства он бы подошел, но в моём случае хотелось управлять всем этим добром из Home Assistant, потому что зоопарк из приложений не нравится. А оно этого не умеет. Точнее, умеет, но через непубличное API. А это значит, что в самый неподходящий момент кто-то из разработчиков задеплоит новую версию API и наша «интеграция» превратится в тыкву.

Все остальные предложения оказались такими же «облачными». Хотя сейчас есть железо и софт от WirenBoard, но сейчас это уже не важно.

В итоге, встает выбор, использовать ZONT и костыли, либо делать что-то своё.

Глава 2. Делаем что-то своё

Ищем документацию по OpenTherm, а её особо-то и нет, кроме OpenTherm Protocol Specification v2.2 от 2003 года, всё очень секьюрно. На github нашлась единственная нормальная библиотека для работы с протоколом - OpenTherm Library. И там же примеры. Простенькие и без деталей.

Спустя 20 минут пару дней получаем что-то, что умеет чуть-чуть управлять котлом. Добавляем WiFiManager для удобства настройки подключения к Wifi и… оно нормально не работает. Потому что OpenTherm Library по дефолту блокирующая. То есть, когда в коде ожидается ответ от котла, то микроконтроллер занят ожиданием. Фиаско.

Ладно, подумал я, добавим шедулер! Пока библиотека ждет ответа, займемся чем-нибудь другим, например, веб-сервер ответит на запросы. Звучит прекрасно. Правда, шедулер пришлось чуть-чуть переписать. И в OpenTherm Library внести небольшое изменение.

В какой-то момент я хотел все сжечь, установить Zont и прибить его костылями к HA.

Но, спустя некоторое время месяц получили вполне себе результат: из Home Assistant можно устанавливать температуру теплоносителя. Но задача была другая – поддерживать заданную температуру в доме, а не в теплообменнике котла.

Глава 3. Всё еще делаем что-то своё

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

Дописываем код, тестируем. Видим медленный нагрев дома или раскачку системы, когда в доме то 25, то 19 градусов, а стабилизация занимает время. Всё из-за того, что отопление – процесс инертный.

Изучив другие возможные варианты, останавливаюсь на погодозависимом регулировании (эквитермических кривых). Алгоритм худо-бедно описан в документации к некоторым термостатам для котлов, но формул для расчёта нет. Максим Вдовин провел аппроксимацию и выложил данные для расчёта, за что ему спасибо.

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

Первые несколько месяцев я брал уличную температуру из интеграции Weather в Home Assistant, но точность её оставляла желать лучшего, поэтому температура в доме немного плавала, в пределах 1-2 градуса от установленной.

Решение оказалось простое – вынос внешнего датчика на улицу и съем показаний с него. Пока ехал датчик DS18B20, напечатал будку Стивенсона (метеорологическая будка), чтобы исключить влияние осадков и солнца на показания.

Пару часов на дописывание прошивки, добавление фильтрации показаний от шума. Заливаем.

Подозрительно посмотрев на то, что всё работает так, как задумано, оставил в покое почти на полтора года. 

Глава 4. Тесты и наблюдения

За оставшиеся 3-4 холодных месяца и всю следующую зиму контроллер показал себя весьма достойно: невзирая на суточные колебания температуры от -30 до +2, в доме поддерживалась установленная температура.

За лето были добавлены новые функции, причёсан код, добавлена полная интеграция в HomeAssistant через MQTT Auto Discovery, спроектирована и собрана нормальная плата.

После тестов решил выложить проект на Github. Код открыт и бесплатен. На странице есть файлы для производства и сборки платы.

В последней версии также стало возможно подключать еще один датчик DS18B20 для определения температуры внутри дома. Но лично мне удобнее через MQTT отправлять на контроллер температуру с ZigBee датчиков.

В целом, работа контроллера меня сейчас более чем устраивает. За кадром осталось много не очень интересного и скучного: разработка заняла около года и ведется до сих пор. 

Глава 5: магистрального газа все еще нет

Так как «скорое подключение» затянулось, а газ временами был по 25-35р за литр, не давала покоя мысль, что по ночному тарифу отапливать дом электричеством вроде бы дешевле.

Набросав табличку в Excel с расчётами, было ясно, что мысль была неплохой. В среднем, в смешанном цикле (днем – газ, ночью – электричество) за год должно получиться дешевле на 24%. При стоимости электрического котла в 57 000 р., окупаемость такого решения чуть больше 2.5 лет.

Пример расч
Пример расчётов

Этим же годом Baxi выпустили электрический котел Ampera, который, по удачному совпадению, умеет Opentherm. Случайности не случайны, и спустя некоторое время котёл был установлен параллельно газовому.

К нему был собран и подключён второй контроллер, а в Home Assistant создана автоматизация, переключающая котлы в зависимости от тарифа на электроэнергию и стоимости газа на момент заправки. Оправдает ли себя это решение – время покажет, в крайнем случае, будет как резервный.

Глава 6. Телеметрия

Как писал ранее, из-за отсутствия магистрального газа, у меня закопан газгольдер. По умолчанию на них установлен механический уровнемер поплавкового типа с таким же механическим индикатором.

Например такой
Уровнемер механический
Уровнемер механический

То есть, если хочется зимой проверить уровень, то будь добр его найти под снегом, раскопать крышку от снега и посмотреть. И потом желательно закопать.

Изучив рынок, снова не нашел решений, которые могут работать локально и могут интегрироваться в Home Assistant. Или опять плохо искал. Гуглится по запросу: телеметрия для газгольдера.

В процессе изучения рынка стало понятно, что нужно отдельно искать датчик и документацию к нему с референсными значениями. Все доступные датчики работают по принципу датчика холла, в России возможно приобрести SRG 487-530-2001, под который и был написан софт.

SRG 487-530-2001

Дабы не утомлять читателя очередной историей с разработкой девайса, скажу так: всё было гораздо проще и быстрее. От макета до нормальной платы ушло чуть больше пары месяцев. Дальше приходилось немного корректировать матрицу показаний, так как референсных значений для этого датчика найти не удалось.

Для отслеживания расхода газа в Home Assistant (через панель Energy) была добавлена функция счётчика. С ней не всё гладко, так как в HA невозможно считать газ в литрах, поэтому используется конвертация в м3, возможно в дальнейшем это исправят.

Проект тоже был опубликован на Github. Там же есть файлы для производства и сборки платы.


Глава 7. Заключительная

Собственно для чего все это делалось? Для автоматизации процессов и удобства, для управления всеми устройствами умного дома из одного приложения. И по фану. Так что цель достигнута.

Примеры дополнительных автоматизаций в HA, которые можно создать:

  1. Push уведомления, если любой из котлов падает в ошибку

  2. Push уведомления при критически низком уровне газа в газгольдере

  3. Push уведомления при затоплении газгольдера (грунтовыми водами)

  4. Автоматическое переключение на электрический котел, когда действует ночной тариф (23:00-07:00) при условии, что цена за кВт тепла из газа выше, чем цена за кВт тепла из электричества.

  5. Установка температуры в доме на 15 градусов, когда дом встает на охрану (когда никого нет)

  6. Установка комфортной температуры, когда дом снимается с охраны.

  7. Установка ночной температуры, когда дом переводится в режим «ночь»

Пример главного экрана в Home Assistant
Пример главного экрана в Home Assistant
Еще скриншоты
Пример страницы девайса котла
Пример страницы девайса котла
Пример страницы девайса газгольдера
Пример страницы девайса газгольдера

Планы на будущее

Несмотря на то, что более чем за несколько лет платы ESP8266 чувствуют себя нормально и зависаний не замечено, в сети бытует мнение, что аппаратный watchdog на них работает некорректно и у людей в целом на этой плате встречаются зависания. Для исключения этой проблемы люди делают внешний watchdog на attiny13 или рекомендуют использовать esp32. Поэтому в будущем есть в планах перейти на эту платформу, прикрутив возможность использования BLE датчиков температуры.

Ссылки на репозитории

Tags:
Hubs:
Total votes 42: ↑41 and ↓1+40
Comments105

Articles