migrate mqtt config to struct
This commit is contained in:
parent
2dee25276c
commit
71475ef2f1
|
@ -13,8 +13,48 @@
|
||||||
"*.tcc": "cpp",
|
"*.tcc": "cpp",
|
||||||
"memory": "cpp",
|
"memory": "cpp",
|
||||||
"random": "cpp",
|
"random": "cpp",
|
||||||
"functional": "cpp"
|
"functional": "cpp",
|
||||||
|
"atomic": "cpp",
|
||||||
|
"cctype": "cpp",
|
||||||
|
"clocale": "cpp",
|
||||||
|
"cmath": "cpp",
|
||||||
|
"cstdarg": "cpp",
|
||||||
|
"cstddef": "cpp",
|
||||||
|
"cstdint": "cpp",
|
||||||
|
"cstdio": "cpp",
|
||||||
|
"cstdlib": "cpp",
|
||||||
|
"cstring": "cpp",
|
||||||
|
"ctime": "cpp",
|
||||||
|
"cwchar": "cpp",
|
||||||
|
"cwctype": "cpp",
|
||||||
|
"exception": "cpp",
|
||||||
|
"algorithm": "cpp",
|
||||||
|
"iterator": "cpp",
|
||||||
|
"map": "cpp",
|
||||||
|
"memory_resource": "cpp",
|
||||||
|
"numeric": "cpp",
|
||||||
|
"optional": "cpp",
|
||||||
|
"system_error": "cpp",
|
||||||
|
"tuple": "cpp",
|
||||||
|
"type_traits": "cpp",
|
||||||
|
"utility": "cpp",
|
||||||
|
"fstream": "cpp",
|
||||||
|
"iomanip": "cpp",
|
||||||
|
"iosfwd": "cpp",
|
||||||
|
"istream": "cpp",
|
||||||
|
"limits": "cpp",
|
||||||
|
"new": "cpp",
|
||||||
|
"ostream": "cpp",
|
||||||
|
"sstream": "cpp",
|
||||||
|
"stdexcept": "cpp",
|
||||||
|
"streambuf": "cpp",
|
||||||
|
"cinttypes": "cpp",
|
||||||
|
"typeinfo": "cpp"
|
||||||
},
|
},
|
||||||
"cmake.configureOnOpen": true,
|
"cmake.configureOnOpen": true,
|
||||||
"cmake.sourceDirectory": "D:/Git/ESPMegaPRO-v3-SDK/Template Project/.pio/libdeps/wt32-eth01/Adafruit BusIO"
|
"cmake.sourceDirectory": "D:/Git/ESPMegaPRO-v3-SDK/Template Project/.pio/libdeps/wt32-eth01/Adafruit BusIO",
|
||||||
|
"editor.tokenColorCustomizations": {
|
||||||
|
"comments": "",
|
||||||
|
"textMateRules": []
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -17,10 +17,6 @@ ESPMegaIoT::ESPMegaIoT() : mqtt(tcpClient)
|
||||||
|
|
||||||
ESPMegaIoT::~ESPMegaIoT()
|
ESPMegaIoT::~ESPMegaIoT()
|
||||||
{
|
{
|
||||||
// Delete the mqtt server
|
|
||||||
delete[] mqtt_server;
|
|
||||||
delete[] mqtt_user;
|
|
||||||
delete[] mqtt_password;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ESPMegaIoT::mqttCallback(char *topic, byte *payload, unsigned int length)
|
void ESPMegaIoT::mqttCallback(char *topic, byte *payload, unsigned int length)
|
||||||
|
@ -248,13 +244,13 @@ void ESPMegaIoT::publishRelative(uint8_t card_id, char *topic, char *payload)
|
||||||
|
|
||||||
bool ESPMegaIoT::mqttReconnect()
|
bool ESPMegaIoT::mqttReconnect()
|
||||||
{
|
{
|
||||||
if (mqtt_useauth)
|
if (this->mqtt_config.mqtt_useauth)
|
||||||
{
|
{
|
||||||
return this->connectToMqtt(client_id, mqtt_server, mqtt_port, mqtt_user, mqtt_password);
|
return this->connectToMqtt(this->network_config.hostname, this->mqtt_config.mqtt_server, this->mqtt_config.mqtt_port, this->mqtt_config.mqtt_user, this->mqtt_config.mqtt_password);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return this->connectToMqtt(client_id, mqtt_server, mqtt_port);
|
return this->connectToMqtt(this->network_config.hostname, this->mqtt_config.mqtt_server, this->mqtt_config.mqtt_port);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -300,7 +296,6 @@ void ESPMegaIoT::registerSubscribeCallback(void (*callback)(void))
|
||||||
void ESPMegaIoT::setNetworkConfig(NetworkConfig network_config)
|
void ESPMegaIoT::setNetworkConfig(NetworkConfig network_config)
|
||||||
{
|
{
|
||||||
this->network_config = network_config;
|
this->network_config = network_config;
|
||||||
client_id = network_config.hostname;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ESPMegaIoT::loadNetworkConfig()
|
void ESPMegaIoT::loadNetworkConfig()
|
||||||
|
@ -323,38 +318,21 @@ void ESPMegaIoT::ethernetBegin()
|
||||||
void ESPMegaIoT::loadMqttConfig()
|
void ESPMegaIoT::loadMqttConfig()
|
||||||
{
|
{
|
||||||
// Load the mqtt config from FRAM
|
// Load the mqtt config from FRAM
|
||||||
MqttConfig mqtt_config;
|
fram->read(sizeof(NetworkConfig), (uint8_t *)&this->mqtt_config, sizeof(MqttConfig));
|
||||||
fram->read(sizeof(NetworkConfig), (uint8_t *)&mqtt_config, sizeof(MqttConfig));
|
|
||||||
// Populate the mqtt connection parameters
|
// Populate the mqtt connection parameters
|
||||||
strcpy(mqtt_server, mqtt_config.mqtt_server);
|
|
||||||
mqtt_port = mqtt_config.mqtt_port;
|
|
||||||
strcpy(mqtt_user, mqtt_config.mqtt_user);
|
|
||||||
strcpy(mqtt_password, mqtt_config.mqtt_password);
|
|
||||||
mqtt_useauth = mqtt_config.mqtt_useauth;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ESPMegaIoT::saveMqttConfig()
|
void ESPMegaIoT::saveMqttConfig()
|
||||||
{
|
{
|
||||||
// Save the mqtt config to FRAM
|
|
||||||
MqttConfig mqtt_config;
|
|
||||||
strcpy(mqtt_config.mqtt_server, mqtt_server);
|
|
||||||
mqtt_config.mqtt_port = mqtt_port;
|
|
||||||
strcpy(mqtt_config.mqtt_user, mqtt_user);
|
|
||||||
strcpy(mqtt_config.mqtt_password, mqtt_password);
|
|
||||||
mqtt_config.mqtt_useauth = mqtt_useauth;
|
|
||||||
fram->write(MQTT_CONFIG_ADDRESS, (uint8_t *)&mqtt_config, sizeof(MqttConfig));
|
fram->write(MQTT_CONFIG_ADDRESS, (uint8_t *)&mqtt_config, sizeof(MqttConfig));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ESPMegaIoT::connectToMqtt()
|
void ESPMegaIoT::connectToMqtt()
|
||||||
{
|
{
|
||||||
if (mqtt_useauth)
|
if (mqtt_config.mqtt_useauth)
|
||||||
{
|
this->connectToMqtt(network_config.hostname, mqtt_config.mqtt_server, mqtt_config.mqtt_port, mqtt_config.mqtt_user, mqtt_config.mqtt_password);
|
||||||
this->connectToMqtt(client_id, mqtt_server, mqtt_port, mqtt_user, mqtt_password);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
this->connectToMqtt(network_config.hostname, mqtt_config.mqtt_server, mqtt_config.mqtt_port);
|
||||||
this->connectToMqtt(client_id, mqtt_server, mqtt_port);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ESPMegaIoT::connectNetwork()
|
void ESPMegaIoT::connectNetwork()
|
||||||
|
@ -380,24 +358,7 @@ void ESPMegaIoT::connectNetwork()
|
||||||
|
|
||||||
void ESPMegaIoT::setMqttConfig(MqttConfig mqtt_config)
|
void ESPMegaIoT::setMqttConfig(MqttConfig mqtt_config)
|
||||||
{
|
{
|
||||||
if (mqtt_server != nullptr) {
|
this->mqtt_config = mqtt_config;
|
||||||
delete[] mqtt_server;
|
|
||||||
}
|
|
||||||
this->mqtt_server = new char[32];
|
|
||||||
strcpy(mqtt_server, mqtt_config.mqtt_server);
|
|
||||||
mqtt_port = mqtt_config.mqtt_port;
|
|
||||||
if (mqtt_user != nullptr) {
|
|
||||||
delete[] mqtt_user;
|
|
||||||
}
|
|
||||||
this->mqtt_user = new char[32];
|
|
||||||
strcpy(mqtt_user, mqtt_config.mqtt_user);
|
|
||||||
if (mqtt_password != nullptr) {
|
|
||||||
delete[] mqtt_password;
|
|
||||||
}
|
|
||||||
this->mqtt_password = new char[32];
|
|
||||||
strcpy(mqtt_password, mqtt_config.mqtt_password);
|
|
||||||
mqtt_useauth = mqtt_config.mqtt_useauth;
|
|
||||||
strcpy(base_topic, mqtt_config.base_topic);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ESPMegaIoT::bindEthernetInterface(ETHClass *ethernetIface)
|
void ESPMegaIoT::bindEthernetInterface(ETHClass *ethernetIface)
|
||||||
|
@ -405,7 +366,7 @@ void ESPMegaIoT::bindEthernetInterface(ETHClass *ethernetIface)
|
||||||
this->ethernetIface = ethernetIface;
|
this->ethernetIface = ethernetIface;
|
||||||
}
|
}
|
||||||
|
|
||||||
IoTComponent* ESPMegaIoT::getComponent(uint8_t card_id)
|
IoTComponent *ESPMegaIoT::getComponent(uint8_t card_id)
|
||||||
{
|
{
|
||||||
return components[card_id];
|
return components[card_id];
|
||||||
}
|
}
|
|
@ -74,6 +74,7 @@ public:
|
||||||
void registerSubscribeCallback(void (*callback)(void));
|
void registerSubscribeCallback(void (*callback)(void));
|
||||||
void setBaseTopic(char *base_topic);
|
void setBaseTopic(char *base_topic);
|
||||||
void bindEthernetInterface(ETHClass *ethernetIface);
|
void bindEthernetInterface(ETHClass *ethernetIface);
|
||||||
|
|
||||||
IoTComponent* getComponent(uint8_t card_id);
|
IoTComponent* getComponent(uint8_t card_id);
|
||||||
IPAddress getETHIp();
|
IPAddress getETHIp();
|
||||||
|
|
||||||
|
@ -101,13 +102,8 @@ private:
|
||||||
uint8_t base_topic_length;
|
uint8_t base_topic_length;
|
||||||
ExpansionCard **cards; // Points to card array in ESPMegaPRO Core
|
ExpansionCard **cards; // Points to card array in ESPMegaPRO Core
|
||||||
// MQTT Connection Parameters
|
// MQTT Connection Parameters
|
||||||
char *mqtt_server;
|
|
||||||
uint16_t mqtt_port;
|
|
||||||
char *mqtt_user;
|
|
||||||
char *mqtt_password;
|
|
||||||
char *client_id;
|
|
||||||
bool mqtt_useauth;
|
|
||||||
bool mqtt_connected;
|
bool mqtt_connected;
|
||||||
NetworkConfig network_config;
|
NetworkConfig network_config;
|
||||||
|
MqttConfig mqtt_config;
|
||||||
ETHClass *ethernetIface;
|
ETHClass *ethernetIface;
|
||||||
};
|
};
|
|
@ -9,15 +9,7 @@
|
||||||
#include <TimeLib.h>
|
#include <TimeLib.h>
|
||||||
#include <DS1307RTC.h>
|
#include <DS1307RTC.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#include <TimeStructure.hpp>
|
||||||
struct rtctime_t {
|
|
||||||
uint8_t hours;
|
|
||||||
uint8_t minutes;
|
|
||||||
uint8_t seconds;
|
|
||||||
uint8_t day;
|
|
||||||
uint8_t month;
|
|
||||||
uint16_t year;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define FRAM_ADDRESS 0x56
|
#define FRAM_ADDRESS 0x56
|
||||||
#define INPUT_BANK_A_ADDRESS 0x21
|
#define INPUT_BANK_A_ADDRESS 0x21
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
#include <InternalDisplay.hpp>
|
#include <InternalDisplay.hpp>
|
||||||
|
|
||||||
|
|
||||||
void InternalDisplay::begin(ESPMegaPRO *espmega) {
|
void InternalDisplay::begin() {
|
||||||
this->espmega = espmega;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void InternalDisplay::loop() {
|
void InternalDisplay::loop() {
|
||||||
|
@ -26,17 +25,23 @@ void InternalDisplay::bindOutputCard(uint8_t card_id) {
|
||||||
void InternalDisplay::handleInputStateChange(uint8_t pin, bool state) {
|
void InternalDisplay::handleInputStateChange(uint8_t pin, bool state) {
|
||||||
// If the input card is binded to the display and the current page is the input page
|
// If the input card is binded to the display and the current page is the input page
|
||||||
// then update the respective input component
|
// then update the respective input component
|
||||||
// TODO: implementation
|
if (!this->bindedInputCard || this->currentPage != INTERNAL_DISPLAY_INPUT_PAGE) return;
|
||||||
|
// Update the input state
|
||||||
|
this->setInputMarker(pin, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InternalDisplay::handlePwmStateChange(uint8_t pin, uint16_t value) {
|
void InternalDisplay::handlePwmStateChange(uint8_t pin, bool state, uint16_t value) {
|
||||||
// If the output card is binded to the display and the current page is the output page
|
// If the output card is binded to the display and the current page is the output page
|
||||||
// then update the respective output component
|
// then update the respective output component
|
||||||
// TODO: implementation
|
if (!this->bindedOutputCard || this->currentPage != INTERNAL_DISPLAY_OUTPUT_PAGE) return;
|
||||||
|
// Update the output state
|
||||||
|
this->setOutputBar(pin, value);
|
||||||
|
this->setOutputStateColor(pin, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InternalDisplay::handlePageChange(uint8_t page) {
|
void InternalDisplay::handlePageChange(uint8_t page) {
|
||||||
// TODO: implementation
|
// Refresh the page
|
||||||
|
this->refreshPage(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InternalDisplay::saveNetworkConfig() {
|
void InternalDisplay::saveNetworkConfig() {
|
||||||
|
@ -47,24 +52,51 @@ void InternalDisplay::saveMQTTConfig() {
|
||||||
// TODO: implementation
|
// TODO: implementation
|
||||||
}
|
}
|
||||||
|
|
||||||
void InternalDisplay::updateStatusIcons() {
|
void InternalDisplay::updateStatusIcons(bool networkStatus, bool mqttStatus) {
|
||||||
// TODO: implementation
|
this->setNumber("server.pic", mqttStatus ? PIC_MQTT_CONNECTED : PIC_MQTT_DISCONNECTED);
|
||||||
|
this->setNumber("lan.pic", networkStatus ? PIC_LAN_CONNECTED : PIC_LAN_DISCONNECTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InternalDisplay::updateClock() {
|
void InternalDisplay::updateClock() {
|
||||||
// TODO: implementation
|
rtctime_t time = this->getRtcTime();
|
||||||
|
this->displayAdapter->print("time.txt=");
|
||||||
|
this->displayAdapter->print(time.hours%12);
|
||||||
|
this->displayAdapter->print(":");
|
||||||
|
this->displayAdapter->print(time.minutes);
|
||||||
|
this->displayAdapter->print(" ");
|
||||||
|
this->displayAdapter->print(time.hours/12 ? "PM" : "AM");
|
||||||
|
this->sendStopBytes();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void InternalDisplay::refreshPage() {
|
void InternalDisplay::refreshPage() {
|
||||||
// TODO: implementation
|
this->refreshPage(this->currentPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InternalDisplay::refreshPage(uint8_t page) {
|
void InternalDisplay::refreshPage(uint8_t page) {
|
||||||
// TODO: implementation
|
switch (page) {
|
||||||
|
case INTERNAL_DISPLAY_DASHBOARD_PAGE:
|
||||||
|
this->refreshDashboard();
|
||||||
|
break;
|
||||||
|
case INTERNAL_DISPLAY_INPUT_PAGE:
|
||||||
|
this->refreshInput();
|
||||||
|
break;
|
||||||
|
case INTERNAL_DISPLAY_OUTPUT_PAGE:
|
||||||
|
this->refreshOutput();
|
||||||
|
break;
|
||||||
|
case INTERNAL_DISPLAY_AC_PAGE:
|
||||||
|
this->refreshAC();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void InternalDisplay::refreshDashboard() {
|
void InternalDisplay::refreshDashboard() {
|
||||||
// TODO: implementation
|
// The dashboard have the following components:
|
||||||
|
// 1. Hostname
|
||||||
|
// 2. IP Address
|
||||||
|
// 3. MQTT Server with port
|
||||||
|
// 4. MQTT Connection status
|
||||||
|
this->iot->
|
||||||
}
|
}
|
||||||
|
|
||||||
void InternalDisplay::refreshInput() {
|
void InternalDisplay::refreshInput() {
|
||||||
|
|
|
@ -1,24 +1,32 @@
|
||||||
#include <ESPMegaPRO_OOP.hpp>
|
|
||||||
#include <ESPMegaDisplay.hpp>
|
#include <ESPMegaDisplay.hpp>
|
||||||
|
#include <TimeStructure.hpp>
|
||||||
|
#include <ESPMegaIoT.hpp>
|
||||||
|
|
||||||
#define INTERNAL_DISPLAY_DASHBOARD_PAGE 0
|
#define INTERNAL_DISPLAY_DASHBOARD_PAGE 0
|
||||||
#define INTERNAL_DISPLAY_INPUT_PAGE 1
|
#define INTERNAL_DISPLAY_INPUT_PAGE 1
|
||||||
#define INTERNAL_DISPLAY_OUTPUT_PAGE 2
|
#define INTERNAL_DISPLAY_OUTPUT_PAGE 2
|
||||||
#define INTERNAL_DISPLAY_AC_PAGE 3
|
#define INTERNAL_DISPLAY_AC_PAGE 3
|
||||||
|
|
||||||
|
// Picture IDs
|
||||||
|
#define PIC_LAN_DISCONNECTED 2
|
||||||
|
#define PIC_LAN_CONNECTED 3
|
||||||
|
#define PIC_MQTT_DISCONNECTED 4
|
||||||
|
#define PIC_MQTT_CONNECTED 5
|
||||||
|
|
||||||
|
|
||||||
class InternalDisplay : public ESPMegaDisplay {
|
class InternalDisplay : public ESPMegaDisplay {
|
||||||
public:
|
public:
|
||||||
InternalDisplay(HardwareSerial *displayAdapter);
|
InternalDisplay(HardwareSerial *displayAdapter);
|
||||||
void begin(ESPMegaPRO *espmega);
|
void begin(ESPMegaIoT *iot, std::function<rtctime_t()> getRtcTime);
|
||||||
void loop();
|
void loop();
|
||||||
void bindInputCard(uint8_t card_id);
|
void bindInputCard(uint8_t card_id);
|
||||||
void bindOutputCard(uint8_t card_id);
|
void bindOutputCard(uint8_t card_id);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint8_t bindedInputCard;
|
uint8_t bindedInputCard;
|
||||||
uint8_t bindedOutputCard;
|
uint8_t bindedOutputCard;
|
||||||
ESPMegaPRO *espmega;
|
|
||||||
void handleInputStateChange(uint8_t pin, bool state);
|
void handleInputStateChange(uint8_t pin, bool state);
|
||||||
void handlePwmStateChange(uint8_t pin, uint16_t value);
|
void handlePwmStateChange(uint8_t pin, bool state, uint16_t value);
|
||||||
void handlePageChange(uint8_t page);
|
void handlePageChange(uint8_t page);
|
||||||
void setOutputBar(uint8_t pin, uint16_t value);
|
void setOutputBar(uint8_t pin, uint16_t value);
|
||||||
void setOutputStateColor(uint8_t pin, bool state);
|
void setOutputStateColor(uint8_t pin, bool state);
|
||||||
|
@ -28,7 +36,7 @@ class InternalDisplay : public ESPMegaDisplay {
|
||||||
void setPWMAdjustmentButton(bool state);
|
void setPWMAdjustmentButton(bool state);
|
||||||
void saveNetworkConfig();
|
void saveNetworkConfig();
|
||||||
void saveMQTTConfig();
|
void saveMQTTConfig();
|
||||||
void updateStatusIcons();
|
void updateStatusIcons(bool networkStatus, bool mqttStatus);
|
||||||
void updateClock();
|
void updateClock();
|
||||||
void refreshPage();
|
void refreshPage();
|
||||||
void refreshPage(uint8_t page);
|
void refreshPage(uint8_t page);
|
||||||
|
@ -36,4 +44,7 @@ class InternalDisplay : public ESPMegaDisplay {
|
||||||
void refreshInput();
|
void refreshInput();
|
||||||
void refreshOutput();
|
void refreshOutput();
|
||||||
void refreshAC();
|
void refreshAC();
|
||||||
|
// Pointers to various data
|
||||||
|
ESPMegaIoT *iot;
|
||||||
|
std::function<rtctime_t()> getRtcTime;
|
||||||
};
|
};
|
|
@ -0,0 +1,11 @@
|
||||||
|
#pragma once
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
struct rtctime_t {
|
||||||
|
uint8_t hours;
|
||||||
|
uint8_t minutes;
|
||||||
|
uint8_t seconds;
|
||||||
|
uint8_t day;
|
||||||
|
uint8_t month;
|
||||||
|
uint16_t year;
|
||||||
|
};
|
Loading…
Reference in New Issue