summarylogtreecommitdiffstats
path: root/new_meter.patch
blob: af6924af1cb53a06831c19b8a2df968ef7ca61e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
From 3dd4a804e08234168f88b59aba3285210b56aac6 Mon Sep 17 00:00:00 2001
From: "M. Greyson Christoforo" <grey@christoforo.net>
Date: Mon, 18 Aug 2025 11:48:50 -0600
Subject: [PATCH] add logic to decode the total kWh counter reported by my
 meter

---
 python/packetize.py | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/python/packetize.py b/python/packetize.py
index 665dd5d..54e30be 100644
--- a/python/packetize.py
+++ b/python/packetize.py
@@ -105,7 +105,7 @@ def process_packet(self, channel, pkt):
 
         if src & 0x80000000 == 0 and len(payload) > cmd_start:
             cmd_len = payload[cmd_start]
-            if cmd_len == 0x33 and len(payload) >= cmd_start + 1 + cmd_len:
+            if cmd_len in (0x33, 0xab) and len(payload) >= cmd_start + 1 + cmd_len - 2:
                 cmd_payload = payload[cmd_start + 1:cmd_start + 1 + cmd_len]
                 cmd = cmd_payload[1]
                 if cmd == 0xce:  # hourly usage data, every 6 hours
@@ -124,6 +124,14 @@ def process_packet(self, channel, pkt):
 
                     print()
 
+                elif cmd == 0x23:  # usage message
+                    print()
+
+                    main_reading = struct.unpack("<i", cmd_payload[15:19])[0]/100
+                    print(f"  Meter reading for meter #{src}: {main_reading} kWh")
+
+                    print()
+
     def forecast(self, noutput_items, ninputs):
         return [640] * ninputs