mirror of
https://github.com/UtilitechAS/amsreader-firmware.git
synced 2026-01-24 11:31:46 +00:00
Some changes after testing new HA features
This commit is contained in:
parent
c456e3fdf1
commit
ea43b2b632
@ -10,7 +10,6 @@ public:
|
||||
HomeAssistantMqttHandler(MQTTClient* mqtt, char* buf, const char* clientId, const char* topic, uint8_t boardType, HomeAssistantConfig config, HwTools* hw) : AmsMqttHandler(mqtt, buf) {
|
||||
this->clientId = clientId;
|
||||
this->topic = String(topic);
|
||||
this->config = config;
|
||||
this->hw = hw;
|
||||
l1Init = l2Init = l2eInit = l3Init = l3eInit = l4Init = l4eInit = rtInit = rteInit = pInit = sInit = false;
|
||||
|
||||
@ -20,7 +19,7 @@ public:
|
||||
snprintf_P(buf, 128, PSTR("[%s] "), config.discoveryNameTag);
|
||||
sensorNamePrefix = String(buf);
|
||||
} else {
|
||||
deviceName = "AMS reader";
|
||||
deviceName = F("AMS reader");
|
||||
sensorNamePrefix = "";
|
||||
}
|
||||
deviceModel = boardTypeToString(boardType);
|
||||
@ -50,7 +49,7 @@ public:
|
||||
snprintf_P(buf, 128, PSTR("%s/sensor/"), config.discoveryPrefix);
|
||||
discoveryTopic = String(buf);
|
||||
} else {
|
||||
discoveryTopic = "homeassistant/sensor/";
|
||||
discoveryTopic = F("homeassistant/sensor/");
|
||||
}
|
||||
};
|
||||
bool publish(AmsData* data, AmsData* previousState, EnergyAccounting* ea, EntsoeApi* eapi);
|
||||
@ -74,7 +73,6 @@ public:
|
||||
void publishSystemSensors();
|
||||
|
||||
private:
|
||||
HomeAssistantConfig config;
|
||||
String deviceName;
|
||||
String deviceModel;
|
||||
String deviceUid;
|
||||
@ -96,70 +94,70 @@ private:
|
||||
switch(b) {
|
||||
case 5:
|
||||
#if defined(ESP8266)
|
||||
return "Pow-K";
|
||||
return F("Pow-K");
|
||||
#elif defined(ESP32)
|
||||
return "Pow-K+";
|
||||
return F("Pow-K+");
|
||||
#endif
|
||||
case 7:
|
||||
#if defined(ESP8266)
|
||||
return "Pow-U";
|
||||
return F("Pow-U");
|
||||
#elif defined(ESP32)
|
||||
return "Pow-U+";
|
||||
return F("Pow-U+");
|
||||
#endif
|
||||
case 6:
|
||||
return "Pow-P1";
|
||||
return F("Pow-P1");
|
||||
case 51:
|
||||
return "S2 mini";
|
||||
return F("S2 mini");
|
||||
case 50:
|
||||
return "ESP32-S2";
|
||||
return F("ESP32-S2");
|
||||
case 201:
|
||||
return "LOLIN D32";
|
||||
return F("LOLIN D32");
|
||||
case 202:
|
||||
return "HUZZAH32";
|
||||
return F("HUZZAH32");
|
||||
case 203:
|
||||
return "DevKitC";
|
||||
return F("DevKitC");
|
||||
case 200:
|
||||
return "ESP32";
|
||||
return F("ESP32");
|
||||
case 2:
|
||||
return "HAN Reader 2.0 by Max Spencer";
|
||||
return F("HAN Reader 2.0 by Max Spencer");
|
||||
case 0:
|
||||
return "Custom hardware by Roar Fredriksen";
|
||||
return F("Custom hardware by Roar Fredriksen");
|
||||
case 1:
|
||||
return "Kamstrup module by Egil Opsahl";
|
||||
return F("Kamstrup module by Egil Opsahl");
|
||||
case 3:
|
||||
return "Pow-K";
|
||||
return F("Pow-K");
|
||||
case 4:
|
||||
return "Pow-U";
|
||||
return F("Pow-U");
|
||||
case 101:
|
||||
return "D1 mini";
|
||||
return F("D1 mini");
|
||||
case 100:
|
||||
return "ESP8266";
|
||||
return F("ESP8266");
|
||||
case 70:
|
||||
return "ESP32-C3";
|
||||
return F("ESP32-C3");
|
||||
case 71:
|
||||
return "ESP32-C3-DevKitM-1";
|
||||
return F("ESP32-C3-DevKitM-1");
|
||||
}
|
||||
#if defined(ESP8266)
|
||||
return "ESP8266";
|
||||
return F("ESP8266");
|
||||
#elif defined(ESP32)
|
||||
return "ESP32";
|
||||
return F("ESP32");
|
||||
#endif
|
||||
};
|
||||
|
||||
String boardManufacturerToString(uint8_t b) {
|
||||
if(b >= 3 && b <= 7)
|
||||
return "amsleser.no";
|
||||
return F("amsleser.no");
|
||||
if(b < 50)
|
||||
return "Custom";
|
||||
return F("Custom");
|
||||
switch(b) {
|
||||
case 51:
|
||||
case 101:
|
||||
case 201:
|
||||
return "Wemos";
|
||||
return F("Wemos");
|
||||
case 202:
|
||||
return "Adafruit";
|
||||
return F("Adafruit");
|
||||
}
|
||||
return "Espressif";
|
||||
return F("Espressif");
|
||||
};
|
||||
};
|
||||
#endif
|
||||
|
||||
@ -11,6 +11,10 @@
|
||||
#include "json/hadiscover_json.h"
|
||||
#include "json/realtime_json.h"
|
||||
|
||||
#if defined(ESP32)
|
||||
#include <esp_task_wdt.h>
|
||||
#endif
|
||||
|
||||
bool HomeAssistantMqttHandler::publish(AmsData* data, AmsData* previousState, EnergyAccounting* ea, EntsoeApi* eapi) {
|
||||
if(topic.isEmpty() || !mqtt->connected())
|
||||
return false;
|
||||
@ -27,6 +31,7 @@ bool HomeAssistantMqttHandler::publish(AmsData* data, AmsData* previousState, En
|
||||
);
|
||||
mqtt->publish(topic + "/energy", json);
|
||||
mqtt->loop();
|
||||
delay(10);
|
||||
}
|
||||
String meterModel = data->getMeterModel();
|
||||
meterModel.replace("\\", "\\\\");
|
||||
@ -126,7 +131,7 @@ bool HomeAssistantMqttHandler::publishTemperatures(AmsConfiguration* config, HwT
|
||||
int size = 32 + (count * 26);
|
||||
|
||||
char buf[size];
|
||||
snprintf(buf, 24, "{\"temperatures\":{");
|
||||
snprintf_P(buf, 24, PSTR("{\"temperatures\":{"));
|
||||
|
||||
for(int i = 0; i < count; i++) {
|
||||
TempSensorData* data = hw->getTempSensorData(i);
|
||||
@ -143,7 +148,7 @@ bool HomeAssistantMqttHandler::publishTemperatures(AmsConfiguration* config, HwT
|
||||
}
|
||||
}
|
||||
char* pos = buf+strlen(buf);
|
||||
snprintf(count == 0 ? pos : pos-1, 8, "}}");
|
||||
snprintf_P(count == 0 ? pos : pos-1, 8, PSTR("}}"));
|
||||
return mqtt->publish(topic + "/temperatures", buf);
|
||||
}
|
||||
|
||||
@ -214,7 +219,7 @@ bool HomeAssistantMqttHandler::publishPrices(EntsoeApi* eapi) {
|
||||
//Serial.printf("1hr: %d %lu\n", min1hrIdx, ts);
|
||||
tmElements_t tm;
|
||||
breakTime(ts, tm);
|
||||
sprintf(ts1hr, "%04d-%02d-%02dT%02d:00:00Z", tm.Year+1970, tm.Month, tm.Day, tm.Hour);
|
||||
sprintf_P(ts1hr, PSTR("%04d-%02d-%02dT%02d:00:00Z"), tm.Year+1970, tm.Month, tm.Day, tm.Hour);
|
||||
}
|
||||
char ts3hr[24];
|
||||
memset(ts3hr, 0, 24);
|
||||
@ -223,7 +228,7 @@ bool HomeAssistantMqttHandler::publishPrices(EntsoeApi* eapi) {
|
||||
//Serial.printf("3hr: %d %lu\n", min3hrIdx, ts);
|
||||
tmElements_t tm;
|
||||
breakTime(ts, tm);
|
||||
sprintf(ts3hr, "%04d-%02d-%02dT%02d:00:00Z", tm.Year+1970, tm.Month, tm.Day, tm.Hour);
|
||||
sprintf_P(ts3hr, PSTR("%04d-%02d-%02dT%02d:00:00Z"), tm.Year+1970, tm.Month, tm.Day, tm.Hour);
|
||||
}
|
||||
char ts6hr[24];
|
||||
memset(ts6hr, 0, 24);
|
||||
@ -232,7 +237,7 @@ bool HomeAssistantMqttHandler::publishPrices(EntsoeApi* eapi) {
|
||||
//Serial.printf("6hr: %d %lu\n", min6hrIdx, ts);
|
||||
tmElements_t tm;
|
||||
breakTime(ts, tm);
|
||||
sprintf(ts6hr, "%04d-%02d-%02dT%02d:00:00Z", tm.Year+1970, tm.Month, tm.Day, tm.Hour);
|
||||
sprintf_P(ts6hr, PSTR("%04d-%02d-%02dT%02d:00:00Z"), tm.Year+1970, tm.Month, tm.Day, tm.Hour);
|
||||
}
|
||||
|
||||
snprintf_P(json, BufferSize, JSONPRICES_JSON,
|
||||
@ -328,6 +333,14 @@ void HomeAssistantMqttHandler::publishSensor(const HomeAssistantSensor& sensor)
|
||||
strlen_P(sensor.stacl) > 0 ? (char *) FPSTR(sensor.stacl) : ""
|
||||
);
|
||||
mqtt->publish(discoveryTopic + deviceUid + "_" + uid.c_str() + "/config", json, true, 0);
|
||||
mqtt->loop();
|
||||
delay(10);
|
||||
|
||||
#if defined(ESP32)
|
||||
esp_task_wdt_reset();
|
||||
#elif defined(ESP8266)
|
||||
ESP.wdtFeed();
|
||||
#endif
|
||||
}
|
||||
|
||||
void HomeAssistantMqttHandler::publishList1Sensors() {
|
||||
@ -390,7 +403,7 @@ void HomeAssistantMqttHandler::publishRealtimeSensors(EnergyAccounting* ea, Ents
|
||||
if(rtInit) return;
|
||||
for(uint8_t i = 0; i < RealtimeSensorCount; i++) {
|
||||
HomeAssistantSensor sensor = RealtimeSensors[i];
|
||||
if(strncmp(sensor.devcl, "monetary", 8) == 0) {
|
||||
if(strncmp_P(sensor.devcl, PSTR("monetary"), 8) == 0) {
|
||||
if(eapi == NULL) continue;
|
||||
sensor.uom = eapi->getCurrency();
|
||||
}
|
||||
@ -420,7 +433,7 @@ void HomeAssistantMqttHandler::publishRealtimeExportSensors(EnergyAccounting* ea
|
||||
if(rteInit) return;
|
||||
for(uint8_t i = 0; i < RealtimeExportSensorCount; i++) {
|
||||
HomeAssistantSensor sensor = RealtimeExportSensors[i];
|
||||
if(strncmp(sensor.devcl, "monetary", 8) == 0) {
|
||||
if(strncmp_P(sensor.devcl, PSTR("monetary"), 8) == 0) {
|
||||
if(eapi == NULL) continue;
|
||||
sensor.uom = eapi->getCurrency();
|
||||
}
|
||||
@ -460,7 +473,7 @@ void HomeAssistantMqttHandler::publishPriceSensors(EntsoeApi* eapi) {
|
||||
if(!pInit) {
|
||||
for(uint8_t i = 0; i < PriceSensorCount; i++) {
|
||||
HomeAssistantSensor sensor = PriceSensors[i];
|
||||
if(strncmp(sensor.devcl, "monetary", 8) == 0) {
|
||||
if(strncmp_P(sensor.devcl, PSTR("monetary"), 8) == 0) {
|
||||
sensor.uom = uom.c_str();
|
||||
}
|
||||
publishSensor(sensor);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user