diff --git a/platformio.ini b/platformio.ini index 9da4d56..0c3603d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -30,9 +30,6 @@ lib_deps = laxilef/TinyLogger@^1.1.1 build_type = ${secrets.build_type} build_flags = - -D PIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY - ;-D PIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH_LOW_FLASH - -D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK305 -mtext-section-literals -D MQTT_CLIENT_STD_FUNCTION_CALLBACK=1 ;-D DEBUG_ESP_CORE -D DEBUG_ESP_WIFI -D DEBUG_ESP_HTTP_SERVER -D DEBUG_ESP_PORT=Serial @@ -75,7 +72,11 @@ lib_ignore = extra_scripts = post:tools/build.py build_type = ${env.build_type} -build_flags = ${env.build_flags} +build_flags = + ${env.build_flags} + -D PIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY + ;-D PIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH_LOW_FLASH + -D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK305 board_build.ldscript = eagle.flash.4m1m.ld [esp32_defaults] diff --git a/src/OpenThermTask.h b/src/OpenThermTask.h index 6a66c81..a3a2a2b 100644 --- a/src/OpenThermTask.h +++ b/src/OpenThermTask.h @@ -81,7 +81,7 @@ protected: Log.sinfoln(FPSTR(L_OT), F("Started. GPIO IN: %hhu, GPIO OUT: %hhu"), settings.opentherm.inGpio, settings.opentherm.outGpio); this->instance->setAfterSendRequestCallback([this](unsigned long request, unsigned long response, OpenThermResponseStatus status, byte attempt) { - Log.straceln( + Log.sverboseln( FPSTR(L_OT), F("ID: %4d Request: %8lx Response: %8lx Attempt: %2d Status: %s"), CustomOpenTherm::getDataID(request), request, response, attempt, CustomOpenTherm::statusToString(status) @@ -158,7 +158,7 @@ protected: || (settings.opentherm.dhwToCh2 && settings.opentherm.dhwPresent && settings.dhw.enabled); if (settings.opentherm.heatingCh1ToCh2) { - vars.master.ch2.targetTemp = vars.master.heating.targetTemp; + vars.master.ch2.targetTemp = vars.master.heating.setpointTemp; } else if (settings.opentherm.dhwToCh2) { vars.master.ch2.targetTemp = vars.master.dhw.targetTemp; @@ -474,6 +474,9 @@ protected: } else { Log.swarningln(FPSTR(L_OT), F("Failed receive modulation level")); } + + } else if (vars.slave.modulation.current > 0) { + vars.slave.modulation.current = 0; } // Modulation level sensors @@ -897,14 +900,14 @@ protected: // Normal heating control if (!settings.opentherm.nativeHeatingControl && vars.master.heating.enabled) { // Converted target heating temp - float convertedTemp = convertTemp(vars.master.heating.targetTemp, settings.system.unitSystem, settings.opentherm.unitSystem); + float convertedTemp = convertTemp(vars.master.heating.setpointTemp, settings.system.unitSystem, settings.opentherm.unitSystem); if (this->needSetHeatingTemp(convertedTemp)) { // Set max heating temp if (this->setMaxHeatingTemp(convertedTemp)) { Log.sinfoln( FPSTR(L_OT_HEATING), F("Set max heating temp: %.2f (converted: %.2f)"), - vars.master.heating.targetTemp, convertedTemp + vars.master.heating.setpointTemp, convertedTemp ); } else { @@ -917,7 +920,7 @@ protected: Log.sinfoln( FPSTR(L_OT_HEATING), F("Set target temp: %.2f (converted: %.2f, response: %.2f)"), - vars.master.heating.targetTemp, convertedTemp, vars.slave.heating.targetTemp + vars.master.heating.setpointTemp, convertedTemp, vars.slave.heating.targetTemp ); } else { diff --git a/src/RegulatorTask.h b/src/RegulatorTask.h index 3fbbb0f..debb1cc 100644 --- a/src/RegulatorTask.h +++ b/src/RegulatorTask.h @@ -55,14 +55,15 @@ protected: this->turbo(); this->hysteresis(); - vars.master.heating.targetTemp = constrain( - this->getHeatingSetpoint(), - vars.master.heating.minTemp, - vars.master.heating.maxTemp + vars.master.heating.targetTemp = settings.heating.target; + vars.master.heating.setpointTemp = constrain( + this->getHeatingSetpointTemp(), + this->getHeatingMinSetpointTemp(), + this->getHeatingMaxSetpointTemp() ); Sensors::setValueByType( - Sensors::Type::HEATING_SETPOINT_TEMP, vars.master.heating.targetTemp, + Sensors::Type::HEATING_SETPOINT_TEMP, vars.master.heating.setpointTemp, Sensors::ValueType::PRIMARY, true, true ); } @@ -104,8 +105,25 @@ protected: } } + inline float getHeatingMinSetpointTemp() { + if (settings.opentherm.nativeHeatingControl) { + return vars.master.heating.minTemp; - float getHeatingSetpoint() { + } else { + return settings.heating.minTemp; + } + } + + inline float getHeatingMaxSetpointTemp() { + if (settings.opentherm.nativeHeatingControl) { + return vars.master.heating.maxTemp; + + } else { + return settings.heating.maxTemp; + } + } + + float getHeatingSetpointTemp() { float newTemp = 0; if (fabsf(prevHeatingTarget - settings.heating.target) > 0.0001f) { diff --git a/src/Settings.h b/src/Settings.h index 0f22fff..933d914 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -255,6 +255,7 @@ struct Variables { bool blocking = false; bool enabled = false; bool indoorTempControl = false; + float setpointTemp = 0.0f; float targetTemp = 0.0f; float currentTemp = 0.0f; float returnTemp = 0.0f; diff --git a/src/strings.h b/src/strings.h index 54c874d..89cee3f 100644 --- a/src/strings.h +++ b/src/strings.h @@ -170,6 +170,7 @@ const char S_STA[] PROGMEM = "sta"; const char S_STATE[] PROGMEM = "state"; const char S_STATIC_CONFIG[] PROGMEM = "staticConfig"; const char S_STATUS_LED_GPIO[] PROGMEM = "statusLedGpio"; +const char S_SETPOINT_TEMP[] PROGMEM = "setpointTemp"; const char S_SUBNET[] PROGMEM = "subnet"; const char S_SUMMER_WINTER_MODE[] PROGMEM = "summerWinterMode"; const char S_SYSTEM[] PROGMEM = "system"; diff --git a/src/utils.h b/src/utils.h index d928a21..b982f68 100644 --- a/src/utils.h +++ b/src/utils.h @@ -1735,6 +1735,7 @@ void varsToJson(const Variables& src, JsonVariant dst) { mHeating[FPSTR(S_ENABLED)] = src.master.heating.enabled; mHeating[FPSTR(S_BLOCKING)] = src.master.heating.blocking; mHeating[FPSTR(S_INDOOR_TEMP_CONTROL)] = src.master.heating.indoorTempControl; + mHeating[FPSTR(S_SETPOINT_TEMP)] = roundf(src.master.heating.setpointTemp, 2); mHeating[FPSTR(S_TARGET_TEMP)] = roundf(src.master.heating.targetTemp, 2); mHeating[FPSTR(S_CURRENT_TEMP)] = roundf(src.master.heating.currentTemp, 2); mHeating[FPSTR(S_RETURN_TEMP)] = roundf(src.master.heating.returnTemp, 2); diff --git a/src_data/locales/en.json b/src_data/locales/en.json index 7251746..2fff53c 100644 --- a/src_data/locales/en.json +++ b/src_data/locales/en.json @@ -105,7 +105,8 @@ "mHeatEnabled": "Heating enabled", "mHeatBlocking": "Heating blocked", "sHeatActive": "Heating active", - "mHeatTargetTemp": "Heating setpoint temp", + "mHeatSetpointTemp": "Heating setpoint temp", + "mHeatTargetTemp": "Heating target temp", "mHeatCurrTemp": "Heating current temp", "mHeatRetTemp": "Heating return temp", "mHeatIndoorTemp": "Heating, indoor temp", @@ -113,7 +114,7 @@ "mDhwEnabled": "DHW enabled", "sDhwActive": "DHW active", - "mDhwTargetTemp": "DHW setpoint temp", + "mDhwTargetTemp": "DHW target temp", "mDhwCurrTemp": "DHW current temp", "mDhwRetTemp": "DHW return temp" } diff --git a/src_data/locales/ru.json b/src_data/locales/ru.json index 9d594c6..60a3359 100644 --- a/src_data/locales/ru.json +++ b/src_data/locales/ru.json @@ -105,6 +105,7 @@ "mHeatEnabled": "Отопление", "mHeatBlocking": "Блокировка отопления", "sHeatActive": "Активность отопления", + "mHeatSetpointTemp": "Отопление, уставка", "mHeatTargetTemp": "Отопление, целевая температура", "mHeatCurrTemp": "Отопление, текущая температура", "mHeatRetTemp": "Отопление, температура обратки", diff --git a/src_data/pages/dashboard.html b/src_data/pages/dashboard.html index 7cfa2f5..c91d285 100644 --- a/src_data/pages/dashboard.html +++ b/src_data/pages/dashboard.html @@ -144,6 +144,10 @@ dashboard.states.sHeatActive + + dashboard.states.mHeatSetpointTemp + + dashboard.states.mHeatTargetTemp @@ -458,6 +462,7 @@ setState('.mHeatEnabled', result.master.heating.enabled); setState('.mHeatBlocking', result.master.heating.blocking); setState('.mHeatIndoorTempControl', result.master.heating.indoorTempControl); + setValue('.mHeatSetpointTemp', result.master.heating.setpointTemp); setValue('.mHeatTargetTemp', result.master.heating.targetTemp); setValue('.mHeatCurrTemp', result.master.heating.currentTemp); setValue('.mHeatRetTemp', result.master.heating.returnTemp);