Skip to content

Commit e1d9b04

Browse files
committed
Merge pull request #27 from sandeen/master
r900: decode leak, fraud, and backflow status flags
2 parents 9be534c + 2336082 commit e1d9b04

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

r900/r900.go

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -220,19 +220,23 @@ func (p Parser) Parse(indices []int) (msgs []parse.Message) {
220220

221221
id, _ := strconv.ParseUint(bits[:32], 2, 32)
222222
unkn1, _ := strconv.ParseUint(bits[32:40], 2, 8)
223-
unkn2, _ := strconv.ParseUint(bits[40:48], 2, 8)
223+
nouse, _ := strconv.ParseUint(bits[40:46], 2, 6)
224+
backflow, _ := strconv.ParseUint(bits[46:48], 2, 2)
224225
consumption, _ := strconv.ParseUint(bits[48:72], 2, 24)
225226
unkn3, _ := strconv.ParseUint(bits[72:74], 2, 2)
226-
unkn4, _ := strconv.ParseUint(bits[74:80], 2, 6)
227+
leak, _ := strconv.ParseUint(bits[74:78], 2, 4)
228+
leaknow, _ := strconv.ParseUint(bits[78:80], 2, 2)
227229

228230
var r900 R900
229231

230232
r900.ID = uint32(id)
231233
r900.Unkn1 = uint8(unkn1)
232-
r900.Unkn2 = uint8(unkn2)
234+
r900.NoUse = uint8(nouse)
235+
r900.BackFlow = uint8(backflow)
233236
r900.Consumption = uint32(consumption)
234237
r900.Unkn3 = uint8(unkn3)
235-
r900.Unkn4 = uint8(unkn4)
238+
r900.Leak = uint8(leak)
239+
r900.LeakNow = uint8(leaknow)
236240

237241
msgs = append(msgs, r900)
238242
}
@@ -243,10 +247,13 @@ func (p Parser) Parse(indices []int) (msgs []parse.Message) {
243247
type R900 struct {
244248
ID uint32 `xml:",attr"` // 32 bits
245249
Unkn1 uint8 `xml:",attr"` // 8 bits
246-
Unkn2 uint8 `xml:",attr"` // 8 bits
250+
NoUse uint8 `xml:",attr"` // 6 bits, day bins of no use
251+
BackFlow uint8 `xml:",attr"` // 2 bits, backflow past 35d hi/lo
247252
Consumption uint32 `xml:",attr"` // 24 bits
248253
Unkn3 uint8 `xml:",attr"` // 2 bits
249-
Unkn4 uint8 `xml:",attr"` // 6 bits
254+
Leak uint8 `xml:",attr"` // 4 bits, day bins of leak
255+
LeakNow uint8 `xml:",attr"` // 2 bits, leak past 24h hi/lo
256+
250257
}
251258

252259
func (r900 R900) MsgType() string {
@@ -262,23 +269,27 @@ func (r900 R900) MeterType() uint8 {
262269
}
263270

264271
func (r900 R900) String() string {
265-
return fmt.Sprintf("{ID:%10d Unkn1:0x%02X Unkn2:0x%02X Consumption:%8d Unkn3:0x%02X Unkn4:0x%02X}",
272+
return fmt.Sprintf("{ID:%10d Unkn1:0x%02X NoUse:%2d BackFlow:%1d Consumption:%8d Unkn3:0x%02X Leak:%2d LeakNow:%1d}",
266273
r900.ID,
267274
r900.Unkn1,
268-
r900.Unkn2,
275+
r900.NoUse,
276+
r900.BackFlow,
269277
r900.Consumption,
270278
r900.Unkn3,
271-
r900.Unkn4,
279+
r900.Leak,
280+
r900.LeakNow,
272281
)
273282
}
274283

275284
func (r900 R900) Record() (r []string) {
276285
r = append(r, strconv.FormatUint(uint64(r900.ID), 10))
277286
r = append(r, strconv.FormatUint(uint64(r900.Unkn1), 10))
278-
r = append(r, strconv.FormatUint(uint64(r900.Unkn2), 10))
287+
r = append(r, strconv.FormatUint(uint64(r900.NoUse), 10))
288+
r = append(r, strconv.FormatUint(uint64(r900.BackFlow), 10))
279289
r = append(r, strconv.FormatUint(uint64(r900.Consumption), 10))
280290
r = append(r, strconv.FormatUint(uint64(r900.Unkn3), 10))
281-
r = append(r, strconv.FormatUint(uint64(r900.Unkn4), 10))
291+
r = append(r, strconv.FormatUint(uint64(r900.Leak), 10))
292+
r = append(r, strconv.FormatUint(uint64(r900.LeakNow), 10))
282293

283294
return
284295
}

0 commit comments

Comments
 (0)