Source code for juham_automation.ts.powerplan_ts

import json
from typing import Any
from typing_extensions import override

from masterpiece.mqtt import MqttMsg
from juham_core import JuhamTs
from juham_core.timeutils import epoc2utc


[docs] class PowerPlanTs(JuhamTs): """Power plan time series record. Listens powerplan topic and updates time series database accordingly. """ def __init__(self, name: str = "powerplan_ts") -> None: super().__init__(name) self.powerplan_topic = self.make_topic_name("powerplan")
[docs] @override def on_connect(self, client: object, userdata: Any, flags: int, rc: int) -> None: super().on_connect(client, userdata, flags, rc) self.subscribe(self.powerplan_topic)
[docs] @override def on_message(self, client: object, userdata: Any, msg: MqttMsg) -> None: super().on_message(client, userdata, msg) m = json.loads(msg.payload.decode()) schedule = m["Schedule"] uoi = m["UOI"] ts = m["Timestamp"] point = ( self.measurement("powerplan") .tag("unit", m["Unit"]) .field("state", m["State"]) # 1 on, 0 off .field("name", m["Unit"]) # e.g main_boiler .field("type", "C") # C=consumption, S = supply .field("power", 16.0) # kW .field("Schedule", schedule) # figures of merit .field("UOI", float(uoi)) # Utilitzation Optimizing Index .time(epoc2utc(ts)) ) self.write(point)