diff --git a/docs/use/boards.md b/docs/use/boards.md index cdb6921..ccac2e7 100644 --- a/docs/use/boards.md +++ b/docs/use/boards.md @@ -17,14 +17,21 @@ OpenMQTTGateway support a low power mode for ESP32, this mode can be set by MQTT * Normal mode (per default) -`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoBT/config" -m '{"low_power_mode":0}'` +`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoBT/config" -m '{"lowpowermode":0}'` * Low Power mode -`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoBT/config" -m '{"low_power_mode":2}'` +`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoBT/config" -m '{"lowpowermode":2}'` ::: tip When coming back from mode 2 to mode 0 you may publish the command with a retain flag so as to enable the gateway to retrieve it when reconnecting. +A low power mode switch is automaticaly created by discovery with Home Assistant, you may experience a delay between the command and the state update due to the fact that the update is published every 2 minutes. +In low power mode you should use ESPWifiManualSetup so as to rely on the credentials entered into User_config.h. +So as to do that uncomment the line below in User_config.h +``` c +//# define ESPWifiManualSetup true +``` +For platformio and example of environment is available into [prod_env.ini.example](https://github.com/1technophile/OpenMQTTGateway/blob/development/prod_env.ini.example) ::: ::: warning @@ -60,14 +67,14 @@ OpenMQTTGateway support a low power mode for ESP32, this mode can be set by MQTT * Normal mode (per default), screen ON -`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoBT/config" -m '{"low_power_mode":0}'` +`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoBT/config" -m '{"lowpowermode":0}'` * Low Power mode, screen ON when processing only -`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoBT/config" -m '{"low_power_mode":1}'` +`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoBT/config" -m '{"lowpowermode":1}'` * Low Power mode, screen OFF, LED ON when processing on M5StickC or M5stickC Plus -`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoBT/config" -m '{"low_power_mode":2}'` +`mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoBT/config" -m '{"lowpowermode":2}'` The low power mode can be changed also with a push to button B when the board is processing (top button on M5stickC, M5stickC Plus and middle button of M5stack). diff --git a/main/User_config.h b/main/User_config.h index 094688e..285b5d6 100755 --- a/main/User_config.h +++ b/main/User_config.h @@ -182,7 +182,7 @@ const char* certificate CERT_ATTRIBUTE = R"EOF(" # ifndef DEFAULT_LOW_POWER_MODE # define DEFAULT_LOW_POWER_MODE 0 # endif -int low_power_mode = DEFAULT_LOW_POWER_MODE; +int lowpowermode = DEFAULT_LOW_POWER_MODE; #endif // WIFI mode, uncomment to force a wifi mode, if not uncommented the ESP will connect without a mode forced diff --git a/main/ZboardM5.ino b/main/ZboardM5.ino index 8f839c9..7a0b334 100644 --- a/main/ZboardM5.ino +++ b/main/ZboardM5.ino @@ -57,8 +57,8 @@ void setupM5() { // M5 stack 320*240 // M5StickC 160*80 // M5Stick LCD not supported - Log.notice(F("Low power set to: %d" CR), low_power_mode); - switch (low_power_mode) // if LOW POWER the intro is bypassed and the brightness set to sleep brightness + Log.notice(F("Low power set to: %d" CR), lowpowermode); + switch (lowpowermode) // if LOW POWER the intro is bypassed and the brightness set to sleep brightness { case 0: wakeScreen(NORMAL_LCD_BRIGHTNESS); @@ -106,30 +106,30 @@ void loopM5() { static int previousBtnState; int currentBtnState = digitalRead(SLEEP_BUTTON); if (currentBtnState != previousBtnState && currentBtnState == 0) { - int newlow_power_mode = low_power_mode; - (low_power_mode == 2) ? newlow_power_mode = 0 : newlow_power_mode = newlow_power_mode + 1; - changelow_power_mode(newlow_power_mode); + int newlowpowermode = lowpowermode; + (lowpowermode == 2) ? newlowpowermode = 0 : newlowpowermode = newlowpowermode + 1; + changelowpowermode(newlowpowermode); } previousBtnState = currentBtnState; static int previousLogLevel; switch (Log.getLastMsgLevel()) { case 1: case 2: - if (low_power_mode != 2) { + if (lowpowermode != 2) { wakeScreen(NORMAL_LCD_BRIGHTNESS); M5.Lcd.fillScreen(TFT_RED); // FATAL, ERROR M5.Lcd.setTextColor(TFT_BLACK, TFT_RED); } break; case 3: - if (low_power_mode != 2) { + if (lowpowermode != 2) { wakeScreen(NORMAL_LCD_BRIGHTNESS); M5.Lcd.fillScreen(TFT_ORANGE); // WARNING M5.Lcd.setTextColor(TFT_BLACK, TFT_ORANGE); } break; default: - if (previousLogLevel != Log.getLastMsgLevel() && low_power_mode != 2) { + if (previousLogLevel != Log.getLastMsgLevel() && lowpowermode != 2) { wakeScreen(SLEEP_LCD_BRIGHTNESS); M5.Lcd.fillScreen(TFT_WHITE); drawLogo(M5.Lcd.width() * 0.1875, (M5.Lcd.width() / 2) - M5.Lcd.width() * 0.24, M5.Lcd.height() * 0.5, true, true, true, true, true, true); @@ -218,7 +218,7 @@ void drawLogo(int logoSize, int circle1X, int circle1Y, bool circle1, bool circl } void M5Display(char* line1, char* line2, char* line3) { - if (low_power_mode == 2) digitalWrite(LED_INFO, LED_INFO_ON); + if (lowpowermode == 2) digitalWrite(LED_INFO, LED_INFO_ON); wakeScreen(NORMAL_LCD_BRIGHTNESS); M5.Lcd.fillScreen(TFT_WHITE); drawLogo(M5.Lcd.width() * 0.1875, (M5.Lcd.width() / 2) - M5.Lcd.width() * 0.24, M5.Lcd.height() * 0.5, true, true, true, true, true, true); diff --git a/main/ZgatewayBT.ino b/main/ZgatewayBT.ino index 4270565..73a6239 100644 --- a/main/ZgatewayBT.ino +++ b/main/ZgatewayBT.ino @@ -616,7 +616,7 @@ void coreTask(void* pvParameters) { launchDiscovery(); dumpDevices(); } - if (low_power_mode) { + if (lowpowermode) { lowPowerESP32(); } else { delay(BLEinterval); @@ -651,10 +651,10 @@ void deepSleep(uint64_t time_in_us) { esp_deep_sleep(time_in_us); } -void changelow_power_mode(int newLowPowerMode) { +void changelowpowermode(int newLowPowerMode) { Log.notice(F("Changing LOW POWER mode to: %d" CR), newLowPowerMode); # if defined(ZboardM5STACK) || defined(ZboardM5STICKC) || defined(ZboardM5STICKCP) - if (low_power_mode == 2) { + if (lowpowermode == 2) { # ifdef ZboardM5STACK M5.Lcd.wakeup(); # endif @@ -667,9 +667,9 @@ void changelow_power_mode(int newLowPowerMode) { sprintf(lpm, "%d", newLowPowerMode); M5Display("Changing LOW POWER mode to:", lpm, ""); # endif - low_power_mode = newLowPowerMode; + lowpowermode = newLowPowerMode; preferences.begin(Gateway_Short_Name, false); - preferences.putUInt("low_power_mode", low_power_mode); + preferences.putUInt("lowpowermode", lowpowermode); preferences.end(); } @@ -678,7 +678,7 @@ void setupBT() { Log.notice(F("BLE scans number before connect: %d" CR), BLEscanBeforeConnect); Log.notice(F("Publishing only BLE sensors: %T" CR), publishOnlySensors); Log.notice(F("minrssi: %d" CR), minRssi); - Log.notice(F("Low Power Mode: %d" CR), low_power_mode); + Log.notice(F("Low Power Mode: %d" CR), lowpowermode); // we setup a task with priority one to avoid conflict with other gateways xTaskCreatePinnedToCore( @@ -1315,8 +1315,8 @@ void MQTTtoBT(char* topicOri, JsonObject& BTdata) { // json object decoding Log.notice(F("New minrssi: %d" CR), minRssi); } # ifdef ESP32 - if (BTdata.containsKey("low_power_mode")) { - changelow_power_mode((int)BTdata["low_power_mode"]); + if (BTdata.containsKey("lowpowermode")) { + changelowpowermode((int)BTdata["lowpowermode"]); } # endif } diff --git a/main/ZgatewayRF.ino b/main/ZgatewayRF.ino index f1adfa9..55e6641 100644 --- a/main/ZgatewayRF.ino +++ b/main/ZgatewayRF.ino @@ -51,7 +51,7 @@ void RFtoMQTTdiscovery(SIGNAL_SIZE_UL_ULL MQTTvalue) { //on the fly switch creat will_Topic, switchRF[3], switchRF[4], switchRF[5], switchRF[6], switchRF[7], 0, "", "", true, subjectMQTTtoRF, - "", "", "", ""); + "", "", "", "", false); } # endif diff --git a/main/ZgatewayRF2.ino b/main/ZgatewayRF2.ino index a941006..e99f5c0 100644 --- a/main/ZgatewayRF2.ino +++ b/main/ZgatewayRF2.ino @@ -112,7 +112,7 @@ void RF2toMQTTdiscovery(JsonObject& data) { (char*)getUniqueId(switchRF[1], "").c_str(), will_Topic, switchRF[3], switchRF[4], switchRF[5], switchRF[6], switchRF[7], 0, "", "", true, subjectMQTTtoRF2, - "", "", "", ""); + "", "", "", "", false); } # endif diff --git a/main/ZmqttDiscovery.ino b/main/ZmqttDiscovery.ino index 6ec48c3..f38abf0 100644 --- a/main/ZmqttDiscovery.ino +++ b/main/ZmqttDiscovery.ino @@ -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 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 } diff --git a/main/ZsensorDS1820.ino b/main/ZsensorDS1820.ino index 91877ab..e893120 100644 --- a/main/ZsensorDS1820.ino +++ b/main/ZsensorDS1820.ino @@ -113,7 +113,7 @@ void pubOneWire_HADiscovery() { jsonTempc, "", "", "°C", 0, "", "", true, "", - "", "", "", ""); + "", "", "", "", false); } } # endif diff --git a/main/config_mqttDiscovery.h b/main/config_mqttDiscovery.h index 4cc7e9f..dd703dc 100644 --- a/main/config_mqttDiscovery.h +++ b/main/config_mqttDiscovery.h @@ -37,7 +37,7 @@ extern 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* command_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); #define discovery_Topic "homeassistant" diff --git a/main/main.ino b/main/main.ino index 91c7b98..7c0d30d 100644 --- a/main/main.ino +++ b/main/main.ino @@ -475,7 +475,7 @@ void connectMQTT() { client.setBufferSize(mqtt_max_packet_size); if (client.connect(gateway_name, mqtt_user, mqtt_pass, topic, will_QoS, will_Retain, will_Message)) { #if defined(ZboardM5STICKC) || defined(ZboardM5STICKCP) || defined(ZboardM5STACK) - if (low_power_mode < 2) + if (lowpowermode < 2) M5Display("MQTT connected", "", ""); #endif Log.notice(F("Connected to broker" CR)); @@ -553,7 +553,7 @@ void setup() { # endif # elif ESP32 preferences.begin(Gateway_Short_Name, false); - low_power_mode = preferences.getUInt("low_power_mode", DEFAULT_LOW_POWER_MODE); + lowpowermode = preferences.getUInt("lowpowermode", DEFAULT_LOW_POWER_MODE); preferences.end(); # if defined(ZboardM5STICKC) || defined(ZboardM5STICKCP) || defined(ZboardM5STACK) setupM5(); @@ -873,7 +873,6 @@ void setupTLS() { void setup_wifi() { char manual_wifi_ssid[] = wifi_ssid; char manual_wifi_password[] = wifi_password; - delay(10); WiFi.mode(WIFI_STA); if (wifiProtocol) forceWifiProtocol(); @@ -893,14 +892,15 @@ void setup_wifi() { WiFi.begin(manual_wifi_ssid, manual_wifi_password); # endif - if (wifi_reconnect_bypass()) - Log.notice(F("Connected with saved credentials" CR)); - while (WiFi.status() != WL_CONNECTED) { delay(500); Log.trace(F("." CR)); failure_number_ntwk++; disconnection_handling(failure_number_ntwk); +# if defined(ESP32) && defined(ZgatewayBT) + if (failure_number_ntwk > maxConnectionRetryWifi) + lowPowerESP32(); +# endif } Log.notice(F("WiFi ok with manual config credentials" CR)); } @@ -1057,7 +1057,7 @@ void setup_wifimanager(bool reset_settings) { if (!wifi_reconnect_bypass()) // if we didn't connect with saved credential we start Wifimanager web portal { # ifdef ESP32 - if (low_power_mode < 2) { + if (lowpowermode < 2) { # if defined(ZboardM5STICKC) || defined(ZboardM5STICKCP) || defined(ZboardM5STACK) M5Display("Connect your phone to WIFI AP:", WifiManager_ssid, WifiManager_password); # endif @@ -1086,7 +1086,7 @@ void setup_wifimanager(bool reset_settings) { } # if defined(ZboardM5STICKC) || defined(ZboardM5STICKCP) || defined(ZboardM5STACK) - if (low_power_mode < 2) + if (lowpowermode < 2) M5Display("Wifi connected", "", ""); # endif @@ -1243,16 +1243,24 @@ void loop() { failure_number_ntwk = 0; if (client.connected()) { digitalWrite(LED_INFO, LED_INFO_ON); - connectedOnce = true; failure_number_ntwk = 0; client.loop(); #ifdef ZmqttDiscovery - if (disc) - if (!connectedOnce) pubMqttDiscovery(); // at first connection we publish the discovery payloads + if (disc) { + if (!connectedOnce) { +# if defined(ZgatewayBT) && defined(ESP32) + stopProcessing(); // Avoid publication concurrency issues on ESP32 BLE +# endif + pubMqttDiscovery(); // at first connection we publish the discovery payloads +# if defined(ZgatewayBT) && defined(ESP32) + startProcessing(); +# endif + } + } #endif - + connectedOnce = true; #if defined(ESP8266) || defined(ESP32) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__) if (now > (timer_sys_measures + (TimeBetweenReadingSYS * 1000)) || !timer_sys_measures) { timer_sys_measures = millis(); @@ -1398,7 +1406,7 @@ void stateMeasures() { # endif # ifdef ZgatewayBT # ifdef ESP32 - SYSdata["lowpowermode"] = (int)low_power_mode; + SYSdata["lowpowermode"] = (int)lowpowermode; # endif SYSdata["interval"] = BLEinterval; SYSdata["scanbcnct"] = BLEscanBeforeConnect; diff --git a/prod_env.ini.example b/prod_env.ini.example index 5e34f97..8ec4eee 100644 --- a/prod_env.ini.example +++ b/prod_env.ini.example @@ -57,3 +57,24 @@ build_flags = '-DZactuatorONOFF="ONOFF"' '-DGateway_Name="OpenMQTTGateway_ESP8266_ONOFFRF"' board_build.flash_mode = dout + +[env:esp32-lolin32lite-ble-lp] +platform = ${com.esp32_platform} +board = lolin32 +board_build.partitions = min_spiffs.csv +lib_deps = + ${com-esp.lib_deps} + ${libraries.ble} +build_flags = + ${com-esp.build_flags} + '-DZgatewayBT="BT"' + '-DLED_RECEIVE=22' + '-DLED_RECEIVE_ON=0' + '-DGateway_Name="OpenMQTTGateway_LOLIN32LITE_LP"' + '-DESPWifiManualSetup=true' + '-Dwifi_ssid="MyWiFiAP" + '-Dwifi_password="MyWiFiAPPassword' + '-DMQTT_USER="lolin-esp32"' + '-DMQTT_PASS="abcdefghi"' + '-DMQTT_SERVER="192.168.1.17"' + '-DDEFAULT_LOW_POWER_MODE=2'