fix: mqtt integration
- Fixed subscription format to use QOS_1 constant - Added more detailed logging - Set initial state to 'closed' explicitly - Made publish_state handle both bool and str states - Added retain flag to state messages
This commit is contained in:
parent
2474253efa
commit
aa1b6b384d
|
|
@ -1,7 +1,7 @@
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
import asyncio
|
import asyncio
|
||||||
from typing import Optional, Callable
|
from typing import Optional, Callable, Union
|
||||||
from gmqtt import Client as MQTTClient
|
from gmqtt import Client as MQTTClient
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
|
@ -102,9 +102,10 @@ class HomeAssistantMQTT:
|
||||||
logger.info("Connected to MQTT broker")
|
logger.info("Connected to MQTT broker")
|
||||||
self._connected = True
|
self._connected = True
|
||||||
try:
|
try:
|
||||||
# Subscribe to command topic
|
# Subscribe to command topic using gmqtt's Subscription class
|
||||||
await self.client.subscribe([{'topic': self.command_topic, 'qos': 1}])
|
from gmqtt.mqtt.constants import QOS_1
|
||||||
logger.info(f"Subscribed to {self.command_topic}")
|
await self.client.subscribe([(self.command_topic, QOS_1)])
|
||||||
|
logger.info(f"Subscribed to command topic: {self.command_topic}")
|
||||||
|
|
||||||
# Publish discovery config
|
# Publish discovery config
|
||||||
config = {
|
config = {
|
||||||
|
|
@ -128,17 +129,21 @@ class HomeAssistantMQTT:
|
||||||
)
|
)
|
||||||
logger.info("Published Home Assistant discovery config")
|
logger.info("Published Home Assistant discovery config")
|
||||||
|
|
||||||
# Publish initial availability
|
# Publish initial availability and state
|
||||||
await self.client.publish(
|
await self.client.publish(
|
||||||
self.availability_topic,
|
self.availability_topic,
|
||||||
"online",
|
"online",
|
||||||
qos=1,
|
qos=1,
|
||||||
retain=True
|
retain=True
|
||||||
)
|
)
|
||||||
logger.info("Published initial availability state")
|
logger.info("Published availability: online")
|
||||||
|
|
||||||
|
await self.publish_state("closed")
|
||||||
|
logger.info("Published initial state: closed")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Error in post-connect setup: {e}", exc_info=True)
|
logger.error(f"Failed in post-connect setup: {e}", exc_info=True)
|
||||||
|
await self.client.disconnect()
|
||||||
|
|
||||||
async def connect(self):
|
async def connect(self):
|
||||||
"""Connect to MQTT broker"""
|
"""Connect to MQTT broker"""
|
||||||
|
|
@ -192,9 +197,11 @@ class HomeAssistantMQTT:
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Failed to subscribe to topic: {e}")
|
logger.error(f"Failed to subscribe to topic: {e}")
|
||||||
|
|
||||||
async def publish_state(self, state: str):
|
async def publish_state(self, state: Union[bool, str]):
|
||||||
"""Publish gate state"""
|
"""Publish gate state"""
|
||||||
await self.publish(self.state_topic, state)
|
if isinstance(state, bool):
|
||||||
|
state = "open" if state else "closed"
|
||||||
|
await self.publish(self.state_topic, state, retain=True)
|
||||||
|
|
||||||
def set_command_callback(self, callback: Callable):
|
def set_command_callback(self, callback: Callable):
|
||||||
"""Set callback for handling commands"""
|
"""Set callback for handling commands"""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue