Improve low power mode (#859)

-add switch on HASS
-avoid issue when using ESPWifiManualSetup
-Correct issue on gateway discovery on first connect
-stop processing during discovery
This commit is contained in:
Florian authored and GitHub committed 2021-02-05 15:19:43 -06:00
1 parent 2d377a1c3f
commit 557cf340db
11 files changed
+129 -81

No files matched your search

+53 -41
View File
@@ -59,7 +59,7 @@ void createDiscoveryFromList(char* mac, char* sensorList[][8], int sensorCount,
will_Topic, sensorList[i][3], sensorList[i][4],
sensorList[i][5], sensorList[i][6], sensorList[i][7],
0, "", "", false, "",
device_name, device_manufacturer, device_model, mac);
device_name, device_manufacturer, device_model, mac, false);
}
}
# endif
@@ -70,7 +70,7 @@ void createDiscovery(char* sensor_type,
char* payload_on, char* payload_off, char* unit_of_meas,
int off_delay,
char* payload_available, char* payload_not_avalaible, bool gateway_entity, char* cmd_topic,
char* device_name, char* device_manufacturer, char* device_model, char* device_mac) {
char* device_name, char* device_manufacturer, char* device_model, char* device_mac, bool retainCmd) {
const int JSON_MSG_CALC_BUFFER = JSON_OBJECT_SIZE(14) + JSON_OBJECT_SIZE(5) + JSON_ARRAY_SIZE(1);
StaticJsonBuffer<JSON_MSG_CALC_BUFFER> jsonBuffer;
JsonObject& sensor = jsonBuffer.createObject();
@@ -92,6 +92,8 @@ void createDiscovery(char* sensor_type,
sensor.set("name", s_name); //name
sensor.set("uniq_id", unique_id); //unique_id
if (retainCmd)
sensor.set("retain", retainCmd); // Retain command
if (device_class[0])
sensor.set("dev_cla", device_class); //device_class
if (value_template[0])
@@ -167,7 +169,7 @@ void pubMqttDiscovery() {
Gateway_AnnouncementMsg, will_Message, "", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
Gateway_AnnouncementMsg, will_Message, true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
createDiscovery("sensor", //set Type
subjectSYStoMQTT, "SYS: Uptime", (char*)getUniqueId("uptime", "").c_str(), //set state_topic,name,uniqueId
@@ -175,7 +177,7 @@ void pubMqttDiscovery() {
"", "", "s", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
"", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
# if defined(ESP8266) || defined(ESP32)
@@ -185,7 +187,7 @@ void pubMqttDiscovery() {
"", "", "B", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
"", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
createDiscovery("sensor", //set Type
subjectSYStoMQTT, "SYS: IP", (char*)getUniqueId("ip", "").c_str(), //set state_topic,name,uniqueId
@@ -193,7 +195,7 @@ void pubMqttDiscovery() {
"", "", "", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
"", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
# ifndef ESP32_ETHERNET
createDiscovery("sensor", //set Type
@@ -202,7 +204,7 @@ void pubMqttDiscovery() {
"", "", "dB", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
"", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
# endif
# endif
@@ -213,7 +215,7 @@ void pubMqttDiscovery() {
"", "", "", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
"", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac
);
# if defined(ZboardM5STICKC) || defined(ZboardM5STICKCP)
createDiscovery("sensor", //set Type
@@ -222,7 +224,7 @@ void pubMqttDiscovery() {
"", "", "V", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
"", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
createDiscovery("sensor", //set Type
subjectSYStoMQTT, "SYS: Bat current", (char*)getUniqueId("m5batcurrent", "").c_str(), //set state_topic,name,uniqueId
@@ -230,7 +232,7 @@ void pubMqttDiscovery() {
"", "", "A", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
"", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
createDiscovery("sensor", //set Type
subjectSYStoMQTT, "SYS: Vin voltage", (char*)getUniqueId("m5vinvoltage", "").c_str(), //set state_topic,name,uniqueId
@@ -238,7 +240,7 @@ void pubMqttDiscovery() {
"", "", "V", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
"", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
createDiscovery("sensor", //set Type
subjectSYStoMQTT, "SYS: Vin current", (char*)getUniqueId("m5vincurrent", "").c_str(), //set state_topic,name,uniqueId
@@ -246,7 +248,7 @@ void pubMqttDiscovery() {
"", "", "A", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
"", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
# endif
# ifdef ZboardM5STACK
@@ -256,7 +258,7 @@ void pubMqttDiscovery() {
"", "", "%", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
"", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
createDiscovery("binary_sensor", //set Type
subjectSYStoMQTT, "SYS: Is Charging", (char*)getUniqueId("m5ischarging", "").c_str(), //set state_topic,name,uniqueId
@@ -264,7 +266,7 @@ void pubMqttDiscovery() {
"", "", "%", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
"", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
createDiscovery("binary_sensor", //set Type
subjectSYStoMQTT, "SYS: Is Charge Full", (char*)getUniqueId("m5ischargefull", "").c_str(), //set state_topic,name,uniqueId
@@ -272,7 +274,7 @@ void pubMqttDiscovery() {
"", "", "%", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
"", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
# endif
# endif
@@ -282,7 +284,7 @@ void pubMqttDiscovery() {
"{\"cmd\":\"restart\"}", "", "", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoSYSset, //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
createDiscovery("switch", //set Type
will_Topic, "SYS: Erase credentials", (char*)getUniqueId("erase", "").c_str(), //set state_topic,name,uniqueId
@@ -290,7 +292,7 @@ void pubMqttDiscovery() {
"{\"cmd\":\"erase\"}", "", "", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoSYSset, //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
createDiscovery("switch", //set Type
"", "SYS: Auto discovery", (char*)getUniqueId("discovery", "").c_str(), //set state_topic,name,uniqueId
@@ -298,7 +300,7 @@ void pubMqttDiscovery() {
"{\"discovery\":true}", "{\"discovery\":false}", "", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoSYSset, //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", true // device name, device manufacturer, device model, device mac, retain
);
# ifdef ZsensorBME280
@@ -321,7 +323,7 @@ void pubMqttDiscovery() {
will_Topic, BMEsensor[i][3], BMEsensor[i][4],
BMEsensor[i][5], BMEsensor[i][6], BMEsensor[i][7],
0, "", "", true, "",
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
}
# endif
@@ -343,7 +345,7 @@ void pubMqttDiscovery() {
will_Topic, HTUsensor[i][3], HTUsensor[i][4],
HTUsensor[i][5], HTUsensor[i][6], HTUsensor[i][7],
0, "", "", true, "",
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
}
# endif
@@ -364,7 +366,7 @@ void pubMqttDiscovery() {
will_Topic, AHTsensor[i][3], AHTsensor[i][4],
AHTsensor[i][5], AHTsensor[i][6], AHTsensor[i][7],
0, "", "", true, "",
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
}
# endif
@@ -386,7 +388,7 @@ void pubMqttDiscovery() {
will_Topic, DHTsensor[i][3], DHTsensor[i][4],
DHTsensor[i][5], DHTsensor[i][6], DHTsensor[i][7],
0, "", "", true, "",
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
}
# endif
@@ -403,7 +405,7 @@ void pubMqttDiscovery() {
will_Topic, ADCsensor[3], ADCsensor[4],
ADCsensor[5], ADCsensor[6], ADCsensor[7],
0, "", "", true, "",
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
# endif
@@ -425,7 +427,7 @@ void pubMqttDiscovery() {
will_Topic, BH1750sensor[i][3], BH1750sensor[i][4],
BH1750sensor[i][5], BH1750sensor[i][6], BH1750sensor[i][7],
0, "", "", true, "",
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
}
# endif
@@ -448,7 +450,7 @@ void pubMqttDiscovery() {
will_Topic, TSL2561sensor[i][3], TSL2561sensor[i][4],
TSL2561sensor[i][5], TSL2561sensor[i][6], TSL2561sensor[i][7],
0, "", "", true, "",
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
}
# endif
@@ -465,7 +467,7 @@ void pubMqttDiscovery() {
will_Topic, HCSR501sensor[3], HCSR501sensor[4],
HCSR501sensor[5], HCSR501sensor[6], HCSR501sensor[7],
0, "", "", true, "",
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
# endif
@@ -481,7 +483,7 @@ void pubMqttDiscovery() {
will_Topic, GPIOInputsensor[3], GPIOInputsensor[4],
GPIOInputsensor[5], GPIOInputsensor[6], GPIOInputsensor[7],
0, "", "", true, "",
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
# endif
@@ -503,7 +505,7 @@ void pubMqttDiscovery() {
will_Topic, INA226sensor[i][3], INA226sensor[i][4],
INA226sensor[i][5], INA226sensor[i][6], INA226sensor[i][7],
0, "", "", true, "",
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
}
# endif
@@ -525,7 +527,7 @@ void pubMqttDiscovery() {
will_Topic, actuatorONOFF[3], actuatorONOFF[4],
actuatorONOFF[5], actuatorONOFF[6], actuatorONOFF[7],
0, "", "", true, subjectMQTTtoONOFF,
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
# endif
@@ -542,7 +544,7 @@ void pubMqttDiscovery() {
will_Topic, gatewayRF[3], gatewayRF[4],
gatewayRF[5], gatewayRF[6], gatewayRF[7],
0, "", "", true, "",
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
# endif
@@ -559,7 +561,7 @@ void pubMqttDiscovery() {
will_Topic, gatewayRF2[3], gatewayRF2[4],
gatewayRF2[5], gatewayRF2[6], gatewayRF2[7],
0, "", "", true, "",
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
# endif
@@ -576,7 +578,7 @@ void pubMqttDiscovery() {
will_Topic, gatewayRFM69[3], gatewayRFM69[4],
gatewayRFM69[5], gatewayRFM69[6], gatewayRFM69[7],
0, "", "", true, "",
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
# endif
@@ -593,7 +595,7 @@ void pubMqttDiscovery() {
will_Topic, gatewayLORA[3], gatewayLORA[4],
gatewayLORA[5], gatewayLORA[6], gatewayLORA[7],
0, "", "", true, "",
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
# endif
@@ -610,7 +612,7 @@ void pubMqttDiscovery() {
will_Topic, gatewaySRFB[3], gatewaySRFB[4],
gatewaySRFB[5], gatewaySRFB[6], gatewaySRFB[7],
0, "", "", true, "",
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
# endif
@@ -627,7 +629,7 @@ void pubMqttDiscovery() {
will_Topic, gatewayPilight[3], gatewayPilight[4],
gatewayPilight[5], gatewayPilight[6], gatewayPilight[7],
0, "", "", true, "",
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
# endif
@@ -644,7 +646,7 @@ void pubMqttDiscovery() {
will_Topic, gatewayIR[3], gatewayIR[4],
gatewayIR[5], gatewayIR[6], gatewayIR[7],
0, "", "", true, "",
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
# endif
@@ -661,7 +663,7 @@ void pubMqttDiscovery() {
will_Topic, gateway2G[3], gateway2G[4],
gateway2G[5], gateway2G[6], gateway2G[7],
0, "", "", true, "",
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
# endif
@@ -672,7 +674,7 @@ void pubMqttDiscovery() {
"", "", "ms", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
"", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
createDiscovery("sensor", //set Type
subjectSYStoMQTT, "BT: Connnect every X scan(s)", (char*)getUniqueId("scanbcnct", "").c_str(), //set state_topic,name,uniqueId
@@ -680,7 +682,7 @@ void pubMqttDiscovery() {
"", "", "", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
"", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
createDiscovery("switch", //set Type
will_Topic, "BT: Force scan", (char*)getUniqueId("force_scan", "").c_str(), //set state_topic,name,uniqueId
@@ -688,7 +690,7 @@ void pubMqttDiscovery() {
"{\"interval\":0}", "", "", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoBTset, //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", false // device name, device manufacturer, device model, device mac, retain
);
createDiscovery("switch", //set Type
"", "BT: Publish only sensors", (char*)getUniqueId("only_sensors", "").c_str(), //set state_topic,name,uniqueId
@@ -696,8 +698,18 @@ void pubMqttDiscovery() {
"{\"onlysensors\":true}", "{\"onlysensors\":false}", "", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoBTset, //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic
"", "", "", "" // device name, device manufacturer, device model, device mac
"", "", "", "", true // device name, device manufacturer, device model, device mac, retain
);
# ifdef ESP32
createDiscovery("switch", //set Type
"", "SYS: Low Power Mode command", (char*)getUniqueId("lowpowermode", "").c_str(), //set state_topic,name,uniqueId
"", "", "", //set availability_topic,device_class,value_template,
"{\"lowpowermode\":2}", "{\"lowpowermode\":0}", "", //set,payload_on,payload_off,unit_of_meas,
0, //set off_delay
"", "", true, subjectMQTTtoBTset, //set,payload_avalaible,payload_not avalaible,is a gateway entity, command topic
"", "", "", "", true // device name, device manufacturer, device model, device mac, retain
);
# endif
# endif
}