# @name EVCC Battery # @desc SOC and charge/discharge power directly from evcc via MQTT # @author Daniel # @version 1.0 import string class EVCCBattery var soc var power var label var color def init() self.soc = nil self.power = nil self.label = nil self.color = 0xAAAAAA end def setup() mqtt.subscribe("evcc/site/battery/soc", / t, p -> self.on_msg(t, p)) mqtt.subscribe("evcc/site/battery/power", / t, p -> self.on_msg(t, p)) end def on_msg(topic, payload) var value = num(payload) if value == nil return end if topic == "evcc/site/battery/soc" self.soc = value elif topic == "evcc/site/battery/power" self.power = value end self.rebuild() end def rebuild() if self.soc == nil || self.power == nil return end var direction = "Idle" var watts = self.power self.color = 0xAAAAAA if self.power > 50 direction = "Discharging" self.color = 0xFFAA00 elif self.power < -50 direction = "Charging" self.color = 0x00FF66 watts = -watts elif watts < 0 watts = -watts end var kw = watts / 1000.0 self.label = "Battery " + str(int(round(self.soc))) + "% | " + direction + " " + string.format("%.2f", kw) + " kW" end def should_show() return self.label != nil end def draw() clear() if self.label == nil text(1, 6, "...", 0x666666) return end scroll_text(0, 6, width(), self.label, self.color) end end return EVCCBattery()