Термостат OpenTherm на ESP8266

OldNavi
Offline
Зарегистрирован: 22.08.2019

Автор библиотеки зачем то выпилил в конце прошлого года. нехорошо поступил - редиска

https://github.com/ihormelnyk/opentherm_library/commit/908d43d7048ab51e0...

В принципе можно заменить на вызов getFloat()

 

 

mistert83
mistert83 аватар
Offline
Зарегистрирован: 24.01.2021

OldNavi, 

в какое место лучше всего добавить измерение и считывание данных с dht22? Может сюда?

void loop()
  {
    // MQTT Loop
    if (!client.connected())
    {
      reconnect();
    } else {
      handleUpdateToMQTT(false);
      client.loop();
    }
    vars.house_temp.value = dht.readTemperature(); // получить значение температуры
   // Humidity = dht.readHumidity();       // получить значение влажности
    checkAndSaveConfig();
    httpServer.handleClient();
    MDNS.update();
  }
 
} MainTask;
mistert83
mistert83 аватар
Offline
Зарегистрирован: 24.01.2021

Подскажите в чём может быть проблема? Задаю в топик opentherm/cmnd {"house_temp": 26}, opentherm/state показывает новое значение 26, однако котёл на это никак не реагирует. Заметил , что котел включается на отопление только когда температура теплоносителя опуститься ниже 30, при этом поработает 10 секунд и выключится. Такое впечатление что котлу вообще пофиг на термостат и он работает по нижнему пределу контура отопления. 

На графике видно , что котёл включиться, нагреет воду до 38 и выключиться.

mistert83
mistert83 аватар
Offline
Зарегистрирован: 24.01.2021

И ещё не понятно, откуда берутся значения sp и pv для ПИД ?

OldNavi
Offline
Зарегистрирован: 22.08.2019

заметил , что котел включается 

1/ Для начала хорошо бы понимать что у вас за котел.  

Задаю в топик opentherm/cmnd {"house_temp": 26}, opentherm/state показывает новое значение 26, однако котёл на это никак не реагирует.

2/ {"house_temp": 26} - это измеренная температура в доме, а не желаемая. Желаемая это heat_temp_set - у вас она вообще 70˚

 откуда берутся значения sp и pv для ПИД ?

3/ Смотрите код

mistert83
mistert83 аватар
Offline
Зарегистрирован: 24.01.2021

Котел Ferroli DomiProject F24,

в СИ я конечно не разбираюсь (на asm pic программирую), но судя по коду

op = pid(vars.heat_temp_set.value, vars.house_temp.value, pv_last, ierr, dt);

float pid(float sp, float pv, float pv_last, float &ierr, float dt)

то полагаю, что

sp = vars.heat_temp_set.value, 

pv = vars.house_temp.value

я прав?

mistert83
mistert83 аватар
Offline
Зарегистрирован: 24.01.2021

Включил DEBUG. Дописал вывод в монитор     

case OpenThermResponseStatus::SUCCESS:

WARN.println("success");

В мониторе пишет

"Status of response 1" всегда пишет "succsess"
а на "Status of response 2" пишет "Ошибочный ответ от котла"
Тип и версия котла : тип 0 версия 0
Тип и версия термостата: тип 0 версия 0

 что это значит? 

miks69
Offline
Зарегистрирован: 16.02.2020

Попробуйте добавить следующий код:

if(debug) {
client.publish((vars.mqttTopicPrefix.value + "/message").c_str(), "Ошибочный ответ от котла");
char chResult[40];
sprintf(chResult, "Result code 0x%04X", result);
WARN.println(chResult);
}
break;
 

он покажет вам код ответа котла, по которому уже можно что-то понять

mistert83
mistert83 аватар
Offline
Зарегистрирован: 24.01.2021

И так по кругу и конкретно на 0x707F0000, 0xF01B0000 и 0xF07E0000 всегда ошибочный ответ

Видимо надо читать протокол OpenTherm и разбираться , что это значит

miks69
Offline
Зарегистрирован: 16.02.2020

Первый байт кода ответа содержит MSG-TYPE, т.е. код ответа котла. 0xF0 или 0x70 - UNKNOWN-DATAID, т.е. котел не понимает чего вы от него хотите.

Второй байт содержит DATA-ID, т.е. код команды. 0x7F и 0x7E (127 и 126) - Slave-version и Master-version. 0x1B (27) - Outside temperature.

Вывод - котел не поддерживает данные команды.

Попробуйте отключить в коде соответствующие запросы.

mistert83
mistert83 аватар
Offline
Зарегистрирован: 24.01.2021

Вообщем,

код 0x707F0000 - ID 252 описания в Opentherm 2.2 нет

код 0xF07E0000 - ID 126 Master version

код 0xF01B0000 - ID 27 Outside temperature (внешняя температура)

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

miks69
Offline
Зарегистрирован: 16.02.2020

Термостат устанавливает целевую температуру теплоносителя с помощью команды Control setpoint (DATA-ID = 0x01), в дальнейшем котел поддерживает установленную температуру. Активация работы котла делается командой Master/Slave status (DATA-ID = 0x00), bit 0: CH enable/disable.

mistert83
mistert83 аватар
Offline
Зарегистрирован: 24.01.2021

Перевод из OpenTherm 2.2 гласит:

Определено только одно контрольное значение - data-id = 01, контрольная уставка. Контрольная уставка находится в диапазоне от минимум 0 до максимум 100. Она представляет собой непосредственно уставку температуры подачи от котла. Ведомому не нужно знать, как ведущий рассчитал контрольную уставку, например независимо от того, используется ли комнатный контроль или внебиржевой, ему нужно только контролировать значение. Точно так же ведущему устройству не нужно знать, как ведомое устройство управляет подачей. Бит CHenable имеет приоритет над контрольной уставкой. Мастер может указать, что запрос CH не требуется, установив бит CHenable = 0 (т. Е. CH отключен), даже если контрольная уставка не равна нулю.

То есть правильно ли я понимаю, чтобы котёл завёлся на обогрев , ему нужно послать CH-enable (id=0, HB bit0=1) и Control setpoint от 1 до 100 (id=1, HB>0 или LB>0)

В мониторе наблюдаю 

Термостат посылает значение котлу 0xC0000B02 (id=0,CH-enable),Котёл отвечает success

Термостат посылает значение котлу 0xD001017A (id=1, Control setpoint >0) , Котёл отвечает success

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

miks69
Offline
Зарегистрирован: 16.02.2020

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

miks69
Offline
Зарегистрирован: 16.02.2020

Посмотрите настройки в сервисном меню

tsv_33
Offline
Зарегистрирован: 11.04.2019

miks69 пишет:
На работу котла по OpenTherm могут влиять ручные установки, настройки режимов и т.д.

Уважаемый, не вводите в заблуждение... Протокол тут не причём.

tsv_33
Offline
Зарегистрирован: 11.04.2019

mistert83 пишет:

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

Значит не все, что мешает изменить уставку температуры теплоносителя на свою? У автора это 30... Или переписать код под своё условие.

miks69
Offline
Зарегистрирован: 16.02.2020

tsv_33 пишет:

miks69 пишет:
На работу котла по OpenTherm могут влиять ручные установки, настройки режимов и т.д.

Уважаемый, не вводите в заблуждение... Протокол тут не причём.

См. пост 260 и мой пост 261 данной ветки

tsv_33
Offline
Зарегистрирован: 11.04.2019

miks69 пишет:

См. пост 260 и мой пост 261 данной ветки

OpenTherm то тут причём? Простите, меня дурака старого, но мозги котлов, это своя история...

miks69
Offline
Зарегистрирован: 16.02.2020

tsv_33 пишет:

miks69 пишет:

См. пост 260 и мой пост 261 данной ветки

OpenTherm то тут причём? Простите, меня дурака старого, но мозги котлов, это своя история...

Об этом и речь, что когда котел не выполняет то, что мы ему приказываем по OT, значит смотри настройки мозгов котла

mistert83
mistert83 аватар
Offline
Зарегистрирован: 24.01.2021

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

tsv_33
Offline
Зарегистрирован: 11.04.2019

miks69 пишет:

Об этом и речь, что когда котел не выполняет то, что мы ему приказываем по OT, значит смотри настройки мозгов котла

miks69, если убрать из вашего процитируемого мной предложения, два выделенных слова, оно потеряет смысл? Вся тема про OpenTherm..., это всего лишь, протокол связи.

tsv_33
Offline
Зарегистрирован: 11.04.2019

mistert83 пишет:

(как в данный момент у меня и работает).

Если всё просто, тогда что не устраивает?

miks69
Offline
Зарегистрирован: 16.02.2020

tsv_33 пишет:

miks69 пишет:

Об этом и речь, что когда котел не выполняет то, что мы ему приказываем по OT, значит смотри настройки мозгов котла

miks69, если убрать из вашего процитируемого мной предложения, два выделенных слова, оно потеряет смысл? Вся тема про OpenTherm..., это всего лишь, протокол связи.


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

mistert83
mistert83 аватар
Offline
Зарегистрирован: 24.01.2021

Дак сейчас температура на улице -1 градус, да и целевой комнатной температуры в 26 градусов  котёл не достигает. А когда будет -30 за бортом он мне также будет греть 30-40 градусным теплоносителем. Я замёрзну. Пока проблема в том, что котёл не исполняет требования термостата. Кстати котёл у меня такой с крутилками. Мощность отопления и мощность розжига через режим "ТЕСТ" установлены на максимум. Режим ЭКО выключен.

tsv_33
Offline
Зарегистрирован: 11.04.2019

mistert83 пишет:

Дак сейчас температура на улице -1 градус, да и целевой комнатной температуры в 26 градусов  котёл не достигает. А когда будет -30 за бортом он мне также будет греть 30-40 градусным теплоносителем. Я замёрзну. Пока проблема в том, что котёл не исполняет требования термостата. Кстати котёл у меня такой с крутилками. Мощность отопления и мощность розжига через режим "ТЕСТ" установлены на максимум. Режим ЭКО выключен.

Так и напишите своё условие, по которому должен работать ваш котёл в выбранном вами режиме...

miks69
Offline
Зарегистрирован: 16.02.2020

Судя по вашему фото у вас ручная настройка режима отопления стоит примерно на 30 град. Может стоит попробовать поставить побольше?

tsv_33
Offline
Зарегистрирован: 11.04.2019

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

tsv_33
Offline
Зарегистрирован: 11.04.2019

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

miks69
Offline
Зарегистрирован: 16.02.2020

tsv_33 пишет:

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

судя по всему вы невнимательно читали посты, на которые я дал ссылки...

mistert83
mistert83 аватар
Offline
Зарегистрирован: 24.01.2021

Ставил и максимальные и минимальные и  средние - без разницы. На форум хаус человек под ником Ortodox пишет:

"FERROLI говорило о протоколе ОТ-. А он поддерживает только базовые функции. То есть плавную модуляцию горелки поддерживают, если есть модулирующий клапан на газовой арматуре, а сам никаких данных на термостат не посылает."

Суть работы кода на выходе - это значение Control setpoint от 0 до 100 (модуляция)  и CH enable. То есть даже древний мой котёл должен работать. 

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

case OpenThermMessageID::MaxTSetUBMaxTSetLB:

        vars.MaxCHsetpUpp.value = (response & 0xFFFF) >> 8;
        vars.MaxCHsetpLow.value = response & 0xFF;
tsv_33
Offline
Зарегистрирован: 11.04.2019

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

mistert83
mistert83 аватар
Offline
Зарегистрирован: 24.01.2021

tsv_33 пишет:

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

Предлагаете попробовать вашу программу?

miks69
Offline
Зарегистрирован: 16.02.2020

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

mistert83
mistert83 аватар
Offline
Зарегистрирован: 24.01.2021

tsv_33 пишет:

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

При опробовании вашей прошивки на какие  контакты Node MCU подключать внутренний датчик температуры DS18b20?

mistert83
mistert83 аватар
Offline
Зарегистрирован: 24.01.2021

Автономно котёл работает нормально. На данный момент он у меня работает от обычного термостата типа сухой контакт (вкл/выкл). Но неудобство состоит в том, что когда мороз -30 я крутилкой увеличиваю температуру теплоносителя до 70 градусов, а когда за бортом -5, то выставляю 55 градусов. Вот так всю зиму и кручу туда сюда. Если поставить просто 55 градусов, то в морозы котёл не достигает нужной комнатной температуры, а если поставить 70 градусов, то в тёплую погоду батарею нагреются аж "не дотронешься" и потом остывают полностью.

Вот с OpenTherm я и решил заморочиться из-за возможности регулировки температуры теплоносителя в зависимости от температуры за бортом (погодозависимая автоматика). 

tsv_33
Offline
Зарегистрирован: 11.04.2019

mistert83 пишет:

tsv_33 пишет:

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

При опробовании вашей прошивки на какие  контакты Node MCU подключать внутренний датчик температуры DS18b20?

#define ONE_WIRE_BUS 14      // D5 DS18B20 подключен к порту 14 на OpenTherm Shield

И внутренний и за бортом.

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

miks69
Offline
Зарегистрирован: 16.02.2020

mistert83 пишет:

Вот с OpenTherm я и решил заморочиться из-за возможности регулировки температуры теплоносителя в зависимости от температуры за бортом (погодозависимая автоматика). 

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

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

central855
Offline
Зарегистрирован: 24.03.2020

Библитотека OpenTherm не совсем универсальна для всех котлов.Нужно опытным путем просматривать все регистры.В некоторых котлах резервные ID программируются на усмотрение производителя котлов.Например у котлов Ferroli Energy Top функция CH.Enabled не работает по достижению комнатной температуры.Они задействовали 5-ый бит в ID0.Еще и в некоторых котлах не работает установка температуры,так как нужно параллельно изменять и MAX.CH.TEMP

OldNavi
Offline
Зарегистрирован: 22.08.2019

Так и есть, хоть спецификация и открытая и протокол один. Но каждый производитель делает свой vendor lock,  для того что-бы барыжить своими пультами управления.  В том же бакси, пока правильно не договоришся по версии Master-Slave - котел будет работать, но opentherm будет работать в режиме только монитора - циферки с датчиков будет показывать,  менять уставки хрена с два.  С Феролли видимо то же самое.  Надо у буржуев смотреть, кто и как их заводит по opentherm.

miks69
Offline
Зарегистрирован: 16.02.2020

Вот здесь приведено более полное описание регистров протокола (видимо для разных случаев) - https://www.opentherm.eu/request-details/?post_ids=1833

В частности по регистру ID0:

ID0:HB0: Master status: CH enable
ID0:HB1: Master status: DHW enable
ID0:HB2: Master status: Cooling enable
ID0:HB3: Master status: OTC active
ID0:HB4: Master status: CH2 enable
ID0:HB5: Master status: Summer/winter mode
ID0:HB6: Master status: DHW blocking
ID0:LB0: Slave Status: Fault indication
ID0:LB1: Slave Status: CH mode
ID0:LB2: Slave Status: DHW mode
ID0:LB3: Slave Status: Flame status
ID0:LB4: Slave Status: Cooling status
ID0:LB5: Slave Status: CH2 mode
ID0:LB6: Slave Status: Diagnostic/service indication
ID0:LB7: Slave Status: Electricity production

mistert83
mistert83 аватар
Offline
Зарегистрирован: 24.01.2021

Увы, но даже демо прошивка OpenTherm Master не смогла заставить мой котёл нагреть теплоноситель до 64 градусов. Хотя статус горелки и текущую температуру теплоносителя показывает. Котёл по прежнему нагревал  до 38 и потом отключался. Неужели не судьба...

miks69
Offline
Зарегистрирован: 16.02.2020

Не надо опускать руки, как говориться, терпение и труд нам помогут )))
Попробйте ему выставить/сбросить 5-й бит в статусном запросе
ID0:HB5: Master status: Summer/winter mode

central855
Offline
Зарегистрирован: 24.03.2020

Вы попробовали регулятор температуры выставить до максимума?

miks69
Offline
Зарегистрирован: 16.02.2020

Другой вариант - попробуйте запросить пределы установки max CHsetp - ID49, а потом попробуйте установить нужное значение через ID57

miks69
Offline
Зарегистрирован: 16.02.2020

И напишите сюда что у вас по сервисным установкам

miks69
Offline
Зарегистрирован: 16.02.2020

Еще я бы посмотрел что котел отвечает на запрос ID10: Number of Transparent-Slave-Parameters supported by slave

Если есть такое, тогда надо пробовать ID6:LB1: max CHsetpoint [ read-only, read/write ] и ID6:HB1: max CHsetpoint [ transfer disabled, transfer enabled ]

tsv_33
Offline
Зарегистрирован: 11.04.2019

miks69 пишет:

Другой вариант - попробуйте запросить пределы установки max CHsetp - ID49, а потом попробуйте установить нужное значение через ID57

miks69 написал, что у него в 49-ом - от 30 до 85...

miks69
Offline
Зарегистрирован: 16.02.2020

А 57-й если прочитать, что показывает? Не 38 случайно...

tsv_33
Offline
Зарегистрирован: 11.04.2019

miks69 пишет:

Еще я бы посмотрел что котел отвечает на запрос ID10: Number of Transparent-Slave-Parameters supported by slave

Если есть такое, тогда надо пробовать ID6:LB1: max CHsetpoint [ read-only, read/write ] и ID6:HB1: max CHsetpoint [ transfer disabled, transfer enabled ]

А что смотреть и пробовать то?

Что с этим делать будете, кроме, как взять на заметку о возможностях котла?