Optimization HomeAssistantHelper

This commit is contained in:
Yurii
2023-11-06 18:38:57 +03:00
parent 8e2a70ec04
commit 7db49350a2
5 changed files with 1274 additions and 1736 deletions

View File

@@ -0,0 +1,73 @@
#pragma once
#include <Arduino.h>
class HomeAssistantHelper {
public:
HomeAssistantHelper(PubSubClient& client) :
client(&client)
{
}
void setPrefix(String value) {
_prefix = value;
}
void setDeviceVersion(String value) {
_deviceVersion = value;
}
void setDeviceManufacturer(String value) {
_deviceManufacturer = value;
}
void setDeviceModel(String value) {
_deviceModel = value;
}
void setDeviceName(String value) {
_deviceName = value;
}
void setDeviceConfigUrl(String value) {
_deviceConfigUrl = value;
}
bool publish(const char* topic, JsonDocument& doc) {
doc[FPSTR(HA_DEVICE)][FPSTR(HA_IDENTIFIERS)][0] = _prefix;
doc[FPSTR(HA_DEVICE)][FPSTR(HA_SW_VERSION)] = _deviceVersion;
doc[FPSTR(HA_DEVICE)][FPSTR(HA_MANUFACTURER)] = _deviceManufacturer;
doc[FPSTR(HA_DEVICE)][FPSTR(HA_MODEL)] = _deviceModel;
doc[FPSTR(HA_DEVICE)][FPSTR(HA_NAME)] = _deviceName;
if (_deviceConfigUrl) {
doc[FPSTR(HA_DEVICE)][FPSTR(HA_CONF_URL)] = _deviceConfigUrl;
}
client->beginPublish(topic, measureJson(doc), true);
serializeJson(doc, *client);
return client->endPublish();
}
bool publish(const char* topic) {
return client->publish(topic, NULL, true);
}
String getTopic(const char* category, const char* name, const char* nameSeparator = "/") {
String topic = "homeassistant/";
topic.concat(category);
topic.concat("/");
topic.concat(_prefix);
topic.concat(nameSeparator);
topic.concat(name);
topic.concat("/config");
return topic;
}
protected:
PubSubClient* client;
String _prefix = "";
String _deviceVersion = "1.0";
String _deviceManufacturer = "Community";
String _deviceModel = "";
String _deviceName = "";
String _deviceConfigUrl = "";
};

View File

@@ -0,0 +1,37 @@
#pragma once
#ifndef PROGMEM
#define PROGMEM
#endif
const char HA_DEVICE[] PROGMEM = "device";
const char HA_IDENTIFIERS[] PROGMEM = "identifiers";
const char HA_SW_VERSION[] PROGMEM = "sw_version";
const char HA_MANUFACTURER[] PROGMEM = "manufacturer";
const char HA_MODEL[] PROGMEM = "model";
const char HA_NAME[] PROGMEM = "name";
const char HA_CONF_URL[] PROGMEM = "configuration_url";
const char HA_COMMAND_TOPIC[] PROGMEM = "command_topic";
const char HA_COMMAND_TEMPLATE[] PROGMEM = "command_template";
const char HA_ENABLED_BY_DEFAULT[] PROGMEM = "enabled_by_default";
const char HA_UNIQUE_ID[] PROGMEM = "unique_id";
const char HA_OBJECT_ID[] PROGMEM = "object_id";
const char HA_ENTITY_CATEGORY[] PROGMEM = "entity_category";
const char HA_STATE_TOPIC[] PROGMEM = "state_topic";
const char HA_VALUE_TEMPLATE[] PROGMEM = "value_template";
const char HA_OPTIONS[] PROGMEM = "options";
const char HA_AVAILABILITY[] PROGMEM = "availability";
const char HA_AVAILABILITY_MODE[] PROGMEM = "availability_mode";
const char HA_TOPIC[] PROGMEM = "topic";
const char HA_DEVICE_CLASS[] PROGMEM = "device_class";
const char HA_UNIT_OF_MEASUREMENT[] PROGMEM = "unit_of_measurement";
const char HA_ICON[] PROGMEM = "icon";
const char HA_MIN[] PROGMEM = "min";
const char HA_MAX[] PROGMEM = "max";
const char HA_STEP[] PROGMEM = "step";
const char HA_MODE[] PROGMEM = "mode";
const char HA_STATE_ON[] PROGMEM = "state_on";
const char HA_STATE_OFF[] PROGMEM = "state_off";
const char HA_PAYLOAD_ON[] PROGMEM = "payload_on";
const char HA_PAYLOAD_OFF[] PROGMEM = "payload_off";
const char HA_STATE_CLASS[] PROGMEM = "state_class";
const char HA_EXPIRE_AFTER[] PROGMEM = "expire_after";