From 15aba2318f407026983a04f6d0bf9226f56c713f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20=C3=96hrstr=C3=B6m?= Date: Fri, 12 May 2023 09:28:41 +0200 Subject: [PATCH] Add three more register sizes in the apator162 driver. --- simulations/simulation_apas.txt | 10 ++++++ src/driver_apator162.cc | 62 ++++++++++++++++++--------------- tests/test_apas.sh | 4 ++- 3 files changed, 46 insertions(+), 30 deletions(-) diff --git a/simulations/simulation_apas.txt b/simulations/simulation_apas.txt index d05f0d2..a1d83f0 100644 --- a/simulations/simulation_apas.txt +++ b/simulations/simulation_apas.txt @@ -60,3 +60,13 @@ telegram=|6E4401062020202705077A3D0060852F2F|0F|151794|94|0A0200|43|0403|81|D87F telegram=|3E4401061405410305077A190030852F2F|0F|86B4B8|95|290200|40|C6C1|B4|F0F3F3|41|5559|42|FA701000|F0|01010000|10|BC780000|FFFFFFFFFFFFFFFFFFFFFF2483| {"media":"water","meter":"apator162","name":"MyTapWaterf","id":"03410514","total_m3":30.908,"timestamp":"1111-11-11T11:11:11Z"} |MyTapWaterf;03410514;30.908;1111-11-11 11:11.11 + +# Yet another +telegram=|3C4401061111441105077A280030852F2F|0F|064CB597180200|43|A0068300055A2D69610156BB0C101B1208007101A60AC5AA6DE6A5F0880E9ADD08393C| +{"id": "11441111", "media": "water", "meter": "apator162", "name": "MyTapWaterg", "timestamp": "1111-11-11T11:11:11Z", "total_m3": 528.923} +|MyTapWaterg;11441111;528.923;1111-11-11 11:11.11 + +# Yet another +telegram=|3E4401060403820305077A090030852F2F0F9B5B229700000044C2DED310A25500007201C64A0000853C000094310000A0464B1904FFFFFFFFFFFFFFFF2ED6| +{"id": "03820304", "media": "water", "meter": "apator162", "name": "MyTapWaterh", "timestamp": "1111-11-11T11:11:11Z", "total_m3": 21.922 } +|MyTapWaterh;03820304;21.922;1111-11-11 11:11.11 diff --git a/src/driver_apator162.cc b/src/driver_apator162.cc index 348608a..b02f558 100644 --- a/src/driver_apator162.cc +++ b/src/driver_apator162.cc @@ -80,7 +80,7 @@ namespace // 0F - Spcial function / packet // next 4B : Date - In default frame // next 3B : Faults - In default frame example: please see description of 0x01 register - + size_t i=8; while (i < content.size()) { @@ -89,7 +89,7 @@ namespace if (c == 0xff) break; // An FF signals end of telegram padded to encryption boundary, // FFFFFFF623A where 4 last are perhaps crc or counter? i++; - if (size == -1 || i+size >= content.size()) + if (size == -1 || i+size > content.size()) { vector frame; t->extractFrame(&frame); @@ -135,14 +135,14 @@ namespace // which also means dif = manufacturer data follows. // After 0x0F there is always: // next 4B : Date - In default frame - // next 3B : Faults - In default frame - - case 0x00: return 4; // Date + // next 3B : Faults - In default frame + + case 0x00: return 4; // Date case 0x01: return 3; // Faults - In default frame f.ex. 0F 09 4D A1 97 18 02 00 -> 18 02 00 -> 00 02 18 -> 0x0218 - + case 0xA1: case 0x10: return 4; // Total volume - In default frame - + case 0x11: return 2; // Flow case 0x40: return 6; // Detectors @@ -150,49 +150,53 @@ namespace case 0x42: return 4; // Energy case 0x43: return 2; // Life days - In default frame f.ex. 43 6E 0A -> 2670 days from first run - case 0x71: return 9; + case 0x44: return 3; + + case 0x71: return 1+2*8; // ? + case 0x72: return 1+3*4; // ? case 0x73: return 1+4*4; // Historical data case 0x75: return 1+6*4; // Historical data case 0x7B: return 1+12*4; // Historical data - case 0x80: - case 0x81: - case 0x82: - case 0x83: - case 0x84: - case 0x86: - case 0x87: return 10; // Events - + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: case 0x85: - case 0x88: + case 0x86: + case 0x87: return 10; // Events + + case 0x88: return 6; + case 0x8F: return 11; // Events case 0x8A: return 9; // Events - + case 0x8B: case 0x8C: return 6; // Events - + case 0x8E: return 7; // Events - + case 0xA0: return 4; - + case 0xA2: return 1; - + case 0xA3: return 7; - + case 0xA4: return 4; - + case 0xA5: case 0xA9: case 0xAF: return 1; - + case 0xA6: return 3; - + case 0xA7: case 0xA8: case 0xAA: - case 0xAB: - case 0xAC: + case 0xAB: + case 0xAC: case 0xAD: return 2; case 0xB0: return 5; @@ -201,7 +205,7 @@ namespace case 0xB3: return 8; case 0xB4: return 2; case 0xB5: return 16; - + // Unknown case 0xB6: return 3; case 0xB7: return 3; diff --git a/tests/test_apas.sh b/tests/test_apas.sh index 7e1263f..fabb974 100755 --- a/tests/test_apas.sh +++ b/tests/test_apas.sh @@ -16,7 +16,9 @@ METERS="Wasser apator162 20202020 NOKEY MyTapWatere apator162 25202020 NOKEY MyTapWatere apator162 26202020 NOKEY MyTapWatere apator162 27202020 NOKEY - MyTapWaterf apator162 03410514 NOKEY" + MyTapWaterf apator162 03410514 NOKEY + MyTapWaterg apator162 11441111 NOKEY + MyTapWaterh apator162 03820304 NOKEY" cat simulations/simulation_apas.txt | grep '^{' | jq --sort-keys . > $TEST/test_expected.txt $PROG --format=json simulations/simulation_apas.txt $METERS 2> $TEST/test_stderr.txt | jq --sort-keys . > $TEST/test_output.txt