From c794f0d0db185a16db840b65edfac75cc5eef028 Mon Sep 17 00:00:00 2001 From: Dawid Chyrzynski Date: Thu, 3 Dec 2020 17:01:21 +0100 Subject: [PATCH] store HATriggers serialization string in PROGMEM --- src/HAMqtt.cpp | 8 ++++++++ src/HAMqtt.h | 1 + src/device-types/HATriggers.cpp | 35 ++++++++++++++++----------------- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/HAMqtt.cpp b/src/HAMqtt.cpp index 99354f2..30e213d 100644 --- a/src/HAMqtt.cpp +++ b/src/HAMqtt.cpp @@ -147,6 +147,14 @@ bool HAMqtt::writePayload(const char* data, uint16_t length) return (_mqtt->write(data, length) > 0); } +bool HAMqtt::writePayload_P(const char* src) +{ + char data[strlen_P(src) + 1]; + strcpy_P(data, src); + + return _mqtt->write(data, strlen(data)); +} + bool HAMqtt::endPublish() { return _mqtt->endPublish(); diff --git a/src/HAMqtt.h b/src/HAMqtt.h index 8eb2bb3..0a3d437 100644 --- a/src/HAMqtt.h +++ b/src/HAMqtt.h @@ -92,6 +92,7 @@ public: bool beginPublish(const char* topic, uint16_t payloadLength, bool retained = false); bool writePayload(const char* data, uint16_t length); + bool writePayload_P(const char* src); bool endPublish(); private: diff --git a/src/device-types/HATriggers.cpp b/src/device-types/HATriggers.cpp index 07bdde5..09a1148 100644 --- a/src/device-types/HATriggers.cpp +++ b/src/device-types/HATriggers.cpp @@ -130,10 +130,12 @@ bool HATriggers::writeSerializedTrigger( const char* serializedDevice ) const { + static const char QuotationSign[] PROGMEM = {"\""}; + // automation type { - static const char Data[] = "{\"atype\":\"trigger\""; - mqtt()->writePayload(Data, strlen(Data)); + static const char Data[] PROGMEM = {"{\"atype\":\"trigger\""}; + mqtt()->writePayload_P(Data); } // topic @@ -152,45 +154,42 @@ bool HATriggers::writeSerializedTrigger( EventTopic ); - static const char DataBefore[] = ",\"t\":\""; - static const char DataAfter[] = "\""; + static const char DataBefore[] PROGMEM = {",\"t\":\""}; - mqtt()->writePayload(DataBefore, strlen(DataBefore)); + mqtt()->writePayload_P(DataBefore); mqtt()->writePayload(eventTopic, strlen(eventTopic)); - mqtt()->writePayload(DataAfter, strlen(DataAfter)); + mqtt()->writePayload_P(QuotationSign); } // type { - static const char DataBefore[] = ",\"type\":\""; - static const char DataAfter[] = "\""; + static const char DataBefore[] PROGMEM = {",\"type\":\""}; - mqtt()->writePayload(DataBefore, strlen(DataBefore)); + mqtt()->writePayload_P(DataBefore); mqtt()->writePayload(trigger->type, strlen(trigger->type)); - mqtt()->writePayload(DataAfter, strlen(DataAfter)); + mqtt()->writePayload_P(QuotationSign); } // subtype { - static const char DataBefore[] = ",\"stype\":\""; - static const char DataAfter[] = "\""; + static const char DataBefore[] PROGMEM = {",\"stype\":\""}; - mqtt()->writePayload(DataBefore, strlen(DataBefore)); + mqtt()->writePayload_P(DataBefore); mqtt()->writePayload(trigger->subtype, strlen(trigger->subtype)); - mqtt()->writePayload(DataAfter, strlen(DataAfter)); + mqtt()->writePayload_P(QuotationSign); } // device if (serializedDevice != nullptr) { - static const char Data[] = ",\"dev\":"; + static const char Data[] PROGMEM = {",\"dev\":"}; - mqtt()->writePayload(Data, strlen(Data)); + mqtt()->writePayload_P(Data); mqtt()->writePayload(serializedDevice, strlen(serializedDevice)); } { - static const char Data[] = "}"; - mqtt()->writePayload(Data, strlen(Data)); + static const char Data[] PROGMEM = {"}"}; + mqtt()->writePayload_P(Data); } return true;