HASS Auto Discovery: Publish numbers to set limit
This commit is contained in:
parent
96170c08b8
commit
6403521e31
@ -61,6 +61,7 @@ public:
|
||||
private:
|
||||
void publishField(std::shared_ptr<InverterAbstract> inv, uint8_t channel, byteAssign_fieldDeviceClass_t fieldType, bool clear = false);
|
||||
void publishInverterButton(std::shared_ptr<InverterAbstract> inv, const char* caption, const char* icon, const char* category, const char* deviceClass, const char* subTopic, const char* payload);
|
||||
void publishInverterNumber(std::shared_ptr<InverterAbstract> inv, const char* caption, const char* icon, const char* category, const char* commandTopic, const char* stateTopic, const char* unitOfMeasure, int16_t min = 1, int16_t max = 100);
|
||||
void createDeviceInfo(JsonObject& object, std::shared_ptr<InverterAbstract> inv);
|
||||
|
||||
bool _wasConnected = false;
|
||||
|
||||
@ -55,6 +55,12 @@ void MqttHassPublishingClass::publishConfig()
|
||||
publishInverterButton(inv, "Turn Inverter On", "mdi:power-plug", "config", "", "cmd/power", "1");
|
||||
publishInverterButton(inv, "Restart Inverter", "", "config", "restart", "cmd/restart", "1");
|
||||
|
||||
publishInverterNumber(inv, "Limit NonPersistent Relative", "mdi:speedometer", "config", "cmd/limit_nonpersistent_relative", "status/limit_relative", "%");
|
||||
publishInverterNumber(inv, "Limit Persistent Relative", "mdi:speedometer", "config", "cmd/limit_persistent_relative", "status/limit_relative", "%");
|
||||
|
||||
publishInverterNumber(inv, "Limit NonPersistent Absolute", "mdi:speedometer", "config", "cmd/limit_nonpersistent_absolute", "status/limit_absolute", "W", 10, 1500);
|
||||
publishInverterNumber(inv, "Limit Persistent Absolute", "mdi:speedometer", "config", "cmd/limit_persistent_absolute", "status/limit_absolute", "W", 10, 1500);
|
||||
|
||||
// Loop all channels
|
||||
for (uint8_t c = 0; c <= inv->Statistics()->getChannelCount(); c++) {
|
||||
for (uint8_t f = 0; f < DEVICE_CLS_ASSIGN_LIST_LEN; f++) {
|
||||
@ -151,10 +157,10 @@ void MqttHassPublishingClass::publishInverterButton(std::shared_ptr<InverterAbst
|
||||
DynamicJsonDocument root(1024);
|
||||
root[F("name")] = caption;
|
||||
root[F("uniq_id")] = String(serial) + "_" + buttonId;
|
||||
if(strcmp(icon, "")) {
|
||||
if (strcmp(icon, "")) {
|
||||
root[F("ic")] = icon;
|
||||
}
|
||||
if(strcmp(deviceClass, "")) {
|
||||
if (strcmp(deviceClass, "")) {
|
||||
root[F("dev_cla")] = deviceClass;
|
||||
}
|
||||
root[F("ent_cat")] = category;
|
||||
@ -169,6 +175,48 @@ void MqttHassPublishingClass::publishInverterButton(std::shared_ptr<InverterAbst
|
||||
MqttSettings.publishHass(configTopic, buffer);
|
||||
}
|
||||
|
||||
void MqttHassPublishingClass::publishInverterNumber(
|
||||
std::shared_ptr<InverterAbstract> inv, const char* caption, const char* icon, const char* category,
|
||||
const char* commandTopic, const char* stateTopic, const char* unitOfMeasure,
|
||||
int16_t min, int16_t max)
|
||||
{
|
||||
char serial[sizeof(uint64_t) * 8 + 1];
|
||||
snprintf(serial, sizeof(serial), "%0x%08x",
|
||||
((uint32_t)((inv->serial() >> 32) & 0xFFFFFFFF)),
|
||||
((uint32_t)(inv->serial() & 0xFFFFFFFF)));
|
||||
|
||||
String buttonId = caption;
|
||||
buttonId.replace(" ", "_");
|
||||
buttonId.toLowerCase();
|
||||
|
||||
String configTopic = "number/dtu_" + String(serial)
|
||||
+ "/" + buttonId
|
||||
+ "/config";
|
||||
|
||||
String cmdTopic = MqttSettings.getPrefix() + String(serial) + "/" + commandTopic;
|
||||
String statTopic = MqttSettings.getPrefix() + String(serial) + "/" + stateTopic;
|
||||
|
||||
DynamicJsonDocument root(1024);
|
||||
root[F("name")] = caption;
|
||||
root[F("uniq_id")] = String(serial) + "_" + buttonId;
|
||||
if (strcmp(icon, "")) {
|
||||
root[F("ic")] = icon;
|
||||
}
|
||||
root[F("ent_cat")] = category;
|
||||
root[F("cmd_t")] = cmdTopic;
|
||||
root[F("stat_t")] = statTopic;
|
||||
root[F("unit_of_meas")] = unitOfMeasure;
|
||||
root[F("min")] = min;
|
||||
root[F("max")] = max;
|
||||
|
||||
JsonObject deviceObj = root.createNestedObject("dev");
|
||||
createDeviceInfo(deviceObj, inv);
|
||||
|
||||
char buffer[512];
|
||||
serializeJson(root, buffer);
|
||||
MqttSettings.publishHass(configTopic, buffer);
|
||||
}
|
||||
|
||||
void MqttHassPublishingClass::createDeviceInfo(JsonObject& object, std::shared_ptr<InverterAbstract> inv)
|
||||
{
|
||||
char serial[sizeof(uint64_t) * 8 + 1];
|
||||
|
||||
Loading…
Reference in New Issue
Block a user