redis_state_listener fix
This commit is contained in:
@@ -127,27 +127,19 @@ async def redis_state_listener():
|
||||
|
||||
logger.info("Redis state listener connected")
|
||||
|
||||
while True:
|
||||
try:
|
||||
message = await asyncio.wait_for(
|
||||
pubsub.get_message(ignore_subscribe_messages=True),
|
||||
timeout=1.0
|
||||
)
|
||||
|
||||
if message and message["type"] == "message":
|
||||
data = message["data"]
|
||||
try:
|
||||
state_data = json.loads(data)
|
||||
if state_data.get("type") == "state" and state_data.get("device_id"):
|
||||
device_id = state_data["device_id"]
|
||||
payload = state_data.get("payload", {})
|
||||
device_states[device_id] = payload
|
||||
logger.debug(f"Updated state cache for {device_id}: {payload}")
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to parse state data: {e}")
|
||||
|
||||
except asyncio.TimeoutError:
|
||||
pass # No message, continue
|
||||
# listen() blocks async and waits for messages - prevents busy loop
|
||||
async for message in pubsub.listen():
|
||||
if message["type"] == "message":
|
||||
data = message["data"]
|
||||
try:
|
||||
state_data = json.loads(data)
|
||||
if state_data.get("type") == "state" and state_data.get("device_id"):
|
||||
device_id = state_data["device_id"]
|
||||
payload = state_data.get("payload", {})
|
||||
device_states[device_id] = payload
|
||||
logger.debug(f"Updated state cache for {device_id}: {payload}")
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to parse state data: {e}")
|
||||
|
||||
except asyncio.CancelledError:
|
||||
logger.info("Redis state listener cancelled")
|
||||
|
||||
Reference in New Issue
Block a user