@@ -22,6 +22,9 @@ for further processing by an Application layer (outside this program).
22
22
#define BLOCK2B_SIZE 118 // Maximum size of Block 2, format B
23
23
#define BLOCK1_2B_SIZE 128
24
24
25
+ #define QDS_WW 0x06 /* Q_walk_by Warm Water */
26
+ #define QDS_HCA 0x08 /* Q_walk_by Heat Cost Allocator */
27
+
25
28
// Convert two BCD encoded nibbles to an integer
26
29
static unsigned bcd2int (uint8_t bcd )
27
30
{
@@ -156,9 +159,13 @@ typedef struct {
156
159
uint8_t tpci ;
157
160
uint8_t apci ;
158
161
/* Q-walk_by */
159
- float q_total ;
160
- float q_lastyear ;
161
- float q_lastmonth ;
162
+ int q_mode ;
163
+ int q_total ;
164
+ int q_lastyear ;
165
+ int q_lastmonth ;
166
+ float q_total_m3 ;
167
+ float q_lastyear_m3 ;
168
+ float q_lastmonth_m3 ;
162
169
} m_bus_block2_t ;
163
170
164
171
// Data structure for block 1
@@ -791,13 +798,15 @@ static int parse_block2(const m_bus_data_t *in, m_bus_block1_t *block1)
791
798
if (block1 -> A_DevType == 6 ) {
792
799
/* WarmWater */
793
800
// Value factor is 0.001, e.g. 123.456 m3
794
- b2 -> q_total /= 1000.0f ;
795
- b2 -> q_lastyear /= 1000.0f ;
796
- b2 -> q_lastmonth /= 1000.0f ;
801
+ b2 -> q_total_m3 = b2 -> q_total / 1000.0f ;
802
+ b2 -> q_lastyear_m3 = b2 -> q_lastyear / 1000.0f ;
803
+ b2 -> q_lastmonth_m3 = b2 -> q_lastmonth / 1000.0f ;
804
+ b2 -> q_mode = QDS_WW ;
797
805
}
798
806
if (block1 -> A_DevType == 8 ) {
799
807
/* Heat Cost Allocator */
800
808
// Value factor is 1, e.g. 123456 m3
809
+ b2 -> q_mode = QDS_HCA ;
801
810
}
802
811
}
803
812
// fprintf(stderr, "Instantaneous Value: %02x%02x : %f\n",b[9],b[10],((b[10]<<8)|b[9])*0.01);
@@ -940,9 +949,12 @@ static int m_bus_output_data(r_device *decoder, bitbuffer_t *bitbuffer, const m_
940
949
// "L", "Length", DATA_INT, block1->L,
941
950
"data_length" , "Data Length" , DATA_INT , out -> length ,
942
951
"data" , "Data" , DATA_STRING , str_buf ,
943
- "Q_total" , "Q_total" , DATA_COND , block1 -> block2 .CI == 0x78 , DATA_FORMAT , "%.3f m3" , DATA_DOUBLE , block1 -> block2 .q_total ,
944
- "Q_lastyear" , "Q_lastyear" , DATA_COND , block1 -> block2 .CI == 0x78 , DATA_FORMAT , "%.3f m3" , DATA_DOUBLE , block1 -> block2 .q_lastyear ,
945
- "Q_lastmonth" , "Q_lastmonth" , DATA_COND , block1 -> block2 .CI == 0x78 , DATA_FORMAT , "%.3f m3" , DATA_DOUBLE , block1 -> block2 .q_lastmonth ,
952
+ "Q_total_m3" , "Q_total_m3" , DATA_COND , block1 -> block2 .q_mode == QDS_WW , DATA_FORMAT , "%.3f m3" , DATA_DOUBLE , block1 -> block2 .q_total_m3 ,
953
+ "Q_lastyear_m3" , "Q_lastyear_m3" , DATA_COND , block1 -> block2 .q_mode == QDS_WW , DATA_FORMAT , "%.3f m3" , DATA_DOUBLE , block1 -> block2 .q_lastyear_m3 ,
954
+ "Q_lastmonth_m3" , "Q_lastmonth_m3" , DATA_COND , block1 -> block2 .q_mode == QDS_WW , DATA_FORMAT , "%.3f m3" , DATA_DOUBLE , block1 -> block2 .q_lastmonth_m3 ,
955
+ "Q_total" , "Q_total" , DATA_COND , block1 -> block2 .q_mode == QDS_HCA , DATA_DOUBLE , block1 -> block2 .q_total ,
956
+ "Q_lastyear" , "Q_lastyear" , DATA_COND , block1 -> block2 .q_mode == QDS_HCA , DATA_DOUBLE , block1 -> block2 .q_lastyear ,
957
+ "Q_lastmonth" , "Q_lastmonth" , DATA_COND , block1 -> block2 .q_mode == QDS_HCA , DATA_DOUBLE , block1 -> block2 .q_lastmonth ,
946
958
"mic" , "Integrity" , DATA_STRING , "CRC" ,
947
959
NULL );
948
960
/* clang-format on */
0 commit comments