From 2430b43f77546c768c23aeb77abee3a8062df37f Mon Sep 17 00:00:00 2001 From: Siwat Sirichai Date: Mon, 20 May 2024 01:25:25 +0700 Subject: [PATCH] info request --- .../lib/ESPMegaPRO/ESPMegaIoT.cpp | 45 +++++++++++++++---- .../lib/ESPMegaPRO/ESPMegaIoT.hpp | 2 + ESPMegaPRO-OS-SDK/src/main.cpp | 7 +-- 3 files changed, 42 insertions(+), 12 deletions(-) diff --git a/ESPMegaPRO-OS-SDK/lib/ESPMegaPRO/ESPMegaIoT.cpp b/ESPMegaPRO-OS-SDK/lib/ESPMegaPRO/ESPMegaIoT.cpp index b11e46b..51ffd56 100644 --- a/ESPMegaPRO-OS-SDK/lib/ESPMegaPRO/ESPMegaIoT.cpp +++ b/ESPMegaPRO-OS-SDK/lib/ESPMegaPRO/ESPMegaIoT.cpp @@ -65,10 +65,12 @@ void ESPMegaIoT::mqttCallback(char *topic, byte *payload, unsigned int length) components[i]->publishReport(); } } + return; } // Check for global summary request if (!strcmp(topic_without_base,"requestinfo")) { this->publishSystemSummary(); + return; } // Call the respective card's mqtt callback // Note that after the base topic, there should be the card id @@ -393,6 +395,18 @@ void ESPMegaIoT::publish(const char *topic, const char *payload) mqtt.publish(topic, payload); } +/** + * @brief Publish a message to a topic + * + * @param topic The topic to publish to + * @param payload The payload to publish + * @param length The length of the payload + */ +void ESPMegaIoT::publish(const char *topic, const char *payload, unsigned int length) +{ + mqtt.publish(topic, (const uint8_t *)payload, length); +} + /** * @brief Register a callback for MQTT messages * @@ -416,7 +430,7 @@ void ESPMegaIoT::unregisterMqttCallback(uint16_t handler) } /** - * @brief Subscribe to all components's topics + * @brief Subscribe to all components's topics and all other topics */ void ESPMegaIoT::mqttSubscribe() { @@ -436,6 +450,9 @@ void ESPMegaIoT::mqttSubscribe() mqtt.loop(); } } + // Global topics + this->subscribeRelative("requeststate"); + this->subscribeRelative("requestinfo"); } /** @@ -531,6 +548,21 @@ void ESPMegaIoT::publishRelative(const char *topic, const char *payload) mqtt.loop(); } +/** + * @brief Publish a message relative to the base topic + * + * @param topic The topic to publish to + * @param payload The payload to publish + * @param length The length of the payload + */ +void ESPMegaIoT::publishRelative(const char *topic, const char *payload, unsigned int length) +{ + char absolute_topic[100]; + sprintf(absolute_topic, "%s/%s", this->mqtt_config.base_topic, topic); + mqtt.publish(absolute_topic, (const uint8_t *)payload, length); + mqtt.loop(); +} + /** * @brief Subscribe to a topic relative to the base topic * @@ -857,14 +889,7 @@ void ESPMegaIoT::publishSystemSummary() { StaticJsonDocument<1024> doc; JsonObject root = doc.to(); root["ip"] = this->getIp().toString(); - root["mac"] = this->getMac(); - root["mqtt_connected"] = this->mqttConnected(); - root["network_connected"] = this->networkConnected(); - root["mqtt_server"] = this->mqtt_config.mqtt_server; - root["mqtt_port"] = this->mqtt_config.mqtt_port; - root["hostname"] = this->network_config.hostname; root["firmware"] = SW_VERSION; - root["idf_version"] = esp_get_idf_version(); root["sdk_version"] = SDK_VESRION; root["board_model"] = BOARD_MODEL; JsonArray cards = root.createNestedArray("cards"); @@ -878,5 +903,7 @@ void ESPMegaIoT::publishSystemSummary() { } } serializeJson(doc, payload); - this->publishRelative("info", payload); + ESP_LOGD("ESPMegaIoT", "Publishing system summary: %s", payload); + mqtt.loop(); + this->publishRelative("info", payload, strlen(payload)); } \ No newline at end of file diff --git a/ESPMegaPRO-OS-SDK/lib/ESPMegaPRO/ESPMegaIoT.hpp b/ESPMegaPRO-OS-SDK/lib/ESPMegaPRO/ESPMegaIoT.hpp index d47f723..76498c0 100644 --- a/ESPMegaPRO-OS-SDK/lib/ESPMegaPRO/ESPMegaIoT.hpp +++ b/ESPMegaPRO-OS-SDK/lib/ESPMegaPRO/ESPMegaIoT.hpp @@ -83,6 +83,7 @@ public: void publishCard(uint8_t card_id); // Publish topic appended with base topic void publishRelative(const char *topic, const char *payload); + void publishRelative(const char *topic, const char *payload, unsigned int length); // Subscribe topic appended with base topic void subscribeRelative(const char *topic); void subscribe(const char *topic); @@ -107,6 +108,7 @@ public: bool mqttConnected(); void disconnectFromMqtt(); void publish(const char *topic, const char *payload); + void publish(const char *topic, const char *payload, unsigned int length); uint16_t registerMqttCallback(std::function callback); void unregisterMqttCallback(uint16_t handler); uint16_t registerRelativeMqttCallback(std::function callback); diff --git a/ESPMegaPRO-OS-SDK/src/main.cpp b/ESPMegaPRO-OS-SDK/src/main.cpp index e8e43af..aa0bedf 100644 --- a/ESPMegaPRO-OS-SDK/src/main.cpp +++ b/ESPMegaPRO-OS-SDK/src/main.cpp @@ -15,13 +15,13 @@ // #define FRAM_DEBUG // #define MQTT_DEBUG #define WRITE_DEFAULT_NETCONF -//#define CLIMATE_CARD_ENABLE +#define CLIMATE_CARD_ENABLE #define MQTT_CARD_REGISTER #define DISPLAY_ENABLE #define WEB_SERVER_ENABLE #define LCD_OTA_ENABLE -//#define REMOTE_VARIABLE_ENABLE -//#define CT_ENABLE +// #define REMOTE_VARIABLE_ENABLE +// #define CT_ENABLE #define SMART_VARIABLE_ENABLE // Demo PLC firmware using the ESPMegaPRO OOP library @@ -236,6 +236,7 @@ void setup() ct.bindFRAM(&espmega.fram, 7000); ct.loadEnergy(); ct.setEnergyAutoSave(true); + espmega.iot->registerCard(3); #endif #ifdef SMART_VARIABLE_ENABLE ESP_LOGI("Initializer", "Initializing smart variable");