Merge pull request #237 from CuBiC3D/fix-tch-dataiii

Fix parsing for Techem HCA with version 0x94
pull/241/head
Fredrik Öhrström 2021-02-07 11:19:03 +01:00 zatwierdzone przez GitHub
commit daab1b303e
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
5 zmienionych plików z 38 dodań i 25 usunięć

Wyświetl plik

@ -55,6 +55,11 @@ telegram=|31446850226677116980A0119F27020480048300C408F709143C003D341A2B0B2A0707
{"media":"heat cost allocator","meter":"fhkvdataiii","name":"Room","id":"11776622","current_hca":131,"current_date":"2021-02-08T02:00:00Z","previous_hca":1026,"previous_date":"2019-12-31T02:00:00Z","temp_room_c":22.44,"temp_radiator_c":25.51,"timestamp":"1111-11-11T11:11:11Z"}
|Room;11776622;131.000000;2021-02-08T02:00:00Z;1026.000000;2019-12-31T02:00:00Z;22.440000;25.510000;1111-11-11 11:11.11
# FHKV radio 4 / EHKV vario 4
telegram=|33446850341211119480A2|0F9F292D005024040011BD08380904000000070000000000000000000000000001000000000003140E|
{"media":"heat cost allocator","meter":"fhkvdataiii","name":"Room","id":"11111234","current_hca":4,"current_date":"2021-02-05T02:00:00Z","previous_hca":45,"previous_date":"2020-12-31T02:00:00Z","temp_room_c":22.37,"temp_radiator_c":23.6,"timestamp":"1111-11-11T11:11:11Z"}
|Room;11111234;4.000000;2021-02-05T02:00:00Z;45.000000;2020-12-31T02:00:00Z;22.370000;23.600000;1111-11-11 11:11.11
# Test FHKV data IV
telegram=|4E4468507620541494087AAD004005089D86B62A329B3439873999738F82461ABDE3C7AC78692B363F3B41EB68607F9C9160F550769B065B6EA00A2E44346E29FF5DC5CB86283C69324AD33D137F6F|
{"media":"heat cost allocation","meter":"fhkvdataiv","name":"Rooom","id":"14542076","current_consumption_hca":2,"set_date":"2020-12-31","consumption_at_set_date_hca":25,"set_date_1":"2020-12-31","consumption_at_set_date_1_hca":25,"set_date_17":"2019-10-31","consumption_at_set_date_8_hca":0,"error_date":"","device_date_time":"","timestamp":"1111-11-11T11:11:11Z"}

Wyświetl plik

@ -136,8 +136,8 @@ void MeterFHKVDataIII::processContent(Telegram *t)
// Consumption
// Previous Consumption
uchar prev_lo = content[14];
uchar prev_hi = content[15];
uchar prev_lo = content[3];
uchar prev_hi = content[4];
double prev = (256.0*prev_hi+prev_lo);
prev_energy_hca_ = prev;
@ -146,8 +146,8 @@ void MeterFHKVDataIII::processContent(Telegram *t)
//t->addMoreExplanation(14, " energy used in previous billing period (%f HCA)", prevs);
// Previous Date
uchar date_prev_lo = content[12];
uchar date_prev_hi = content[13];
uchar date_prev_lo = content[1];
uchar date_prev_hi = content[2];
int date_prev = (256.0*date_prev_hi+date_prev_lo);
int day_prev = (date_prev >> 0) & 0x1F;
@ -158,8 +158,8 @@ void MeterFHKVDataIII::processContent(Telegram *t)
//t->addMoreExplanation(offset, " last date of previous billing period (%s)", prev_energy_hca_date);
// Current Consumption
uchar curr_lo = content[18];
uchar curr_hi = content[19];
uchar curr_lo = content[7];
uchar curr_hi = content[8];
double curr = (256.0*curr_hi+curr_lo);
curr_energy_hca_ = curr;
@ -168,8 +168,8 @@ void MeterFHKVDataIII::processContent(Telegram *t)
//t->addMoreExplanation(offset, " energy used in current billing period (%f HCA)", currs);
// Current Date
uchar date_curr_lo = content[16];
uchar date_curr_hi = content[17];
uchar date_curr_lo = content[5];
uchar date_curr_hi = content[6];
int date_curr = (256.0*date_curr_hi+date_curr_lo);
time_t now = time(0);
@ -185,9 +185,25 @@ void MeterFHKVDataIII::processContent(Telegram *t)
// t->addMoreExplanation(offset, " last date of current billing period (%s)", curr_energy_hca_date);
// Temperature
uchar room_tlo;
uchar room_thi;
uchar radiator_tlo;
uchar radiator_thi;
if(t->dll_version == 0x94)
{
room_tlo = content[10];
room_thi = content[11];
radiator_tlo = content[12];
radiator_thi = content[13];
} else
{
room_tlo = content[9];
room_thi = content[10];
radiator_tlo = content[11];
radiator_thi = content[12];
}
// Room Temperature
uchar room_tlo = content[20];
uchar room_thi = content[21];
double room_t = (256.0*room_thi+room_tlo)/100;
temp_room_ = room_t;
@ -196,8 +212,6 @@ void MeterFHKVDataIII::processContent(Telegram *t)
// t->addMoreExplanation(offset, " current room temparature (%f °C)", room_ts);
// Radiator Temperature
uchar radiator_tlo = content[22];
uchar radiator_thi = content[23];
double radiator_t = (256.0*radiator_thi+radiator_tlo)/100;
temp_radiator_ = radiator_t;

Wyświetl plik

@ -1558,19 +1558,7 @@ bool Telegram::parseTPL(vector<uchar>::iterator &pos)
case CI_Field_Values::TPL_79: return parse_TPL_79(pos);
case CI_Field_Values::TPL_7A: return parse_TPL_7A(pos);
case CI_Field_Values::MFCT_SPECIFIC_A1:
case CI_Field_Values::MFCT_SPECIFIC_A0: {
bool _ignore_header_change = false;
if(dll_type == 0x80 && dll_mfct == 0x5068) { // Techem Heat Cost Allocator
_ignore_header_change = true;
}
if(!_ignore_header_change) {
header_size = distance(frame.begin(), pos);
}
suffix_size = 0;
return true; // Manufacturer specific telegram payload. Oh well....
}
case CI_Field_Values::MFCT_SPECIFIC_A0:
case CI_Field_Values::MFCT_SPECIFIC_A2:
{
header_size = distance(frame.begin(), pos);

Wyświetl plik

@ -70,6 +70,11 @@ Received telegram from: 11776622
type: Heat Cost Allocator (0x80)
ver: 0x69
driver: fhkvdataiii
Received telegram from: 11111234
manufacturer: (TCH) Techem Service (0x5068)
type: Heat Cost Allocator (0x80)
ver: 0x94
driver: fhkvdataiii
Received telegram from: 14542076
manufacturer: (TCH) Techem Service (0x5068)
type: Heat Cost Allocator (0x08)

Wyświetl plik

@ -18,6 +18,7 @@ METERS="MyWarmWater supercom587 12345678 NOKEY
Duschagain mkradio4 02410120 NOKEY
HeatMeter vario451 58234965 NOKEY
Room fhkvdataiii 11776622 NOKEY
Room fhkvdataiii 11111234 NOKEY
Rooom fhkvdataiv 14542076 FCF41938F63432975B52505F547FCEDF
Gran101 gransystems 18046178 NOKEY
Gran301 gransystems 20100117 NOKEY