store HATriggers serialization string in PROGMEM

This commit is contained in:
Dawid Chyrzynski
2020-12-03 17:01:21 +01:00
parent 4328aca396
commit c794f0d0db
3 changed files with 26 additions and 18 deletions
+8
View File
@@ -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();
+1
View File
@@ -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:
+17 -18
View File
@@ -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;