diff --git a/src/IEC6205675.cpp b/src/IEC6205675.cpp index 19b4df28..067057e8 100644 --- a/src/IEC6205675.cpp +++ b/src/IEC6205675.cpp @@ -215,8 +215,47 @@ IEC6205675::IEC6205675(const char* d, uint8_t useMeterType, MeterConfig* meterCo meterType = AmsTypeKaifa; activeImportPower = ntohl(data->dlu.data); lastUpdateMillis = millis64(); + } else if(useMeterType == AmsTypeIskra && data->base.type == CosemTypeOctetString && data->base.length == 0x0C) { // Iskra special case + uint8_t idx = 5; + + data = getCosemDataAt(idx++, ((char *) (d))); + if(data != NULL) { + activeImportCounter = ntohl(data->dlu.data) / 1000.0; + } + + data = getCosemDataAt(idx++, ((char *) (d))); + if(data != NULL) { + activeExportCounter = ntohl(data->dlu.data) / 1000.0; + } + + data = getCosemDataAt(idx++, ((char *) (d))); + if(data != NULL) { + reactiveImportCounter = ntohl(data->dlu.data) / 1000.0; + } + + data = getCosemDataAt(idx++, ((char *) (d))); + if(data != NULL) { + reactiveExportCounter = ntohl(data->dlu.data) / 1000.0; + } + + data = getCosemDataAt(idx++, ((char *) (d))); + if(data != NULL) { + activeImportPower = ntohl(data->dlu.data); + } + + data = getCosemDataAt(idx++, ((char *) (d))); + if(data != NULL) { + activeExportPower = ntohl(data->dlu.data); + } + + listType = 3; + lastUpdateMillis = millis64(); + } else if(useMeterType == AmsTypeUnknown) { + CosemData* isk_tag = findObis(AMS_OBIS_UNKNOWN_1, sizeof(AMS_OBIS_UNKNOWN_1), d); // Not really correct, but who cares + if(isk_tag != NULL) { + meterType = AmsTypeIskra; + } } - // Kaifa end } else { listType = 1; activeImportPower = val; diff --git a/src/IEC6205675.h b/src/IEC6205675.h index 94f6bad3..f4aaa9bb 100644 --- a/src/IEC6205675.h +++ b/src/IEC6205675.h @@ -31,6 +31,8 @@ private: float getNumber(CosemData*); time_t getTimestamp(uint8_t* obis, int matchlength, const char* ptr); + uint8_t AMS_OBIS_UNKNOWN_1[4] = { 25, 9, 0, 255 }; + uint8_t AMS_OBIS_VERSION[4] = { 0, 2, 129, 255 }; uint8_t AMS_OBIS_METER_MODEL[4] = { 96, 1, 1, 255 }; uint8_t AMS_OBIS_METER_MODEL_2[4] = { 96, 1, 7, 255 };