Create evcc_mqtt.py
This commit is contained in:
67
custom_components/pstryk/evcc_mqtt.py
Normal file
67
custom_components/pstryk/evcc_mqtt.py
Normal file
@ -0,0 +1,67 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user