Skip to content

Commit 53a1a3f

Browse files
committed
Add QDS modes WW/HCA
1 parent 522b039 commit 53a1a3f

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

src/devices/m_bus.c

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ for further processing by an Application layer (outside this program).
2222
#define BLOCK2B_SIZE 118 // Maximum size of Block 2, format B
2323
#define BLOCK1_2B_SIZE 128
2424

25+
#define QDS_WW 0x06 /* Q_walk_by Warm Water */
26+
#define QDS_HCA 0x08 /* Q_walk_by Heat Cost Allocator */
27+
2528
// Convert two BCD encoded nibbles to an integer
2629
static unsigned bcd2int(uint8_t bcd)
2730
{
@@ -156,9 +159,13 @@ typedef struct {
156159
uint8_t tpci;
157160
uint8_t apci;
158161
/* 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;
162169
} m_bus_block2_t;
163170

164171
// Data structure for block 1
@@ -791,13 +798,15 @@ static int parse_block2(const m_bus_data_t *in, m_bus_block1_t *block1)
791798
if (block1->A_DevType == 6) {
792799
/* WarmWater */
793800
// 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;
797805
}
798806
if (block1->A_DevType == 8) {
799807
/* Heat Cost Allocator */
800808
// Value factor is 1, e.g. 123456 m3
809+
b2->q_mode = QDS_HCA;
801810
}
802811
}
803812
// 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_
940949
// "L", "Length", DATA_INT, block1->L,
941950
"data_length", "Data Length", DATA_INT, out->length,
942951
"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,
946958
"mic", "Integrity", DATA_STRING, "CRC",
947959
NULL);
948960
/* clang-format on */

0 commit comments

Comments
 (0)