some changes, meter reading works so far

This commit is contained in:
2022-11-20 22:39:46 +01:00
parent f30c8e7eb3
commit 3f0c80fd42
10 changed files with 220 additions and 101 deletions

View File

@ -0,0 +1,48 @@
from threading import Event
from loguru import logger
from MqttBase import AbstractMqttPublisher
import json
import datetime
REGISTERS = [
{ "addr":0x0048, "attr": "importEnergy", "name":"Import active energy", "unit":"kWh" },
{ "addr":0x004a, "attr": "exportEnergy", "name":"Export active energy", "unit":"kWh" },
{ "addr":0x000c, "attr": "activePower", "name":"Active power", "unit":"W" },
{ "addr":0x0058, "attr": "positivePower", "name":"Positive power", "unit":"W" },
{ "addr":0x005c, "attr": "reversePower", "name":"Reverse power", "unit":"W" },
{ "addr":0x0000, "attr": "voltage", "name":"Voltage", "unit":"V" },
{ "addr":0x0006, "attr": "current", "name":"Current", "unit":"A" }
]
class MeterPublish(AbstractMqttPublisher):
def __init__(self, config, modbusHandler):
super().__init__(config)
self.modbusHandler = modbusHandler
self.registers = REGISTERS
def localLoop(self):
cnt = 0
while not self.killBill:
cnt += 1
topic = self.config["meterPublishTopic"]
payload = str(cnt)
try:
payload = { r['attr']: 0.0 for r in self.registers }
payload['status'] = "Error"
payload['timestamp'] = datetime.datetime.isoformat(datetime.datetime.utcnow())
for reg in self.registers:
v = self.modbusHandler.readInputRegister(reg['addr'])
logger.info(f"{reg['name']}: {v} {reg['unit']}")
payload[reg['attr']] = float(f"{v:0.2f}")
payload['status'] = "Ok"
except Exception as e:
logger.error(f"Caught exception: {str(e)}")
payload['cnt'] = cnt
payloadStr = json.dumps(payload)
self.client.publish(topic, payloadStr)
logger.warning(f"mqtt message sent: {topic} -> {payloadStr}")
self.killEvent.wait(timeout=float(self.config["meterPublishPeriod"]))