В статье расскажу про свой путь разработки 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 датчиков температуры.

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

Комментарии (83)


  1. MAXH0
    30.09.2023 18:09
    +1

    Класс!!! Мне что-то такое нужно. Как я понимаю котел нужен изначально "умный" поддерживающий регулирование. Или все решается и на обычном котле, достаточно установить умный вентиль подачи газа...


    1. LazyDev Автор
      30.09.2023 18:09
      +1

      Котел нужен с opentherm, это не делает его умным, просто по этому протоколу можно с котлом "общаться"

      Установки доп вентиля будет недостаточно, там же еще управление поджигом, горелкой, насосом и т.д. А это все делает софт котла. Котлу по opentherm мы просто сообщаем необходимую температуру теплоносителя.

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


      1. igorsd
        30.09.2023 18:09

        Или с ebus. Но с документацией там всё, мягко говоря, не очень хорошо.


        1. alex-open-plc
          30.09.2023 18:09

          Та ладно!
          github забанили?
          https://github.com/eBUS/adapter


          1. igorsd
            30.09.2023 18:09

            С hardware вопросов никаких и нет. Протокол закрыт, что-то подобрано энтузиастами методом реверс инжениринга/научного тыка, что-то нет. Что-то на одном железе работает, на другом - нет, и т.п.

            Но в целом, в issues к ebusd можно найти практически все что потребуется. )


      1. MAXH0
        30.09.2023 18:09
        +1

        Посмотрел котлы... В принципе не стоит и связываться с хенд-мейд котлом. Цены ожидаемые и подъемные. Тем более сертификация газового оборудования убьет идею на корню...


  1. Evengard
    30.09.2023 18:09

    Немного ограниченного оффтопа, может вы знаете, или ещё кто: а скажите пожалуйста, а всякие платы адаптеры ZONT позволяют в себя принимать команды по, например, OpenTherm, а отдавать уже котлам в их проприетарном протоколе? В частности, интересуют всякие платы совместимости с котлами Navien - у них не у всех есть OpenTherm (к сожалению, у меня один из таких), однако ZONT каким-то образом поддерживает его проприетарный протокол. Думал, можно ли купить адаптер-переходник ZONT (а ля https://zont-online.ru/product/universalnyj-adapter-cifrovyx-shin-eco/) и общаться с ним через OpenTherm. Это кажется проще, чем пытаться реверсить протокол Навьена, который нигде не задокументирован)


    1. malykhin
      30.09.2023 18:09
      +1

      Есть такое https://ectostroy.ru/heating-control/adapter-navien, с ним можно общаться по modbus. Уже год живу с ним - полет нормальный. Не все идеально, правда. Но мне все что нужно - это только температуру носителя менять. Котел обычный navien deluxe s. Но контуром горячей воды не пользуюсь, поэтому не проверял как он дружит с горячей водой. И еще почему-то не отдает ошибку низкого давления воды, хотя отсутствие газа показывает нормально.


      1. Evengard
        30.09.2023 18:09

        Спасибо, интересно.


      1. ASD2003ru
        30.09.2023 18:09
        +1

        А не могли бы вы немного рассказать об этом. Тоже котёл Navien Delux S, купил WiFi пульт но там протокол закрытый. Хотелось бы как то пробросить в HA. Я правильно понимаю что этот адаптер только переведет в протокол modbus и придется еще городить железяку modbus-tcp?


        1. LazyDev Автор
          30.09.2023 18:09

          От wirenboard есть modbus-tcp. В HA modbus работает корректно, но сущности нужно описывать самостоятельно.


        1. malykhin
          30.09.2023 18:09

          У меня rpi с HA прямо рядом, поэтому самый дешевый usb-rs485 свисток. Ну и 485 можно по одной витой паре прокинуть на десяток метров. Опять же, если уже есть Wi-Fi пульт - то у него по-любому какое-то api есть, можно его расковырять. Я тоже про этот пульт думал, но вариант с адаптером сильно дешевле оказался.


          1. Evengard
            30.09.2023 18:09

            С пультом к слову есть вот этот проектик: https://github.com/rudybrian/PyNavienSmartControl (ну и вообще хватает их на Гитхабе), но минус в том, что если интернет отвалится, то и этот самый протокол превращается в тыкву, как по мне так если делать, так независимо от наличия или отсутствия инета.

            Если что, я хочу его динамически настраивать в зависимости от показаний датчиков температуры, располагающихся в других комнатах. Удалённое управление мне не сильно нужно, точнее нужно чтобы всё работало без инета )


      1. Evengard
        30.09.2023 18:09

        Кстати не подскажете, он в разрыв между пультом и котлом ставится, взамен пульта, или как он подключается?


        1. Evengard
          30.09.2023 18:09

          Вопрос отпал после чтения документации) В разрыв, но сам пульт будет что-то показывать только в режиме "байпаса".


  1. igorsd
    30.09.2023 18:09

    Отопление то в итоге какое? Теплые полы? Радиаторы?


    1. alex-open-plc
      30.09.2023 18:09

      С теплым полом идея не прокатит. Очень большая (длительная) инерция.


      1. andreyr82
        30.09.2023 18:09
        +1

        Очень даже подходит. Отапливаю дом только тёплыми полами от теплового насоса с подобным алгоритмом.


    1. LazyDev Автор
      30.09.2023 18:09
      +1

      Радиаторы. С теплым полом не вижу проблем, принцип тот же, но подбор кривой займёт больше времени, pid лучше не использовать.


      1. diaskzn
        30.09.2023 18:09

        Для домов отапливаемых только водяным теплым полом вообще не подходит. Такой дом очень медленно остывает.


  1. alex-open-plc
    30.09.2023 18:09

    Температура наружного воздуха... Может таки учитывать теплоотдачу стен? Хотя бы усредненную, Тогда 2 датчика, на наиболее характерной части стены: внутренней и наружной.
    Второе: а как с теплым полом? Инерция самого пола часа 3-4... Т.е. в этом случае идея не сработала.
    Управлять газовым котлом... Пробовал. Самое кривое решение. Лучше управлять игольчатыми клапанами. В зависимости от сезона менять температуру нагрева воды колом.
    Да и если несколько контуров, то как иначе?


    1. LazyDev Автор
      30.09.2023 18:09

      Для погодозависимого регулирования нужна температура наружного воздуха, алгоритм описан тут. Кривая N как бы отражает теплопотери дома/помещения.

      Для тёплого пола все то же самое, подобрать коэффициент N так, чтобы температура поддерживалась на уровне 20 градусов, потом крутить коэффициенты K, T. Но коэффициент T задирать смысла нет из-за инерционности тёплого пола.

      Если теплопотери в разных помещениях дома сильно разные или целевая температура в разных помещениях разная, то там можно поставить управляемые термоголовки и ими дополнительно регулировать.


      1. alex-open-plc
        30.09.2023 18:09

        Гладко было на бумаге...
        Батенька, я 30 лет занимаюсь тепло-газо снабжением и вентиляцией... (расчеты, автоматизация разного уровня)


        1. LazyDev Автор
          30.09.2023 18:09

          Не в формате спора. Чем нагрев теплоносителя для тёплого пола отличается от нагрева теплоносителя для радиаторов? И почему ПЗА для тёплого пола не будет работать?

          Тёплый пол дольше нагревается и дольше остывает - это факт. Однако даже с теплым полом люди регулируют температуру теплоносителя.


          1. igorsd
            30.09.2023 18:09

            Вообще не трогаю температуру теплоносителя. Немного подкручиваю целевую температуру поверхности пола, для каждого контура свою причем.


            1. Alex_Jet
              30.09.2023 18:09
              +2

              Это смотря как организована система отопления. У меня нет низкотемпературного коллектора. По сути - от газового котла сразу идёт на коллектора ТП (отопление только с помощью ТП). Соответственно, изменением температуры подачи котла осуществляется терморегуляция (по эквитермальной кривой).


              1. igorsd
                30.09.2023 18:09

                Вариантов много, да...


  1. bitver
    30.09.2023 18:09
    +2

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

    Не встречал ещё котлов, которые не имеют 2х контактов для реле термостата, с завода там перемычка (всегда включён).


    1. LazyDev Автор
      30.09.2023 18:09

      Так я не задавался целью управлять котлом в релейном режиме :)


      1. lxnvr
        30.09.2023 18:09
        +5

        Ну хз. А зачем такая точность, если в доме все равно никого нет ? У меня обычный термостат и реле, колебания не более 2 градусов (выставил 16, значит будет от 15 до 17)


        1. LazyDev Автор
          30.09.2023 18:09

          Мне не понравилась идея постоянно греть теплоноситель, например, до 60 градусов. Осенью/весной в этом нет смысла. Дом будет перегреваться, т.к. радиаторы все равно ещё какое-то время будут отдавать тепло.

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


          1. vbifkol
            30.09.2023 18:09
            +1

            а почему бы не греть теплоноситель до 80 на гидрострелке, а с нее уже "умно" разруливать, включая и выключая насосы на радиаторы?


            1. LazyDev Автор
              30.09.2023 18:09

              Можно и так. Но это, вроде бы, экономически оправданно на больших площадях с большим количеством контуров.

              Было бы интересно посмотреть на график температуры внутри помещения при таком подходе. Будет ли перегрев помещений из-за того, что радиаторы какое-то время будут отдавать тепло даже после остановки насосов?


              1. vbifkol
                30.09.2023 18:09

                Но это, вроде бы, экономически оправданно на больших площадях с большим количеством контуров.

                Ну это экономически относительно останова котла, наверное, никогда не оправдано - контур до гидрострелки все равно что-то потребляет, опять же насос котла работает. Но это реально копейки, зато гарантия что по крайней мере в котельной будет тепло.

                Будет ли перегрев помещений из-за того, что радиаторы какое-то время будут отдавать тепло даже после остановки насосов?

                А они в любом раскладе отдают тепло.


                1. LazyDev Автор
                  30.09.2023 18:09

                  А они в любом раскладе отдают тепло

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

                  И если нагреть их до 40 и закрыть контур/остановить котел, то перегрев не будет столь значительным. В небольших спальнях я это наблюдал воочию.

                  ПЗА как раз позволяет подобрать приемлемую температуру теплоносителя исходя из температуры снаружи.


                  1. vbifkol
                    30.09.2023 18:09

                    А кто заставляет греть батареи до 80? Гидрострелка же, можно и меньше делать чем в малом контуре.


                    1. LazyDev Автор
                      30.09.2023 18:09

                      Если она есть есть - ок. Но чаще в небольших домах мне встречаются схемы, где один насос в котле и коллектор после котла.

                      Например для одноэтажного дома 130 м2 с 6 небольшими контурами (кухня, прихожая, спальня 1, спальня 2, санузел, гостиная) ставить гидрострелку (25к) и 6 насосов (по 6к) как-то избыточно, хватает одного коллектора за 15к и насоса котла.

                      Но это вкусовщина. Естественно, если заказчик хочет или того требуют расчёты, то почему нет.


      1. sshmakov
        30.09.2023 18:09
        +1

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

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


  1. nikolz
    30.09.2023 18:09
    +2

     Аппаратный watchdog лучше сделать на основе микромощного таймера типа TPL5110 с функцией сторожевого , интервалы 100мс до 7200с , потребляемый ток в рабочем режиме 35 nA.


    1. propell-ant
      30.09.2023 18:09
      +4

      Да, 35 nA - это очень важно для системы, которая ночью переключается на электрический котел мощностью 24 кВт и кушает 21А из трехфазной сети ;)


      1. nikolz
        30.09.2023 18:09
        +2

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

        Еще на таймере проще сделать сторожевик, чем лепить его на отдельном микроконтроллере.


        1. iig
          30.09.2023 18:09
          +2

          может годами работать от батарейки

          А потом, в один неприятный момент посреди ночи, батарейка неожиданно издохнет..


          1. nikolz
            30.09.2023 18:09

            Для этого измеряется напряжение батарейки . У ESP8266 есть АЦП. Его точности достаточно. Но возможно, что раньше,у котла закончится ресурс.


  1. Lunti
    30.09.2023 18:09
    +1

    Я конечно не сильно в теме, но первое, что приходит на ум: не учитывается ветер, влажность и инсоляция. Есть понятия температуры "по ощущению" в которой не зря учитываются все эти факторы. При сильном ветре и влажности теплопотери будут куда выше чем при штиле и солнце при одинаковых температурах


  1. AlexHighTower
    30.09.2023 18:09
    +1

    Пытался решить такую же задачу (правда на wb с из модулем ot)
    Собственно есть значение датчика температуры внутри помещения и есть целевая температура, которую хотелось бы видеть.
    По сути, сейчас есть некая "табличка" по которой выставляется целевая температура теплоносителя в зависимости от внутренней температуры. "работает", но качели имеются
    Пробовал PID, но столкнулся в проблемой интерпретации его выходного значения 0-100 в значение температуры теплоносителя.
    Это ещё усложняется тем, что мой котёл понимает температуры теплоносителя только 40+ (0 — как вы выключено, но работает режим "антизамерзание теплоносителя") и получается ситуация, то по пид должно быть, скажем 30, котёл значение принимает, при этом просто гоняется теплоноситель и изредка на пару секунд врубается горелка, температура теплоносителя поднимается до 40, горелка отключается и дальше гоняется… в итоге качели остаются но в более грустной форме (плюс постоянно работающий циркуляционный насос)
    по вашему коду не совсем смог понять как у вас именно управляется (((


    1. alex-open-plc
      30.09.2023 18:09

      Есть понятие: балансировка системы...
      Есть регулируемые игольчатые клапана...


      1. AlexHighTower
        30.09.2023 18:09
        +1

        а по рабоче-крестьянски?
        прям вот как быть и что делать?


    1. LazyDev Автор
      30.09.2023 18:09

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

      На некоторых котлах отключение контура отопления останавливает насос.


      1. alex-open-plc
        30.09.2023 18:09

        А если один из контуров отопления - полотенцесушитель?


        1. LazyDev Автор
          30.09.2023 18:09
          +1

          Тогда на этапе проектирования ставится электрический полотенцесушитель. Гонять 24квт котел ради одного полотенчика - не есть хорошо и не оч логично :)

          Понятно, что это решение подойдёт не всем, можно много вводных придумать. Скажем так, я описал решение для конкретно своего дома, а проект отопления тут типовой.


          1. vbifkol
            30.09.2023 18:09

            современные котлы модулируемые, он не всю жизнь на 24 кВт.


            1. LazyDev Автор
              30.09.2023 18:09
              +2

              Даже с модуляцией у котла есть в спеках параметр "минимальная полезная тепловая мощность".


      1. AlexHighTower
        30.09.2023 18:09

        сейчас так и сделал
        температура плавает в пределах +-1 градус от целевой
        когда спустились ниже на 0.5 — включаю котёл на температуру теплоносителя 60 градусов, как подобрались до -0.2 до цели — ставлю 0, что "выключает" котёл (остаётся пресловутый режим "антизаморозка")
        исходя их статичности системы и наблюдается вращение температуры вокруг нужного
        плюс сильно влияет


        • температура на улице
        • тенденция и скорость её изменения
        • ветер на улице

        но по сути это ничем не отличается от тупого термостата с реле, который просто включает и отключает котёл, ничего "умного" нет и никаких плюшек от протокола ОТ тоже нет (ну только что видим что с самим котлом)


        1. LazyDev Автор
          30.09.2023 18:09

          У вас через настройки котла нельзя минимальную температуру поставить ниже 40? Или попробовать через OT записать.

          Регулировка 40..90 в межсезонье без гистерезиса конечно даст качели, потому что эта температура избыточна :)

          Попробуйте ПЗА + гистерезис.


          1. AlexHighTower
            30.09.2023 18:09

            можно поставить любую от 0 до 90, но с учётом того что у котла по внутренним настройкам минимум 40, а максимум 85, то
            0 — трактуется как "выключить"
            1-39 — он пытается держать температуру теплоносителя на этом уровне, выражается в том, что на короткое время включается горелка, температура достаточно быстро доходит до 40, горелка выключается, и просто работает циркуляционный насос
            пробовал в таком режиме работать, на качели это положительно не влияет


            по поводу ПЗА — вот у меня и вопрос, в любом случае, на что можно влиять программно?:


            • на целевую температуру теплоносителя
            • "время работы" (назовём это так), т.к. у котла своя "голова" и он живёт своей жизнью, на эту целевую выходит по своей логике, сам её поддерживает тоже своей логикой
            • работа циркуляционного насоса, что позволяет попытаться более плавно остывать. в моих опытах после отключения горелки работа насоса больше 10 минут особо смысла не имеет… если сразу отключить (точнее сказать что греть не надо, а котёл насос уже отключит попозже исходя из своих настроек и понимания), то ни заметного "прогрева" или более длительного "поддержания" температуры нет. а вот если сразу отключить, то да, будет хуже, чем если эти 10 минут погонять теплоноситель. (10 минут подобрал эмпирически)


            1. LazyDev Автор
              30.09.2023 18:09

              ПЗА позволяет только рассчитать необходимую температуру теплоносителя и отправить её котлу.

              То есть результат ПЗА может быть и 30 градусов. Но, как я понял, у вас котел будет все равно греть до 40.

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

              Ну а когда результат ПЗА будет выше 40 градусов, то все должно работать нормально и без гистерезиса.

              Хотя в некоторых случаях целесообразно оставить включенным. У себя использую, т.к. днем при ясной погоде через панорамные и мансардные окна солнце нагревает помещение дополнительно.


              1. AlexHighTower
                30.09.2023 18:09

                Ладно, мы в рамках НА работает, поэтому вот взял я прекрасный термостат
                Он умеет и учитывать температуру на улице, и PID умеет и её кучу всего учитывать
                На выходе у него:


                • переключатель вкл\выкл отопление
                • если используется pid, то воздействия 0-100%

                и вот у меня вопрос, если состояние вкл\выкл я ещё могу понять частично интерпретировать, то с воздействием 0-100 — не могу. интуитивно это должно отражаться в значении уставки температуры теплоносителя, или нет?


                ну и такие мелочи как инертность системы… после подачи сигнала на начало нагрева, эффект проявится не сразу, аналогично и после выключения, можно по факту поднять выше чем надо, и не на 0.5 градуса, а сильно выше


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


                вообщем, я пока не могу для себя решить эту задачу (((


                1. vbifkol
                  30.09.2023 18:09

                  и вот у меня вопрос, если состояние вкл\выкл я ещё могу понять частично интерпретировать, то с воздействием 0-100 — не могу. интуитивно это должно отражаться в значении уставки температуры теплоносителя, или нет?

                  ПИД это процент мощности. Хотите - по времени (ШИМ), хотите - по температуре теплоносителя (30-80 или сколько там у Вас).

                  ну и такие мелочи как инертность системы… после подачи сигнала на начало нагрева, эффект проявится не сразу, аналогично и после выключения, можно по факту поднять выше чем надо, и не на 0.5 градуса, а сильно выше

                  ПИД это и есть регулирование с учетом инертности. Без инертности можно тупо старт-достижение уставки-стоп-достижение гистерезиса-старт. ПИД работает в стратегиях "дальше от уставки - больше кочегарим" (П-компонент), "скоро уставка, притухнем" (И-компонент) и "если так дальше кочегарить, перелетим, притухнем" (Д-компонент). ПИД - хрень настраиваемая итерационно, более того, ПИД корректен только в боль-мень одинаковых условиях, по-хорошему надо настраивать несколько ПИДов для разных температур за бортом и/или режимов вентиляции/проветривания.


                  1. AlexHighTower
                    30.09.2023 18:09

                    ПИД это процент мощности. Хотите — по времени (ШИМ), хотите — по температуре теплоносителя (30-80 или сколько там у Вас).
                    вот тут можно подробнее, желательно с примером, т.к. в контексте котла не до конца понимаю как применить
                    фактически, я могу котлом управлять только передавая целевую температуру теплоносителя, всё, остальное он делает сам по своей логике
                    если выход пид — процент, то не надо 0-100% привести к моим доступным 40-75 градусам?
                    шим — не уверен что тут хорошо применим (к газовому котлу для отопления настенными батареями, для электрического тёплого пола выглядит более логично)
                    и тут ещё вопрос расхода электроэнергии на циркуляционный насос. в моём котле есть параметр (меняемый только с лица) — время выбега циркуляционного насоса, т.е. сколько времени он будет работать после того как погасла горелка, это тоже оказывает эффект на переток горячего теплоносителя и отдачу тепла. и не помню поведение котла, когда идёт понижение целевой температуры теплоносителя, а обратка выше этой уставки, он вроде просто гоняет теплоноситель насосом… или тут вступает в дело время выбега… реально не помню...


                    1. LazyDev Автор
                      30.09.2023 18:09

                      На гитхабе этого термостата есть описание:

                      ПИД-регулятор вычисляет время, в течение которого нагреватель должен оставаться включенным в течение периода ШИМ, чтобы достичь заданного значения температуры, например, если ШИМ установлено на 15 минут, если выходной сигнал равен 100%, нагреватель будет оставаться включенным в течение следующих 15 минут ШИМ. период. Если выход ПИД составляет 33%, нагреватель будет включен только на 5 минут.

                      Это применимо к обогревателям, которые имеют просто режимы вкл/выкл. Для котлов это псевдорелейный режим. ШИМ тут условный, с периодами в несколько десятков минут.


                    1. vbifkol
                      30.09.2023 18:09

                      шим — не уверен что тут хорошо применим (к газовому котлу для отопления настенными батареями, для электрического тёплого пола выглядит более логично)

                      Ставите несущую частоту ШИМ 10 минут и все норм. А температуру теплоносителя меняете по сезону с перенастройкой ПИД.


  1. michalbl4
    30.09.2023 18:09
    +2

    Мой путь был похожим на путь автора. Тоже переехал в дом, стал строить систему на Home Assistant, выяснил, что котел с OpenTherm. Готовое заводское решение я нашёл - контроллер Nevoton на той же самой ESP. Но он не заработал почему-то. Поэтому заказал DIY-shield для WEMOS.. Прошивку нашёл ESP Home - почти все устраивает, но да, код блокирующий. Поэтому если нет сигнала от котла, то контроллер не работает. А у меня на него ещё и счётчик газа заведен. Ну да в целом устраивает. Три года работает уже.

    Этим летом добавил умные термоголовки в спальни для отдельного регулирования температуры. Ну и на днях вот поставил автоматический привод окна себе в комнату - для проветривания. Пожалуй, это почти все, что можно сделать с климатом. Разве что ещё кондиционер установить умный, но у нас в доме особо нужды в нем нет


    1. zikkuratvk
      30.09.2023 18:09

      Ооо... вы ещё многого не ощутили :-) как только вы откроете приточно - вытяжную вентиляцию, да ещё и с рекуператором тепла, вы откроете для себя новый уровень автоматизации :-)


  1. Kononvaler
    30.09.2023 18:09

    Делаю на esp32, но управление не котлом, а электроклапанами регуляторов потока энергоносителя для каждого помещения, также с PID библиотекой. Контроллер в легкую справляется с обсчетом и удержанием заданной температуры в помещении с точностью до 0.2 градуса. А котлу нужно только знать что ему можно включаться.

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

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


    1. LazyDev Автор
      30.09.2023 18:09

      Достойно отдельной статьи ;)

      Какими клапанами регулируете поток?


      1. Kononvaler
        30.09.2023 18:09

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

        Hidden text

        Электроприводы к ним такие:
        https://aliexpress.ru/item/1005004725763631.html?spm=a2g2w.orderdetail.0.0.4eb74aa6xPQvzc&sku_id=12000031529664347
        esp32wroom32d вместе с платой разработки плюс источник питания на 5 вольт 0,7А, датчик температуры DS18B20 и оптосимистор AQH2223 (ну плюс еще два резистора на всю эту братию) в легкую помещаются в тот-же подрозетник.
        Такой вот перобразователь 220 ot 5v: https://aliexpress.ru/item/33011812383.html?spm=a2g2w.orderdetail.0.0.47d74aa6278WFz&sku_id=12000022889138996
        На некоторые вместо далласовского термодатчика поставил BME280, тогда можно получать еще и показания влажности.


        1. Chupaka
          30.09.2023 18:09

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


          1. Kononvaler
            30.09.2023 18:09

            Электропривод открывается и закрывается около минуты, не может там быть гидроудара. И правильно подобранные коэффициенты PID могут удерживать и электроклапан в приоткрытом состоянии.

            я на таком отлаживался


            1. igorsd
              30.09.2023 18:09

              А подключены они у вас к чему? Какое-то реле?


              1. Kononvaler
                30.09.2023 18:09

                ESP32 управляет через твердотельное реле AQH2223

                ничего не щелкает, у меня "окно" управления выставлено в три секунды, и то из-за датчика температуры, китайского клона DS18B20, который чаще может не успевать отвечать.

                Но для такой инерционной системы как комната это мне кажется огромная скорость :))


      1. Kononvaler
        30.09.2023 18:09
        +1

        Снял показания за 2 часа с кухонного контроллера. показывает 22 +/- 0.125


  1. MaximChernyavsky
    30.09.2023 18:09

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

    Во-первых это не оптимальный режим работы ни котла, ни радиаторов. Во-вторых при температуре обратного потока ниже 61-62 градуса может быстро прийти в негодность теплоомбенник из-за кислотного конденсата на нем.

    Мой опыт показывает, что эффективней будет псевдорелейный режим с регулируемым уровнем модуляции горелки. Если система рассчитана правильно (мощность котла соответствует мощности радиаторов), то тактование будет минимальным, а узлы будут работать ближе к своей зоне КПД.


    1. AlexHighTower
      30.09.2023 18:09

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


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


      а как правильно прикинуть мощность радиаторов и под них мощность котла?


      1. MaximChernyavsky
        30.09.2023 18:09

        Самое простое это сложить теплоотдачу радиаторов (есть в паспорте, обычно самая эффективная теплоотдача на 70-75гр) и соотнести с мощностью котла. Если мощность радиаторов меньше минимальной мощности котла, то тактование будет тем больше, чем больше эта разница. Т.к котел греет быстрее, чем радиаторы могут отдать.

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

        Еще не рекомендую превышать выходную температуру выше 72-75гр, т.к в случае ППн труб, высокая температура скажется на их сроке жизни.

        У меня в итоге получилось, что в условно сбалансированной по мощности системе, рабочий такт это 2-3 часа, с рабочей температурой 70-71 и 63 на обратке. Все что я изучал на эту тему, говорит о том, что это самый эффективный режим работы по потреблению.


        1. AlexHighTower
          30.09.2023 18:09
          +1

          с документами на радиаторы — сложно, скажем там потерялись, только по сайту производителя пытаться понять что за модель и посчитать (((


          65 — это целевая, которая задаётся котлу чтобы грел, получатся на выходе
          я её опытным путём подобрал, чтобы как раз тактование уменьшить, так же ещё и придушил мощность котла с 24 до 18квт, но похоже надо ещё придушить будет
          если ставить выше, то чаще тактуется, можно и 60, особо разницы не ощутил, а вот ниже — дольше горелка работает
          трубы — шитый полиэтилен
          ещё из наблюдений, +- объём газа не меняется и примерно одинаковый для поднятия температуры в контролируемом помещении на 1 градус. в моих экспериментах с целевой температурой теплоносителя


          1. MaximChernyavsky
            30.09.2023 18:09

            Ну радиаторы одного типа плюс-минус одинаковые :) Так что можно взять для расчета любой похожий по размерам. Ручное ограничение мощности котла имеет большое значение на старте, т.к котел обычно всегда стартует на максимальной мощности и можно упереться в излишнее тактование из-за того что система не успевает разогнаться, а температура уже превышена. У меня такое было в холодном доме и с антифризом. В итоге все тактовало и не могло прогреться. А так, котел сам снизит мощность через 5-10 минут, когда будет стремиться стабилизировать заданную температуру теплоносителя. У зонта все хорошо видно на графиках :)


            1. AlexHighTower
              30.09.2023 18:09

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


              1. MaximChernyavsky
                30.09.2023 18:09

                Все так. Это ограничение максимальной мощности, сказывается в первую очередь на начале цикла. Цикл всегда стартует на полную катушку и адоптация начинается через какое-то время, может не успеть :). Сильно занижать тоже будет плохо, очень долго будет выходить на целевую температуру, если вообще сможет


  1. Gutt
    30.09.2023 18:09

    То ли я чего-то не понимаю, то ли как-то слишком сложно получилось. Если у вас обычные радиаторы отопления, то на них стоят головки терморегулятора. Если тёплый пол, то термостат электронный, управляющий узалом смешения и насосом. Воздушное отопление не рассматриваем, явно не наш случай.
    Таким образом, задача "поддерживай заданную температуру воздуха в помещении, пока температура теплоносителя позволяет", уже решена.
    Осталось поддерживать температуру теплоносителя. Котёл ведь не греет воду сразу в контуре отопления, явно в системе стоит теплоаккумулятор какого-нибудь вида, который раздаёт воду на отопление (можно брать прямо из основного контура) и горячее водоснабжение (обычно второй контур, отбирающий тепло у основного рабочего тела теплоаккумулятора через теплообменник). Я пока не видел ни одного современного газового котла для систем отопления, не поддерживающего датчика температуры теплоносителя.
    Если всё действительно так, то задача сводится к следующему.

    • Учим котёл поддерживать температуру теплоносителя в теплоаккумуляторе, заведомо достаточную для работы батарей/тёплого пола. Точность тут совершенно не важна, потери тоже небольшие -- это короткий хорошо теплоизолированный контур от котла к теплоаккумулятору.

    • Выставляем нужну температуру на задатчике батарей или тёплого пола.

    ЧЯДНТ?


    1. LazyDev Автор
      30.09.2023 18:09
      +1

      1. Котел двухконтурный. Либо греет ГВС, либо контур отопления. Теплоаккумуляторы не используются

      2. Крутилки на радиаторах не рассматривались изначально, не позволяют они автоматически поддерживать заданную температуру. Даже электронные. Съем показаний температуры вблизи радиаторов некорректен, проверено на zigbee trv. Датчик должен находиться где-то на противоположной стороне комнаты от радиаторов.

      3. Фиксированная температура теплоносителя при изменяющейся уличной температуре и лучевой системе отопления без гидрострелки и без электрических клапанов на коллекторе не даёт возможности точно регулировать температуру помещения.

        Поэтому контроллер регулирует температуру теплоносителя. А котел просто эту температуру поддерживает. Дополнительно для снижения температуры в спальнях в ночное время стоят электрические клапана на коллекторе на контуры спален.


    1. Kononvaler
      30.09.2023 18:09
      +3

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


  1. pistoletov
    30.09.2023 18:09

    У zont есть API если че. Разве что если нет желания с их облаком работать да и just for fun. Для себя остановился на zont. Квартира без уд была изначально. Так что зонт у меня теперь и сигнализация и датчик протечки .


  1. laver12345
    30.09.2023 18:09

    С отоплением такая же штука была, правда газ обычный, но хотелось запилить. Котёл у меня совсем тупой напольник, который может только греть воду и все. Температуру в доме регулирую термоголовками на батареях, а подачу в систему регулирую с помощью трех-ходовых кранов и мощности насосов. Тут конечно алгоритм, первый что пришёл в голову:

    1. Задаю разницу температур на подаче и обратке.

    2. Если разница температур превысила порог, то открываю краны (10 позиций). Если меньше порога, то закрываю.

    3. Если расход тепла большой и полное открытие не помогло, то начинаю повышать мощность насоса (5 уровней)

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

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

    1. не греть воду в котле, если нет разбора (когда бойлер с тёплой водой полностью нагрет и нет разбора).

    2. Отключать циркуляцию горячей воды на ночь и когда уходишь из дома.

    3. Отключать нагревание горячей воды, когда уходишь из дома надолго. (Планирую включать через HA когда нахожусь в заданном радиусе от дома, что бы вода успела нагреться к моему появления)

    Все сделано на wirenboard. Автоматизация отопления написана в скриптах wirenboard. Остальное (пока пара скриптов) в HA.