Source code for juham.ts.energycostcalculator_record

from typing import Any
from typing_extensions import override
import json
from influxdb_client_3 import Point

from juham.base import Base, MqttMsg
from juham.base.jmqtt import JMqtt
from juham.base.time import (
    epoc2utc,
    timestampstr,
)


[docs] class EnergyCostCalculatorRecord(Base): """The EnergyCostCalculator recorder.""" def __init__(self, name: str = "ecc_record") -> None: super().__init__(name) self.topic_net_energy_balance = self.make_topic_name("net_energy_cost")
[docs] @override def on_connect(self, client: object, userdata: Any, flags: int, rc: int) -> None: super().on_connect(client, userdata, flags, rc) if rc == 0: self.subscribe(self.topic_net_energy_balance)
[docs] @override def on_message(self, client: object, userdata: Any, msg: MqttMsg) -> None: super().on_message(client, userdata, msg) if msg.topic == self.topic_net_energy_balance: m = json.loads(msg.payload.decode()) self.record_powerconsumption(m)
[docs] def record_powerconsumption(self, m: dict[str, Any]) -> None: """Record powerconsumption Args: m (dict[str, Any]): to be recorded """ site: str = m["site"] cost_hour: float = m["cost_hour"] cost_day: float = m["cost_day"] ts: float = m["ts"] try: point = ( Point("energycost") .tag("site", site) .field("cost", cost_hour) .field("cost_day", cost_day) .time(epoc2utc(ts)) ) self.write(point) except Exception as e: self.error(f"Cannot write energycost at {timestampstr(ts)}", str(e))