Decode 1-phase Kamstrup and Kaifa

This commit is contained in:
Vegar Westerlund 2019-05-12 19:29:02 +02:00
parent bf83f018f3
commit c8a36aa350

View File

@ -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