37 lines
1.2 KiB
Python
37 lines
1.2 KiB
Python
from threading import Event
|
|
from loguru import logger
|
|
from MqttBase import AbstractMqttPublisher
|
|
import json
|
|
import datetime
|
|
|
|
|
|
class RelaisPublish(AbstractMqttPublisher):
|
|
def __init__(self, config, modbusHandler):
|
|
super().__init__(config)
|
|
self.modbusHandler = modbusHandler
|
|
|
|
def localLoop(self):
|
|
cnt = 0
|
|
while not self.killBill:
|
|
cnt += 1
|
|
topic = self.config["relaisPublishTopic"]
|
|
payload = str(cnt)
|
|
|
|
try:
|
|
payload = {}
|
|
payload['status'] = "Error"
|
|
payload['timestamp'] = datetime.datetime.isoformat(datetime.datetime.utcnow())
|
|
v = self.modbusHandler.readHoldingRegister(1, 1)
|
|
logger.debug(f"{v}")
|
|
payload['state'] = 'Off' if v[0] == 0 else 'On'
|
|
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.info(f"mqtt message sent: {topic} -> {payloadStr}")
|
|
|
|
self.killEvent.wait(timeout=float(self.config["relaisPublishPeriod"]))
|