diff --git a/lib/HomeAssistantMqttHandler/json/ha1.json b/lib/HomeAssistantMqttHandler/json/ha1.json index 9fa1f374..bda922a1 100644 --- a/lib/HomeAssistantMqttHandler/json/ha1.json +++ b/lib/HomeAssistantMqttHandler/json/ha1.json @@ -1,3 +1,3 @@ { - "P" : %d + "P" : %lu } diff --git a/lib/HomeAssistantMqttHandler/json/ha3.json b/lib/HomeAssistantMqttHandler/json/ha3.json index 8fa16c93..e2bc09dc 100644 --- a/lib/HomeAssistantMqttHandler/json/ha3.json +++ b/lib/HomeAssistantMqttHandler/json/ha3.json @@ -2,10 +2,10 @@ "lv" : "%s", "id" : "%s", "type" : "%s", - "P" : %d, - "Q" : %d, - "PO" : %d, - "QO" : %d, + "P" : %lu, + "Q" : %lu, + "PO" : %lu, + "QO" : %lu, "I1" : %.2f, "I2" : %.2f, "I3" : %.2f, diff --git a/lib/HomeAssistantMqttHandler/json/ha4.json b/lib/HomeAssistantMqttHandler/json/ha4.json index 111e3a89..8d37a9f6 100644 --- a/lib/HomeAssistantMqttHandler/json/ha4.json +++ b/lib/HomeAssistantMqttHandler/json/ha4.json @@ -2,16 +2,16 @@ "lv" : "%s", "id" : "%s", "type" : "%s", - "P" : %d, - "P1" : %d, - "P2" : %d, - "P3" : %d, - "Q" : %d, - "PO" : %d, - "PO1" : %d, - "PO2" : %d, - "PO3" : %d, - "QO" : %d, + "P" : %lu, + "P1" : %lu, + "P2" : %lu, + "P3" : %lu, + "Q" : %lu, + "PO" : %lu, + "PO1" : %lu, + "PO2" : %lu, + "PO3" : %lu, + "QO" : %lu, "I1" : %.2f, "I2" : %.2f, "I3" : %.2f, diff --git a/lib/MeterCommunicators/src/IEC6205675.cpp b/lib/MeterCommunicators/src/IEC6205675.cpp index b5a8955e..afae5fef 100644 --- a/lib/MeterCommunicators/src/IEC6205675.cpp +++ b/lib/MeterCommunicators/src/IEC6205675.cpp @@ -197,21 +197,126 @@ IEC6205675::IEC6205675(const char* d, uint8_t useMeterType, MeterConfig* meterCo apply(state); listType = 3; + + // 42.0.0 COSEM logical device name + idx++; + + // 96.1.3 Device ID 4 + data = getCosemDataAt(idx++, ((char *) (d))); + memcpy(str, data->oct.data, data->oct.length); + str[data->oct.length] = 0x00; + meterId = String(str); + + // 96.3.10 Disconnect control + // 96.14.0 Currently acrive energy tariff idx += 4; + // 1.8.0 data = getCosemDataAt(idx++, ((char *) (d))); activeImportCounter = ntohl(data->dlu.data) / 1000.0; + + // 1.8.1 + // 1.8.2 idx += 2; + // 2.8.0 data = getCosemDataAt(idx++, ((char *) (d))); activeExportCounter = ntohl(data->dlu.data) / 1000.0; + + // 2.8.1 + // 2.8.2 idx += 2; + // 3.8.0 data = getCosemDataAt(idx++, ((char *) (d))); reactiveImportCounter = ntohl(data->dlu.data) / 1000.0; + + // 4.8.0 data = getCosemDataAt(idx++, ((char *) (d))); reactiveExportCounter = ntohl(data->dlu.data) / 1000.0; + lastUpdateMillis = millis64(); + } else if(data->base.length == 0x0A) { + apply(state); + + listType = 2; + + // 42.0.0 COSEM logical device name + idx++; + + // 96.1.2 Device ID 3 + data = getCosemDataAt(idx++, ((char *) (d))); + memcpy(str, data->oct.data, data->oct.length); + str[data->oct.length] = 0x00; + meterId = String(str); + + // 1.7.0 + data = getCosemDataAt(idx++, ((char *) (d))); + activeImportPower = ntohl(data->dlu.data); + + // 2.7.0 + data = getCosemDataAt(idx++, ((char *) (d))); + activeExportPower = ntohl(data->dlu.data); + + // 3.7.0 + data = getCosemDataAt(idx++, ((char *) (d))); + reactiveImportPower = ntohl(data->dlu.data); + + // 4.7.0 + data = getCosemDataAt(idx++, ((char *) (d))); + reactiveExportPower = ntohl(data->dlu.data); + + // 32.7.0 + data = getCosemDataAt(idx++, ((char *) (d))); + l1voltage = ntohs(data->lu.data) / 10.0; + + // Current? + data = getCosemDataAt(idx++, ((char *) (d))); + l1current = ntohs(data->lu.data) / 100.0; + + // 2.8.1 + // 2.8.2 + idx += 2; + + lastUpdateMillis = millis64(); + } else if(data->base.length == 0x09) { + apply(state); + + listType = 2; + + // 42.0.0 COSEM logical device name + idx++; + + // 96.1.2 Device ID 3 + data = getCosemDataAt(idx++, ((char *) (d))); + memcpy(str, data->oct.data, data->oct.length); + str[data->oct.length] = 0x00; + meterId = String(str); + + // 1.7.0 + data = getCosemDataAt(idx++, ((char *) (d))); + activeImportPower = ntohl(data->dlu.data); + + // 2.7.0 + data = getCosemDataAt(idx++, ((char *) (d))); + activeExportPower = ntohl(data->dlu.data); + + // 3.7.0 + data = getCosemDataAt(idx++, ((char *) (d))); + reactiveImportPower = ntohl(data->dlu.data); + + // 4.7.0 + data = getCosemDataAt(idx++, ((char *) (d))); + reactiveExportPower = ntohl(data->dlu.data); + + // 32.7.0 + data = getCosemDataAt(idx++, ((char *) (d))); + l1voltage = ntohs(data->lu.data) / 10.0; + + // 2.8.1 + // 2.8.2 + idx += 2; + lastUpdateMillis = millis64(); } } else if(useMeterType == AmsTypeIskra && data->base.type == CosemTypeOctetString) { // Iskra special case