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

Внутри нее находится блок, что может управлять газовым котлом. Причем управление это ничуть ни хуже «родного». Вот пример удержания заданной температуры заводским регулятором 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 работает не так агрессивно. Знаю, что все зависит от его коэффициентов, но…! Поди ж ты их еще подбери.
Еще забавно — по внутренней температуре включены два датчика, и показывают абсолютно одинаковые значения, не часто, но такое бывает.
Где купить девайс — ссылка на ТГ не работает
НравитсяНравится
https://t.me/slsys
Железо продает администратор Григорий. Там спросите.
НравитсяНравится