Всем добрый день! Имею дом 200 м2, котел Baxi Eco Four 1.24, WB и Opentherm . Подскажите пожалуйста, как можно сделать управление котлом по Opentherm с гистерезисом и можно ли управлять котлом через топики MQTT. Регулирование происходит по температуре воздуха в комнате с датчика MSW v.3. Проблема в том, что котел начинает включаться при отклонении температуры воздуха на 0,1 ниже уставки.
Добрый день.
Вот тут не очень, пока, понятно.
В документации к модулю описано несколько режимов работы…
Какой вы используете?
И да, в любом из режимов - можно управлять, публикацией в топики.
А как реализована программная часть, то есть что обрабатывает температуру, что (какие значения) публикуются в топики котла?
Добрый день! Использую режим работы по датчику комнатной температуры в помещении.
Программной части нет =( использую шаблон из коробки, как говорится из коробки, передаю только в виртуальное устройство температуру с датчика из помещения в топик /devices/wbe2-i-opentherm_11/controls/Room Temperature. В другом виртуальном устройстве сделал уставку температуры. которая передаётся в топик /devices/wbe2-i-opentherm_11/controls/Room Temperature Setpoint
Понятно. То есть штатный режим.
В нем в котел передается значение температуры так же как это происходит, например, от комнатного датчика.
И тут логика работы зависит от того, что предусмотрел производитель котла.
Если нужен гистерезис - реализуйте его программно. Например не передавайте новое значение если текущая температура не отличается на модуль гистерезиса от уставки.
Сейчас попробую накидать правило как вы предлагаете. Вопрос тогда такой, как уйти от штатного режима и управлять котлом из правила, чтобы контролировать температуру теплого пола, воздуха в доме и температуру в БКН ? Я так понял, что не понятно можно ли управлять котлом через топики..
Выбрать режим прямого управления температурой подачи (“Direct Heating Setpoint Control”) - и устанавливать ее.
Обычно используют режим минимально потребной температуры, достаточной для компенсации теплопотерь.
Температура в БКН - “Разрешение контура ГВС”
Ну и уставка: “Уставка ГВС”
Можно. Все параметры доступные к изменению описаны в документации модуля.
А можно при помощи правила, используя показания с датчиков температуры в контурах теплых полов ( пол разбит на несколько контуров и в каждой зоне пола установлен датчик температуры 1-wire DS18B20 ) и клапанов на каждом контуре? Также есть отдельный датчик температуры на БКН. Просмотрел документацию, но не нашел в описании про управление через топики MQTT ( покажите пожалуйста где посмотреть).
вчера пытался написать кусочек кода, но столкнулся с тем, что не пойму как не отправлять значение, если условие не выполняется. Пока вышел из ситуации, что если температура выше уставки, просто передаю значение выше уставки, в мое случае 24 градуса( костыль кривой, но вышло как-то так =)) )
defineVirtualDevice('termostat_gostinnaya', {
title: 'Термостат в гостиной' ,
cells:{
ControlName4: {
title: "Заданная температура воздуха",
type: "range",
value: 20,
max: 32,
min: 5
},
ControlName5: {
title: "Гистерезис температуры воздуха",
type: "range",
value: 1,
max: 8,
min: 0.1
},
defineRule("temp_gostinaya_setpoint", {
whenChanged:"termostat_gostinnaya/ControlName4",
then: function(newValue, devName, cellName) {
dev["wbe2-i-opentherm_11/Room Temperature Setpoint"] = newValue;
}
});
defineRule ("temp_gostinaya", { // Правило работы для отопления от сигнала датчика wb-msw-v3_22/Temperature
whenChanged: "wb-msw-v3_22/Temperature", // При изменении показаний датчика
then: function (newValue, devName, cellName) {
dev["wb-msw-v3_22/Temperature"] = newValue; // обновляем значение текущей температуры в окошке
if (newValue<(dev["termostat_gostinnaya"]["ControlName4"]-dev["termostat_gostinnaya"]["ControlName5"])) { // Если значение датчика меньше уставки минус гестерезис
dev["wbe2-i-opentherm_11/Room Temperature"] = newValue ; // выставляем реальное значение по датчику температуры
}
if (newValue>(dev["termostat_gostinnaya"]["ControlName4"]+dev["termostat_gostinnaya"]["ControlName5"])) { // Если значение датчика больше уставки плюс гестерезис
dev["wbe2-i-opentherm_11/Room Temperature"] = 24 ; // выставляем значение выше уставки // как не передавать значение?
}
}
});
Да, конечно.
Он, как правило подключается к котлу и по его показаниям котел управляет этим контуром сам.
Снаружи или из стороннего ПО на котроллере - вот [так] получить (MQTT в контроллерах Wiren Board — Wiren Board)
и так для управления.
Просто не записывать его в топик.
то есть вот эту строку
удалить или закомментировать.
Хочу обратить внимание, вот так:
Делать не нужно и более того, вредно. Вы записываете значение в топик, который обрабатывается этим же правилом.
То есть если записать туда отличающееся значение - правило зациклится.
А как тогда получить значение, чтобы его сравнить, чтобы не получить зацикливания?
Все верно к БКН от котла подсоединен свой датчик ( NTC), но по-моему о него через OpenTherm не получить данные, поэтому также в гильзу запихнул 1-wire =))
попробую получить и поотправлять данные в топики. А нет ли каких-то эмуляторов, чтобы обкатать правила, ну чтобы не на живом оборудовании сначала эксперименты ставить?
Читать из топика - можно. Менять значение в том же топике на который подписано правило - вызовет повторное его срабатывание. То есть это бессмыссленно.
Нет, к сожалению нету. Без оборудования это и пользы не несет, в общем.
Андрей, а не могли бы подсказать как правильно надо написать? Просто не могу понять - я получил значение температуры воздуха, сравнил с условием и если условие выполняется я публикую это значение, а если не надо его публиковать, то как тогда запустить котел нагреть воздух ?
Вот и я по описанию не понимаю желаемый алгоритм.
То есть: что и как, при каких условиях должно работать?
Алгоритм такой- хочу измерять температуру воздуха в доме, дальше ее сравнить с уставкой и если она равна или выше или равна уставке котел не включать на обогрев, если меньше уставки ( с учетом гистерезиса), то запустить котел на нагрев контура отопления, но при этом если есть запрос на БКН, то переключить котел на контур ГВС, нагреть воду и вернуться в отоплению до достижения уставки. Котел управляется по OpenTherm. Отсюда изначально был вопрос как управлять через MQTT.
Вот это мне как раз и непонятно.
Вы выбираете режим “по температуре”.
Он не предусматривает включение-выключение, в этом режиме модуль работает именно по значению температуры.
Вот тут есть описание возможностей и режимов самого модуля.
В частности:
Возможно сейчас настроен не тот режим что нужен? Как и писал выше:
Сейчас я не могу ничего посоветовать, моей компетенции недостаточно чтобы проектировать алгоритм управления отоплением.
А что такое “запрос”?
В терминах Opentherm “Температура ГВС желаемая (целевая, от 0 до 80°C)” - это уставка. Текущая температура бойлера - не отображается, котел самостоятельно запускает контур при ее падении (некоторые) при устойчивом снижении температуры, превентивно, это обычно настраивается). Ну и распределяет мощность соответственно настроенным приоритетам. То есть если приоритет ГВС - то будет греть болйлер, если ЦО - то контура.
Или вы управляете контуром бойлера не используя механизм котла?
То есть программно в случае необходимости меняете режим, запускаете котел и отключаете остальные контуры до достижения бойлером уставки?
Как у вас по проекту управление опоплением описано?
Именно механизм записи в топики непонятен?
Попробую своими словами.
Значение (уставка) публикуется а топик /on. Драйвер (то есть сервис, который создал топик) - получает публикацию и (в зависимости от того чем именно он управляет) - записывает в управляемое устройство значение.
Если говорить про wb-mqtt-serial - то при следующем цикле чтения значение из регистра уже будет записано в сам топик.
Вот тут это обсуждали.
То есть по сути получается либо управлять через шаблон OpenTherm, передавая данные в поля уставки и текущих температуры. Но проще тогда наверное через правило управлять реле в WB и замыкать контакты на котле чтобы он включился ( те, которые по умолчанию соединены перемычкой) так как БКН подключен к котлу через NTC, Fugas подключен к котлу и управляется алгоритмом котла, переключая контура ГВС и ЦО. По сути OpenTherm тогда вообще не нужен, так как использовать его просто, чтобы снимать показания температур и состояния контуров нельзя.
Подскажите пожалуйста, если следовать путем управления через шаблон OpenTherm, как правильно или точнее куда записать значение, чтобы его обработать и не вызвать зацикливания?
Да, верно.
Нет, в таком случае не получится выставлять температуру, в том числе и ГВС, котел будет работать по настроенным именно на нем параметрам.
Можно. В режиме “Direct Heating Setpoint Control”
Пожалуйста - прочитайте описание производителя модуля Opentherm/
Про зацикливание.
Еще раз приведу цитату из кода:
Правило срабатывает по изменения топика “wb-msw-v3_22/Temperature”
в строке whenChanged: “wb-msw-v3_22/Temperature”
И тут же вы из функции правила записываете это же значение снова в этот же топик:
dev[“wb-msw-v3_22/Temperature”] = newValue; // обновляем значение текущей температуры в окошке
Вот про то какие значения и куда записывать - я не могу ответить.
Как минимум мне нужно понимать каким образом стратегически планируется управление отоплением. Что используется в качестве исходных параметров (например температура пола, воздуха), как они должны обрабатываться.
Просто для примера: есть для каждого помещения температура пола и воздуха (датчики).
Есть два параметра (уставки): температура целевая (воздуха) и максимальная (пола)
теперь элементы управления: клапан контура пола; клапан контура батарей.
Ну и логика, если сильно упростить то так:
Пока температура в помещении поддерживается полом (он не перегревается выше максимально установленной температуры) - регулируется пол.
Если пол достиг максимальной температуры (или температура воздуха падает быстрее чем способна поменяться ) включаются батареи.
Температура котла (подачи) увеличивается только когда включаются батареи, когда “пола достаточно” - минимальная, она все равно выше температуры подачи контура полов.
Мы техподдержка, у нас нет опыта проектирования систем отопления…
Как в проекте у вас это описано?
Доброе утро! Ну по сути сейчас так и управляю.
Ну здесь наверное не соглашусь, почему не получится выставлять температуру ? Например, условно контролирую температуру в комнате 1 по датчику температуры 1, управление теплоносителем на батарею происходит клапаном 1. В правиле пишем, что при снижении температуры на датчике 1 ниже уставки, открываем клапан 1 ( на батарею) замыкаем контакты реле в WB ( любое свободное реле), которые соединены на место перемычки в котле, что в свою очередь запускает котел ( температуру теплоносителя выставляем один раз на котле и не трогаем). При достижении температуры уставки отключаем котел и через некоторое время насос циркуляции. И так для каждой комнаты. Температуру ГВС в БКН вообще трогать зачем, один раз выставили 60 градусов и забыли.
Ту вроде разобрался, получилось вот так-
defineVirtualDevice('termostat_gostinnaya', {
title: 'Термостат в гостиной' ,
cells:{
ControlName4: {
title: "Заданная температура воздуха",
type: "range",
value: 20,
max: 32,
min: 5
},
ControlName5: {
title: "Гистерезис температуры воздуха",
type: "range",
value: 0.1,
max: 8,
min: 0.1
},
}
});
defineRule (“temp_gostinaya”, { // Правило работы для отопления от сигнала датчика wb-msw-v3_22/Temperature
whenChanged:“wb-msw-v3_22/Temperature”, // При изменении показаний датчика
then: function (newValue, devName, cellName) {
if (newValue<(dev[“termostat_gostinnaya”][“ControlName4”]-dev[“termostat_gostinnaya”][“ControlName5”])) { // Если значение датчика меньше уставки минус гестерезис
dev[“wbe2-i-opentherm_11/Room Temperature”] = newValue; // выставляем реальное значение по датчику температуры
}
if (newValue>(dev[“termostat_gostinnaya”][“ControlName4”])) { // Если значение датчика больше уставки плюс гестерезис
dev[“wbe2-i-opentherm_11/Room Temperature”] = dev[“termostat_gostinnaya”][“ControlName4”]+1 ; // выставляем значение уставки +1, чтобы отключить котел по достижению t уставки//
}
}
});
``` вроде работает, на сколько криво написано?
Если не ошибаюсь, читал вашу статью и по-моему такой алгоритм организован у вас дома, верно ? ))
У котла меняется модуляция горелки и он сам регулирует температуру теплоносителя, а на теплый пол стоит Термостатический клапан для теплого пола, на котором механически задается температура.
Вполне нормально, публикация только когда нужно. Ничего лишнего нету.
Нет, сейчас в процессе переделывания. То есть да, такой и был.
Сейчас меняю трехпроходный термостатический кран (подмес контура теплого пола) на другой, с самодельным приводом.
Ну и оно затянулось изрядно, надо перепечатать редуктор.
Да, и как раз темостатический “проблему” создавал. У него сечение не слишком большое - приходилось насос накручивать на максимум, а контуров пола 12, проток довольно вялый бы.
У меня стоит дюймовый клапан ( svm-0120-254325 ), проблем нет. А проблема с чем именно у вас была… медленно прогревался из-за вялого потока?
А на гитхабе примера вашего кода для управления полами и радиаторами нет? Интересно подглядеть как это реализовано программно ( чтобы не изобретать велосипед, тем более он у вас на реальной системе обкатан =)) )
Да, совершенно такой же по конструкции, только Valtec и с внешним датчиком.
Вот такой
Да, и довольно большой перепад между подачей и обраткой, больше 7 градусов.
Долго откладывал замену - но когда поменял - индикаторы протока на коллекторе на 3 скорости насоса сразу на литр-полтора больше стали. Так что и второй скорости теперь достаточно.
Нет. Да и выкладывать я б постеснялся - очень погано, на костылях написано. Буду переписывать с нуля.



