From 50fa7e2abfdf53652afe99d14fbd612eec250d9b Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 18 Apr 2022 15:19:26 +0200 Subject: [PATCH] First basic class structure for mqtt handling --- include/Configuration.h | 14 +++++++++++++- include/MqttSettings.h | 15 +++++++++++++++ include/defaults.h | 9 ++++++++- platformio.ini | 1 + src/Configuration.cpp | 18 ++++++++++++++++++ src/MqttSettings.cpp | 12 ++++++++++++ src/main.cpp | 6 ++++++ 7 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 include/MqttSettings.h create mode 100644 src/MqttSettings.cpp diff --git a/include/Configuration.h b/include/Configuration.h index e24214f..eb3f8fe 100644 --- a/include/Configuration.h +++ b/include/Configuration.h @@ -3,7 +3,7 @@ #include #define CONFIG_FILENAME "/config.bin" -#define CONFIG_VERSION 0x00010400 // 0.1.4 // make sure to clean all after change +#define CONFIG_VERSION 0x00010500 // 0.1.5 // make sure to clean all after change #define WIFI_MAX_SSID_STRLEN 31 #define WIFI_MAX_PASSWORD_STRLEN 31 @@ -13,6 +13,11 @@ #define NTP_MAX_TIMEZONE_STRLEN 50 #define NTP_MAX_TIMEZONEDESCR_STRLEN 50 +#define MQTT_MAX_HOSTNAME_STRLEN 31 +#define MQTT_MAX_USERNAME_STRLEN 32 +#define MQTT_MAX_PASSWORD_STRLEN 32 +#define MQTT_MAX_TOPIC_STRLEN 32 + struct CONFIG_T { uint32_t Cfg_Version; uint Cfg_SaveCount; @@ -30,6 +35,13 @@ struct CONFIG_T { char Ntp_Server[NTP_MAX_SERVER_STRLEN + 1]; char Ntp_Timezone[NTP_MAX_TIMEZONE_STRLEN + 1]; char Ntp_TimezoneDescr[NTP_MAX_TIMEZONEDESCR_STRLEN + 1]; + + bool Mqtt_Enabled; + char Mqtt_Hostname[MQTT_MAX_HOSTNAME_STRLEN + 1]; + uint Mqtt_Port; + char Mqtt_Username[MQTT_MAX_USERNAME_STRLEN + 1]; + char Mqtt_Password[MQTT_MAX_PASSWORD_STRLEN + 1]; + char Mqtt_Topic[MQTT_MAX_TOPIC_STRLEN + 1]; }; class ConfigurationClass { diff --git a/include/MqttSettings.h b/include/MqttSettings.h new file mode 100644 index 0000000..05888a4 --- /dev/null +++ b/include/MqttSettings.h @@ -0,0 +1,15 @@ +#pragma once + +#include +#include + +class MqttSettingsClass { +public: + MqttSettingsClass(); + void init(); + +private: + std::unique_ptr mqttClient; +}; + +extern MqttSettingsClass MqttSettings; \ No newline at end of file diff --git a/include/defaults.h b/include/defaults.h index a04ffa6..c5a28fd 100644 --- a/include/defaults.h +++ b/include/defaults.h @@ -19,4 +19,11 @@ #define NTP_SERVER "pool.ntp.org" #define NTP_TIMEZONE "CET-1CEST,M3.5.0,M10.5.0/3" -#define NTP_TIMEZONEDESCR "Europe/Berlin" \ No newline at end of file +#define NTP_TIMEZONEDESCR "Europe/Berlin" + +#define MQTT_ENABLED false +#define MQTT_HOST "" +#define MQTT_PORT 1883 +#define MQTT_USER "" +#define MQTT_PASSWORD "" +#define MQTT_TOPIC "stripe/" \ No newline at end of file diff --git a/platformio.ini b/platformio.ini index 1c85559..ce2ec0d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -24,6 +24,7 @@ build_flags = lib_deps = https://github.com/me-no-dev/ESPAsyncWebServer.git bblanchon/ArduinoJson @ ^6.19.4 + https://github.com/marvinroger/async-mqtt-client.git board = esp32dev board_build.partitions = partitions_custom.csv diff --git a/src/Configuration.cpp b/src/Configuration.cpp index cbcdae4..9a7c41d 100644 --- a/src/Configuration.cpp +++ b/src/Configuration.cpp @@ -20,6 +20,14 @@ void ConfigurationClass::init() strlcpy(config.Ntp_Server, NTP_SERVER, sizeof(config.Ntp_Server)); strlcpy(config.Ntp_Timezone, NTP_TIMEZONE, sizeof(config.Ntp_Timezone)); strlcpy(config.Ntp_TimezoneDescr, NTP_TIMEZONEDESCR, sizeof(config.Ntp_TimezoneDescr)); + + // MqTT Settings + config.Mqtt_Enabled = MQTT_ENABLED; + strlcpy(config.Mqtt_Hostname, MQTT_HOST, sizeof(config.Mqtt_Hostname)); + config.Mqtt_Port = MQTT_PORT; + strlcpy(config.Mqtt_Username, MQTT_USER, sizeof(config.Mqtt_Username)); + strlcpy(config.Mqtt_Password, MQTT_PASSWORD, sizeof(config.Mqtt_Password)); + strlcpy(config.Mqtt_Topic, MQTT_TOPIC, sizeof(config.Mqtt_Topic)); } bool ConfigurationClass::write() @@ -58,6 +66,16 @@ void ConfigurationClass::migrate() strlcpy(config.Ntp_Timezone, NTP_TIMEZONE, sizeof(config.Ntp_Timezone)); strlcpy(config.Ntp_TimezoneDescr, NTP_TIMEZONEDESCR, sizeof(config.Ntp_TimezoneDescr)); } + + if (config.Cfg_Version < 0x00010500) { + config.Mqtt_Enabled = MQTT_ENABLED; + strlcpy(config.Mqtt_Hostname, MQTT_HOST, sizeof(config.Mqtt_Hostname)); + config.Mqtt_Port = MQTT_PORT; + strlcpy(config.Mqtt_Username, MQTT_USER, sizeof(config.Mqtt_Username)); + strlcpy(config.Mqtt_Password, MQTT_PASSWORD, sizeof(config.Mqtt_Password)); + strlcpy(config.Mqtt_Topic, MQTT_TOPIC, sizeof(config.Mqtt_Topic)); + } + config.Cfg_Version = CONFIG_VERSION; write(); } diff --git a/src/MqttSettings.cpp b/src/MqttSettings.cpp new file mode 100644 index 0000000..604e04c --- /dev/null +++ b/src/MqttSettings.cpp @@ -0,0 +1,12 @@ +#include "MqttSettings.h" + +MqttSettingsClass::MqttSettingsClass() + : mqttClient() +{ +} + +void MqttSettingsClass::init() +{ +} + +MqttSettingsClass MqttSettings; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 6ab62aa..79518d8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,4 +1,5 @@ #include "Configuration.h" +#include "MqttSettings.h" #include "NtpSettings.h" #include "WebApi.h" #include "WiFiSettings.h" @@ -51,6 +52,11 @@ void setup() NtpSettings.init(); Serial.println(F("done")); + // Initialize MqTT + Serial.print(F("Initialize MqTT... ")); + MqttSettings.init(); + Serial.println(F("done")); + // Initialize WebApi Serial.print(F("Initialize WebApi... ")); WebApi.init();