Термостат OpenTherm на ESP8266 для Viessmann VITOPEND 100-W

ser1980
Offline
Зарегистрирован: 31.03.2021

miks69 пишет:

ser1980 пишет:

система отопления простая всего 4 батареи по 10 сек, площадь пом. 36кв,  котел Buderus Logamax U072-24K, 24 кВт. Ставлю уставку термостата на 1гр выше чем показывает датчик ds18b20, термостат вычислил уставку нагрева отопления 45град. котел греет до 45 и выключается при модуляции 88% и какую бы термостат не вычислил  уставку нагрева  модуляция всегда 88% ,по воде такого нет.  Пробовал код другого автора ,модуляцией при отоплении  управляет.

Давление воды в системе и давление газа в норме? Газ магистральный или из баллонов? С котлом нет никаких проблем?

с котлом все в порядке работает второй год по термостату сухими контактами  по wifi, захотел по open term что-бы плавно управлял горелкой котла 

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

ser1980 пишет:

с котлом все в порядке работает второй год по термостату сухими контактами  по wifi, захотел по open term что-бы плавно управлял горелкой котла 

Проверьте значения сервисных функций 1.2F - Временный режим работы котла и 2.9A - Постоянный режим работы котла

ser1980
Offline
Зарегистрирован: 31.03.2021

miks69 пишет:

ser1980 пишет:

с котлом все в порядке работает второй год по термостату сухими контактами  по wifi, захотел по open term что-бы плавно управлял горелкой котла 

Проверьте значения сервисных функций 1.2F - Временный режим работы котла и 2.9A - Постоянный режим работы котла

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

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

ser1980 пишет:

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

Отпишитесь по результату.

ser1980
Offline
Зарегистрирован: 31.03.2021

miks69 пишет:

ser1980 пишет:

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

Отпишитесь по результату.

Появилось время, написал под свои нужды используя эти сайты https://diyless.com/blog/esp32-wifi-thermostat все работает . С вашей прошивкой тоже все ок. как оказалось в котле стояла уставка почти на 100% (Минимальная номинальная теплопроизводительность отопление) в пункте 2.3d 

eeciv
Offline
Зарегистрирован: 21.01.2017

miks69,

Какую версию библиотеки OpenTherm вы используете в ваших примерах? У меня не собирается проект, ругается  на отсутствие методов в библиотеке. Брал библиотеку и  у вас и у автора.

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

eeciv пишет:

miks69,

Какую версию библиотеки OpenTherm вы используете в ваших примерах? У меня не собирается проект, ругается  на отсутствие методов в библиотеке. Брал библиотеку и  у вас и у автора.

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

eeciv
Offline
Зарегистрирован: 21.01.2017

ot.buildSetBoilerStatusRequest и ot.getTemperature(response) Говорит что этих методов нет в библиотеке OpenTherm, но их действительно нет(

 

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

eeciv пишет:

ot.buildSetBoilerStatusRequest и ot.getTemperature(response) Говорит что этих методов нет в библиотеке OpenTherm, но их действительно нет(

Метод <ot.buildSetBoilerStatusRequest> присутствует в оригинальной библиотеке Игоря Мельника - https://github.com/ihormelnyk/opentherm_library/blob/master/src/OpenTherm.cpp

Метод <ot.getTemperature(response)> фактически идентичен методу <ot.getFloat(response)>, можете просто заменить его в коде.

eeciv
Offline
Зарегистрирован: 21.01.2017

miks69 пишет:

Метод <ot.buildSetBoilerStatusRequest> присутствует в оригинальной библиотеке Игоря Мельника - https://github.com/ihormelnyk/opentherm_library/blob/master/src/OpenTherm.cpp

Метод <ot.getTemperature(response)> фактически идентичен методу <ot.getFloat(response)>, можете просто заменить его в коде.

Спасибо, заменил и собралось!

 

eeciv
Offline
Зарегистрирован: 21.01.2017

miks69,

Добрый день! Еще столкнулся с такой проблемой- не показывает температуру горячей воды: пишет 0 градусов (Котел будерус 072 с бойлером косвенного нагрева) и все-таки этого метода:  ot.buildSetDHWTemperatureRequest((float)water_setpoint)  в библиотеках нет, я его закомментил и поэтому не заметил, мне он в принципе не очень интересен -  я как поставил температуру БКС на 60 градусов два года назад так и не трогал, но хочется все сделать хорошо)

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

eeciv пишет:

miks69,

Добрый день! Еще столкнулся с такой проблемой- не показывает температуру горячей воды: пишет 0 градусов (Котел будерус 072 с бойлером косвенного нагрева) и все-таки этого метода:  ot.buildSetDHWTemperatureRequest((float)water_setpoint)  в библиотеках нет, я его закомментил и поэтому не заметил, мне он в принципе не очень интересен -  я как поставил температуру БКС на 60 градусов два года назад так и не трогал, но хочется все сделать хорошо)

Если вы запускаете скетч [ESP-OT-Lite], то обратите внимание, что там вначале стоит bool dhw_present = false; Просто поставьте = true и тогда код будет запрашивать температуру DHW.

eeciv
Offline
Зарегистрирован: 21.01.2017

Я прикрутил части кода к своему проекту, этот параметр я сразу поставил true, но все равно 0, ноль был и когда я пользовался обычными бэйсик запросами, может на котле что-то надо поправить, хотя температуру подачи показывает и принимает

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

eeciv пишет:

Я прикрутил части кода к своему проекту, этот параметр я сразу поставил true, но все равно 0, ноль был и когда я пользовался обычными бэйсик запросами, может на котле что-то надо поправить, хотя температуру подачи показывает и принимает

Если контур ГВС на котле работает, значит должен что нибудь выдавать через запросы по Opentherm.

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

eeciv
Offline
Зарегистрирован: 21.01.2017


Это часть кода с ОТ, отсутствующий метод закомментил, добавил давление, но тоже как и вода 0, но про давление я не знаю поддерживает ли котел
//======================================================================================================
//из проекта miks69
    char ot_status[32];        // OpenTherm status
bool dhw_present = true;
bool cooling_present = false;
float boiler_temp = 0.0;    // Boiler temperature
float water_temp = 0.0;     // Hot water temperature
float CH_pressure=0.0;      // давление в контуре
float boiler_setpoint =41;;    // Boiler setpoint
byte boiler_sp_min = 40;    // Boiler setpoint min
byte boiler_sp_max = 80;    // Boiler setpoint max
byte water_setpoint = 60;   // Hot water setpoint
byte water_sp_min = 35;     // Hot water setpoint min
byte water_sp_max = 70;     // Hot water setpoint max
float ot_modLevel = 0;     // Modulation Level
bool boiler_mode = false;   // Central Heating mode
bool water_mode = true;    // Hot Water mode (if available)
bool cooling_mode = false;    // Cooling mode (if available)
uint16_t fault_code = 0;    // Fault code (in case of fault status)
int8_t fault_status = -1;   // Fault status
int8_t boiler_status = -1;    // Central Heating status
int8_t water_status = -1;   // Hot Water status (if available)
int8_t cooling_status = -1;   // Cooling status (if available)
// int8_t flame_status = -1;   // Flame Status

int8_t requestCounter = 0;
bool set_boiler_temp = true;
bool set_water_temp = true;
bool request_settings = false;
//==================================================================================
float ch_temperature;
float dhw_temperature;
float Modulation;

    String OT_Status;
    String OT_CH;
    String OT_HW;
    String OT_Flame;
    String OT_Fault;
    String OT_Diag;
    String OT_TS_type_version;
    String OT_BOIL_type_version;
    String OT_setDHWTemp;
    String OT_CH_Pressure;


  // запускается из setup
  void ot_init() {
  ot.begin(handleInterrupt, responseCallback);
  Serial.println("OpenTherm initialized");
  strcpy(ot_status, "N/A");
  }
// запускается из loop каждые 200 ms

  void ot_loop() {
  String telega_msg;
  boiler_setpoint = TempCurve;     // задаем на основе кривых температуру подачи 

  //  включение или отключение режима отопления от температуры в столовой
  if((boiler_mode== true) && (digidataGet3 >= myoptions.temp_stol_off)){
    boiler_mode = false;
    telega_msg="OpenTherm - режим отопления отключен в: " + getTimeStampString()+" температура: "+ String(digidataGet3)+"°C."; 
    TelegramPrint(telega_msg); 
  }
  if((boiler_mode== false) && (digidataGet3 < (myoptions.temp_stol_off - myoptions.stol_hyst_temp))){
    boiler_mode = true;
    telega_msg="OpenTherm - режим отопления включен в: " + getTimeStampString()+" температура: "+ String(digidataGet3)+"°C."; 
    TelegramPrint(telega_msg); 
  }
  
  ot.process(); // OpenTherm process response status
  
  unsigned long request;
  bool result = 0;
  
  if (ot.isReady()) {   // check if OpenTherm is ready
    //
    switch (requestCounter) {
      case 0:   // Status request
        request = ot.buildSetBoilerStatusRequest(boiler_mode, water_mode, cooling_mode, false, false);
        result = ot.sendRequestAync(request);
        break;
      case 1:     // Get Boiler Fault Flags
        if (fault_status == 1) {
          request = ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::ASFflags, 0);
          result = ot.sendRequestAync(request);
        }
        break;
      case 2:   // Set Boiler Temp request
        if (set_boiler_temp) {
          request = ot.buildSetBoilerTemperatureRequest((float)boiler_setpoint);
          result = ot.sendRequestAync(request);
          set_boiler_temp = false;
        }
        break;
      case 3:   // Get Boiler Temp request
        request = ot.buildRequest(OpenThermMessageType::READ, OpenThermMessageID::Tboiler, 0);
        result = ot.sendRequestAync(request);
        break;
      case 4:   // Set DHW Temp request
        if ((dhw_present) && (set_water_temp)) {
//          ot.buildRequest(OpenThermRequestType::WRITE, OpenThermMessageID::TdhwSet, hex56);
//          request = ot.buildSetDHWTemperatureRequest((float)water_setpoint);
//          result = ot.sendRequestAync(request);
//          set_water_temp = false;
        }
        break;
      case 5:   // Get DHW Temp request
        if (dhw_present) {
          request = ot.buildRequest(OpenThermMessageType::READ, OpenThermMessageID::Tdhw, 0);
          result = ot.sendRequestAync(request);
        }
        break;
      case 6:   // Get Relative Modulation Level
        if (flame_status == 1) {
          request = ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::RelModLevel, 0);
          result = ot.sendRequestAync(request);
        }
        break;
      case 7:   // Get Slave Config & MemberID code
        if (request_settings) {
          request = ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::SConfigSMemberIDcode, 0);
          result = ot.sendRequestAync(request);
        }
        break;
      case 8:   // Max CH water setpoint bounds
        if (request_settings) {
          request = ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::MaxTSetUBMaxTSetLB, 0);
          result = ot.sendRequestAync(request);
        }
        break;
      case 9:   // Max DHW setpoint bounds
        if (request_settings) {
          request = ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::TdhwSetUBTdhwSetLB, 0);
          result = ot.sendRequestAync(request);
          request_settings = false;
        }
        break;

       case 10:   //CHPressure
         request = ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::CHPressure, 0);
         result = ot.sendRequestAync(request);
         break;
         
      default:
        requestCounter = -1;
        break;
    }
    //
    if ((request > 0) && (!result)) {
      Serial.println("OpenTherm send request error");
    }
    requestCounter++;
  }

    jsonstringOpenTherm = "\"OT_Status\": \""+ OT_Status + "\" ,";
    jsonstringOpenTherm += "\"CH_temperature\": \""+String(ch_temperature)+"\" ,";
    jsonstringOpenTherm += "\"OT_CH\": \""+OT_CH+"\" ,";
    jsonstringOpenTherm += "\"OT_HW\": \""+OT_HW+"\" ,";
    jsonstringOpenTherm += "\"OT_Flame\": \""+OT_Flame+"\" ,";
    jsonstringOpenTherm +=  "\"DHW_temperature\": \""+String(water_temp,1)+"\" ,"; 
    jsonstringOpenTherm +=  "\"Modulation\": \""+String(Modulation)+"\" ,"; 
    jsonstringOpenTherm +=  "\"K_Curve\": \""+String(myoptions.Ko_Curve)+"\" ,";
    jsonstringOpenTherm +=  "\"T_Setpoint\": \""+String(thempsetpoint)+"\" ,";
    jsonstringOpenTherm +=  "\"T_Curve\": \""+String(TempCurve)+"\" ,";
    jsonstringOpenTherm +=  "\"OT_Fault\": \""+OT_Fault+"\" ,";
    jsonstringOpenTherm +=  "\"OT_Diag\": \""+String(requestCounter)+"\" ,";     // вывод счетчика запросов для отладки
    jsonstringOpenTherm +=  "\"OT_TS_type_version\": \""+OT_TS_type_version+"\" ,";
    jsonstringOpenTherm +=  "\"OT_BOIL_type_version\": \""+OT_BOIL_type_version+"\" ,";
    jsonstringOpenTherm +=  "\"OT_setDHWTemp\": \""+String(CH_pressure,1)+"\" ,";    // вывод давления


    
   
  
  
 }

  void responseCallback(unsigned long response, OpenThermResponseStatus responseStatus) {
  //
  static char last_status[32];
  static byte ot_try_count = 0;
  if (responseStatus == OpenThermResponseStatus::SUCCESS) {
    //
    handleResponse(response);
    //
    if (fault_status == 1) {
      if (requestCounter == 1)
        sprintf(last_status, "Fault code: 0x%04X", fault_code);
    }
    else {
      stpcpy(last_status, "OnLine");
      request_settings = true;
    }
    //
    ot_try_count = 0;
  }
  else {
    if (responseStatus == OpenThermResponseStatus::NONE)
      stpcpy(last_status, "OpenTherm is not initialized");
    if (responseStatus == OpenThermResponseStatus::INVALID)
      sprintf(last_status, "Response invalid: 0x%08X", response);
    if (responseStatus == OpenThermResponseStatus::TIMEOUT) {
      //
      if (ot_try_count < 3) { // make 3 tries
        requestCounter--; // let's repeat last request
        ot_try_count++;
      }
      else {
        stpcpy(last_status, "Request timeout");
        requestCounter = 0;
        fault_status = -1;
        boiler_status = -1;
        water_status = -1;
        cooling_status = -1;
//        flame_status = -1;
      }
    }
  }
  //
  if ((String(ot_status) != String(last_status)) && (String(last_status) != "")) {
    strcpy(ot_status, last_status);
    Serial.println("OpenTherm status: "+String(ot_status));
    OT_Status=String(ot_status);                                                     //"Соединение OpenTherm установлено";
  }
 }

  void handleResponse(unsigned long response) {
  //
  bool bValue;
  byte nValue;
  float temperature;
  float fValue;
  //
  byte DataID = ot.getDataID(response);
  Serial.println ("DataID "+String(DataID));
  switch (DataID) {
    case OpenThermMessageID::Status:
      bValue = ot.isFault(response);
      if (fault_status != bValue) {
        fault_status = bValue;
        Serial.println("Fault status: "+String(fault_status? "ON":"OFF"));
        OT_Fault=String(fault_status? "ON":"OFF");
      }
      bValue = ot.isCentralHeatingActive(response);
      if (boiler_status != bValue) {
        boiler_status = bValue;
        Serial.println("Central heating status: "+String(boiler_status? "ON":"OFF"));
        OT_CH=String(boiler_status? "ON":"OFF");
      }
      bValue = ot.isHotWaterActive(response);
      if (water_status != bValue) {
        water_status = bValue;
        Serial.println("Hot water status: "+String(water_status? "ON":"OFF"));
        OT_HW=String(water_status? "ON":"OFF");
      }
      bValue = ot.isCoolingActive(response);
      if (cooling_status != bValue) {
        cooling_status = bValue;
        Serial.println("Cooling status: "+String(cooling_status? "ON":"OFF"));
      }
      bValue = ot.isFlameOn(response);
      if (flame_status != bValue) {
        flame_status = bValue;
        Serial.println("Flame status: "+String(flame_status? "ON":"OFF"));
        OT_Flame=String(flame_status? "ON":"OFF");
        //обработка индикации и реле насоса СО.
        if (flame_status == 1 && water_status == 0) {    // Если состояния горелки = 1 и статус состояния ГВС = 0 включаем реле.
          pcf8574.digitalWrite(P2,_ON);   // реле основной вкл
          pcf8574.digitalWrite(P3,_ON);   // реле санузлы вкл
        }else{
          pcf8574.digitalWrite(P2,_OFF);  // откл осн рецирк
          pcf8574.digitalWrite(P3,_OFF);  // отключение циркуляции с/у
        }
        
      }
      break;
    case OpenThermMessageID::RelModLevel:
      fValue = (response >> 8) & 0xFF;
      if (ot_modLevel != fValue) {
        ot_modLevel = fValue;
        
      }
      Modulation=ot_modLevel;
      break;
    case OpenThermMessageID::SConfigSMemberIDcode:
      dhw_present = (response >> 8) & 0x01;
      cooling_present = (response >> 8) & 0x04;
      break;
    case OpenThermMessageID::ASFflags:
      fault_code = response & 0xFFFF;
      break;
    case OpenThermMessageID::Tboiler:
      temperature = ot.getFloat(response);
      if (boiler_temp != temperature) {
        boiler_temp = temperature;
        Serial.println("Central heating temperature: "+String(boiler_temp,1)+"°C");
        
      }
      ch_temperature = boiler_temp;
      break;
    case OpenThermMessageID::Tdhw:
      temperature = ot.getFloat(response);
      if (water_temp != temperature) {
        water_temp = temperature;
        Serial.println("Hot water temperature: "+String(water_temp,1)+"°C");
      }
      dhw_temperature=water_temp;
      break;

      case OpenThermMessageID::CHPressure:
        temperature = ot.getFloat(response);
      if (CH_pressure != temperature) {
        CH_pressure = temperature;
        Serial.println("Hot water temperature: "+String(CH_pressure,1)+"bar");
      }
      OT_CH_Pressure=String(CH_pressure,1);

      
    case OpenThermMessageID::TSet:
      boiler_setpoint = ot.getFloat(response);
      break;
    case OpenThermMessageID::TdhwSet:
      water_setpoint = ot.getFloat(response);
      break;
    case OpenThermMessageID::MaxTSetUBMaxTSetLB:
      boiler_sp_min = response & 0xFF;
      boiler_sp_max = (response >> 8) & 0xFF;
      break;
    case OpenThermMessageID::TdhwSetUBTdhwSetLB:
      water_sp_min = response & 0xFF;
      water_sp_max = (response >> 8) & 0xFF;
      break;
    default: break;
  }
}
miks69
Offline
Зарегистрирован: 16.02.2020

eeciv пишет:



Это часть кода с ОТ, отсутствующий метод закомментил, добавил давление, но тоже как и вода 0, но про давление я не знаю поддерживает ли котел

Котел Buderus U072 не выдает информацию по давлению. Получить отчет по всем параметрам котла, а также проверить что он выдает по ГВС, вы можете с помощью готовой тестовой прошивки моего проекта.

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

Просто в вашем проекте ошибка может быть в любом другом месте или в самой логике работы программы.

 

eeciv
Offline
Зарегистрирован: 21.01.2017

Так код и работает, связь есть, статусы есть, модуляцию показывает, температуру воды в контуре показывает и задает - проверено( ставлю 50, котел отключается в 55, как и положено, хотя на дисплее стоит 65), но не показывает температуру ГВС .    Пример из библиотеки тоже работал, но также не показывал воду(

 

Тестовой не могу воспользоваться, я отлаживаю удаленно - дибо через web интерфейс, либо через телеграм

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

eeciv пишет:

Так код и работает, связь есть, статусы есть, модуляцию показывает, температуру воды в контуре показывает и задает - проверено( ставлю 50, котел отключается в 55, как и положено, хотя на дисплее стоит 65), но не показывает температуру ГВС .    Пример из библиотеки тоже работал, но также не показывал воду(

Тестовой не могу воспользоваться, я отлаживаю удаленно - дибо через web интерфейс, либо через телеграм

Тестовую прошивку вы можете залить удаленно через веб-интерфейс.

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

miks69 пишет:

eeciv пишет:

Так код и работает, связь есть, статусы есть, модуляцию показывает, температуру воды в контуре показывает и задает - проверено( ставлю 50, котел отключается в 55, как и положено, хотя на дисплее стоит 65), но не показывает температуру ГВС .    Пример из библиотеки тоже работал, но также не показывал воду(

Тестовой не могу воспользоваться, я отлаживаю удаленно - дибо через web интерфейс, либо через телеграм

Тестовую прошивку вы можете залить удаленно через веб-интерфейс.

Если нужна моя помощь - пишите на почту, чем смогу помогу.

eeciv
Offline
Зарегистрирован: 21.01.2017

Выгрузил тест  opentherm,  непонятно почему температура ГВС у меня в ID29 или в ID 26 только у двухконтурных котлов?

 И вопрос в ID15  параметры только для чтения или их можно поменять?


Запись лога Опентерм 
26-09-2021 00:06:26
ID=0: OpenTherm status request
Fault status: off
CH mode: on
DHW mode: off
Flame status: on
Cooling status: off
CH2 mode: off
Diagnostic event: off
ID=5: Fault flags & code
OEM-specific fault/error code (HEX): 0
Application-specific fault flags:
Service request: off
Lockout-reset: off
Low water press: off
Gas/flame fault: off
Air press fault: off
Water over-temp: off
ID=115: OEM diagnostic code
Data(HEX): 0
ID=3: Slave configuration & MemberID code
MemberID code (HEX): 8
DHW present: on
Control type modulating: off
Cooling supported: off
DHW config: off
Master low-off&pump control function allowed: on
CH2 present: off
ID=125: OpenTherm protocol version
Data: 3.0
ID=127: Slave product version
Product type: 163
Product version: 6
ID=17: Relative Modulation Level, %
Data: 0.0
ID=18: CH water pressure, bar
Error: Invalid response f0120000
ID=19: DHW flow rate, L/min
Data: 0.0
ID=20: Day of Week & Time of Day
Error: Invalid response f0140000
ID=21: Date
Error: Invalid response 70150000
ID=22: Year
Error: Invalid response 70160000
ID=25: Boiler water temp (°C)
Data: 31.0
ID=26: DHW temperature (°C)
Data: 0.0
ID=27: Outside air temperature (°C)
Error: Invalid response f01b0000
ID=28: Return water temperature (°C)
Error: Invalid response 701c0000
ID=29: Solar storage temperature (°C)
Data: 59.76
ID=30: Solar collector temperature (°C)
Error: Invalid response f01e0000
ID=31: Flow water temperature CH2 circuit (°C)
Data: 32.51
ID=32: Domestic hot water temperature 2 (°C)
Error: Invalid response 70200000
ID=33: Boiler exhaust temperature (°C)
Error: Invalid response f0210000
ID=116: Number of starts burner
Error: Invalid response f0740000
ID=117: Number of CH pump starts
Error: Invalid response 70750000
ID=118: Number of starts DHW pump/valve
Error: Invalid response 70760000
ID=119: Number of starts burner during DHW mode
Error: Invalid response f0770000
ID=120: Number of hours that burner is in operation (i.e. flame on)
Error: Invalid response f0780000
ID=121: Number of hours that CH pump has been running
Error: Invalid response 70790000
ID=122: Number of hours that DHW pump has been running or DHW valve has been opened
Error: Invalid response 707a0000
ID=123: Number of hours that burner is in operation during DHW mode
Error: Invalid response f07b0000
ID=6: Remote boiler parameter transfer-enable & read/write flags
DHW setpoint read/write: on
max CHsetpoint read/write: on
DHW setpoint transfer-enable: on
max CHsetpoint transfer-enable: on
ID=48: DHW setpoint upper & lower bounds for adjustment (°C)
DHWsetp low-bound: 35
DHWsetp upp-bound: 60
ID=49: Max CH water setpoint upper & lower bounds for adjustment (°C)
max CHsetp low-bound: 40
max CHsetp upp-bound: 65
ID=50: OTC heat curve ratio upper & lower bounds for adjustment  (°C)
OTC heat curve ratio low-bound: 40
OTC heat curve ratio upp-bound: 65
ID=56: Domestic hot water temperature setpoint (°C)
Data: 60.0
ID=57: Maximum allowable CH water setpoint (°C)
Data: 65.0
ID=58: OTC heat curve ratio (°C)
Error: Invalid response f03a0000
ID=10: Number of Transparent-Slave-Parameters supported by slave
Data: 0
ID=12: Size of Fault-History-Buffer supported by slave
Data: 0
ID=15: Maximum boiler capacity (kW) / Minimum boiler modulation level(%)
max boiler capacity: 24
min modulation level: 7
ID=9: Remote override room setpoint
Data: 0.0
ID=100: Remote override function
Error: Invalid response 70640000
Finished

 

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

eeciv пишет:

Выгрузил тест  opentherm,  непонятно почему температура ГВС у меня в ID29 или в ID 26 только у двухконтурных котлов?

И вопрос в ID15  параметры только для чтения или их можно поменять?

DHW temp (ID26) для двухконтурных котлов, в вашем случае получается темп ГВС в ID29, хотя в конфиге выдает DHW present. Интересно, вы сможете управлять ГВС через DHW setpoint?.

Параметры в ID15 только для чтения.

eeciv
Offline
Зарегистрирован: 21.01.2017

miks69,

Вы не пробовали уменьшать уровень модуляции ID14? Работает это на будерусе, ведь у вас будерус или я ощибаюсь?

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

eeciv пишет:

miks69,

Вы не пробовали уменьшать уровень модуляции ID14? Работает это на будерусе, ведь у вас будерус или я ощибаюсь?

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

Iv_An
Offline
Зарегистрирован: 13.10.2021

Здравствуйте! У меня BOSCH GAZ 6000 одноконтурный (он же  Buderus Logamax U072). Температуру в бойлере он не показывает, Но может ее  регулировать в пределах от хз скольки до той, что выставлена на котле. Я меняю от 40 до 60.

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

Iv_An пишет:

Здравствуйте! У меня BOSCH GAZ 6000 одноконтурный (он же  Buderus Logamax U072). Температуру в бойлере он не показывает, Но может ее  регулировать в пределах от хз скольки до той, что выставлена на котле. Я меняю от 40 до 60.

Для одноконтурных котлов с бойлером косвенного нагрева температуру ГВС котел выдает в ID29.

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

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

miks69 пишет:

Выложил проект на гитхабе - https://github.com/miksumin/ESP-OT

Добавил страницу с описанием параметров файла конфигурации прошивки (только для полной версии прошивки) - https://github.com/miksumin/ESP-OT/wiki/Параметры-файла-конфигурации-прошивки

Iv_An
Offline
Зарегистрирован: 13.10.2021

Спасибо. Для прошивки Tasmota поменял местами в библиотеке Tdhw, // f8.8  DHW temperature (°C) и Tstorage, // f8.8  Solar storage temperature (°C). Стало показывать температуру в бойлере.  Пытаюсь разобраться с  ESPHome, так как стоит сервер HomeAssistant. Как там поменять для одноконтурного котла не  нашел. 

 

 

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

miks69 пишет:

Выложил проект на гитхабе - https://github.com/miksumin/ESP-OT

В примере кода ядра прошивки v1 (ESP-OT-Lite) добавил веб-интерфейс. Пример легко компилируется и запускается любым начинающим пользователем. Принимаются пожелания по авторской доработке - https://github.com/miksumin/ESP-OT/tree/main/ESP-OT-Lite

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

shurrup
Offline
Зарегистрирован: 06.01.2014

Здравствуйте. Может подскажите мне в общих чертах, а как мне по протоколу OpenTerm реализовать только лишь мониторинг котла. Я как бы перелопатил все скетчи, написал то что мне нужно, но котел с моим модулем не запускается на отопление, ждёт установки температуры. Выставляю температуру в скетче, запускается. Но мне это совершенно не нужно. Куда рыть вообще?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ну, по логике, если:

1. Котел без указания температуры не запускается.

2. Вы можете прочитать значение температуры котла по умолчанию (а если не можете, какой же это мониторинг?)

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

shurrup
Offline
Зарегистрирован: 06.01.2014

andriano пишет:

Ну, по логике, если:

1. Котел без указания температуры не запускается.

2. Вы можете прочитать значение температуры котла по умолчанию (а если не можете, какой же это мониторинг?)

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


Оригинально. Я конечно попробую, но судя по экрану там и установленная температура 0. Если это так, то что же мне ставить

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

shurrup пишет:
Здравствуйте. Может подскажите мне в общих чертах, а как мне по протоколу OpenTerm реализовать только лишь мониторинг котла. Я как бы перелопатил все скетчи, написал то что мне нужно, но котел с моим модулем не запускается на отопление, ждёт установки температуры. Выставляю температуру в скетче, запускается. Но мне это совершенно не нужно. Куда рыть вообще?

На первый взгляд немного необычная задача. Возьмусь предположить, что у вас есть некий промышленный термостат для управления котлом и вам требуется реализовать мониторинг работы котла. В этом случае решением может быть Opentherm Gateway, т.е. некий шлюз между термостатом и котлом - http://otgw.tclcode.com/index.html

spasay_rim
Offline
Зарегистрирован: 04.09.2022

miks69 пишет:

ser1980 пишет:

система отопления простая всего 4 батареи по 10 сек, площадь пом. 36кв,  котел Buderus Logamax U072-24K, 24 кВт. Ставлю уставку термостата на 1гр выше чем показывает датчик ds18b20, термостат вычислил уставку нагрева отопления 45град. котел греет до 45 и выключается при модуляции 88% и какую бы термостат не вычислил  уставку нагрева  модуляция всегда 88% ,по воде такого нет.  Пробовал код другого автора ,модуляцией при отоплении  управляет.

Давление воды в системе и давление газа в норме? Газ магистральный или из баллонов? С котлом нет никаких проблем?

Как с Вами связаться можно за полной версией? 

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

spasay_rim пишет:

Как с Вами связаться можно за полной версией? 

Пишите на почту esp-ot[собака]mail.ru

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

Мой вариант контроллера на основе ESP32 DevKit и отдельно платы адаптера для сборки в стандартном корпусе D2MG

      

eeciv
Offline
Зарегистрирован: 21.01.2017

Симпатично!

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

В рамках развития проекта ESP-OT выпущена версия 2.1, в которой добавлена поддержка Ethernet для работы с платой WT32-ETH01.

За счет второго сетевого интерфейса существенно расширился набор возможных сценариев использования прошивки. Так, например, при наличии Ethernet-подключения WiFi можно запускать в режиме точки доступа или вообще не запускать, а при отсутствии Ethernet запускать WiFi в режиме подключения к сети или в режим е точки доступа. Возможны и другие сценарии работы прошивки в зависимости от конкретных задач.

Все текущие версии актуальных сборок прошивки для тестирования доступны по ссылке https://github.com/miksumin/ESP-Repo/tree/main/ESP-OT-Test

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

eeciv, а какая версия ПО прошивки самого котла?

eeciv
Offline
Зарегистрирован: 21.01.2017

tsv_33 пишет:

eeciv, а какая версия ПО прошивки самого котла?

 

263 06

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

У одного из заказчиков столкнулся с такой ситуацией: котел Viessmann Vitopend 100-W (A1HB001) 24 кВт регулирует модуляцию пламени в диапазоне от 40 до 100%. Ниже 40% не хочет ни под каким предлогом. Интересно, кто-нибудь еще сталкивался с таким поведением котла?

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

Новый вариант Opentherm адаптера в формате шилда для платы контроллера WT32-ETH01 - https://github.com/miksumin/ESP-Repo/wiki/Адаптер-Opentherm#opentherm-adapter-shield-wt32-eth01 и вариант прошивки для работы с двумя интерфейсами - https://github.com/miksumin/ESP-Repo/tree/main/ESP-OT-Test