From ca186a18516da930bd1df9667895db28470c09e3 Mon Sep 17 00:00:00 2001 From: Matthias Prinke <83612361+matthias-bs@users.noreply.github.com> Date: Fri, 29 Dec 2023 21:45:03 +0100 Subject: [PATCH 1/4] Improved robustness of JSON parsing see https://github.com/matthias-bs/ESP32-e-Paper-Weather-Display/issues/6 --- .../Waveshare_7_5_T7_Sensors.ino | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/examples/Waveshare_7_5_T7_Sensors/Waveshare_7_5_T7_Sensors.ino b/examples/Waveshare_7_5_T7_Sensors/Waveshare_7_5_T7_Sensors.ino index 8cf3a95..c203063 100644 --- a/examples/Waveshare_7_5_T7_Sensors/Waveshare_7_5_T7_Sensors.ino +++ b/examples/Waveshare_7_5_T7_Sensors/Waveshare_7_5_T7_Sensors.ino @@ -1140,14 +1140,13 @@ void GetMqttData(WiFiClient &net, MQTTClient &MqttClient) { MqttSensors.valid = true; const char *received_at = doc["received_at"]; - strncpy(MqttSensors.received_at, received_at, 30); - //MqttSensors.received_at = received_at; - //MqttSensors.received_at = doc["received_at"].as(); - JsonObject uplink_message = doc["uplink_message"]; - - // uplink_message_decoded_payload_bytes -> payload - JsonObject payload = uplink_message["decoded_payload"]["bytes"]; + if (received_at) { + strncpy(MqttSensors.received_at, received_at, 30); + } + + JsonObject payload = doc["uplink_message"]["decoded_payload"]["bytes"]; + // If an item is not found, its previous value is preserved MqttSensors.air_temp_c = payload["air_temp_c"]; MqttSensors.humidity = payload["humidity"]; MqttSensors.indoor_temp_c = payload["indoor_temp_c"]; @@ -1165,13 +1164,15 @@ void GetMqttData(WiFiClient &net, MQTTClient &MqttClient) { MqttSensors.wind_direction_deg = payload["wind_direction_deg"]; MqttSensors.wind_gust_meter_sec = payload["wind_gust_meter_sec"]; + MqttSensors.status = { false }; + JsonObject status = payload["status"]; MqttSensors.status.ble_ok = status["ble_ok"]; MqttSensors.status.s1_batt_ok = status["s1_batt_ok"]; MqttSensors.status.s1_dec_ok = status["s1_dec_ok"]; MqttSensors.status.ws_batt_ok = status["ws_batt_ok"]; MqttSensors.status.ws_dec_ok = status["ws_dec_ok"]; - + // Sanity checks if (MqttSensors.humidity == 0) { MqttSensors.status.ws_dec_ok = false; From ecc23dea017831cae53ada7789db60369ddb0dea Mon Sep 17 00:00:00 2001 From: Matthias Prinke <83612361+matthias-bs@users.noreply.github.com> Date: Fri, 29 Dec 2023 22:17:29 +0100 Subject: [PATCH 2/4] Improved DisplayGeneralInfoSection() for less than three virtual screens https://github.com/matthias-bs/ESP32-e-Paper-Weather-Display/issues/7 --- .../Waveshare_7_5_T7_Sensors/Waveshare_7_5_T7_Sensors.ino | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/Waveshare_7_5_T7_Sensors/Waveshare_7_5_T7_Sensors.ino b/examples/Waveshare_7_5_T7_Sensors/Waveshare_7_5_T7_Sensors.ino index c203063..c0bb901 100644 --- a/examples/Waveshare_7_5_T7_Sensors/Waveshare_7_5_T7_Sensors.ino +++ b/examples/Waveshare_7_5_T7_Sensors/Waveshare_7_5_T7_Sensors.ino @@ -239,7 +239,7 @@ Forecast_record_type WxForecast[max_readings]; //!< OWM Weather Forecast #define barchart_on true #define barchart_off false -const String Locations[] = LOCATIONS_TXT; //!< Locations/Screen Titles +const String [] = _TXT; //!< /Screen Titles // OWM Forecast Data float pressure_readings[max_readings] = { 0 }; //!< OWM pressure readings @@ -1729,7 +1729,8 @@ void DisplayGeneralInfoSection(void) { uint16_t w = 0; // Print page heading - for (int i = 0; i <= 2; i++) { + int i_max = sizeof(Locations) / sizeof(Locations[0]) - 2; + for (int i = 0; i <= i_max; i++) { if (i == 0) { // Current menu item, centered u8g2Fonts.setFont(u8g2_font_helvB14_tf); From e645278f82c0e7224903a32372fd546a43545737 Mon Sep 17 00:00:00 2001 From: Matthias Prinke <83612361+matthias-bs@users.noreply.github.com> Date: Fri, 29 Dec 2023 22:26:52 +0100 Subject: [PATCH 3/4] Update Waveshare_7_5_T7_Sensors.ino --- examples/Waveshare_7_5_T7_Sensors/Waveshare_7_5_T7_Sensors.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/Waveshare_7_5_T7_Sensors/Waveshare_7_5_T7_Sensors.ino b/examples/Waveshare_7_5_T7_Sensors/Waveshare_7_5_T7_Sensors.ino index c0bb901..56a3865 100644 --- a/examples/Waveshare_7_5_T7_Sensors/Waveshare_7_5_T7_Sensors.ino +++ b/examples/Waveshare_7_5_T7_Sensors/Waveshare_7_5_T7_Sensors.ino @@ -239,7 +239,7 @@ Forecast_record_type WxForecast[max_readings]; //!< OWM Weather Forecast #define barchart_on true #define barchart_off false -const String [] = _TXT; //!< /Screen Titles +const String [] = LOCATIONS_TXT; //!< /Screen Titles // OWM Forecast Data float pressure_readings[max_readings] = { 0 }; //!< OWM pressure readings From 7a3781c164a0aab936b3551852218ecce4b624ad Mon Sep 17 00:00:00 2001 From: Matthias Prinke <83612361+matthias-bs@users.noreply.github.com> Date: Fri, 29 Dec 2023 22:33:26 +0100 Subject: [PATCH 4/4] Update Waveshare_7_5_T7_Sensors.ino --- .../Waveshare_7_5_T7_Sensors/Waveshare_7_5_T7_Sensors.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/Waveshare_7_5_T7_Sensors/Waveshare_7_5_T7_Sensors.ino b/examples/Waveshare_7_5_T7_Sensors/Waveshare_7_5_T7_Sensors.ino index 56a3865..f4396b7 100644 --- a/examples/Waveshare_7_5_T7_Sensors/Waveshare_7_5_T7_Sensors.ino +++ b/examples/Waveshare_7_5_T7_Sensors/Waveshare_7_5_T7_Sensors.ino @@ -239,7 +239,7 @@ Forecast_record_type WxForecast[max_readings]; //!< OWM Weather Forecast #define barchart_on true #define barchart_off false -const String [] = LOCATIONS_TXT; //!< /Screen Titles +const String Locations[] = LOCATIONS_TXT; //!< /Screen Titles // OWM Forecast Data float pressure_readings[max_readings] = { 0 }; //!< OWM pressure readings @@ -1164,7 +1164,7 @@ void GetMqttData(WiFiClient &net, MQTTClient &MqttClient) { MqttSensors.wind_direction_deg = payload["wind_direction_deg"]; MqttSensors.wind_gust_meter_sec = payload["wind_gust_meter_sec"]; - MqttSensors.status = { false }; + MqttSensors.status = { false, false, false, false, false }; JsonObject status = payload["status"]; MqttSensors.status.ble_ok = status["ble_ok"];