From 849eac1c0fa58c28c1dd0f31624bde4bb361b7eb Mon Sep 17 00:00:00 2001 From: david-beinder Date: Fri, 28 Apr 2023 23:43:05 +0200 Subject: [PATCH 1/3] Move version constants into its own compile-unit Speeds up the build by moving those constants into a separate compile-unit. Currently, since the version header is auto regenerated on each build, all modules that include it, also have to be recompiled every time. --- .gitignore | 2 +- lib/AmsDataStorage/src/AmsDataStorage.cpp | 14 +++++------ lib/EnergyAccounting/src/EnergyAccounting.cpp | 12 +++++----- lib/EntsoePriceApi/src/EntsoeApi.cpp | 6 ++--- lib/FirmwareVersion/include/FirmwareVersion.h | 12 ++++++++++ lib/FirmwareVersion/src/FirmwareVersion.cpp | 5 ++++ .../src/HomeAssistantMqttHandler.cpp | 6 ++--- lib/JsonMqttHandler/src/JsonMqttHandler.cpp | 4 ++-- lib/SvelteUi/src/AmsWebServer.cpp | 23 +++++++++---------- platformio.ini | 2 +- scripts/addversion.py | 6 ++--- src/AmsToMqttBridge.ino | 17 +++++++------- src/version.h | 5 ---- 13 files changed, 61 insertions(+), 53 deletions(-) create mode 100644 lib/FirmwareVersion/include/FirmwareVersion.h create mode 100644 lib/FirmwareVersion/src/FirmwareVersion.cpp delete mode 100644 src/version.h diff --git a/.gitignore b/.gitignore index a2cc6f3a..ac16b110 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,7 @@ .vscode .pio platformio-user.ini -/lib/AmsConfiguration/include/version.h +/lib/FirmwareVersion/src/generated_version.h /src/web/root /src/AmsToMqttBridge.ino.cpp /test diff --git a/lib/AmsDataStorage/src/AmsDataStorage.cpp b/lib/AmsDataStorage/src/AmsDataStorage.cpp index 931e5d9e..9e7dd02d 100644 --- a/lib/AmsDataStorage/src/AmsDataStorage.cpp +++ b/lib/AmsDataStorage/src/AmsDataStorage.cpp @@ -2,7 +2,7 @@ #include #include "LittleFS.h" #include "AmsStorage.h" -#include "version.h" +#include "FirmwareVersion.h" AmsDataStorage::AmsDataStorage(RemoteDebug* debugger) { day.version = 5; @@ -28,20 +28,20 @@ bool AmsDataStorage::update(AmsData* data) { if(debugger->isActive(RemoteDebug::VERBOSE)) debugger->printf_P(PSTR("(AmsDataStorage) Timezone is missing\n")); return false; } - if(now < BUILD_EPOCH) { - if(data->getMeterTimestamp() > BUILD_EPOCH) { + if(now < FirmwareVersion::BuildEpoch) { + if(data->getMeterTimestamp() > FirmwareVersion::BuildEpoch) { now = data->getMeterTimestamp(); if(debugger->isActive(RemoteDebug::DEBUG)) { debugger->printf_P(PSTR("(AmsDataStorage) Using meter timestamp, which is: %lu\n"), (int32_t) now); } - } else if(data->getPackageTimestamp() > BUILD_EPOCH) { + } else if(data->getPackageTimestamp() > FirmwareVersion::BuildEpoch) { now = data->getPackageTimestamp(); if(debugger->isActive(RemoteDebug::DEBUG)) { debugger->printf_P(PSTR("(AmsDataStorage) Using package timestamp, which is: %lu\n"), (int32_t) now); } } } - if(now < BUILD_EPOCH) { + if(now < FirmwareVersion::BuildEpoch) { if(debugger->isActive(RemoteDebug::VERBOSE)) { debugger->printf_P(PSTR("(AmsDataStorage) Invalid time: %lu\n"), (int32_t) now); } @@ -551,7 +551,7 @@ bool AmsDataStorage::isHappy() { bool AmsDataStorage::isDayHappy() { time_t now = time(nullptr); - if(now < BUILD_EPOCH) return false; + if(now < FirmwareVersion::BuildEpoch) return false; tmElements_t tm, last; if(now < day.lastMeterReadTime) { @@ -579,7 +579,7 @@ bool AmsDataStorage::isMonthHappy() { } time_t now = time(nullptr); - if(now < BUILD_EPOCH) return false; + if(now < FirmwareVersion::BuildEpoch) return false; tmElements_t tm, last; if(now < month.lastMeterReadTime) { diff --git a/lib/EnergyAccounting/src/EnergyAccounting.cpp b/lib/EnergyAccounting/src/EnergyAccounting.cpp index 3088bc97..1e40a5a3 100644 --- a/lib/EnergyAccounting/src/EnergyAccounting.cpp +++ b/lib/EnergyAccounting/src/EnergyAccounting.cpp @@ -1,7 +1,7 @@ #include "EnergyAccounting.h" #include "LittleFS.h" #include "AmsStorage.h" -#include "version.h" +#include "FirmwareVersion.h" EnergyAccounting::EnergyAccounting(RemoteDebug* debugger) { data.version = 1; @@ -33,7 +33,7 @@ bool EnergyAccounting::isInitialized() { bool EnergyAccounting::update(AmsData* amsData) { if(config == NULL) return false; time_t now = time(nullptr); - if(now < BUILD_EPOCH) return false; + if(now < FirmwareVersion::BuildEpoch) return false; if(tz == NULL) { if(debugger->isActive(RemoteDebug::VERBOSE)) debugger->printf_P(PSTR("(EnergyAccounting) Timezone is missing\n")); return false; @@ -188,7 +188,7 @@ float EnergyAccounting::getUseThisHour() { float EnergyAccounting::getUseToday() { float ret = 0.0; time_t now = time(nullptr); - if(now < BUILD_EPOCH) return 0.0; + if(now < FirmwareVersion::BuildEpoch) return 0.0; if(tz == NULL) return 0.0; tmElements_t utc, local; breakTime(tz->toLocal(now), local); @@ -201,7 +201,7 @@ float EnergyAccounting::getUseToday() { float EnergyAccounting::getUseThisMonth() { time_t now = time(nullptr); - if(now < BUILD_EPOCH) return 0.0; + if(now < FirmwareVersion::BuildEpoch) return 0.0; float ret = 0; for(uint8_t i = 0; i < currentDay; i++) { ret += ds->getDayImport(i) / 1000.0; @@ -216,7 +216,7 @@ float EnergyAccounting::getProducedThisHour() { float EnergyAccounting::getProducedToday() { float ret = 0.0; time_t now = time(nullptr); - if(now < BUILD_EPOCH) return 0.0; + if(now < FirmwareVersion::BuildEpoch) return 0.0; tmElements_t utc, local; breakTime(tz->toLocal(now), local); for(uint8_t i = 0; i < currentHour; i++) { @@ -228,7 +228,7 @@ float EnergyAccounting::getProducedToday() { float EnergyAccounting::getProducedThisMonth() { time_t now = time(nullptr); - if(now < BUILD_EPOCH) return 0.0; + if(now < FirmwareVersion::BuildEpoch) return 0.0; float ret = 0; for(uint8_t i = 0; i < currentDay; i++) { ret += ds->getDayExport(i) / 1000.0; diff --git a/lib/EntsoePriceApi/src/EntsoeApi.cpp b/lib/EntsoePriceApi/src/EntsoeApi.cpp index 5c48a12c..1610207c 100644 --- a/lib/EntsoePriceApi/src/EntsoeApi.cpp +++ b/lib/EntsoePriceApi/src/EntsoeApi.cpp @@ -3,7 +3,7 @@ #include "Uptime.h" #include "TimeLib.h" #include "DnbCurrParser.h" -#include "version.h" +#include "FirmwareVersion.h" #include "GcmParser.h" @@ -37,7 +37,7 @@ void EntsoeApi::setup(EntsoeConfig& config) { http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS); http.setReuse(false); http.setTimeout(60000); - http.setUserAgent("ams2mqtt/" + String(VERSION)); + http.setUserAgent("ams2mqtt/" + String(FirmwareVersion::VersionString)); http.useHTTP10(true); #if defined(AMS2MQTT_PRICE_KEY) @@ -135,7 +135,7 @@ bool EntsoeApi::loop() { if(now < 10000) return false; // Grace period time_t t = time(nullptr); - if(t < BUILD_EPOCH) return false; + if(t < FirmwareVersion::BuildEpoch) return false; #ifndef AMS2MQTT_PRICE_KEY if(strlen(getToken()) == 0) { diff --git a/lib/FirmwareVersion/include/FirmwareVersion.h b/lib/FirmwareVersion/include/FirmwareVersion.h new file mode 100644 index 00000000..291e2668 --- /dev/null +++ b/lib/FirmwareVersion/include/FirmwareVersion.h @@ -0,0 +1,12 @@ +#ifndef _FIRMWARE_VERSION_h +#define _FIRMWARE_VERSION_h + + +class FirmwareVersion { +public: + static long BuildEpoch; + static const char* VersionString; +}; + +#endif + diff --git a/lib/FirmwareVersion/src/FirmwareVersion.cpp b/lib/FirmwareVersion/src/FirmwareVersion.cpp new file mode 100644 index 00000000..b8386871 --- /dev/null +++ b/lib/FirmwareVersion/src/FirmwareVersion.cpp @@ -0,0 +1,5 @@ +#include "FirmwareVersion.h" +#include "generated_version.h" + +long FirmwareVersion::BuildEpoch = BUILD_EPOCH; +const char* FirmwareVersion::VersionString = VERSION_STRING; diff --git a/lib/HomeAssistantMqttHandler/src/HomeAssistantMqttHandler.cpp b/lib/HomeAssistantMqttHandler/src/HomeAssistantMqttHandler.cpp index 70fab5ed..edb443fb 100644 --- a/lib/HomeAssistantMqttHandler/src/HomeAssistantMqttHandler.cpp +++ b/lib/HomeAssistantMqttHandler/src/HomeAssistantMqttHandler.cpp @@ -1,7 +1,7 @@ #include "HomeAssistantMqttHandler.h" #include "hexutils.h" #include "Uptime.h" -#include "version.h" +#include "FirmwareVersion.h" #include "json/ha1_json.h" #include "json/ha2_json.h" #include "json/ha3_json.h" @@ -329,7 +329,7 @@ bool HomeAssistantMqttHandler::publishSystem(HwTools* hw, EntsoeApi* eapi, Energ hw->getVcc(), hw->getWifiRssi(), hw->getTemperature(), - VERSION + FirmwareVersion::VersionString ); bool ret = mqtt->publish(topic + "/state", json); loop(); @@ -353,7 +353,7 @@ void HomeAssistantMqttHandler::publishSensor(const HomeAssistantSensor& sensor) deviceUid.c_str(), deviceName.c_str(), deviceModel.c_str(), - VERSION, + FirmwareVersion::VersionString, manufacturer.c_str(), deviceUrl.c_str(), strlen_P(sensor.devcl) > 0 ? ",\"dev_cla\":\"" : "", diff --git a/lib/JsonMqttHandler/src/JsonMqttHandler.cpp b/lib/JsonMqttHandler/src/JsonMqttHandler.cpp index 01313683..3bb6bdf6 100644 --- a/lib/JsonMqttHandler/src/JsonMqttHandler.cpp +++ b/lib/JsonMqttHandler/src/JsonMqttHandler.cpp @@ -1,5 +1,5 @@ #include "JsonMqttHandler.h" -#include "version.h" +#include "FirmwareVersion.h" #include "hexutils.h" #include "Uptime.h" #include "json/json1_json.h" @@ -341,7 +341,7 @@ bool JsonMqttHandler::publishSystem(HwTools* hw, EntsoeApi* eapi, EnergyAccounti hw->getVcc(), hw->getWifiRssi(), hw->getTemperature(), - VERSION + FirmwareVersion::VersionString ); bool ret = mqtt->publish(topic, json); loop(); diff --git a/lib/SvelteUi/src/AmsWebServer.cpp b/lib/SvelteUi/src/AmsWebServer.cpp index d5ea909d..bdb8c799 100644 --- a/lib/SvelteUi/src/AmsWebServer.cpp +++ b/lib/SvelteUi/src/AmsWebServer.cpp @@ -1,5 +1,6 @@ #include "AmsWebServer.h" #include "AmsWebHeaders.h" +#include "FirmwareVersion.h" #include "base64.h" #include "hexutils.h" @@ -31,8 +32,6 @@ #include "html/conf_ui_json.h" #include "html/firmware_html.h" -#include "version.h" - #if defined(ESP32) #include #include @@ -64,9 +63,9 @@ void AmsWebServer::setup(AmsConfiguration* config, GpioConfig* gpioConfig, Meter this->ea = ea; server.on(F("/"), HTTP_GET, std::bind(&AmsWebServer::indexHtml, this)); - snprintf_P(buf, 32, PSTR("/index-%s.js"), VERSION); + snprintf_P(buf, 32, PSTR("/index-%s.js"), FirmwareVersion::VersionString); server.on(buf, HTTP_GET, std::bind(&AmsWebServer::indexJs, this)); - snprintf_P(buf, 32, PSTR("/index-%s.css"), VERSION); + snprintf_P(buf, 32, PSTR("/index-%s.css"), FirmwareVersion::VersionString); server.on(buf, HTTP_GET, std::bind(&AmsWebServer::indexCss, this)); server.on(F("/configuration"), HTTP_GET, std::bind(&AmsWebServer::indexHtml, this)); @@ -263,7 +262,7 @@ void AmsWebServer::sysinfoJson() { meterId.replace(F("\\"), F("\\\\")); int size = snprintf_P(buf, BufferSize, SYSINFO_JSON, - VERSION, + FirmwareVersion::VersionString, #if defined(CONFIG_IDF_TARGET_ESP32S2) "esp32s2", #elif defined(CONFIG_IDF_TARGET_ESP32C3) @@ -824,7 +823,7 @@ void AmsWebServer::configurationJson() { server.setContentLength(CONTENT_LENGTH_UNKNOWN); server.send_P(200, MIME_JSON, PSTR("{\"version\":\"")); - server.sendContent_P(VERSION); + server.sendContent_P(FirmwareVersion::VersionString); server.sendContent_P(PSTR("\",")); snprintf_P(buf, BufferSize, CONF_GENERAL_JSON, ntpConfig.timezone, @@ -1536,7 +1535,7 @@ void AmsWebServer::upgrade() { } void AmsWebServer::upgradeFromUrl(String url, String nextVersion) { - config->setUpgradeInformation(0xFF, 0xFF, VERSION, nextVersion.c_str()); + config->setUpgradeInformation(0xFF, 0xFF, FirmwareVersion::VersionString, nextVersion.c_str()); WiFiClient client; #if defined(ESP8266) @@ -1555,10 +1554,10 @@ void AmsWebServer::upgradeFromUrl(String url, String nextVersion) { #if defined(ESP8266) ESP8266HTTPUpdate httpUpdate = ESP8266HTTPUpdate(60000); - String currentVersion = VERSION; + String currentVersion = FirmwareVersion::VersionString; #elif defined(ESP32) HTTPUpdate httpUpdate = HTTPUpdate(60000); - String currentVersion = String(VERSION) + "-" + chipType; + String currentVersion = String(FirmwareVersion::VersionString) + "-" + chipType; #endif httpUpdate.rebootOnUpdate(false); @@ -1566,7 +1565,7 @@ void AmsWebServer::upgradeFromUrl(String url, String nextVersion) { HTTPUpdateResult ret = httpUpdate.update(client, url, currentVersion); int lastError = httpUpdate.getLastError(); - config->setUpgradeInformation(ret, ret == HTTP_UPDATE_OK ? 0 : lastError, VERSION, nextVersion.c_str()); + config->setUpgradeInformation(ret, ret == HTTP_UPDATE_OK ? 0 : lastError, FirmwareVersion::VersionString, nextVersion.c_str()); switch(ret) { case HTTP_UPDATE_FAILED: debugger->printf_P(PSTR("Update failed\n")); @@ -1604,7 +1603,7 @@ void AmsWebServer::firmwarePost() { if(rebootForUpgrade) { server.send(200); } else { - config->setUpgradeInformation(0xFF, 0xFF, VERSION, ""); + config->setUpgradeInformation(0xFF, 0xFF, FirmwareVersion::VersionString, ""); if(server.hasArg(F("url"))) { String url = server.arg(F("url")); if(!url.isEmpty() && (url.startsWith(F("http://")) || url.startsWith(F("https://")))) { @@ -1891,7 +1890,7 @@ void AmsWebServer::configFileDownload() { server.setContentLength(CONTENT_LENGTH_UNKNOWN); server.send_P(200, MIME_PLAIN, PSTR("amsconfig\n")); - server.sendContent(buf, snprintf_P(buf, BufferSize, PSTR("version %s\n"), VERSION)); + server.sendContent(buf, snprintf_P(buf, BufferSize, PSTR("version %s\n"), FirmwareVersion::VersionString)); server.sendContent(buf, snprintf_P(buf, BufferSize, PSTR("boardType %d\n"), sys.boardType)); if(includeWifi) { diff --git a/platformio.ini b/platformio.ini index 93a0ee75..3f17ae5f 100755 --- a/platformio.ini +++ b/platformio.ini @@ -2,7 +2,7 @@ extra_configs = platformio-user.ini [common] -lib_deps = EEPROM, LittleFS, DNSServer, https://github.com/256dpi/arduino-mqtt.git, OneWireNg@0.10.0, DallasTemperature@3.9.1, EspSoftwareSerial@6.14.1, https://github.com/gskjold/RemoteDebug.git, Time@1.6.1, Timezone@1.2.4, AmsConfiguration, AmsData, AmsDataStorage, HwTools, Uptime, AmsDecoder, EntsoePriceApi, EnergyAccounting, RawMqttHandler, JsonMqttHandler, DomoticzMqttHandler, HomeAssistantMqttHandler, SvelteUi +lib_deps = EEPROM, LittleFS, DNSServer, https://github.com/256dpi/arduino-mqtt.git, OneWireNg@0.10.0, DallasTemperature@3.9.1, EspSoftwareSerial@6.14.1, https://github.com/gskjold/RemoteDebug.git, Time@1.6.1, Timezone@1.2.4, FirmwareVersion, AmsConfiguration, AmsData, AmsDataStorage, HwTools, Uptime, AmsDecoder, EntsoePriceApi, EnergyAccounting, RawMqttHandler, JsonMqttHandler, DomoticzMqttHandler, HomeAssistantMqttHandler, SvelteUi lib_ignore = OneWire extra_scripts = pre:scripts/addversion.py diff --git a/scripts/addversion.py b/scripts/addversion.py index 5fc40508..2b535aa4 100644 --- a/scripts/addversion.py +++ b/scripts/addversion.py @@ -2,7 +2,7 @@ import os import subprocess from time import time -FILENAME_VERSION_H = 'lib/AmsConfiguration/include/version.h' +FILENAME_VERSION_H = 'lib/FirmwareVersion/src/generated_version.h' version = os.environ.get('GITHUB_TAG') if version == None: try: @@ -15,9 +15,7 @@ if version == None: version = "SNAPSHOT" hf = """ -#ifndef VERSION - #define VERSION "{}" -#endif +#define VERSION_STRING "{}" #define BUILD_EPOCH {} """.format(version, round(time())) with open(FILENAME_VERSION_H, 'w+') as f: diff --git a/src/AmsToMqttBridge.ino b/src/AmsToMqttBridge.ino index 1f352e93..a97328d7 100644 --- a/src/AmsToMqttBridge.ino +++ b/src/AmsToMqttBridge.ino @@ -36,8 +36,7 @@ ADC_MODE(ADC_VCC); #include #endif -#include "version.h" - +#include "FirmwareVersion.h" #include "AmsToMqttBridge.h" #include "AmsStorage.h" #include "AmsDataStorage.h" @@ -309,7 +308,7 @@ void setup() { } flashed = Update.end(true); } - config.setUpgradeInformation(flashed ? 2 : 0, 0xFF, VERSION, ""); + config.setUpgradeInformation(flashed ? 2 : 0, 0xFF, FirmwareVersion::VersionString, ""); firmwareFile.close(); } else { debugW_P(PSTR("AP button pressed, skipping firmware update and deleting firmware file.")); @@ -1126,15 +1125,15 @@ void handleDataSuccess(AmsData* data) { } time_t now = time(nullptr); - if(now < BUILD_EPOCH && data->getListType() >= 3) { - if(data->getMeterTimestamp() > BUILD_EPOCH) { + if(now < FirmwareVersion::BuildEpoch && data->getListType() >= 3) { + if(data->getMeterTimestamp() > FirmwareVersion::BuildEpoch) { debugI_P(PSTR("Using timestamp from meter")); now = data->getMeterTimestamp(); - } else if(data->getPackageTimestamp() > BUILD_EPOCH) { + } else if(data->getPackageTimestamp() > FirmwareVersion::BuildEpoch) { debugI_P(PSTR("Using timestamp from meter (DLMS)")); now = data->getPackageTimestamp(); } - if(now > BUILD_EPOCH) { + if(now > FirmwareVersion::BuildEpoch) { timeval tv { now, 0}; settimeofday(&tv, nullptr); } @@ -1143,7 +1142,7 @@ void handleDataSuccess(AmsData* data) { meterState.apply(*data); bool saveData = false; - if(!ds.isHappy() && now > BUILD_EPOCH) { + if(!ds.isHappy() && now > FirmwareVersion::BuildEpoch) { debugD_P(PSTR("Its time to update data storage")); tmElements_t tm; breakTime(now, tm); @@ -1619,7 +1618,7 @@ void MQTT_connect() { time_t epoch = time(nullptr); if(mqttConfig.ssl) { - if(epoch < BUILD_EPOCH) { + if(epoch < FirmwareVersion::BuildEpoch) { debugI_P(PSTR("NTP not ready for MQTT SSL")); return; } diff --git a/src/version.h b/src/version.h deleted file mode 100644 index 3f8382a8..00000000 --- a/src/version.h +++ /dev/null @@ -1,5 +0,0 @@ - -#ifndef VERSION - #define VERSION "538de5e" -#endif -#define BUILD_EPOCH 1668532199 From a23abf626bc4d9a1806e0610f0fbad120b125ca0 Mon Sep 17 00:00:00 2001 From: david-beinder Date: Fri, 28 Apr 2023 23:57:28 +0200 Subject: [PATCH 2/3] Convert Arduino sketch to C++ --- ...msToMqttBridge.ino => AmsToMqttBridge.cpp} | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) rename src/{AmsToMqttBridge.ino => AmsToMqttBridge.cpp} (98%) diff --git a/src/AmsToMqttBridge.ino b/src/AmsToMqttBridge.cpp similarity index 98% rename from src/AmsToMqttBridge.ino rename to src/AmsToMqttBridge.cpp index a97328d7..f5b15c45 100644 --- a/src/AmsToMqttBridge.ino +++ b/src/AmsToMqttBridge.cpp @@ -23,6 +23,8 @@ * to Norwegian meters, but may also support data from electricity providers in other countries. */ +#include + #if defined(ESP8266) ADC_MODE(ADC_VCC); #endif @@ -132,6 +134,29 @@ LLCParser *llcParser = NULL; DLMSParser *dlmsParser = NULL; DSMRParser *dsmrParser = NULL; + +void configFileParse(); +void swapWifiMode(); +void WiFi_connect(); +void WiFi_post_connect(); +void MQTT_connect(); +void handleNtpChange(); +void handleDataSuccess(AmsData* data); +void handleTemperature(unsigned long now); +void handleSystem(unsigned long now); +void handleAutodetect(unsigned long now); +void handleButton(unsigned long now); +void handlePriceApi(unsigned long now); +void handleEnergyAccountingChanged(); +bool readHanPort(); +void setupHanPort(GpioConfig& gpioConfig, uint32_t baud, uint8_t parityOrdinal, bool invert); +void rxerr(int err); +int16_t unwrapData(uint8_t *buf, DataParserContext &context); +void errorBlink(); +void printHanReadError(int pos); +void debugPrint(byte *buffer, int start, int length); + + void setup() { Serial.begin(115200); From a6ae86abb89fee663d58f18582b5d3fedf2d90d6 Mon Sep 17 00:00:00 2001 From: david-beinder Date: Sat, 29 Apr 2023 00:01:20 +0200 Subject: [PATCH 3/3] Remove redundant 'typedef' 'typedef' is not needed in C++ and generates a warning --- lib/HomeAssistantMqttHandler/include/HomeAssistantStatic.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/HomeAssistantMqttHandler/include/HomeAssistantStatic.h b/lib/HomeAssistantMqttHandler/include/HomeAssistantStatic.h index 45b679f0..8fceefad 100644 --- a/lib/HomeAssistantMqttHandler/include/HomeAssistantStatic.h +++ b/lib/HomeAssistantMqttHandler/include/HomeAssistantStatic.h @@ -3,7 +3,7 @@ #include "Arduino.h" -typedef struct HomeAssistantSensor { +struct HomeAssistantSensor { const char* name; const char* topic; const char* path;