From 118c633878546aa7d65c85e46efb02c8f576f75d Mon Sep 17 00:00:00 2001 From: Gunnar Skjold Date: Wed, 6 Nov 2024 18:10:38 +0100 Subject: [PATCH] Fixed autodetect --- lib/MeterCommunicators/include/KmpCommunicator.h | 1 + lib/MeterCommunicators/include/MeterCommunicator.h | 1 + lib/MeterCommunicators/include/PassiveMeterCommunicator.h | 1 + lib/MeterCommunicators/include/PulseMeterCommunicator.h | 1 + lib/MeterCommunicators/src/PassiveMeterCommunicator.cpp | 7 +++++-- lib/MeterCommunicators/src/PulseMeterCommunicator.cpp | 4 ++++ src/AmsToMqttBridge.cpp | 2 ++ 7 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/MeterCommunicators/include/KmpCommunicator.h b/lib/MeterCommunicators/include/KmpCommunicator.h index b880db8b..1981e87f 100644 --- a/lib/MeterCommunicators/include/KmpCommunicator.h +++ b/lib/MeterCommunicators/include/KmpCommunicator.h @@ -32,6 +32,7 @@ public: AmsData* getData(AmsData& meterState); int getLastError(); bool isConfigChanged() { return false; } + void ackConfigChanged() {} void getCurrentConfig(MeterConfig& meterConfig) { meterConfig = this->meterConfig; } diff --git a/lib/MeterCommunicators/include/MeterCommunicator.h b/lib/MeterCommunicators/include/MeterCommunicator.h index 73e99e76..904e9c47 100644 --- a/lib/MeterCommunicators/include/MeterCommunicator.h +++ b/lib/MeterCommunicators/include/MeterCommunicator.h @@ -22,6 +22,7 @@ public: virtual AmsData* getData(AmsData& meterState); virtual int getLastError(); virtual bool isConfigChanged(); + virtual void ackConfigChanged(); virtual void getCurrentConfig(MeterConfig& meterConfig); }; diff --git a/lib/MeterCommunicators/include/PassiveMeterCommunicator.h b/lib/MeterCommunicators/include/PassiveMeterCommunicator.h index 964280f6..7540acce 100644 --- a/lib/MeterCommunicators/include/PassiveMeterCommunicator.h +++ b/lib/MeterCommunicators/include/PassiveMeterCommunicator.h @@ -34,6 +34,7 @@ public: AmsData* getData(AmsData& meterState); int getLastError(); bool isConfigChanged(); + void ackConfigChanged(); void getCurrentConfig(MeterConfig& meterConfig); void setPassthroughMqttHandler(PassthroughMqttHandler*); diff --git a/lib/MeterCommunicators/include/PulseMeterCommunicator.h b/lib/MeterCommunicators/include/PulseMeterCommunicator.h index aa1a797b..2207a99d 100644 --- a/lib/MeterCommunicators/include/PulseMeterCommunicator.h +++ b/lib/MeterCommunicators/include/PulseMeterCommunicator.h @@ -27,6 +27,7 @@ public: AmsData* getData(AmsData& meterState); int getLastError(); bool isConfigChanged(); + void ackConfigChanged(); void getCurrentConfig(MeterConfig& meterConfig); void onPulse(uint8_t pulses); diff --git a/lib/MeterCommunicators/src/PassiveMeterCommunicator.cpp b/lib/MeterCommunicators/src/PassiveMeterCommunicator.cpp index a19582d7..43f31c51 100644 --- a/lib/MeterCommunicators/src/PassiveMeterCommunicator.cpp +++ b/lib/MeterCommunicators/src/PassiveMeterCommunicator.cpp @@ -306,11 +306,14 @@ bool PassiveMeterCommunicator::isConfigChanged() { return configChanged; } +void PassiveMeterCommunicator::ackConfigChanged() { + configChanged = false; +} + void PassiveMeterCommunicator::getCurrentConfig(MeterConfig& meterConfig) { meterConfig = this->meterConfig; } - int16_t PassiveMeterCommunicator::unwrapData(uint8_t *buf, DataParserContext &context) { int16_t ret = 0; bool doRet = false; @@ -578,7 +581,7 @@ void PassiveMeterCommunicator::setupHanPort(uint32_t baud, uint8_t parityOrdinal int8_t txpin = passive ? -1 : meterConfig.txPin; if(baud == 0) { - baud = 2400; + autodetectBaud = baud = 2400; } #if defined(AMS_REMOTE_DEBUG) diff --git a/lib/MeterCommunicators/src/PulseMeterCommunicator.cpp b/lib/MeterCommunicators/src/PulseMeterCommunicator.cpp index c8d61fc5..839fe315 100644 --- a/lib/MeterCommunicators/src/PulseMeterCommunicator.cpp +++ b/lib/MeterCommunicators/src/PulseMeterCommunicator.cpp @@ -47,6 +47,10 @@ bool PulseMeterCommunicator::isConfigChanged() { return this->configChanged; } +void PulseMeterCommunicator::ackConfigChanged() { + configChanged = false; +} + void PulseMeterCommunicator::getCurrentConfig(MeterConfig& meterConfig) { meterConfig = this->meterConfig; } diff --git a/src/AmsToMqttBridge.cpp b/src/AmsToMqttBridge.cpp index ae9cde08..3a96ae03 100644 --- a/src/AmsToMqttBridge.cpp +++ b/src/AmsToMqttBridge.cpp @@ -1307,6 +1307,7 @@ bool readHanPort() { if(mc->isConfigChanged()) { mc->getCurrentConfig(meterConfig); config.setMeterConfig(meterConfig); + mc->ackConfigChanged(); } meterState.setLastError(mc->getLastError()); @@ -1667,6 +1668,7 @@ void configFileParse() { meter.baud = String(buf+10).toInt(); } else if(strncmp_P(buf, PSTR("meterParity "), 12) == 0) { if(!lMeter) { config.getMeterConfig(meter); lMeter = true; }; + meter.parity = 0; if(strncmp_P(buf+12, PSTR("7N1"), 3) == 0) meter.parity = 2; if(strncmp_P(buf+12, PSTR("8N1"), 3) == 0) meter.parity = 3; if(strncmp_P(buf+12, PSTR("8N2"), 3) == 0) meter.parity = 7;