Source code for juham_automation.ts.electricityprice_ts

from datetime import datetime
import time
import json
from typing import Any, Dict, Optional, cast
from typing_extensions import override

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


[docs] class ElectricityPriceTs(JuhamTs): """Spot electricity price for reading hourly electricity prices from""" def __init__(self, name: str = "electricityprice_ts") -> None: super().__init__(name) self.spot_topic = self.make_topic_name("spot")
[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.spot_topic)
[docs] @override def on_message(self, client: object, userdata: Any, msg: MqttMsg) -> None: if msg.topic == self.spot_topic: em = json.loads(msg.payload.decode()) self.on_spot(em) else: super().on_message(client, userdata, msg)
[docs] def on_spot(self, m: dict[Any, Any]) -> None: """Write hourly spot electricity prices to time series database. Args: m (dict): holding hourlys spot electricity prices """ for h in m: point = ( self.measurement("spot") .tag("hour", h["Timestamp"]) .field("value", h["PriceWithTax"]) .time(epoc2utc(h["Timestamp"])) ) self.write(point)