Laxilef / OTGateway

OpenTherm gateway for HomeAssistant
GNU General Public License v3.0
135 stars 20 forks source link

Работа в режиме PID #5

Closed bigbrother72 closed 10 months ago

bigbrother72 commented 11 months ago

Если включен PID режим, то температура вычисляется, только когда котел набирает температуру Функция getPidTemp() вызывается только в одну сторону.


    if (settings.pid.enable && vars.states.heating) {
      float pidResult = getPidTemp(....

По достижении температуры, котел просто отключается, и setpoint далее не меняется.

Потом когда температура в помещении упадет меньше заданной, то котел опять включается и начинает работать с предыдущей температуры - т.е .просто дискретный термостат on/off

И это еще не всё. После нескольких циклов что-то зависает и далее просто не включается отопление.

Установлено 21 градусов целевая температура. Сегодня утром проснулся. Дома холодно - 20.4 градусов,

Перезагрузил openterm контроллер около 10 утра

В течении дня несколько раз набирало эту температур. Сейчас до +20,8 уже упало. Через telnet вижу, что [INFO] Heating enabled: 1

Но отопление не включается

Все видно на графиках

Screenshot 2023-10-10 at 20-55-46 Обзор – Home Assistant Screenshot 2023-10-10 at 20-55-26 Обзор – Home Assistant Screenshot 2023-10-10 at 20-52-39 Обзор – Home Assistant

Скорее всего в коде openthermtask.h не работает ветка, так как heatingSetpoint постоянно один и тот же

// Температура отопления
if (heatingEnable && fabs(vars.parameters.heatingSetpoint - currentHeatingTemp) > 0.0001) {
  INFO_F("Setting heating temp = %u \n", vars.parameters.heatingSetpoint);

  // Записываем заданную температуру
  if (ot->setBoilerTemperature(vars.parameters.heatingSetpoint)) {
    currentHeatingTemp = vars.parameters.heatingSetpoint;

  } else {
    WARN("Failed set heating temp");
  }
}

После того как я поменял через температуру с +75 обогрева на 72 градуса, то сработала эта ветка и в телнете увидел: [INFO] Setting heating temp = 72 [INFO] Heating enabled: 1

и обогрев начался.

Laxilef commented 11 months ago

Какой у вас котёл? Какое значение параметра hysteresis? Предполагается, что vars.states.heating должен быть true даже если горелка котла выключена.

Laxilef commented 11 months ago

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

https://github.com/Laxilef/OTGateway/releases/tag/1.3.1

bigbrother72 commented 11 months ago

Какой у вас котёл? Какое значение параметра hysteresis? Предполагается, что vars.states.heating должен быть true даже если горелка котла выключена.

Котел Baxi Luna 3 310Fi. hysteresis =0.1

Еще вопрос:

В нижеуказанном коде наверное надо поменять лимиты 0-100 на vars.parameters.heatingMinTemp, vars.parameters.heatingMaxTemp, так как котел не может выдавать от 0 до 100 градусов температуру отопления.

    newTemp = round(newTemp);
    newTemp = constrain(newTemp, 0, 100);
    return newTemp;
bigbrother72 commented 11 months ago

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

https://github.com/Laxilef/OTGateway/releases/tag/1.3.1

завтра попробую.

Laxilef commented 11 months ago

В нижеуказанном коде наверное надо поменять лимиты 0-100 на vars.parameters.heatingMinTemp, vars.parameters.heatingMaxTemp, так как котел не может выдавать от 0 до 100 градусов температуру отопления.

Там несколько лимитов дальше идет, последний: https://github.com/Laxilef/OTGateway/blob/6d3172b73b2033a36a3b7c643ee0d3380d3fc5f4/src/RegulatorTask.h#L62C1-L64C6