Pulse meter

This commit is contained in:
Gunnar Skjold
2024-01-26 18:21:51 +01:00
parent 52bc2f6a9b
commit 9a767d9ac4
8 changed files with 38 additions and 9 deletions

View File

@@ -1195,6 +1195,13 @@ bool readHanPort() {
if(pulseMc != NULL) {
pulseMc->onPulse(pulses);
pulses = 0;
if(meterState.getListType() < 3) {
time_t now = time(nullptr);
if(now > FirmwareVersion::BuildEpoch) {
ImpulseAmsData init = ImpulseAmsData(ds.getEstimatedImportCounter());
meterState.apply(init);
}
}
}
if(!mc->loop()) {
meterState.setLastError(mc->getLastError());

View File

@@ -14,3 +14,8 @@ ImpulseAmsData::ImpulseAmsData(AmsData& state, uint16_t pulsePerKwh, uint8_t pul
lastUpdateMillis = state.getLastUpdateMillis();
}
}
ImpulseAmsData::ImpulseAmsData(double activeImportCounter) {
this->activeImportCounter = activeImportCounter;
this->listType = 3;
}

View File

@@ -6,6 +6,7 @@
class ImpulseAmsData : public AmsData {
public:
ImpulseAmsData(AmsData &state, uint16_t pulsePerKwh, uint8_t pulses);
ImpulseAmsData(double activeImportCounter);
};
#endif

View File

@@ -48,10 +48,10 @@ void PulseMeterCommunicator::setupGpio() {
if(meterConfig.rxPin != NOT_A_PIN) {
pinMode(meterConfig.rxPin, meterConfig.rxPinPullup ? INPUT_PULLUP : INPUT);
}
if(meterConfig.txPin != NOT_A_PIN) {
pinMode(meterConfig.txPin, OUTPUT);
digitalWrite(meterConfig.txPin, HIGH);
}
// Export counter?
// if(meterConfig.txPin != NOT_A_PIN) {
// pinMode(meterConfig.txPin, meterConfig.rxPinPullup ? INPUT_PULLUP : INPUT);
// }
}
void PulseMeterCommunicator::onPulse(uint8_t pulses) {

View File

@@ -16,7 +16,7 @@
class PulseMeterCommunicator : public MeterCommunicator {
public:
PulseMeterCommunicator(RemoteDebug* debugger);
void configure(MeterConfig&, Timezone*);
void configure(MeterConfig& config, Timezone* tz);
bool loop();
AmsData* getData(AmsData& meterState);
int getLastError();