Fixed LNG 0 values

This commit is contained in:
Gunnar Skjold
2024-04-02 11:43:45 +02:00
parent 864cd1fbbb
commit 61d23ab453
5 changed files with 10 additions and 8 deletions

View File

@@ -9,9 +9,10 @@
#include "ntohll.h"
#include "Uptime.h"
LNG::LNG(const char* payload, uint8_t useMeterType, MeterConfig* meterConfig, DataParserContext &ctx, RemoteDebug* debugger) {
LNG::LNG(AmsData& meterState, const char* payload, uint8_t useMeterType, MeterConfig* meterConfig, DataParserContext &ctx, RemoteDebug* debugger) {
LngHeader* h = (LngHeader*) payload;
if(h->tag == CosemTypeStructure && h->arrayTag == CosemTypeArray) {
apply(meterState);
meterType = AmsTypeLandisGyr;
this->packageTimestamp = ctx.timestamp;

View File

@@ -31,7 +31,7 @@ struct LngObisDescriptor {
class LNG : public AmsData {
public:
LNG(const char* payload, uint8_t useMeterType, MeterConfig* meterConfig, DataParserContext &ctx, RemoteDebug* debugger);
LNG(AmsData& meterState, const char* payload, uint8_t useMeterType, MeterConfig* meterConfig, DataParserContext &ctx, RemoteDebug* debugger);
uint64_t getNumber(CosemData* item);
};

View File

@@ -7,9 +7,10 @@
#include "LNG2.h"
#include "Uptime.h"
LNG2::LNG2(const char* payload, uint8_t useMeterType, MeterConfig* meterConfig, DataParserContext &ctx, RemoteDebug* debugger) {
LNG2::LNG2(AmsData& meterState, const char* payload, uint8_t useMeterType, MeterConfig* meterConfig, DataParserContext &ctx, RemoteDebug* debugger) {
CosemBasic* h = (CosemBasic*) payload;
if(h->length == 0x0e) {
apply(meterState);
meterType = AmsTypeLandisGyr;
this->packageTimestamp = ctx.timestamp;

View File

@@ -33,7 +33,7 @@ struct Lng2Data_3p {
class LNG2 : public AmsData {
public:
LNG2(const char* payload, uint8_t useMeterType, MeterConfig* meterConfig, DataParserContext &ctx, RemoteDebug* debugger);
LNG2(AmsData& meterState, const char* payload, uint8_t useMeterType, MeterConfig* meterConfig, DataParserContext &ctx, RemoteDebug* debugger);
private:
uint8_t getString(CosemData* item, char* target);

View File

@@ -213,8 +213,8 @@ AmsData* PassiveMeterCommunicator::getData(AmsData& meterState) {
// Rudimentary detector for L&G proprietary format, this is terrible code... Fix later
if(payload[0] == CosemTypeStructure && payload[2] == CosemTypeArray && payload[1] == payload[3]) {
if(debugger->isActive(RemoteDebug::VERBOSE)) debugger->printf_P(PSTR("LNG\n"));
LNG lngData = LNG(payload, meterState.getMeterType(), &meterConfig, ctx, debugger);
if(lngData.getListType() >= 3) {
LNG lngData = LNG(meterState, payload, meterState.getMeterType(), &meterConfig, ctx, debugger);
if(lngData.getListType() >= 1) {
data = new AmsData();
data->apply(meterState);
data->apply(lngData);
@@ -228,8 +228,8 @@ AmsData* PassiveMeterCommunicator::getData(AmsData& meterState) {
payload[17] == CosemTypeLongUnsigned
) {
if(debugger->isActive(RemoteDebug::VERBOSE)) debugger->printf_P(PSTR("LNG2\n"));
LNG2 lngData = LNG2(payload, meterState.getMeterType(), &meterConfig, ctx, debugger);
if(lngData.getListType() >= 3) {
LNG2 lngData = LNG2(meterState, payload, meterState.getMeterType(), &meterConfig, ctx, debugger);
if(lngData.getListType() >= 1) {
data = new AmsData();
data->apply(meterState);
data->apply(lngData);