Changes for Energy Speedometer connection

This commit is contained in:
Gunnar Skjold
2023-10-20 13:26:38 +02:00
parent f7cb022e3e
commit 1ceffd0bc9
16 changed files with 190 additions and 43 deletions

View File

@@ -104,8 +104,30 @@ Timezone* tz = NULL;
AmsWebServer ws(commonBuffer, &Debug, &hw);
bool mqttEnabled = false;
AmsMqttHandler* mqttHandler = NULL;
JsonMqttHandler* energySpeedometer = NULL;
MqttConfig energySpeedometerConfig = {
"mqtt.sandtime.energy",
8883,
"",
"amsleser",
"",
#if defined(ENERGY_SPEEDOMETER_USER)
ENERGY_SPEEDOMETER_USER,
#else
"",
#endif
#if defined(ENERGY_SPEEDOMETER_PASS)
ENERGY_SPEEDOMETER_PASS,
#else
"",
#endif
0,
true
};
Stream *hanSerial;
SoftwareSerial *swSerial = NULL;
HardwareSerial *hwSerial = NULL;
@@ -542,7 +564,7 @@ void loop() {
}
#endif
if (mqttHandler != NULL || config.isMqttChanged()) {
if (mqttEnabled || config.isMqttChanged()) {
if(mqttHandler == NULL || !mqttHandler->connected() || config.isMqttChanged()) {
MQTT_connect();
config.ackMqttChange();
@@ -551,6 +573,33 @@ void loop() {
mqttHandler->disconnect();
}
#if defined(ENERGY_SPEEDOMETER_PASS)
if(sysConfig.energyspeedometer) {
if(!meterState.getMeterId().isEmpty()) {
if(energySpeedometer == NULL) {
uint16_t chipId;
#if defined(ESP32)
chipId = ( ESP.getEfuseMac() >> 32 ) % 0xFFFFFFFF;
#else
chipId = ESP.getChipId();
#endif
strcpy(energySpeedometerConfig.clientId, (String("ams") + String(chipId, HEX)).c_str());
energySpeedometer = new JsonMqttHandler(energySpeedometerConfig, &Debug, (char*) commonBuffer, &hw);
energySpeedometer->setCaVerification(false);
}
if(!energySpeedometer->connected()) {
lwmqtt_err_t err = energySpeedometer->lastError();
if(err > 0)
debugE_P(PSTR("Energyspeedometer connector reporting error (%d)"), err);
energySpeedometer->connect();
energySpeedometer->publishSystem(&hw, eapi, &ea);
}
energySpeedometer->loop();
delay(10);
}
}
#endif
try {
handlePriceApi(now);
} catch(const std::exception& e) {
@@ -699,8 +748,15 @@ void handleSystem(unsigned long now) {
unsigned long start, end;
if(now - lastSysupdate > 60000) {
start = millis();
if(mqttHandler != NULL && WiFi.getMode() != WIFI_AP && WiFi.status() == WL_CONNECTED) {
mqttHandler->publishSystem(&hw, eapi, &ea);
if(WiFi.getMode() != WIFI_AP && WiFi.status() == WL_CONNECTED) {
if(mqttHandler != NULL) {
mqttHandler->publishSystem(&hw, eapi, &ea);
}
#if defined(ENERGY_SPEEDOMETER_PASS)
if(energySpeedometer != NULL) {
energySpeedometer->publishSystem(&hw, eapi, &ea);
}
#endif
}
lastSysupdate = now;
end = millis();
@@ -1303,6 +1359,11 @@ void handleDataSuccess(AmsData* data) {
delay(10);
}
}
#if defined(ENERGY_SPEEDOMETER_PASS)
if(energySpeedometer != NULL && energySpeedometer->publish(&meterState, &meterState, &ea, eapi)) {
delay(10);
}
#endif
time_t now = time(nullptr);
if(now < FirmwareVersion::BuildEpoch && data->getListType() >= 3) {
@@ -1618,7 +1679,8 @@ void WiFi_post_connect() {
MqttConfig mqttConfig;
if(config.getMqttConfig(mqttConfig)) {
ws.setMqttEnabled(strlen(mqttConfig.host) > 0);
mqttEnabled = strlen(mqttConfig.host) > 0;
ws.setMqttEnabled(mqttEnabled);
}
}
@@ -1746,9 +1808,10 @@ void MQTT_connect() {
if(!config.getMqttConfig(mqttConfig) || strlen(mqttConfig.host) == 0) {
if(Debug.isActive(RemoteDebug::WARNING)) debugW_P(PSTR("No MQTT config"));
ws.setMqttEnabled(false);
mqttEnabled = false;
return;
}
mqttEnabled = true;
ws.setMqttEnabled(true);
if(mqttHandler != NULL && mqttHandler->getFormat() != mqttConfig.payloadFormat) {