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;
|
WiFiUDP MQTT::udp;
|
||||||
const char* MQTT::months[]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
|
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);
|
AsyncWebServer* MQTT::server = new AsyncWebServer(80);
|
||||||
AsyncWebSocket* MQTT::ws = new AsyncWebSocket("/ws");
|
AsyncWebSocket* MQTT::ws = new AsyncWebSocket("/ws");
|
||||||
@ -130,14 +131,28 @@ void MQTT::saveConfigToFlash(void){
|
|||||||
|
|
||||||
void MQTT::receiveTopic(char* topic, byte* payload, unsigned int length) {
|
void MQTT::receiveTopic(char* topic, byte* payload, unsigned int length) {
|
||||||
String strTopic = String(topic);
|
String strTopic = String(topic);
|
||||||
if(topic == "weatherStation/tempAmb")
|
if(strTopic.endsWith("/tempAmb")){
|
||||||
glblData.outTemp = String((char*)payload).toFloat();
|
glblData.outTemp = String((char*)payload,length).toFloat();
|
||||||
|
}
|
||||||
else if(strTopic.endsWith("/changeSetTemp")){
|
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){
|
if(newSetTemp >= 5.0 && newSetTemp <= 30.0){
|
||||||
glblData.settemp = newSetTemp;
|
glblData.settemp = newSetTemp;
|
||||||
ui_settemp(glblData.settemp);
|
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");
|
psclient.subscribe("weatherStation/tempAmb");
|
||||||
char newtopic[60];
|
char newtopic[60];
|
||||||
strcpy(newtopic,Settings::prefs.mqtt_topic);
|
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);
|
psclient.subscribe(newtopic);
|
||||||
Serial.println("connected");
|
Serial.println("connected");
|
||||||
|
|
||||||
@ -163,6 +180,10 @@ void MQTT::reconnect(void) {
|
|||||||
void MQTT::loop(void){
|
void MQTT::loop(void){
|
||||||
static uint32_t resetCnt = 0;
|
static uint32_t resetCnt = 0;
|
||||||
unsigned long now = millis();
|
unsigned long now = millis();
|
||||||
|
if(forceStatusUpdate){
|
||||||
|
forceStatusUpdate = false;
|
||||||
|
sendStatus();
|
||||||
|
}
|
||||||
if(now-lastStatusUpdate > 15000){ //update wifi status every 15secs.
|
if(now-lastStatusUpdate > 15000){ //update wifi status every 15secs.
|
||||||
lastStatusUpdate = now;
|
lastStatusUpdate = now;
|
||||||
if(WiFi.isConnected()){
|
if(WiFi.isConnected()){
|
||||||
@ -362,6 +383,15 @@ void MQTT::sendStatus(void){
|
|||||||
publish_sub("Set Temp[degC]",buffer,true);
|
publish_sub("Set Temp[degC]",buffer,true);
|
||||||
snprintf(buffer, sizeof buffer, "%d", WiFi.RSSI());
|
snprintf(buffer, sizeof buffer, "%d", WiFi.RSSI());
|
||||||
publish_sub("RSSI [dBm]",buffer,true);
|
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:
|
private:
|
||||||
static const char* months[];
|
static const char* months[];
|
||||||
|
static bool forceStatusUpdate;
|
||||||
static void serveData(AsyncWebServerRequest *request);
|
static void serveData(AsyncWebServerRequest *request);
|
||||||
//static void serveIndex(AsyncWebServerRequest *request);
|
//static void serveIndex(AsyncWebServerRequest *request);
|
||||||
//static void serveCss(AsyncWebServerRequest *request);
|
//static void serveCss(AsyncWebServerRequest *request);
|
||||||
|
|||||||
@ -29,13 +29,17 @@ void ui_settemp(float tmp) {
|
|||||||
void update_status(void) {
|
void update_status(void) {
|
||||||
static bool dotState = false;
|
static bool dotState = false;
|
||||||
static unsigned long fullOnTime = millis();
|
static unsigned long fullOnTime = millis();
|
||||||
|
override_t mode = glblData.override;
|
||||||
if (glblData.enBuff) {
|
if (glblData.enBuff) {
|
||||||
lv_obj_remove_flag(objects.bufferIcn, LV_OBJ_FLAG_HIDDEN);
|
lv_obj_remove_flag(objects.bufferIcn, LV_OBJ_FLAG_HIDDEN);
|
||||||
} else {
|
} else {
|
||||||
|
if(mode == OVR_ALWAYSON) {
|
||||||
|
mode = OVR_NONE; // disable override if buffer is disabled
|
||||||
|
}
|
||||||
lv_obj_add_flag(objects.bufferIcn, LV_OBJ_FLAG_HIDDEN);
|
lv_obj_add_flag(objects.bufferIcn, LV_OBJ_FLAG_HIDDEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (glblData.override) {
|
switch (mode) {
|
||||||
case OVR_NONE:
|
case OVR_NONE:
|
||||||
lv_obj_set_style_text_color(objects.bufferIcn, lv_color_hex(0xFFfafafa),
|
lv_obj_set_style_text_color(objects.bufferIcn, lv_color_hex(0xFFfafafa),
|
||||||
LV_STATE_DEFAULT);
|
LV_STATE_DEFAULT);
|
||||||
@ -48,7 +52,7 @@ void update_status(void) {
|
|||||||
case OVR_ALWAYSON:
|
case OVR_ALWAYSON:
|
||||||
lv_obj_set_style_text_color(objects.bufferIcn, lv_color_hex(0xFF00AA00),
|
lv_obj_set_style_text_color(objects.bufferIcn, lv_color_hex(0xFF00AA00),
|
||||||
LV_STATE_DEFAULT);
|
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;
|
glblData.heating = true;
|
||||||
} else {
|
} else {
|
||||||
glblData.heating = false;
|
glblData.heating = false;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user