V2.0
Make mode changeable via MQTT and change overheating to enable temp of 25°C regardless the settemp.
This commit is contained in:
parent
bc175426d4
commit
e61c283e31
@ -3,6 +3,7 @@
|
||||
|
||||
WiFiUDP MQTT::udp;
|
||||
const char* MQTT::months[]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
|
||||
bool MQTT::forceStatusUpdate={false};
|
||||
|
||||
AsyncWebServer* MQTT::server = new AsyncWebServer(80);
|
||||
AsyncWebSocket* MQTT::ws = new AsyncWebSocket("/ws");
|
||||
@ -130,14 +131,28 @@ void MQTT::saveConfigToFlash(void){
|
||||
|
||||
void MQTT::receiveTopic(char* topic, byte* payload, unsigned int length) {
|
||||
String strTopic = String(topic);
|
||||
if(topic == "weatherStation/tempAmb")
|
||||
glblData.outTemp = String((char*)payload).toFloat();
|
||||
if(strTopic.endsWith("/tempAmb")){
|
||||
glblData.outTemp = String((char*)payload,length).toFloat();
|
||||
}
|
||||
else if(strTopic.endsWith("/changeSetTemp")){
|
||||
float newSetTemp = String((char*)payload).toFloat();
|
||||
float newSetTemp = String((char*)payload,length).toFloat();
|
||||
if(newSetTemp >= 5.0 && newSetTemp <= 30.0){
|
||||
glblData.settemp = newSetTemp;
|
||||
ui_settemp(glblData.settemp);
|
||||
forceStatusUpdate = true;
|
||||
remoteLog("MQTT: new SetTemp received: ", newSetTemp);
|
||||
}
|
||||
}else if(strTopic.endsWith("/changeMode")){
|
||||
String strVal = String((char*)payload,length);
|
||||
if(strVal.equalsIgnoreCase("overheating")){
|
||||
glblData.override = OVR_ALWAYSON;
|
||||
}else if(strVal.equalsIgnoreCase("frost-prevention")){
|
||||
glblData.override = OVR_ALWAYSOFF;
|
||||
}else{
|
||||
glblData.override = OVR_NONE;
|
||||
}
|
||||
remoteLog("MQTT: ON mode received", strVal.c_str());
|
||||
forceStatusUpdate = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -149,8 +164,10 @@ void MQTT::reconnect(void) {
|
||||
psclient.subscribe("weatherStation/tempAmb");
|
||||
char newtopic[60];
|
||||
strcpy(newtopic,Settings::prefs.mqtt_topic);
|
||||
strcat(newtopic,"/");
|
||||
strcat(newtopic,"changeSetTemp");
|
||||
strcat(newtopic,"/changeSetTemp");
|
||||
psclient.subscribe(newtopic);
|
||||
strcpy(newtopic,Settings::prefs.mqtt_topic);
|
||||
strcat(newtopic,"/changeMode");
|
||||
psclient.subscribe(newtopic);
|
||||
Serial.println("connected");
|
||||
|
||||
@ -163,6 +180,10 @@ void MQTT::reconnect(void) {
|
||||
void MQTT::loop(void){
|
||||
static uint32_t resetCnt = 0;
|
||||
unsigned long now = millis();
|
||||
if(forceStatusUpdate){
|
||||
forceStatusUpdate = false;
|
||||
sendStatus();
|
||||
}
|
||||
if(now-lastStatusUpdate > 15000){ //update wifi status every 15secs.
|
||||
lastStatusUpdate = now;
|
||||
if(WiFi.isConnected()){
|
||||
@ -362,6 +383,15 @@ void MQTT::sendStatus(void){
|
||||
publish_sub("Set Temp[degC]",buffer,true);
|
||||
snprintf(buffer, sizeof buffer, "%d", WiFi.RSSI());
|
||||
publish_sub("RSSI [dBm]",buffer,true);
|
||||
if(glblData.override == OVR_ALWAYSON){
|
||||
publish_sub("mode","Overheating",true);
|
||||
}else if(glblData.override == OVR_ALWAYSOFF){
|
||||
publish_sub("mode","Frost-prevention",true);
|
||||
}else if(glblData.override == OVR_NONE){
|
||||
publish_sub("mode","Normal",true);
|
||||
}else{
|
||||
publish_sub("mode","Unknown",true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -58,6 +58,7 @@ public:
|
||||
|
||||
private:
|
||||
static const char* months[];
|
||||
static bool forceStatusUpdate;
|
||||
static void serveData(AsyncWebServerRequest *request);
|
||||
//static void serveIndex(AsyncWebServerRequest *request);
|
||||
//static void serveCss(AsyncWebServerRequest *request);
|
||||
|
||||
@ -29,13 +29,17 @@ void ui_settemp(float tmp) {
|
||||
void update_status(void) {
|
||||
static bool dotState = false;
|
||||
static unsigned long fullOnTime = millis();
|
||||
override_t mode = glblData.override;
|
||||
if (glblData.enBuff) {
|
||||
lv_obj_remove_flag(objects.bufferIcn, LV_OBJ_FLAG_HIDDEN);
|
||||
} else {
|
||||
if(mode == OVR_ALWAYSON) {
|
||||
mode = OVR_NONE; // disable override if buffer is disabled
|
||||
}
|
||||
lv_obj_add_flag(objects.bufferIcn, LV_OBJ_FLAG_HIDDEN);
|
||||
}
|
||||
|
||||
switch (glblData.override) {
|
||||
switch (mode) {
|
||||
case OVR_NONE:
|
||||
lv_obj_set_style_text_color(objects.bufferIcn, lv_color_hex(0xFFfafafa),
|
||||
LV_STATE_DEFAULT);
|
||||
@ -48,7 +52,7 @@ void update_status(void) {
|
||||
case OVR_ALWAYSON:
|
||||
lv_obj_set_style_text_color(objects.bufferIcn, lv_color_hex(0xFF00AA00),
|
||||
LV_STATE_DEFAULT);
|
||||
if (glblData.temp < glblData.settemp + 3.0) { // allow for 3degC overheating
|
||||
if (glblData.temp < glblData.settemp + 3.0 || glblData.temp < 25) { // allow for 3degC overheating of up to 25°C regardless of settemp
|
||||
glblData.heating = true;
|
||||
} else {
|
||||
glblData.heating = false;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user