From 8dbea689f3a89bd5873bd4f5212902da9b3ac49e Mon Sep 17 00:00:00 2001 From: fvanroie Date: Wed, 16 Dec 2020 01:54:04 +0100 Subject: [PATCH] Consolidate mqtt state messages --- src/hasp_debug.cpp | 2 +- src/hasp_dispatch.h | 2 +- src/hasp_mqtt.cpp | 63 +------------------------------------------- src/hasp_mqtt.h | 2 -- src/hasp_network.cpp | 13 ++++++++- src/hasp_network.h | 2 +- src/hasp_wifi.cpp | 15 +++++++++++ src/hasp_wifi.h | 2 ++ 8 files changed, 33 insertions(+), 68 deletions(-) diff --git a/src/hasp_debug.cpp b/src/hasp_debug.cpp index 80441fdf..dda4446a 100644 --- a/src/hasp_debug.cpp +++ b/src/hasp_debug.cpp @@ -870,7 +870,7 @@ void IRAM_ATTR debugLoop(void) void debugEverySecond() { if(debugTelePeriod > 0 && (millis() - debugLastMillis) >= debugTelePeriod * 1000) { - dispatch_output_statusupdate(); + dispatch_output_statusupdate(NULL, NULL); debugLastMillis = millis(); } // printLocalTime(); diff --git a/src/hasp_dispatch.h b/src/hasp_dispatch.h index 2c3d18b1..76695582 100644 --- a/src/hasp_dispatch.h +++ b/src/hasp_dispatch.h @@ -43,7 +43,7 @@ void dispatch_web_update(const char * espOtaUrl); void dispatch_reboot(bool saveConfig); void dispatch_output_idle_state(uint8_t state); -void dispatch_output_statusupdate(void); +void dispatch_output_statusupdate(const char *, const char *); void dispatch_output_current_page(); void dispatch_gpio_event(uint8_t pin, uint8_t group, uint8_t eventid); diff --git a/src/hasp_mqtt.cpp b/src/hasp_mqtt.cpp index 8bb3623f..b0e082dc 100644 --- a/src/hasp_mqtt.cpp +++ b/src/hasp_mqtt.cpp @@ -36,7 +36,6 @@ EthernetClient mqttNetworkClient; //#include "hasp_tft.h" #include "hasp_debug.h" #include "hasp_config.h" -#include "hasp_wifi.h" #include "hasp_dispatch.h" #include "hasp.h" @@ -44,8 +43,6 @@ EthernetClient mqttNetworkClient; #include "user_config_override.h" #endif -extern unsigned long debugLastMillis; // UpdateStatus timer - /* String mqttGetSubtopic; // MQTT subtopic for incoming commands requesting .val String mqttGetSubtopicJSON; // MQTT object buffer for JSON status when requesting .val @@ -165,13 +162,6 @@ void IRAM_ATTR mqtt_send_state(const __FlashStringHelper * subtopic, const char // Log.notice(TAG_MQTT_PUB, F("%sstate/%S = %s"), mqttNodeTopic, subtopic, payload); } -void mqtt_send_gpio_event(uint8_t pin, uint8_t group, const char * event) -{ - char payload[64]; - snprintf_P(payload, sizeof(payload), PSTR("{\"pin\":%d,\"group\":%d,\"event\":\"%s\"}"), pin, group, event); - mqtt_send_state(F("input"), payload); -} - void IRAM_ATTR mqtt_send_obj_attribute_str(uint8_t pageid, uint8_t btnid, const char * attribute, const char * data) { // if(mqttIsConnected()) { @@ -195,57 +185,6 @@ void IRAM_ATTR mqtt_send_obj_attribute_str(uint8_t pageid, uint8_t btnid, const // data); } -void mqtt_send_statusupdate() -{ // Periodically publish a JSON string indicating system status - char data[3 * 128]; - { - char buffer[128]; - - haspGetVersion(buffer, sizeof(buffer)); - snprintf_P(data, sizeof(data), PSTR("{\"status\":\"available\",\"version\":\"%s\",\"uptime\":%lu,"), buffer, - long(millis() / 1000)); - -#if HASP_USE_WIFI > 0 -#if defined(STM32F4xx) - IPAddress ip; - ip = WiFi.localIP(); - char espIp[16]; - memset(espIp, 0, sizeof(espIp)); - snprintf_P(buffer, sizeof(buffer), PSTR("\"ssid\":\"%s\",\"rssi\":%i,\"ip\":\"%d.%d.%d.%d\","), WiFi.SSID(), - WiFi.RSSI(), ip[0], ip[1], ip[2], ip[3]); -#else - snprintf_P(buffer, sizeof(buffer), PSTR("\"ssid\":\"%s\",\"rssi\":%i,\"ip\":\"%s\","), WiFi.SSID().c_str(), - WiFi.RSSI(), WiFi.localIP().toString().c_str()); -#endif - strcat(data, buffer); -#endif - snprintf_P(buffer, sizeof(buffer), PSTR("\"heapFree\":%u,\"heapFrag\":%u,\"espCore\":\"%s\","), - halGetFreeHeap(), halGetHeapFragmentation(), halGetCoreVersion().c_str()); - strcat(data, buffer); - snprintf_P(buffer, sizeof(buffer), PSTR("\"espCanUpdate\":\"false\",\"page\":%u,\"numPages\":%u,"), - haspGetPage(), (HASP_NUM_PAGES)); - strcat(data, buffer); - -#if defined(ARDUINO_ARCH_ESP8266) - snprintf_P(buffer, sizeof(buffer), PSTR("\"espVcc\":%.2f,"), (float)ESP.getVcc() / 1000); - strcat(data, buffer); -#endif - - snprintf_P(buffer, sizeof(buffer), PSTR("\"tftDriver\":\"%s\",\"tftWidth\":%u,\"tftHeight\":%u}"), - halDisplayDriverName().c_str(), (TFT_WIDTH), (TFT_HEIGHT)); - strcat(data, buffer); - } - mqtt_send_state(F("statusupdate"), data); - debugLastMillis = millis(); - - /* if(updateEspAvailable) { - mqttStatusPayload += F("\"updateEspAvailable\":true,"); - } else { - mqttStatusPayload += F("\"updateEspAvailable\":false,"); - } - */ -} - //////////////////////////////////////////////////////////////////////////////////////////////////// // Receive incoming messages static void mqtt_message_cb(char * topic, byte * payload, unsigned int length) @@ -426,7 +365,7 @@ void mqttStart() haspReconnect(); dispatch_output_current_page(); - dispatch_output_statusupdate(); + dispatch_output_statusupdate(NULL, NULL); } void mqttSetup() diff --git a/src/hasp_mqtt.h b/src/hasp_mqtt.h index 3e193d5a..9b8abb14 100644 --- a/src/hasp_mqtt.h +++ b/src/hasp_mqtt.h @@ -13,10 +13,8 @@ void mqttStart(); void mqttStop(); void IRAM_ATTR mqtt_send_state(const __FlashStringHelper * subtopic, const char * payload); -void mqtt_send_gpio_event(uint8_t pin,uint8_t group, const char * event); void IRAM_ATTR mqtt_send_obj_attribute_str(uint8_t pageid, uint8_t btnid, const char * attribute, const char * data); -void mqtt_send_statusupdate(void); bool IRAM_ATTR mqttIsConnected(); bool mqttGetConfig(const JsonObject & settings); diff --git a/src/hasp_network.cpp b/src/hasp_network.cpp index baaccd33..91b1640f 100644 --- a/src/hasp_network.cpp +++ b/src/hasp_network.cpp @@ -76,7 +76,18 @@ bool networkEverySecond(void) #if HASP_USE_WIFI > 0 // return wifiEverySecond(); #endif -return true; + return true; +} + +void network_get_status(char * buffer, size_t len) +{ +#if HASP_USE_ETHERNET > 0 + network_get_status(buffer, len); +#endif + +#if HASP_USE_WIFI > 0 + wifi_get_status(buffer, len); +#endif } #endif \ No newline at end of file diff --git a/src/hasp_network.h b/src/hasp_network.h index 295dfd32..263dfa44 100644 --- a/src/hasp_network.h +++ b/src/hasp_network.h @@ -15,8 +15,8 @@ void networkStop(void); /* ===== Special Event Processors ===== */ /* ===== Getter and Setter Functions ===== */ +void network_get_status(char * buffer, size_t len); /* ===== Read/Write Configuration ===== */ - #endif \ No newline at end of file diff --git a/src/hasp_wifi.cpp b/src/hasp_wifi.cpp index 762e1130..c859b008 100644 --- a/src/hasp_wifi.cpp +++ b/src/hasp_wifi.cpp @@ -492,6 +492,21 @@ void wifiStop() Log.warning(TAG_WIFI, F("Stopped")); } +void wifi_get_status(char * buffer, size_t len) +{ +#if defined(STM32F4xx) + IPAddress ip; + ip = WiFi.localIP(); + char espIp[16]; + memset(espIp, 0, sizeof(espIp)); + snprintf_P(buffer, len, PSTR("\"ssid\":\"%s\",\"rssi\":%i,\"ip\":\"%d.%d.%d.%d\","), WiFi.SSID(), WiFi.RSSI(), + ip[0], ip[1], ip[2], ip[3]); +#else + snprintf_P(buffer, len, PSTR("\"ssid\":\"%s\",\"rssi\":%i,\"ip\":\"%s\","), WiFi.SSID().c_str(), WiFi.RSSI(), + WiFi.localIP().toString().c_str()); +#endif +} + /* ============ Confiuration =============================================================== */ bool wifiGetConfig(const JsonObject & settings) diff --git a/src/hasp_wifi.h b/src/hasp_wifi.h index 97e6ce41..258a6e6f 100644 --- a/src/hasp_wifi.h +++ b/src/hasp_wifi.h @@ -11,7 +11,9 @@ bool wifiShowAP(); bool wifiShowAP(char * ssid, char * pass); bool wifiEvery5Seconds(void); void wifiStop(void); + bool wifiValidateSsid(const char * ssid, const char * pass); +void wifi_get_status(char * buffer, size_t len); bool wifiGetConfig(const JsonObject & settings); bool wifiSetConfig(const JsonObject & settings);