From 40f914214beb2c2e630a9d59bf8b08748ac6b90a Mon Sep 17 00:00:00 2001 From: Charles Garwood Date: Thu, 14 Dec 2023 12:59:37 -0500 Subject: [PATCH] Fix Fully Kiosk Browser MQTT event callbacks with non-standard event topics (#105735) --- .../components/fully_kiosk/entity.py | 4 +++- tests/components/fully_kiosk/test_switch.py | 24 +++++++++++++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/fully_kiosk/entity.py b/homeassistant/components/fully_kiosk/entity.py index 5fd9f75a6a0..b053508ae41 100644 --- a/homeassistant/components/fully_kiosk/entity.py +++ b/homeassistant/components/fully_kiosk/entity.py @@ -74,7 +74,8 @@ class FullyKioskEntity(CoordinatorEntity[FullyKioskDataUpdateCoordinator], Entit @callback def message_callback(message: mqtt.ReceiveMessage) -> None: payload = json.loads(message.payload) - event_callback(**payload) + if "event" in payload and payload["event"] == event: + event_callback(**payload) topic_template = data["settings"]["mqttEventTopic"] topic = ( @@ -82,4 +83,5 @@ class FullyKioskEntity(CoordinatorEntity[FullyKioskDataUpdateCoordinator], Entit .replace("$event", event) .replace("$deviceId", data["deviceID"]) ) + return await mqtt.async_subscribe(self.hass, topic, message_callback) diff --git a/tests/components/fully_kiosk/test_switch.py b/tests/components/fully_kiosk/test_switch.py index 20b5ed11998..3c0874384c2 100644 --- a/tests/components/fully_kiosk/test_switch.py +++ b/tests/components/fully_kiosk/test_switch.py @@ -107,19 +107,35 @@ async def test_switches_mqtt_update( assert entity assert entity.state == "on" - async_fire_mqtt_message(hass, "fully/event/onScreensaverStart/abcdef-123456", "{}") + async_fire_mqtt_message( + hass, + "fully/event/onScreensaverStart/abcdef-123456", + '{"deviceId": "abcdef-123456","event": "onScreensaverStart"}', + ) entity = hass.states.get("switch.amazon_fire_screensaver") assert entity.state == "on" - async_fire_mqtt_message(hass, "fully/event/onScreensaverStop/abcdef-123456", "{}") + async_fire_mqtt_message( + hass, + "fully/event/onScreensaverStop/abcdef-123456", + '{"deviceId": "abcdef-123456","event": "onScreensaverStop"}', + ) entity = hass.states.get("switch.amazon_fire_screensaver") assert entity.state == "off" - async_fire_mqtt_message(hass, "fully/event/screenOff/abcdef-123456", "{}") + async_fire_mqtt_message( + hass, + "fully/event/screenOff/abcdef-123456", + '{"deviceId": "abcdef-123456","event": "screenOff"}', + ) entity = hass.states.get("switch.amazon_fire_screen") assert entity.state == "off" - async_fire_mqtt_message(hass, "fully/event/screenOn/abcdef-123456", "{}") + async_fire_mqtt_message( + hass, + "fully/event/screenOn/abcdef-123456", + '{"deviceId": "abcdef-123456","event": "screenOn"}', + ) entity = hass.states.get("switch.amazon_fire_screen") assert entity.state == "on"