diff --git a/platformio.ini b/platformio.ini index 3f17ae5f..4310874b 100755 --- a/platformio.ini +++ b/platformio.ini @@ -32,7 +32,7 @@ lib_ignore = ${common.lib_ignore} extra_scripts = ${common.extra_scripts} [env:esp32] -platform = https://github.com/tasmota/platform-espressif32/releases/download/2023.04.02/platform-espressif32.zip +platform = https://github.com/tasmota/platform-espressif32/releases/download/2023.07.00/platform-espressif32.zip framework = arduino board = esp32dev board_build.f_cpu = 160000000L @@ -47,7 +47,7 @@ extra_scripts = ${common.extra_scripts} # https://github.com/Jason2866/esp32-arduino-lib-builder [env:esp32s2] -platform = https://github.com/tasmota/platform-espressif32/releases/download/2023.04.02/platform-espressif32.zip +platform = https://github.com/tasmota/platform-espressif32/releases/download/2023.07.00/platform-espressif32.zip framework = arduino board = esp32-s2-saola-1 board_build.mcu = esp32s2 @@ -63,7 +63,7 @@ lib_ignore = ${common.lib_ignore} extra_scripts = ${common.extra_scripts} [env:esp32solo] -platform = https://github.com/tasmota/platform-espressif32/releases/download/2023.04.02/platform-espressif32.zip +platform = https://github.com/tasmota/platform-espressif32/releases/download/2023.07.00/platform-espressif32.zip framework = arduino board = esp32-solo1 board_build.f_cpu = 160000000L @@ -75,7 +75,7 @@ lib_ignore = ${common.lib_ignore} extra_scripts = ${common.extra_scripts} [env:esp32c3] -platform = https://github.com/tasmota/platform-espressif32/releases/download/2023.04.02/platform-espressif32.zip +platform = https://github.com/tasmota/platform-espressif32/releases/download/2023.07.00/platform-espressif32.zip framework = arduino board = esp32-c3-devkitm-1 board_build.mcu = esp32c3 diff --git a/src/IEC6205675.cpp b/src/IEC6205675.cpp index fb3ffdd2..40cad51d 100644 --- a/src/IEC6205675.cpp +++ b/src/IEC6205675.cpp @@ -128,6 +128,74 @@ IEC6205675::IEC6205675(const char* d, uint8_t useMeterType, MeterConfig* meterCo } lastUpdateMillis = millis(); + } else if(listId.startsWith("ISK")) { // Iskra special case + this->listId = listId; + meterType = AmsTypeIskra; + + int idx = 0; + data = getCosemDataAt(idx++, ((char *) (d))); + if(data->base.length == 0x12) { + listType = 2; + + data = getCosemDataAt(idx++, ((char *) (d))); + memcpy(str, data->oct.data, data->oct.length); + str[data->oct.length] = 0x00; + meterId = String(str); + + data = getCosemDataAt(idx++, ((char *) (d))); + activeImportPower = ntohl(data->dlu.data); + data = getCosemDataAt(idx++, ((char *) (d))); + activeExportPower = ntohl(data->dlu.data); + + data = getCosemDataAt(idx++, ((char *) (d))); + reactiveImportPower = ntohl(data->dlu.data); + data = getCosemDataAt(idx++, ((char *) (d))); + reactiveExportPower = ntohl(data->dlu.data); + + data = getCosemDataAt(idx++, ((char *) (d))); + l1voltage = ntohs(data->lu.data) / 10.0; + data = getCosemDataAt(idx++, ((char *) (d))); + l2voltage = ntohs(data->lu.data) / 10.0; + data = getCosemDataAt(idx++, ((char *) (d))); + l3voltage = ntohs(data->lu.data) / 10.0; + + data = getCosemDataAt(idx++, ((char *) (d))); + l1current = ntohs(data->lu.data) / 100.0; + data = getCosemDataAt(idx++, ((char *) (d))); + l2current = ntohs(data->lu.data) / 100.0; + data = getCosemDataAt(idx++, ((char *) (d))); + l3current = ntohs(data->lu.data) / 100.0; + + data = getCosemDataAt(idx++, ((char *) (d))); + l1activeImportPower = ntohl(data->dlu.data); + data = getCosemDataAt(idx++, ((char *) (d))); + l2activeImportPower = ntohl(data->dlu.data); + data = getCosemDataAt(idx++, ((char *) (d))); + l3activeImportPower = ntohl(data->dlu.data); + + data = getCosemDataAt(idx++, ((char *) (d))); + l1activeExportPower = ntohl(data->dlu.data); + data = getCosemDataAt(idx++, ((char *) (d))); + l2activeExportPower = ntohl(data->dlu.data); + data = getCosemDataAt(idx++, ((char *) (d))); + l3activeExportPower = ntohl(data->dlu.data); + } else if(data->base.length == 0x0C) { + listType = 3; + idx += 3; + + data = getCosemDataAt(idx++, ((char *) (d))); + activeImportCounter = ntohl(data->dlu.data) / 1000.0; + idx += 2; + + data = getCosemDataAt(idx++, ((char *) (d))); + activeExportCounter = ntohl(data->dlu.data) / 1000.0; + idx += 2; + + data = getCosemDataAt(idx++, ((char *) (d))); + reactiveImportCounter = ntohl(data->dlu.data) / 1000.0; + data = getCosemDataAt(idx++, ((char *) (d))); + reactiveExportCounter = ntohl(data->dlu.data) / 1000.0; + } } } else if(useMeterType == AmsTypeKaifa && data->base.type == CosemTypeDLongUnsigned) { this->packageTimestamp = this->packageTimestamp > 0 ? tz.toUTC(this->packageTimestamp) : 0;