info request

This commit is contained in:
Siwat Sirichai 2024-05-20 01:25:25 +07:00
parent 3e7d3041f2
commit 2430b43f77
3 changed files with 42 additions and 12 deletions

View File

@ -65,10 +65,12 @@ void ESPMegaIoT::mqttCallback(char *topic, byte *payload, unsigned int length)
components[i]->publishReport(); components[i]->publishReport();
} }
} }
return;
} }
// Check for global summary request // Check for global summary request
if (!strcmp(topic_without_base,"requestinfo")) { if (!strcmp(topic_without_base,"requestinfo")) {
this->publishSystemSummary(); this->publishSystemSummary();
return;
} }
// Call the respective card's mqtt callback // Call the respective card's mqtt callback
// Note that after the base topic, there should be the card id // 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); 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 * @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() void ESPMegaIoT::mqttSubscribe()
{ {
@ -436,6 +450,9 @@ void ESPMegaIoT::mqttSubscribe()
mqtt.loop(); 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(); 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 * @brief Subscribe to a topic relative to the base topic
* *
@ -857,14 +889,7 @@ void ESPMegaIoT::publishSystemSummary() {
StaticJsonDocument<1024> doc; StaticJsonDocument<1024> doc;
JsonObject root = doc.to<JsonObject>(); JsonObject root = doc.to<JsonObject>();
root["ip"] = this->getIp().toString(); 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["firmware"] = SW_VERSION;
root["idf_version"] = esp_get_idf_version();
root["sdk_version"] = SDK_VESRION; root["sdk_version"] = SDK_VESRION;
root["board_model"] = BOARD_MODEL; root["board_model"] = BOARD_MODEL;
JsonArray cards = root.createNestedArray("cards"); JsonArray cards = root.createNestedArray("cards");
@ -878,5 +903,7 @@ void ESPMegaIoT::publishSystemSummary() {
} }
} }
serializeJson(doc, payload); serializeJson(doc, payload);
this->publishRelative("info", payload); ESP_LOGD("ESPMegaIoT", "Publishing system summary: %s", payload);
mqtt.loop();
this->publishRelative("info", payload, strlen(payload));
} }

View File

@ -83,6 +83,7 @@ public:
void publishCard(uint8_t card_id); void publishCard(uint8_t card_id);
// Publish topic appended with base topic // Publish topic appended with base topic
void publishRelative(const char *topic, const char *payload); 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 // Subscribe topic appended with base topic
void subscribeRelative(const char *topic); void subscribeRelative(const char *topic);
void subscribe(const char *topic); void subscribe(const char *topic);
@ -107,6 +108,7 @@ public:
bool mqttConnected(); bool mqttConnected();
void disconnectFromMqtt(); void disconnectFromMqtt();
void publish(const char *topic, const char *payload); void publish(const char *topic, const char *payload);
void publish(const char *topic, const char *payload, unsigned int length);
uint16_t registerMqttCallback(std::function<void(char *, char *)> callback); uint16_t registerMqttCallback(std::function<void(char *, char *)> callback);
void unregisterMqttCallback(uint16_t handler); void unregisterMqttCallback(uint16_t handler);
uint16_t registerRelativeMqttCallback(std::function<void(char *, char *)> callback); uint16_t registerRelativeMqttCallback(std::function<void(char *, char *)> callback);

View File

@ -15,13 +15,13 @@
// #define FRAM_DEBUG // #define FRAM_DEBUG
// #define MQTT_DEBUG // #define MQTT_DEBUG
#define WRITE_DEFAULT_NETCONF #define WRITE_DEFAULT_NETCONF
//#define CLIMATE_CARD_ENABLE #define CLIMATE_CARD_ENABLE
#define MQTT_CARD_REGISTER #define MQTT_CARD_REGISTER
#define DISPLAY_ENABLE #define DISPLAY_ENABLE
#define WEB_SERVER_ENABLE #define WEB_SERVER_ENABLE
#define LCD_OTA_ENABLE #define LCD_OTA_ENABLE
//#define REMOTE_VARIABLE_ENABLE // #define REMOTE_VARIABLE_ENABLE
//#define CT_ENABLE // #define CT_ENABLE
#define SMART_VARIABLE_ENABLE #define SMART_VARIABLE_ENABLE
// Demo PLC firmware using the ESPMegaPRO OOP library // Demo PLC firmware using the ESPMegaPRO OOP library
@ -236,6 +236,7 @@ void setup()
ct.bindFRAM(&espmega.fram, 7000); ct.bindFRAM(&espmega.fram, 7000);
ct.loadEnergy(); ct.loadEnergy();
ct.setEnergyAutoSave(true); ct.setEnergyAutoSave(true);
espmega.iot->registerCard(3);
#endif #endif
#ifdef SMART_VARIABLE_ENABLE #ifdef SMART_VARIABLE_ENABLE
ESP_LOGI("Initializer", "Initializing smart variable"); ESP_LOGI("Initializer", "Initializing smart variable");