diff --git a/Arduino Code/Arduino Libraries/HanToJson/src/HanToJson.cpp b/Arduino Code/Arduino Libraries/HanToJson/src/HanToJson.cpp index 7dd6afb2..ef913079 100644 --- a/Arduino Code/Arduino Libraries/HanToJson/src/HanToJson.cpp +++ b/Arduino Code/Arduino Libraries/HanToJson/src/HanToJson.cpp @@ -4,18 +4,9 @@ #include "Kamstrup.h" -static void hanToJsonKaifa(JsonObject& data, HanReader& hanReader, Stream *debugger) +static void hanToJsonKaifa3phase(int listSize, JsonObject& data, HanReader& hanReader, Stream *debugger) { - int listSize = hanReader.getListSize(); - - if (listSize == (int)Kaifa::List1) - { - // Handle listSize == 1 specially - data["P"] = hanReader.getInt( (int)Kaifa_List1::ActivePowerImported); - return; - } - - if (listSize >= (int)Kaifa::List21) + if (listSize >= (int)Kaifa::List2) { data["lv"] = hanReader.getString( (int)Kaifa_List3::ListVersionIdentifier); data["id"] = hanReader.getString( (int)Kaifa_List3::MeterID); @@ -24,10 +15,6 @@ static void hanToJsonKaifa(JsonObject& data, HanReader& hanReader, Stream *debug data["Q"] = hanReader.getInt( (int)Kaifa_List3::ReactiveImportPower); data["I1"] = hanReader.getInt( (int)Kaifa_List3::CurrentL1); data["I2"] = hanReader.getInt( (int)Kaifa_List3::CurrentL2); - } - - if (listSize >= (int)Kaifa::List2) - { data["I3"] = hanReader.getInt( (int)Kaifa_List3::CurrentL3); data["U1"] = hanReader.getInt( (int)Kaifa_List3::VoltageL1); data["U2"] = hanReader.getInt( (int)Kaifa_List3::VoltageL2); @@ -43,6 +30,49 @@ static void hanToJsonKaifa(JsonObject& data, HanReader& hanReader, Stream *debug } } +static void hanToJsonKaifa1phase(int listSize, JsonObject& data, HanReader& hanReader, Stream *debugger) +{ + if (listSize >= (int)Kaifa::List21) + { + data["lv"] = hanReader.getString( (int)Kaifa_List31::ListVersionIdentifier); + data["id"] = hanReader.getString( (int)Kaifa_List31::MeterID); + data["type"] = hanReader.getString( (int)Kaifa_List31::MeterType); + data["P"] = hanReader.getInt( (int)Kaifa_List31::ActiveImportPower); + data["Q"] = hanReader.getInt( (int)Kaifa_List31::ReactiveImportPower); + data["I1"] = hanReader.getInt( (int)Kaifa_List31::CurrentL1); + data["U1"] = hanReader.getInt( (int)Kaifa_List31::VoltageL1); + } + + if (listSize > (int)Kaifa::List31) + { + data["tPI"] = hanReader.getInt( (int)Kaifa_List31::CumulativeActiveImportEnergy); + data["tPO"] = hanReader.getInt( (int)Kaifa_List31::CumulativeActiveExportEnergy); + data["tQI"] = hanReader.getInt( (int)Kaifa_List31::CumulativeReactiveImportEnergy); + data["tQO"] = hanReader.getInt( (int)Kaifa_List31::CumulativeReactiveExportEnergy); + } +} + +static void hanToJsonKaifa(JsonObject& data, HanReader& hanReader, Stream *debugger) +{ + int listSize = hanReader.getListSize(); + + if (listSize == (int)Kaifa::List1) + { + // Handle listSize == 1 specially + data["P"] = hanReader.getInt( (int)Kaifa_List1::ActivePowerImported); + return; + } + + switch (listSize) { + case (int)Kaifa::List2: + case (int)Kaifa::List3: + return hanToJsonKaifa3phase(listSize, data, hanReader, debugger); + case (int)Kaifa::List21: + case (int)Kaifa::List31: + return hanToJsonKaifa1phase(listSize, data, hanReader, debugger); + } +} + static void hanToJsonAidon(JsonObject& data, HanReader& hanReader, Stream *debugger) { int listSize = hanReader.getListSize(); @@ -84,10 +114,8 @@ static void hanToJsonAidon(JsonObject& data, HanReader& hanReader, Stream *debug } } -static void hanToJsonKamstrup(JsonObject& data, HanReader& hanReader, Stream *debugger) +static void hanToJsonKamstrup3phase(int listSize, JsonObject& data, HanReader& hanReader, Stream *debugger) { - int listSize = hanReader.getListSize(); - if (listSize >= (int)Kamstrup::List1) { data["lv"] = hanReader.getString( (int)Kamstrup_List2::ListVersionIdentifier); @@ -112,6 +140,42 @@ static void hanToJsonKamstrup(JsonObject& data, HanReader& hanReader, Stream *de } } +static void hanToJsonKamstrup1phase(int listSize, JsonObject& data, HanReader& hanReader, Stream *debugger) +{ + if (listSize >= (int)Kamstrup::List3) + { + data["lv"] = hanReader.getString( (int)Kamstrup_List4::ListVersionIdentifier); + data["id"] = hanReader.getString( (int)Kamstrup_List4::MeterID); + data["type"] = hanReader.getString( (int)Kamstrup_List4::MeterType); + data["P"] = hanReader.getInt( (int)Kamstrup_List4::ActiveImportPower); + data["Q"] = hanReader.getInt( (int)Kamstrup_List4::ReactiveImportPower); + data["I1"] = hanReader.getInt( (int)Kamstrup_List4::CurrentL1); + data["U1"] = hanReader.getInt( (int)Kamstrup_List4::VoltageL1); + } + + if (listSize >= (int)Kamstrup::List4) + { + data["tPI"] = hanReader.getInt( (int)Kamstrup_List4::CumulativeActiveImportEnergy); + data["tPO"] = hanReader.getInt( (int)Kamstrup_List4::CumulativeActiveExportEnergy); + data["tQI"] = hanReader.getInt( (int)Kamstrup_List4::CumulativeReactiveImportEnergy); + data["tQO"] = hanReader.getInt( (int)Kamstrup_List4::CumulativeReactiveExportEnergy); + } +} + +static void hanToJsonKamstrup(JsonObject& data, HanReader& hanReader, Stream *debugger) +{ + int listSize = hanReader.getListSize(); + + switch (listSize) { + case (int)Kamstrup::List1: + case (int)Kamstrup::List2: + return hanToJsonKamstrup3phase(listSize, data, hanReader, debugger); + case (int)Kamstrup::List3: + case (int)Kamstrup::List4: + return hanToJsonKamstrup1phase(listSize, data, hanReader, debugger); + } +} + void hanToJson(JsonObject& data, byte meterType, HanReader& hanReader, Stream *debugger) { // Based on the list number, get all details