Made it work with Kaifa data

This commit is contained in:
Roar Fredriksen
2018-03-08 00:20:07 +01:00
parent cbefaf1c7c
commit b2f348f57d
4 changed files with 8 additions and 5 deletions

View File

@@ -102,7 +102,10 @@ int HanReader::getListSize()
time_t HanReader::getPackageTime() time_t HanReader::getPackageTime()
{ {
return getTime(buffer, 8, bytesRead); int packageTimePosition = dataHeader
+ (compensateFor09HeaderBug ? 1 : 0);
return getTime(buffer, packageTimePosition, bytesRead);
} }
time_t HanReader::getTime(int objectId) time_t HanReader::getTime(int objectId)
@@ -125,7 +128,8 @@ int HanReader::findValuePosition(int dataPosition, byte *buffer, int start, int
{ {
// The first byte after the header gives the length // The first byte after the header gives the length
// of the extended header information (variable) // of the extended header information (variable)
int firstData = dataHeader + buffer[dataHeader] + 1; int headerSize = dataHeader + (compensateFor09HeaderBug ? 1 : 0);
int firstData = headerSize + buffer[headerSize] + 1;
for (int i = start + firstData; i<length; i++) for (int i = start + firstData; i<length; i++)
{ {

View File

@@ -15,6 +15,7 @@ class HanReader
{ {
public: public:
const uint dataHeader = 8; const uint dataHeader = 8;
bool compensateFor09HeaderBug = false;
HanReader(); HanReader();
void setup(HardwareSerial *hanPort); void setup(HardwareSerial *hanPort);

View File

@@ -8,13 +8,11 @@ enum class Kaifa : byte {
}; };
enum class Kaifa_List1 { enum class Kaifa_List1 {
Time,
ListSize, ListSize,
ActivePowerImported ActivePowerImported
}; };
enum class Kaifa_List2 { enum class Kaifa_List2 {
Time,
ListSize, ListSize,
ListVersionIdentifier, ListVersionIdentifier,
MeterID, MeterID,
@@ -32,7 +30,6 @@ enum class Kaifa_List2 {
}; };
enum class Kaifa_List3 { enum class Kaifa_List3 {
Time,
ListSize, ListSize,
ListVersionIdentifier, ListVersionIdentifier,
MeterID, MeterID,

View File

@@ -30,6 +30,7 @@ void setup() {
// initialize the HanReader // initialize the HanReader
// (passing no han port, as we are feeding data manually, but provide Serial for debugging) // (passing no han port, as we are feeding data manually, but provide Serial for debugging)
hanReader.setup(NULL, &Serial); hanReader.setup(NULL, &Serial);
hanReader.compensateFor09HeaderBug = true;
} }
void setupDebugPort() void setupDebugPort()