SLS: управление газовым котлом.

Речь пойдет о железке, выглядит которая так:

Внутри нее находится блок, что может управлять газовым котлом. Причем управление это ничуть ни хуже «родного». Вот пример удержания заданной температуры заводским регулятором Buderus и SLS. Желтый график — температура в помещении, зеленый — уличная:

Видно, что SLS удерживает заданную температуру немного точнее. Устройство проработало три недели, и теперь можно рассказать о нем.

1. Это вообще можно?

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

Я не стал ни читать этот документ, ни спорить с оппонентом. ( 🙂 Когда я был молодым юристом, я также блистал осведомленностью, поэтому товарища понимаю.) Я даже готов признать, что, согласно нормам, нелицензированный нуб имеет право рассматривать котел не ближе полутора метров, а чихать отбегать метров на пять.

Однако, жизнь такова, что со временем, наблюдая за работой сертифицированных «специалистов», я понял что с темой следует знакомиться поближе, иначе до беды недалеко. Видели бы вы, какие персонажи приезжали ко мне, когда котел останавливался зимой. Да, наверняка, видели — к вам тоже приезжали. С тех пор слово «прессостат» не является для меня ругательным, а нежное его дыхание — просто родное. Но, к теме…

2. Как управляется котел.

В системе управления котлом есть одна, самая важная и высокотехнологичная деталь, вот она:

Это штука реально извлечена из моего котла Buderus U72. Называется она — перемычка!

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

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

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

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

Конечно, ходить в бойлерную включать и выключать котел — еще то занятие. И производители упростили вам жизнь. Они воткнули в котел ту самую перемычку, вы можете изъять ее и вместо создать такое:

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

Так не бывает? Конечно! Вместо того, чтобы тянуть куда-то провод с выключателем, производители придумали термостат, который , по установленной температуре замыкает и размыкает этот провод и без вашего участия. Реализаций термостатов немеряно: и проводные и беспроводные, и с дисплеями и просто с крутилками — суть у них одна! Термостаты замыкают и размыкают провод, чем включают и выключают котел, который греет контур до установленной в нем температуры.

3. Все так просто?

Не совсем. С одной стороны, абсолютно все известные мне котлы имеют возможность управления описанным выше способом, который называется «по запросу тепла».

С другой стороны, возможности современного котла несколько больше, чем реакция на включение. Котел может устанавливать в достаточно широких пределах величину пламени горелки, выдавать горячую воду разной температуры, etc., поэтому напрашивается более сложная система управления. Ряд производителей разрабатывают собственные подходы, а некоторые — объединились в группу с названием OpenTherm и установили общие правила управления (которые сами, по-отдельности, зачастую и нарушают).

Тем не менее, котлов OpenTherm достаточно много, и не исключаю, такой стоит и у вас. Следует читать документацию.

Устройство SLS управляет котлами двумя способами: «по запросу» и по протоколу OpenTherm, так что практически любой котел может им управляться. OpenTherm делает это более элегантно, что ли. Но и «по запросу» — вполне рабочий вариант. Тем более, что подавляющая часть недорогих термостатов работает именно так.

4. О безопасности.

Прежде чем заниматься котлом, нужно знать пару вещей. Даже, скорее, одну — без чтения документации в котел лезть нельзя, ибо опасно для населения.

Там, где обитает перемычка, в ряде котлов живет и напряжение 220 вольт. То есть термостат, фактически, замыкает и размыкает сетевое напряжение, со всеми вытекающими опасностями. Это явно не котлы с OpenTherm.

В случае с OpenTherm там тоже присутствует напряжение, но это порядка 30-60 вольт, кто как придумал. Оно не опасно, в итоге, но на язык пробовать не рекомендую.

Итак, вы читаете эти заметки, изучаете документацию на котел, и решаете нужно ли вам оно.

5. Об этом устройстве.

SLS OpenTherm, во-первых, управляет котлом и по запросу тепла (замыкая/размыкая линию) и по означенному протоколу. Дальше речь пойдет только об управлении по OpenTherm, ибо не в моих привычках говорить о том, что сам не делал.

Во-вторых. По утверждению автора, устройство может как управлять котлом, так и работать в «прозрачном режиме», передавая на брокер лишь данные, что «гуляют» между термостатом и котлом. Мне не удалось включить это действо: термостат Buderus при посреднике SLS выпадал в ошибку а котел сразу начинал работать «на всю дурь.»

Однако нет смысла предъявлять претензии автору: я замечал, что производители часто нарушают правила OpenTherm. До работы с этим устройством я уже пытался управлять котлом с помощью железки другого авторства, там термостат вел себя аналогично. Где-то на форумах я находил объяснение: в ряде случаев связка котел/термостат одного производителя обменивается информацией не документированной в протоколе и лишь после этого «принимает решение» о совместной работе. В нашем случае, ситуация не поддерживается термостатом, однако котел ее принимает и работает должным порядком.

Таким образом, для моего котла Bosch Gas 6000 устанавливается соединение по протоколу OpenTherm при управлении SLS в отсутствие термостата. Ваша ситуация с другим оборудованием может быть иной — не исключен и режим прозрачности.

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

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

SLS имеет важную фичу — к нему подключается 1-wire датчик DS18b20 в огромных количествах. Я проверил в количестве целых трех. Так много, полагаю, нам не надо, а вот два — самое то: я измеряю температуру в бане и на улице. Этого достаточно для управления котлом.

Надо заметить, что SLS, в момент поставки, не является в чистом виде управляемым термостатом — он позволяет лишь передавать котлу команды и получать от него данные.

Я реализовал алгоритм управления по внешней/внутренней температуре, и пока занимался этим, доставал автора уточняющими вопросами, автор встроил в код алгоритм PID-регулятора и это позволило сделать и второй вариант — управление лишь по внутренней температуре. Какой алгоритм эффективнее я сказать затрудняюсь, но скажу однозначно — оба удерживали целевую температуру лучше чем заводской термостат.

6. Подключение SLS.

Устройство имеет шесть клемм для подключения и еще пару для подачи питания.

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

Затем переходите во вкладку «Objects» и находите свои датчики DS18b20:

Этап закончен, пора работать с котлом.

7. Работаем с котлом. Первое включение.

Соединять котел с SLS рекомендую не на прямую, а через разъем, например JST:

Этот же разъем задействуйте и при подключении в термостату. Обратите внимание на порядок разъемов.

При включении, если что-то пойдет не так, особенно с прибытием госпожи Паники, разрываете провод от котла к SLS, все выключаете, вытираете пот и подключаете котел к термостату.

Перед первым включением котла, в SLS нужно создать файл «init.lua» (Меню Actions/Files) и записать в него две строки:

thermo.beginOpenTherm()
thermo.setBoilerTemperature(30)

Вместо 30 вы можете задать температуру побольше — чуть больше чем текущая температура в системе. Файл «init.lua» будет запущен при старте системы, включит управление по протоколу OpenTherm и даст котлу команду держать температуру в системе (уставку) 30 градусов.

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

Правильно должно происходить следующее: котел нагреется до уставки плюс градусов до пяти и выключится, остынет ниже уставки и включится, опять поднимая температуру на 3-5 градусов выше.

Из неправильных варианта два. Или ничего не произойдет, или котел начнет кочегарить на всю дурь, доведя температуру в системе гораздо выше, чем вы установили, вплоть до 70 — 75 градусов. (В котле устанавливается предельная температура теплоносителя, вот она и будет достигнута).

Если случится последнее, вы принимаете решение о том, следует ли на все забить, или дальше пытаться работать в режиме запроса тепла — релейном режиме.

8. Управляем котлом. PID управление.

Следующим этапом — управление работой котла по температуре в помещении.

————————————

Лирическое отступление.

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

SLS позволяет, например, получать извне команду на уставку — какую температуру держать в контуре отопления. То есть, можно агрегировать данные о температуре в Home Assistant сравнивать с целевой температурой в помещении, высчитывать уставку и отправлять на SLS одну команду — держать в контуре столько-то градусов.

Я так не делаю и вам не советую. Дальнейшая минимальная реализация такова, что, благодаря датчику DS18b20 SLS управляет котлом без всякой wi-fi связи с ним. Это минимальная конфигурация. Ее можно расширить. Предпосылки к расширению таковы, что температуру, обычно, приходится держать достаточно далеко от котла, не всегда возможно протянуть провод в точку контроля, а датчик температуры, тот же Zigbee, установить совсем несложно.

SLS очень гибкое устройство и позволяет и такой вариант, и вариант со сбором уличной/внутренней температуры с датчиков Zigbee и по протоколу MQTT, однако первым делом — минимальное управление по проводному датчику.

————————————

Теперь действуем. Файл «init.lua» делаем таким:

-- init.lua
thermo.beginOpenTherm()
thermo.setBoilerTemperature(20)

telegram.settoken("178520000000:ХХХХХХХХХХХХХХХХХХХХХ-ХХХХХХХ")
telegram.setchat("1234567890")
telegram.send("SLS В Бане стартовал!\nip 192.168.1.149")

obj.set("target_room_temperature", 20)
obj.setOpt("target_room_temperature", "FLOAT")


obj.set("pid_setpoint", 20) 
obj.set("pid_value", 20)  
thermo.PIDInit("pid_result", "pid_setpoint", "pid_value", 5000, false)
thermo.PIDSetOpt(30, 0.02, 0)
thermo.PIDSetRange(15, 60) 
thermo.PIDEnable(true) 

scripts.setTimer('runpid', 60)

Скрипт разрешает работу OpenTherm, устанавливает (при старте) целевую температуру контура 20 градусов, подключает Телеграм и отправляет на него извещение о своем старте и IP-адресе SLS, создает объект «target_room_temperature» со значением 20 и типом FLOAT, создает объекты для PID регулятора, запускает этот регулятор и устанавливает пределы управления от 15 до 60 (градусов, что будут поддерживаться в контуре).

Скрипт создает таймер, который раз в минуту будет вызывать на исполнение другой скрипт — «runpid.lua«, который мы сейчас создадим:

-- runpid.lua
local insens  = '1w.28-74F8EC090000/temperature' 

print('\n\n-------- Start RunPid---------\n')

local sformat = function(dt)
    if type(dt) == 'number' then
      dt = string.format("%.2f", dt)
    end
    return dt
end

local boiler_temp = obj.get("thermo.boiler.temperature")
print("Got boiler temperature:", sformat(boiler_temp))

if not boiler_temp then
    print('No boiler connection!')
    telegram.send("SLS В Бане: Нет соединения с котлом!")
    return
end

local room_temp, priv_room_temp = obj.get(insens)
print("Got room_temp 1wire:", sformat(room_temp), sformat(priv_room_temp))

obj.set("pid_value", room_temp)

local tgsetpoint = obj.get("pid_setpoint")
print('Got PID Setpoint:', tgsetpoint)

local tgtemp = obj.get('target_room_temperature')
print('Got Tg Temperature:', tgtemp)

if tgsetpoint ~= tgtemp then
  print('Set New Target At:', tgtemp)
  obj.set("pid_setpoint", tgtemp)
  telegram.send("SLS В Бане установил цель "..tgtemp.." град.")
end

local ust = obj.get("pid_result")
thermo.setBoilerTemperature(math.floor(ust))
print('Work!')
print('Set Boiler Temperature:', sformat(ust))


print('\n-------- End RunPid---------\n\n')

В вашем случае обязательно требуется уточнить значение «local insens» во второй строке. Оно берется со вкладки «Objects» и относится к датчику DS18b20 внутренней температуры.

Скрипт работает следующим образом. Проверяется соединение с котлом путем проверки температуры теплоносителя. Если связи нет — отправка сообщения в Телеграм и прекращение работы скрипта. Иначе — объекту PID сообщается текущая температура, от него получается значение уставки и передается котлу. Если изменена целевая температура — новое значение передается в PID и отправляется оповещение в Телеграм.

Проверку работоспособности рекомендую провести следующим образом.

В файле «init.lua» закомментируйте последнюю строку, что вызывает скрипт «runpid.lua«:

-- scripts.setTimer('runpid', 60)

Включите котел с SLS, перейдите в веб-интерфейс SLS и вручную запустите файл ‘runpid.lua‘:

Результат ниже скрипта должен быть приблизительно таким:

Именно так работает скрипт. Если вы увидите что-то другое, значит где-то вы допустили ошибку, ищите.

Если все хорошо — раскомментируйте в файле «init.lua» строку запуска скрипта «runpid.lua» и перезагрузите устройство. Теперь котел в вашей власти. Вы можете наблюдать за происходящим на вкладке «Log» SLS:

9. Немного о Home Assistant.

Данные от SLS о температуре автоматом влетают в НА, когда на вкладке Zigbee/Config вы установили необходимую галочку:

Что касается других данных — их надо добывать от брокера MQTT вручную. От Home Assistant требуется лишь одно — установка целевой температуры. Вот мой полный конфиг, имеющий отношение к управлению котлом, MQTT выполнено уже по новым правилам. «ZigbeeSaunaOpenTherm» — имя моего устройства, у вас — другое:

mqtt:
  binary_sensor:
    - name: "Горелка Сауна"
      unique_id: gorelka_at_sauna
      device_class: power
      state_topic: "ZigbeeSaunaOpenTherm/thermo/boiler/flame"
      payload_on: 'true'
      payload_off: 'false'

  switch:

    unique_id: switsh_boiler_sauna
    name: "Котел Сауна"
    state_topic: "ZigbeeSaunaOpenTherm/thermo/boiler/enable"
    command_topic: "ZigbeeSaunaOpenTherm/thermo/boiler/set/enable"
    payload_on: 'true'
    payload_off: 'false'
    state_on: 'true'
    state_off: 'false'
    optimistic: false
    qos: 0

  sensor:
    - name: "Котел Носитель"
      device_class: temperature
      unique_id: kotelnositel
      state_topic: "ZigbeeSaunaOpenTherm/thermo/boiler/temperature"
      unit_of_measurement: '°C'

    - name: "В бойлерной"
      device_class: temperature
      unique_id: v_boilernoi
      state_topic: "ZigbeeSaunaOpenTherm/1wire/28-74F8EC090000/temperature"
      unit_of_measurement: '°C'

    - name: "Баня На Улице"
      device_class: temperature
      unique_id: sauna_1wire_outhome
      state_topic: "ZigbeeSaunaOpenTherm/1wire/28-FF3E47621604/temperature"
      unit_of_measurement: '°C'

    - name: "Уставка В Сауне На устройстве"
      device_class: temperature
      unique_id: seted_ustavka_v_boilernoi
      state_topic: "ZigbeeSaunaOpenTherm/thermo/boiler/target_temperature"
      unit_of_measurement: '°C'

input_number:
  targetatsauna:
    name: "Держать Температуру"
    initial: 20
    min: 5
    max: 30
    step: 1

automation:
  - alias: "Set Targrt Temperature"
    trigger:
      platform: state
      entity_id: input_number.targetatsauna
    action:
      - service: mqtt.publish
        data:
          topic: ZigbeeSaunaOpenTherm/obj/target_room_temperature/set
          payload: "{{ states('input_number.targetatsauna') | int }}"
          qos: 2
          retain: true
      - service: mqtt.publish
        data:
          topic: ZigbeeSaunaOpenTherm/obj/ierr/set
          payload: "0"
          qos: 2
          retain: false

Вот как оно собрано у меня в НА:

10. Заключение.

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

О чем речь. Вот смотрите:

Температура в бойлерной имеет одиночный выброс. Это явная ошибка чего-то: датчика ли, SLS или передачи в НА. Что будет, если эта температура уйдет на управление? В данном случае котел получит минимальную уставку.

За месяц таких ошибок набралось четыре:

Эти ошибки не оказывают существенного влияния на работу устройства, однако если ошибка получит иной знак, уйдет куда-нибудь в минус, котел автоматом включится на полную мощность и (в случае котла BOSCH) не примет другую температуру уставки, пока не поднимет в контуре ее до максимума. Неприятное явление.

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

В общем случае, даже проблемы с датчиком не несут непоправимой опасности системе. Очень неприятно, конечно, если котел выходит на крайние режимы работы. Хуже всего, если уставка будет держаться на максимуме, если она уйдет в минимум — дом все равно не перемерзнет, ибо у всех котлов есть защита, а в нашем случае — он будет держать в системе 15 градусов. Вы можете установить минимум и на 20 — вполне комфортная температура.

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

P.S. Сейчас у меня работают два алгоритма управления котлом. Реально управляет PID регулятор, но одновременно с ним рассчитывает уставку и алгоритм по внешней/внутренней температуре. Скрипты вызываются один за другим, и вот как это выглядит:

Видно, что PID работает не так агрессивно. Знаю, что все зависит от его коэффициентов, но…! Поди ж ты их еще подбери.

Еще забавно — по внутренней температуре включены два датчика, и показывают абсолютно одинаковые значения, не часто, но такое бывает.

SLS: управление газовым котлом.: 2 комментария

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s