Files
ha_pstryk/custom_components/pstryk/evcc_mqtt.py
2025-05-12 15:21:16 +02:00

68 lines
2.1 KiB
Python

# evcc_mqtt.py
import logging
import paho.mqtt.client as mqtt
import json
from homeassistant.util import dt as dt_util
from .const import ATTR_MQTT_HOST, ATTR_MQTT_PORT, ATTR_MQTT_USER, ATTR_MQTT_PASS, ATTR_MQTT_TOPIC
_LOGGER = logging.getLogger(__name__)
class EVCCMQTTBridge:
def __init__(self, hass, config):
self.hass = hass
self.config = config
self.client = None
self.connected = False
async def connect(self):
def on_connect(client, userdata, flags, rc):
if rc == 0:
self.connected = True
_LOGGER.info("Connected to MQTT broker")
else:
self.connected = False
_LOGGER.error("MQTT connection failed: %s", rc)
self.client = mqtt.Client()
self.client.on_connect = on_connect
if self.config.get(ATTR_MQTT_USER):
self.client.username_pw_set(
self.config[ATTR_MQTT_USER],
self.config.get(ATTR_MQTT_PASS, "")
)
try:
await self.hass.async_add_executor_job(
self.client.connect,
self.config[ATTR_MQTT_HOST],
self.config.get(ATTR_MQTT_PORT, 1883),
60
)
self.client.loop_start()
except Exception as e:
_LOGGER.error("MQTT connection error: %s", str(e))
self.connected = False
async def publish(self, data):
if not self.connected:
await self.connect()
base_topic = self.config.get(ATTR_MQTT_TOPIC, "evcc/pstryk")
try:
self.client.publish(
f"{base_topic}/grid",
json.dumps(data["grid"]),
retain=True
)
self.client.publish(
f"{base_topic}/feedin",
json.dumps(data["feedin"]),
retain=True
)
_LOGGER.debug("Published EVCC data to MQTT")
except Exception as e:
_LOGGER.error("Error publishing to MQTT: %s", str(e))
self.connected = False