Compare commits
4 Commits
6b67591cc1
...
64d6c4fab3
Author | SHA1 | Date |
---|---|---|
Siwat Sirichai | 64d6c4fab3 | |
Siwat Sirichai | 2430b43f77 | |
Siwat Sirichai | 3e7d3041f2 | |
Siwat Sirichai | ea49576b20 |
|
@ -1,2 +1,3 @@
|
||||||
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
/ESPMegaPRO-OS-SDK
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define SDK_VESRION "2.7.0"
|
#define SDK_VESRION "2.8.0"
|
|
@ -56,6 +56,22 @@ void ESPMegaIoT::mqttCallback(char *topic, byte *payload, unsigned int length)
|
||||||
{
|
{
|
||||||
callback.second(topic_without_base, payload_buffer);
|
callback.second(topic_without_base, payload_buffer);
|
||||||
}
|
}
|
||||||
|
// Check for global state request
|
||||||
|
if (!strcmp(topic_without_base,"requeststate")) {
|
||||||
|
for (int i = 0; i < 255; i++)
|
||||||
|
{
|
||||||
|
if (components[i] != NULL)
|
||||||
|
{
|
||||||
|
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
|
// 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
|
||||||
// /base_topic/card_id/...
|
// /base_topic/card_id/...
|
||||||
|
@ -379,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
|
||||||
*
|
*
|
||||||
|
@ -402,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()
|
||||||
{
|
{
|
||||||
|
@ -422,6 +450,9 @@ void ESPMegaIoT::mqttSubscribe()
|
||||||
mqtt.loop();
|
mqtt.loop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Global topics
|
||||||
|
this->subscribeRelative("requeststate");
|
||||||
|
this->subscribeRelative("requestinfo");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -517,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
|
||||||
*
|
*
|
||||||
|
@ -834,3 +880,30 @@ String ESPMegaIoT::getMac()
|
||||||
else
|
else
|
||||||
return this->getETHMac();
|
return this->getETHMac();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Publish a json object containing the system summary
|
||||||
|
*/
|
||||||
|
void ESPMegaIoT::publishSystemSummary() {
|
||||||
|
char payload[1024];
|
||||||
|
StaticJsonDocument<1024> doc;
|
||||||
|
JsonObject root = doc.to<JsonObject>();
|
||||||
|
root["ip"] = this->getIp().toString();
|
||||||
|
root["firmware"] = SW_VERSION;
|
||||||
|
root["sdk_version"] = SDK_VESRION;
|
||||||
|
root["board_model"] = BOARD_MODEL;
|
||||||
|
JsonArray cards = root.createNestedArray("cards");
|
||||||
|
for (int i = 0; i < 255; i++)
|
||||||
|
{
|
||||||
|
if (components[i] != NULL)
|
||||||
|
{
|
||||||
|
JsonObject card = cards.createNestedObject();
|
||||||
|
card["id"] = i;
|
||||||
|
card["type"] = components[i]->getType();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
serializeJson(doc, payload);
|
||||||
|
ESP_LOGD("ESPMegaIoT", "Publishing system summary: %s", payload);
|
||||||
|
mqtt.loop();
|
||||||
|
this->publishRelative("info", payload, strlen(payload));
|
||||||
|
}
|
|
@ -16,6 +16,8 @@
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
#include <FRAM.h>
|
#include <FRAM.h>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <ArduinoJson.h>
|
||||||
|
#include <ESPMegaCommon.hpp>
|
||||||
|
|
||||||
// MQTT Connection Parameters
|
// MQTT Connection Parameters
|
||||||
#define TCP_TIMEOUT_SEC 5
|
#define TCP_TIMEOUT_SEC 5
|
||||||
|
@ -81,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);
|
||||||
|
@ -105,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);
|
||||||
|
@ -115,6 +119,7 @@ public:
|
||||||
void bindEthernetInterface(ETHClass *ethernetIface);
|
void bindEthernetInterface(ETHClass *ethernetIface);
|
||||||
bool networkConnected();
|
bool networkConnected();
|
||||||
void bindFRAM(FRAM *fram);
|
void bindFRAM(FRAM *fram);
|
||||||
|
void publishSystemSummary();
|
||||||
|
|
||||||
IoTComponent* getComponent(uint8_t card_id);
|
IoTComponent* getComponent(uint8_t card_id);
|
||||||
IPAddress getETHIp();
|
IPAddress getETHIp();
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
// #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
|
||||||
|
@ -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");
|
||||||
|
|
Loading…
Reference in New Issue