try fix
Some checks failed
Validate / Validate (push) Has been cancelled

This commit is contained in:
2026-05-31 12:07:03 +02:00
parent c3f160919a
commit abb3c346de

View File

@@ -489,9 +489,9 @@ class JackeryDataCoordinator:
self.add_switch_entities_callback = None # Callback to add new switch entities self.add_switch_entities_callback = None # Callback to add new switch entities
self._data_cache = {} # Cache for merged data from status and events self._data_cache = {} # Cache for merged data from status and events
# Topic patterns # Topic patterns — device-specific so multiple instances don't cross-receive
self._topic_status_wildcard = f"{self._topic_root}/device/+/status" self._topic_status = f"{self._topic_root}/device/{self._device_sn}/status"
self._topic_event_wildcard = f"{self._topic_root}/device/+/event" self._topic_event = f"{self._topic_root}/device/{self._device_sn}/event"
def register_sensor(self, sensor_id: str, entity: "JackerySensor") -> None: def register_sensor(self, sensor_id: str, entity: "JackerySensor") -> None:
"""注册传感器实体.""" """注册传感器实体."""
@@ -515,20 +515,20 @@ class JackeryDataCoordinator:
await ha_mqtt.async_subscribe( await ha_mqtt.async_subscribe(
self.hass, self.hass,
self._topic_status_wildcard, self._topic_status,
message_received, message_received,
1 1
) )
_LOGGER.info(f"Coordinator subscribed to: {self._topic_status_wildcard}") _LOGGER.info(f"Coordinator subscribed to: {self._topic_status}")
# Subscribe to event topic for sub-device data (Type 101) # Subscribe to event topic for sub-device data (Type 101)
await ha_mqtt.async_subscribe( await ha_mqtt.async_subscribe(
self.hass, self.hass,
self._topic_event_wildcard, self._topic_event,
message_received, message_received,
1 1
) )
_LOGGER.info(f"Coordinator subscribed to: {self._topic_event_wildcard}") _LOGGER.info(f"Coordinator subscribed to: {self._topic_event}")
self._subscribed = True self._subscribed = True
@@ -557,17 +557,6 @@ class JackeryDataCoordinator:
if isinstance(payload, bytes): if isinstance(payload, bytes):
payload = payload.decode("utf-8") payload = payload.decode("utf-8")
# Extract device SN from topic: {prefix}/device/{sn}/status OR .../event
match = re.search(rf"{self._topic_root}/device/([^/]+)/(status|event)", topic)
if match:
sn = match.group(1)
msg_type = match.group(2) # 'status' or 'event'
if not self._device_sn:
self._device_sn = sn
_LOGGER.info(f"Discovered device SN: {self._device_sn}")
elif self._device_sn != sn:
_LOGGER.debug(f"Received data from another device: {sn}")
return
# Parse Payload # Parse Payload
try: try: