Merge branch 'master' into ble-support

This commit is contained in:
Menno de Graaf
2023-12-10 14:23:20 +01:00
8 changed files with 132 additions and 56 deletions

View File

@@ -8,6 +8,16 @@ public:
this->client = &client; this->client = &client;
} }
void setYieldCallback(void(*yieldCallback)(void*)) {
this->yieldCallback = yieldCallback;
this->yieldArg = nullptr;
}
void setYieldCallback(void(*yieldCallback)(void*), void* arg) {
this->yieldCallback = yieldCallback;
this->yieldArg = arg;
}
void setBufferedClient() { void setBufferedClient() {
this->bClient = nullptr; this->bClient = nullptr;
} }
@@ -68,7 +78,13 @@ public:
} else { } else {
serializeJson(doc, *client); serializeJson(doc, *client);
} }
return client->endPublish();
int pubResult = client->endPublish();
if (this->yieldCallback != nullptr) {
this->yieldCallback(yieldArg);
}
return pubResult;
} }
bool publish(const char* topic) { bool publish(const char* topic) {
@@ -89,6 +105,8 @@ public:
} }
protected: protected:
void(*yieldCallback)(void*) = nullptr;
void* yieldArg = nullptr;
PubSubClient* client; PubSubClient* client;
BufferingPrint* bClient = nullptr; BufferingPrint* bClient = nullptr;
String prefix = "homeassistant"; String prefix = "homeassistant";

View File

@@ -0,0 +1,27 @@
#pragma once
#include <WiFiManager.h>
class HeaderParameter : public WiFiManagerParameter {
public:
HeaderParameter(const char* title) {
WiFiManagerParameter("");
byte size = strlen(title) + strlen(this->tpl) + 1;
this->buffer = new char[size];
this->title = title;
}
~HeaderParameter() {
delete[] this->buffer;
}
const char* getCustomHTML() const override {
sprintf(this->buffer, this->tpl, title);
return this->buffer;
}
protected:
const char* title;
char* buffer;
const char* tpl = "<div class=\"bheader\">%s</div>";
};

View File

@@ -17,7 +17,8 @@ lib_deps =
https://github.com/Laxilef/opentherm_library/archive/refs/heads/master.zip https://github.com/Laxilef/opentherm_library/archive/refs/heads/master.zip
knolleary/PubSubClient@^2.8 knolleary/PubSubClient@^2.8
bblanchon/StreamUtils@^1.7.3 bblanchon/StreamUtils@^1.7.3
lennarthennigs/ESP Telnet@^2.1.2 ;lennarthennigs/ESP Telnet@^2.1.2
https://github.com/Laxilef/ESPTelnet
gyverlibs/EEManager@^2.0 gyverlibs/EEManager@^2.0
gyverlibs/GyverPID@^3.3 gyverlibs/GyverPID@^3.3
gyverlibs/GyverBlinker@^1.0 gyverlibs/GyverBlinker@^1.0

View File

@@ -45,7 +45,11 @@ protected:
pinMode(LED_STATUS_PIN, OUTPUT); pinMode(LED_STATUS_PIN, OUTPUT);
digitalWrite(LED_STATUS_PIN, false); digitalWrite(LED_STATUS_PIN, false);
#endif #endif
if (settings.externalPump.pin != 0) {
pinMode(settings.externalPump.pin, OUTPUT); pinMode(settings.externalPump.pin, OUTPUT);
digitalWrite(settings.externalPump.pin, false);
}
#if defined(ESP32) #if defined(ESP32)
heapSize = ESP.getHeapSize(); heapSize = ESP.getHeapSize();
@@ -224,9 +228,11 @@ protected:
this->heatingEnabled = true; this->heatingEnabled = true;
} }
if (!settings.externalPump.use) { if (!settings.externalPump.use || settings.externalPump.pin == 0) {
if (vars.externalPump.enable) { if (vars.externalPump.enable) {
if (settings.externalPump.pin != 0) {
digitalWrite(settings.externalPump.pin, false); digitalWrite(settings.externalPump.pin, false);
}
vars.externalPump.enable = false; vars.externalPump.enable = false;
vars.externalPump.lastEnableTime = millis(); vars.externalPump.lastEnableTime = millis();

View File

@@ -43,6 +43,14 @@ protected:
client.setCallback(std::bind(&MqttTask::__callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); client.setCallback(std::bind(&MqttTask::__callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
client.setBufferSize(1024); client.setBufferSize(1024);
haHelper.setYieldCallback([](void* self) {
MqttTask* task = static_cast<MqttTask*>(self);
task->delay(50);
if (client.connected()) {
client.loop();
}
}, this);
haHelper.setBufferedClient(this->bClient); haHelper.setBufferedClient(this->bClient);
haHelper.setDevicePrefix(settings.mqtt.prefix); haHelper.setDevicePrefix(settings.mqtt.prefix);
haHelper.setDeviceVersion(PROJECT_VERSION); haHelper.setDeviceVersion(PROJECT_VERSION);
@@ -85,6 +93,7 @@ protected:
lastReconnectAttempt = millis(); lastReconnectAttempt = millis();
} }
delay(100);
} }
@@ -399,13 +408,11 @@ protected:
haHelper.publishNumberOutdoorSensorOffset(false); haHelper.publishNumberOutdoorSensorOffset(false);
haHelper.publishNumberIndoorSensorOffset(false); haHelper.publishNumberIndoorSensorOffset(false);
haHelper.publishSwitchDebug(false); haHelper.publishSwitchDebug(false);
yield();
// emergency // emergency
haHelper.publishSwitchEmergency(); haHelper.publishSwitchEmergency();
haHelper.publishNumberEmergencyTarget(); haHelper.publishNumberEmergencyTarget();
haHelper.publishSwitchEmergencyUseEquitherm(); haHelper.publishSwitchEmergencyUseEquitherm();
yield();
// heating // heating
haHelper.publishSwitchHeating(false); haHelper.publishSwitchHeating(false);
@@ -413,12 +420,10 @@ protected:
haHelper.publishNumberHeatingHysteresis(); haHelper.publishNumberHeatingHysteresis();
haHelper.publishSensorHeatingSetpoint(false); haHelper.publishSensorHeatingSetpoint(false);
haHelper.publishSensorCurrentHeatingMinTemp(false); haHelper.publishSensorCurrentHeatingMinTemp(false);
yield();
haHelper.publishSensorCurrentHeatingMaxTemp(false); haHelper.publishSensorCurrentHeatingMaxTemp(false);
haHelper.publishNumberHeatingMinTemp(false); haHelper.publishNumberHeatingMinTemp(false);
haHelper.publishNumberHeatingMaxTemp(false); haHelper.publishNumberHeatingMaxTemp(false);
haHelper.publishNumberHeatingMaxModulation(false); haHelper.publishNumberHeatingMaxModulation(false);
yield();
// pid // pid
haHelper.publishSwitchPID(); haHelper.publishSwitchPID();
@@ -427,19 +432,16 @@ protected:
haHelper.publishNumberPIDFactorD(); haHelper.publishNumberPIDFactorD();
haHelper.publishNumberPIDMinTemp(false); haHelper.publishNumberPIDMinTemp(false);
haHelper.publishNumberPIDMaxTemp(false); haHelper.publishNumberPIDMaxTemp(false);
yield();
// equitherm // equitherm
haHelper.publishSwitchEquitherm(); haHelper.publishSwitchEquitherm();
haHelper.publishNumberEquithermFactorN(); haHelper.publishNumberEquithermFactorN();
haHelper.publishNumberEquithermFactorK(); haHelper.publishNumberEquithermFactorK();
haHelper.publishNumberEquithermFactorT(); haHelper.publishNumberEquithermFactorT();
yield();
// tuning // tuning
haHelper.publishSwitchTuning(); haHelper.publishSwitchTuning();
haHelper.publishSelectTuningRegulator(); haHelper.publishSelectTuningRegulator();
yield();
// states // states
haHelper.publishBinSensorStatus(); haHelper.publishBinSensorStatus();
@@ -448,7 +450,6 @@ protected:
haHelper.publishBinSensorFlame(); haHelper.publishBinSensorFlame();
haHelper.publishBinSensorFault(); haHelper.publishBinSensorFault();
haHelper.publishBinSensorDiagnostic(); haHelper.publishBinSensorDiagnostic();
yield();
// sensors // sensors
haHelper.publishSensorModulation(false); haHelper.publishSensorModulation(false);
@@ -456,12 +457,10 @@ protected:
haHelper.publishSensorFaultCode(); haHelper.publishSensorFaultCode();
haHelper.publishSensorRssi(false); haHelper.publishSensorRssi(false);
haHelper.publishSensorUptime(false); haHelper.publishSensorUptime(false);
yield();
// temperatures // temperatures
haHelper.publishNumberIndoorTemp(); haHelper.publishNumberIndoorTemp();
haHelper.publishSensorHeatingTemp(); haHelper.publishSensorHeatingTemp();
yield();
// buttons // buttons
haHelper.publishButtonRestart(false); haHelper.publishButtonRestart(false);
@@ -507,7 +506,6 @@ protected:
} }
published = true; published = true;
yield();
} }
if (force || _heatingMinTemp != heatingMinTemp || _heatingMaxTemp != heatingMaxTemp) { if (force || _heatingMinTemp != heatingMinTemp || _heatingMaxTemp != heatingMaxTemp) {
@@ -520,17 +518,23 @@ protected:
_isStupidMode = isStupidMode; _isStupidMode = isStupidMode;
haHelper.publishNumberHeatingTarget(heatingMinTemp, heatingMaxTemp, false); haHelper.publishNumberHeatingTarget(heatingMinTemp, heatingMaxTemp, false);
haHelper.publishClimateHeating(heatingMinTemp, heatingMaxTemp, isStupidMode ? HaHelper::TEMP_SOURCE_HEATING : HaHelper::TEMP_SOURCE_INDOOR); haHelper.publishClimateHeating(
heatingMinTemp,
heatingMaxTemp,
isStupidMode ? HaHelper::TEMP_SOURCE_HEATING : HaHelper::TEMP_SOURCE_INDOOR
);
published = true; published = true;
yield();
} else if (_isStupidMode != isStupidMode) { } else if (_isStupidMode != isStupidMode) {
_isStupidMode = isStupidMode; _isStupidMode = isStupidMode;
haHelper.publishClimateHeating(heatingMinTemp, heatingMaxTemp, isStupidMode ? HaHelper::TEMP_SOURCE_HEATING : HaHelper::TEMP_SOURCE_INDOOR); haHelper.publishClimateHeating(
heatingMinTemp,
heatingMaxTemp,
isStupidMode ? HaHelper::TEMP_SOURCE_HEATING : HaHelper::TEMP_SOURCE_INDOOR
);
published = true; published = true;
yield();
} }
if (_dhwPresent && (force || _dhwMinTemp != settings.dhw.minTemp || _dhwMaxTemp != settings.dhw.maxTemp)) { if (_dhwPresent && (force || _dhwMinTemp != settings.dhw.minTemp || _dhwMaxTemp != settings.dhw.maxTemp)) {
@@ -541,7 +545,6 @@ protected:
haHelper.publishClimateDhw(settings.dhw.minTemp, settings.dhw.maxTemp); haHelper.publishClimateDhw(settings.dhw.minTemp, settings.dhw.maxTemp);
published = true; published = true;
yield();
} }
if (force || _editableOutdoorTemp != editableOutdoorTemp) { if (force || _editableOutdoorTemp != editableOutdoorTemp) {
@@ -556,7 +559,6 @@ protected:
} }
published = true; published = true;
yield();
} }
if (force || _editableIndoorTemp != editableIndoorTemp) { if (force || _editableIndoorTemp != editableIndoorTemp) {

View File

@@ -41,7 +41,7 @@ protected:
} }
void setup() { void setup() {
Log.sinfoln(FPSTR(S_OT), F("Started. GPIO IN: %d, GPIO OUT: %d"), settings.opentherm.inPin, settings.opentherm.outPin); Log.sinfoln(FPSTR(S_OT), F("Started. GPIO IN: %hhu, GPIO OUT: %hhu"), settings.opentherm.inPin, settings.opentherm.outPin);
ot = new CustomOpenTherm(settings.opentherm.inPin, settings.opentherm.outPin); ot = new CustomOpenTherm(settings.opentherm.inPin, settings.opentherm.outPin);
@@ -144,10 +144,10 @@ protected:
} else { } else {
if (setMaxModulationLevel(settings.heating.maxModulation)) { if (setMaxModulationLevel(settings.heating.maxModulation)) {
Log.snoticeln(FPSTR(S_OT_HEATING), F("Set max modulation %d\%"), settings.heating.maxModulation); Log.snoticeln(FPSTR(S_OT_HEATING), F("Set max modulation %hhu%%"), settings.heating.maxModulation);
} else { } else {
Log.swarningln(FPSTR(S_OT_HEATING), F("Failed set max modulation %d\%"), settings.heating.maxModulation); Log.swarningln(FPSTR(S_OT_HEATING), F("Failed set max modulation %hhu%%"), settings.heating.maxModulation);
} }
} }
//yield(); //yield();
@@ -158,13 +158,13 @@ protected:
if (settings.dhw.minTemp < vars.parameters.dhwMinTemp) { if (settings.dhw.minTemp < vars.parameters.dhwMinTemp) {
settings.dhw.minTemp = vars.parameters.dhwMinTemp; settings.dhw.minTemp = vars.parameters.dhwMinTemp;
eeSettings.update(); eeSettings.update();
Log.snoticeln(FPSTR(S_OT_DHW), F("Updated min temp: %d"), settings.dhw.minTemp); Log.snoticeln(FPSTR(S_OT_DHW), F("Updated min temp: %hhu"), settings.dhw.minTemp);
} }
if (settings.dhw.maxTemp > vars.parameters.dhwMaxTemp) { if (settings.dhw.maxTemp > vars.parameters.dhwMaxTemp) {
settings.dhw.maxTemp = vars.parameters.dhwMaxTemp; settings.dhw.maxTemp = vars.parameters.dhwMaxTemp;
eeSettings.update(); eeSettings.update();
Log.snoticeln(FPSTR(S_OT_DHW), F("Updated max temp: %d"), settings.dhw.maxTemp); Log.snoticeln(FPSTR(S_OT_DHW), F("Updated max temp: %hhu"), settings.dhw.maxTemp);
} }
} else { } else {
@@ -186,13 +186,13 @@ protected:
if (settings.heating.minTemp < vars.parameters.heatingMinTemp) { if (settings.heating.minTemp < vars.parameters.heatingMinTemp) {
settings.heating.minTemp = vars.parameters.heatingMinTemp; settings.heating.minTemp = vars.parameters.heatingMinTemp;
eeSettings.update(); eeSettings.update();
Log.snoticeln(FPSTR(S_OT_HEATING), F("Updated min temp: %d"), settings.heating.minTemp); Log.snoticeln(FPSTR(S_OT_HEATING), F("Updated min temp: %hhu"), settings.heating.minTemp);
} }
if (settings.heating.maxTemp > vars.parameters.heatingMaxTemp) { if (settings.heating.maxTemp > vars.parameters.heatingMaxTemp) {
settings.heating.maxTemp = vars.parameters.heatingMaxTemp; settings.heating.maxTemp = vars.parameters.heatingMaxTemp;
eeSettings.update(); eeSettings.update();
Log.snoticeln(FPSTR(S_OT_HEATING), F("Updated max temp: %d"), settings.heating.maxTemp); Log.snoticeln(FPSTR(S_OT_HEATING), F("Updated max temp: %hhu"), settings.heating.maxTemp);
} }
} else { } else {

View File

@@ -3,7 +3,7 @@
#include <UnsignedIntParameter.h> #include <UnsignedIntParameter.h>
#include <UnsignedShortParameter.h> #include <UnsignedShortParameter.h>
#include <CheckboxParameter.h> #include <CheckboxParameter.h>
#include <SeparatorParameter.h> #include <HeaderParameter.h>
#include <netif/etharp.h> #include <netif/etharp.h>
WiFiManager wm; WiFiManager wm;
@@ -36,7 +36,12 @@ UnsignedShortParameter* wmExtPumpPostCirculationTime;
UnsignedIntParameter* wmExtPumpAntiStuckInterval; UnsignedIntParameter* wmExtPumpAntiStuckInterval;
UnsignedShortParameter* wmExtPumpAntiStuckTime; UnsignedShortParameter* wmExtPumpAntiStuckTime;
SeparatorParameter* wmSep; HeaderParameter* wmMqttHeader;
HeaderParameter* wmOtHeader;
HeaderParameter* wmOtFlagsHeader;
HeaderParameter* wmSensorsHeader;
HeaderParameter* wmExtPumpHeader;
extern EEManager eeSettings; extern EEManager eeSettings;
#if USE_TELNET #if USE_TELNET
@@ -80,6 +85,12 @@ protected:
wm.setDebugOutput(settings.debug, (wm_debuglevel_t) WM_DEBUG_MODE); wm.setDebugOutput(settings.debug, (wm_debuglevel_t) WM_DEBUG_MODE);
wm.setTitle(PROJECT_NAME); wm.setTitle(PROJECT_NAME);
wm.setCustomHeadElement(PSTR(
"<style>"
".bheader + br {display: none;}"
".bheader {margin: 1.25em 0 0.5em 0;padding: 0;border-bottom: 2px solid #000;font-size: 1.5em;}"
"</style>"
));
wm.setCustomMenuHTML(PSTR( wm.setCustomMenuHTML(PSTR(
"<style>.wrap h1 {display: none;} .wrap h3 {display: none;} .nh {margin: 0 0 1em 0;} .nh .logo {font-size: 1.8em; margin: 0.5em; text-align: center;} .nh .links {text-align: center;}</style>" "<style>.wrap h1 {display: none;} .wrap h3 {display: none;} .nh {margin: 0 0 1em 0;} .nh .logo {font-size: 1.8em; margin: 0.5em; text-align: center;} .nh .links {text-align: center;}</style>"
"<div class=\"nh\">" "<div class=\"nh\">"
@@ -91,62 +102,68 @@ protected:
std::vector<const char *> menu = {"custom", "wifi", "param", "sep", "info", "update", "restart"}; std::vector<const char *> menu = {"custom", "wifi", "param", "sep", "info", "update", "restart"};
wm.setMenu(menu); wm.setMenu(menu);
wmSep = new SeparatorParameter();
wmHostname = new WiFiManagerParameter("hostname", "Hostname", settings.hostname, 80); wmHostname = new WiFiManagerParameter("hostname", "Hostname", settings.hostname, 80);
wm.addParameter(wmHostname); wm.addParameter(wmHostname);
wmMqttServer = new WiFiManagerParameter("mqtt_server", "MQTT server", settings.mqtt.server, 80); wmMqttHeader = new HeaderParameter("MQTT");
wm.addParameter(wmMqttHeader);
wmMqttServer = new WiFiManagerParameter("mqtt_server", "Server", settings.mqtt.server, 80);
wm.addParameter(wmMqttServer); wm.addParameter(wmMqttServer);
wmMqttPort = new UnsignedIntParameter("mqtt_port", "MQTT port", settings.mqtt.port, 6); wmMqttPort = new UnsignedIntParameter("mqtt_port", "Port", settings.mqtt.port, 6);
wm.addParameter(wmMqttPort); wm.addParameter(wmMqttPort);
wmMqttUser = new WiFiManagerParameter("mqtt_user", "MQTT username", settings.mqtt.user, 32); wmMqttUser = new WiFiManagerParameter("mqtt_user", "Username", settings.mqtt.user, 32);
wm.addParameter(wmMqttUser); wm.addParameter(wmMqttUser);
wmMqttPassword = new WiFiManagerParameter("mqtt_password", "MQTT password", settings.mqtt.password, 32, "type=\"password\""); wmMqttPassword = new WiFiManagerParameter("mqtt_password", "Password", settings.mqtt.password, 32, "type=\"password\"");
wm.addParameter(wmMqttPassword); wm.addParameter(wmMqttPassword);
wmMqttPrefix = new WiFiManagerParameter("mqtt_prefix", "MQTT prefix", settings.mqtt.prefix, 32); wmMqttPrefix = new WiFiManagerParameter("mqtt_prefix", "Prefix", settings.mqtt.prefix, 32);
wm.addParameter(wmMqttPrefix); wm.addParameter(wmMqttPrefix);
wmMqttPublishInterval = new UnsignedIntParameter("mqtt_publish_interval", "MQTT publish interval", settings.mqtt.interval, 5); wmMqttPublishInterval = new UnsignedIntParameter("mqtt_publish_interval", "Publish interval", settings.mqtt.interval, 5);
wm.addParameter(wmMqttPublishInterval); wm.addParameter(wmMqttPublishInterval);
wm.addParameter(wmSep); wmOtHeader = new HeaderParameter("OpenTherm");
wm.addParameter(wmOtHeader);
wmOtInPin = new UnsignedIntParameter("ot_in_pin", "Opentherm GPIO IN", settings.opentherm.inPin, 2); wmOtInPin = new UnsignedIntParameter("ot_in_pin", "GPIO IN", settings.opentherm.inPin, 2);
wm.addParameter(wmOtInPin); wm.addParameter(wmOtInPin);
wmOtOutPin = new UnsignedIntParameter("ot_out_pin", "Opentherm GPIO OUT", settings.opentherm.outPin, 2); wmOtOutPin = new UnsignedIntParameter("ot_out_pin", "GPIO OUT", settings.opentherm.outPin, 2);
wm.addParameter(wmOtOutPin); wm.addParameter(wmOtOutPin);
wmOtMemberIdCode = new UnsignedIntParameter("ot_member_id_code", "Opentherm Master Member ID", settings.opentherm.memberIdCode, 5); wmOtMemberIdCode = new UnsignedIntParameter("ot_member_id_code", "Master Member ID", settings.opentherm.memberIdCode, 5);
wm.addParameter(wmOtMemberIdCode); wm.addParameter(wmOtMemberIdCode);
wmOtDhwPresent = new CheckboxParameter("ot_dhw_present", "Opentherm DHW present", settings.opentherm.dhwPresent); wmOtFlagsHeader = new HeaderParameter("OpenTherm flags");
wm.addParameter(wmOtFlagsHeader);
wmOtDhwPresent = new CheckboxParameter("ot_dhw_present", "DHW present", settings.opentherm.dhwPresent);
wm.addParameter(wmOtDhwPresent); wm.addParameter(wmOtDhwPresent);
wmOtSummerWinterMode = new CheckboxParameter("ot_summer_winter_mode", "Opentherm summer/winter mode", settings.opentherm.summerWinterMode); wmOtSummerWinterMode = new CheckboxParameter("ot_summer_winter_mode", "Summer/winter mode", settings.opentherm.summerWinterMode);
wm.addParameter(wmOtSummerWinterMode); wm.addParameter(wmOtSummerWinterMode);
wmOtHeatingCh2Enabled = new CheckboxParameter("ot_heating_ch2_enabled", "Opentherm CH2 enabled", settings.opentherm.heatingCh2Enabled); wmOtHeatingCh2Enabled = new CheckboxParameter("ot_heating_ch2_enabled", "CH2 enabled", settings.opentherm.heatingCh2Enabled);
wm.addParameter(wmOtHeatingCh2Enabled); wm.addParameter(wmOtHeatingCh2Enabled);
wmOtHeatingCh1ToCh2 = new CheckboxParameter("ot_heating_ch1_to_ch2", "Opentherm heating CH1 to CH2", settings.opentherm.heatingCh1ToCh2); wmOtHeatingCh1ToCh2 = new CheckboxParameter("ot_heating_ch1_to_ch2", "Heating CH1 to CH2", settings.opentherm.heatingCh1ToCh2);
wm.addParameter(wmOtHeatingCh1ToCh2); wm.addParameter(wmOtHeatingCh1ToCh2);
wmOtDhwToCh2 = new CheckboxParameter("ot_dhw_to_ch2", "Opentherm DHW to CH2", settings.opentherm.dhwToCh2); wmOtDhwToCh2 = new CheckboxParameter("ot_dhw_to_ch2", "DHW to CH2", settings.opentherm.dhwToCh2);
wm.addParameter(wmOtDhwToCh2); wm.addParameter(wmOtDhwToCh2);
wmOtDhwBlocking = new CheckboxParameter("ot_dhw_blocking", "Opentherm DHW blocking", settings.opentherm.dhwBlocking); wmOtDhwBlocking = new CheckboxParameter("ot_dhw_blocking", "DHW blocking", settings.opentherm.dhwBlocking);
wm.addParameter(wmOtDhwBlocking); wm.addParameter(wmOtDhwBlocking);
wmOtModSyncWithHeating = new CheckboxParameter("ot_mod_sync_with_heating", "Modulation sync with heating", settings.opentherm.modulationSyncWithHeating); wmOtModSyncWithHeating = new CheckboxParameter("ot_mod_sync_with_heating", "Modulation sync with heating", settings.opentherm.modulationSyncWithHeating);
wm.addParameter(wmOtModSyncWithHeating); wm.addParameter(wmOtModSyncWithHeating);
wm.addParameter(wmSep); wmSensorsHeader = new HeaderParameter("Sensors");
wm.addParameter(wmSensorsHeader);
wmOutdoorSensorPin = new UnsignedIntParameter("outdoor_sensor_pin", "Outdoor sensor GPIO", settings.sensors.outdoor.pin, 2); wmOutdoorSensorPin = new UnsignedIntParameter("outdoor_sensor_pin", "Outdoor sensor GPIO", settings.sensors.outdoor.pin, 2);
wm.addParameter(wmOutdoorSensorPin); wm.addParameter(wmOutdoorSensorPin);
@@ -157,21 +174,25 @@ protected:
wmBleAddress = new WiFiManagerParameter("ble_address", "BLE sensor address", settings.sensors.indoor.bleAddresss, 17); wmBleAddress = new WiFiManagerParameter("ble_address", "BLE sensor address", settings.sensors.indoor.bleAddresss, 17);
wm.addParameter(wmBleAddress); wm.addParameter(wmBleAddress);
wm.addParameter(wmSep); wmBleAddress = new WiFiManagerParameter("ble_address", "BLE sensor address", settings.sensors.indoor.bleAddresss, 17);
wm.addParameter(wmBleAddress);
wmExtPumpUse = new CheckboxParameter("ext_pump_use", "Use external pump", settings.externalPump.use); wmExtPumpHeader = new HeaderParameter("External pump");
wm.addParameter(wmExtPumpHeader);
wmExtPumpUse = new CheckboxParameter("ext_pump_use", "Use external pump<br>", settings.externalPump.use);
wm.addParameter(wmExtPumpUse); wm.addParameter(wmExtPumpUse);
wmExtPumpPin = new UnsignedIntParameter("ext_pump_pin", "External pump GPIO", settings.externalPump.pin, 2); wmExtPumpPin = new UnsignedIntParameter("ext_pump_pin", "Relay GPIO", settings.externalPump.pin, 2);
wm.addParameter(wmExtPumpPin); wm.addParameter(wmExtPumpPin);
wmExtPumpPostCirculationTime = new UnsignedShortParameter("ext_pump_ps_time", "External pump post circulation time", settings.externalPump.postCirculationTime, 5); wmExtPumpPostCirculationTime = new UnsignedShortParameter("ext_pump_ps_time", "Post circulation time", settings.externalPump.postCirculationTime, 5);
wm.addParameter(wmExtPumpPostCirculationTime); wm.addParameter(wmExtPumpPostCirculationTime);
wmExtPumpAntiStuckInterval = new UnsignedIntParameter("ext_pump_as_interval", "External pump anti stuck interval", settings.externalPump.antiStuckInterval, 7); wmExtPumpAntiStuckInterval = new UnsignedIntParameter("ext_pump_as_interval", "Anti stuck interval", settings.externalPump.antiStuckInterval, 7);
wm.addParameter(wmExtPumpAntiStuckInterval); wm.addParameter(wmExtPumpAntiStuckInterval);
wmExtPumpAntiStuckTime = new UnsignedShortParameter("ext_pump_as_time", "External pump anti stuck time", settings.externalPump.antiStuckTime, 5); wmExtPumpAntiStuckTime = new UnsignedShortParameter("ext_pump_as_time", "Anti stuck time", settings.externalPump.antiStuckTime, 5);
wm.addParameter(wmExtPumpAntiStuckTime); wm.addParameter(wmExtPumpAntiStuckTime);
//wm.setCleanConnect(true); //wm.setCleanConnect(true);

View File

@@ -54,6 +54,7 @@ void setup() {
#endif #endif
#if USE_TELNET #if USE_TELNET
TelnetStream.setKeepAliveInterval(500);
Log.addStream(&TelnetStream); Log.addStream(&TelnetStream);
#endif #endif
//Log.setNtpClient(&timeClient); //Log.setNtpClient(&timeClient);