diff --git a/tests/components/deconz/conftest.py b/tests/components/deconz/conftest.py index 9beabdc2b15..b0d64e3231f 100644 --- a/tests/components/deconz/conftest.py +++ b/tests/components/deconz/conftest.py @@ -122,6 +122,8 @@ def fixture_get_request( if "state" in light_payload: light_payload = {"0": light_payload} data.setdefault("lights", light_payload) + if "state" in sensor_payload or "config" in sensor_payload: + sensor_payload = {"0": sensor_payload} data.setdefault("sensors", sensor_payload) def __mock_requests(host: str = "") -> None: @@ -185,16 +187,13 @@ def fixture_light_data() -> dict[str, Any]: @pytest.fixture(name="sensor_payload") -def fixture_sensor_data(sensor_1_payload: dict[str, Any]) -> dict[str, Any]: - """Sensor data.""" - if sensor_1_payload: - return {"1": sensor_1_payload} - return {} +def fixture_sensor_data() -> dict[str, Any]: + """Sensor data. - -@pytest.fixture(name="sensor_1_payload") -def fixture_sensor_1_data() -> dict[str, Any]: - """Sensor 1 data.""" + Should be + - one sensor data payload {"config": ..., "state": ...} ("0") + - multiple sensors {"1": ..., "2": ...} + """ return {} diff --git a/tests/components/deconz/test_alarm_control_panel.py b/tests/components/deconz/test_alarm_control_panel.py index 7836a3ee3b4..7dd7dc49603 100644 --- a/tests/components/deconz/test_alarm_control_panel.py +++ b/tests/components/deconz/test_alarm_control_panel.py @@ -70,32 +70,30 @@ from tests.test_util.aiohttp import AiohttpClientMocker "sensor_payload", [ { - "0": { - "config": { - "battery": 95, - "enrolled": 1, - "on": True, - "pending": [], - "reachable": True, - }, - "ep": 1, - "etag": "5aaa1c6bae8501f59929539c6e8f44d6", - "lastseen": "2021-07-25T18:07Z", - "manufacturername": "lk", - "modelid": "ZB-KeypadGeneric-D0002", - "name": "Keypad", - "state": { - "action": "armed_stay", - "lastupdated": "2021-07-25T18:02:51.172", - "lowbattery": False, - "panel": "none", - "seconds_remaining": 55, - "tampered": False, - }, - "swversion": "3.13", - "type": "ZHAAncillaryControl", - "uniqueid": "00:00:00:00:00:00:00:00-00", - } + "config": { + "battery": 95, + "enrolled": 1, + "on": True, + "pending": [], + "reachable": True, + }, + "ep": 1, + "etag": "5aaa1c6bae8501f59929539c6e8f44d6", + "lastseen": "2021-07-25T18:07Z", + "manufacturername": "lk", + "modelid": "ZB-KeypadGeneric-D0002", + "name": "Keypad", + "state": { + "action": "armed_stay", + "lastupdated": "2021-07-25T18:02:51.172", + "lowbattery": False, + "panel": "none", + "seconds_remaining": 55, + "tampered": False, + }, + "swversion": "3.13", + "type": "ZHAAncillaryControl", + "uniqueid": "00:00:00:00:00:00:00:00-00", } ], ) diff --git a/tests/components/deconz/test_binary_sensor.py b/tests/components/deconz/test_binary_sensor.py index 79939288ace..4d6c89ccc4d 100644 --- a/tests/components/deconz/test_binary_sensor.py +++ b/tests/components/deconz/test_binary_sensor.py @@ -454,7 +454,7 @@ TEST_DATA = [ @pytest.mark.parametrize("config_entry_options", [{CONF_ALLOW_CLIP_SENSOR: True}]) -@pytest.mark.parametrize(("sensor_1_payload", "expected"), TEST_DATA) +@pytest.mark.parametrize(("sensor_payload", "expected"), TEST_DATA) async def test_binary_sensors( hass: HomeAssistant, device_registry: dr.DeviceRegistry, @@ -492,11 +492,7 @@ async def test_binary_sensors( # Change state - event_changed_sensor = { - "r": "sensors", - "id": "1", - "state": expected["websocket_event"], - } + event_changed_sensor = {"r": "sensors", "state": expected["websocket_event"]} await mock_websocket_data(event_changed_sensor) await hass.async_block_till_done() assert hass.states.get(expected["entity_id"]).state == expected["next_state"] @@ -514,7 +510,7 @@ async def test_binary_sensors( @pytest.mark.parametrize( - "sensor_1_payload", + "sensor_payload", [ { "name": "CLIP presence sensor", @@ -607,7 +603,6 @@ async def test_add_new_binary_sensor( event_added_sensor = { "e": "added", "r": "sensors", - "id": "1", "sensor": { "id": "Presence sensor id", "name": "Presence sensor", @@ -646,7 +641,6 @@ async def test_add_new_binary_sensor_ignored_load_entities_on_service_call( event_added_sensor = { "e": "added", "r": "sensors", - "id": "1", "sensor": sensor, } @@ -667,7 +661,7 @@ async def test_add_new_binary_sensor_ignored_load_entities_on_service_call( == 0 ) - deconz_payload["sensors"] = {"1": sensor} + deconz_payload["sensors"]["0"] = sensor mock_requests() await hass.services.async_call(DECONZ_DOMAIN, SERVICE_DEVICE_REFRESH) @@ -699,7 +693,6 @@ async def test_add_new_binary_sensor_ignored_load_entities_on_options_change( event_added_sensor = { "e": "added", "r": "sensors", - "id": "1", "sensor": sensor, } @@ -720,7 +713,7 @@ async def test_add_new_binary_sensor_ignored_load_entities_on_options_change( == 0 ) - deconz_payload["sensors"] = {"1": sensor} + deconz_payload["sensors"]["0"] = sensor mock_requests() hass.config_entries.async_update_entry( diff --git a/tests/components/deconz/test_climate.py b/tests/components/deconz/test_climate.py index 37e06148201..94b4a30b8d2 100644 --- a/tests/components/deconz/test_climate.py +++ b/tests/components/deconz/test_climate.py @@ -54,36 +54,34 @@ from tests.test_util.aiohttp import AiohttpClientMocker "sensor_payload", [ { - "0": { - "config": { - "battery": 59, - "displayflipped": None, - "heatsetpoint": 2100, - "locked": True, - "mountingmode": None, - "offset": 0, - "on": True, - "reachable": True, - }, - "ep": 1, - "etag": "6130553ac247174809bae47144ee23f8", - "lastseen": "2020-11-29T19:31Z", - "manufacturername": "Danfoss", - "modelid": "eTRV0100", - "name": "thermostat", - "state": { - "errorcode": None, - "lastupdated": "2020-11-29T19:28:40.665", - "mountingmodeactive": False, - "on": True, - "temperature": 2102, - "valve": 24, - "windowopen": "Closed", - }, - "swversion": "01.02.0008 01.02", - "type": "ZHAThermostat", - "uniqueid": "14:b4:57:ff:fe:d5:4e:77-01-0201", - } + "config": { + "battery": 59, + "displayflipped": None, + "heatsetpoint": 2100, + "locked": True, + "mountingmode": None, + "offset": 0, + "on": True, + "reachable": True, + }, + "ep": 1, + "etag": "6130553ac247174809bae47144ee23f8", + "lastseen": "2020-11-29T19:31Z", + "manufacturername": "Danfoss", + "modelid": "eTRV0100", + "name": "thermostat", + "state": { + "errorcode": None, + "lastupdated": "2020-11-29T19:28:40.665", + "mountingmodeactive": False, + "on": True, + "temperature": 2102, + "valve": 24, + "windowopen": "Closed", + }, + "swversion": "01.02.0008 01.02", + "type": "ZHAThermostat", + "uniqueid": "14:b4:57:ff:fe:d5:4e:77-01-0201", } ], ) @@ -179,19 +177,17 @@ async def test_simple_climate_device( "sensor_payload", [ { - "1": { - "name": "Thermostat", - "type": "ZHAThermostat", - "state": {"on": True, "temperature": 2260, "valve": 30}, - "config": { - "battery": 100, - "heatsetpoint": 2200, - "mode": "auto", - "offset": 10, - "reachable": True, - }, - "uniqueid": "00:00:00:00:00:00:00:00-00", - } + "name": "Thermostat", + "type": "ZHAThermostat", + "state": {"on": True, "temperature": 2260, "valve": 30}, + "config": { + "battery": 100, + "heatsetpoint": 2200, + "mode": "auto", + "offset": 10, + "reachable": True, + }, + "uniqueid": "00:00:00:00:00:00:00:00-00", } ], ) @@ -225,7 +221,6 @@ async def test_climate_device_without_cooling_support( event_changed_sensor = { "r": "sensors", - "id": "1", "config": {"mode": "off"}, } await mock_websocket_data(event_changed_sensor) @@ -241,7 +236,6 @@ async def test_climate_device_without_cooling_support( event_changed_sensor = { "r": "sensors", - "id": "1", "config": {"mode": "other"}, "state": {"on": True}, } @@ -258,7 +252,6 @@ async def test_climate_device_without_cooling_support( event_changed_sensor = { "r": "sensors", - "id": "1", "state": {"on": False}, } await mock_websocket_data(event_changed_sensor) @@ -272,7 +265,7 @@ async def test_climate_device_without_cooling_support( # Verify service calls - aioclient_mock = mock_put_request("/sensors/1/config") + aioclient_mock = mock_put_request("/sensors/0/config") # Service set HVAC mode to auto @@ -354,31 +347,29 @@ async def test_climate_device_without_cooling_support( "sensor_payload", [ { - "0": { - "config": { - "battery": 25, - "coolsetpoint": 1111, - "fanmode": None, - "heatsetpoint": 2222, - "mode": "heat", - "offset": 0, - "on": True, - "reachable": True, - }, - "ep": 1, - "etag": "074549903686a77a12ef0f06c499b1ef", - "lastseen": "2020-11-27T13:45Z", - "manufacturername": "Zen Within", - "modelid": "Zen-01", - "name": "Zen-01", - "state": { - "lastupdated": "2020-11-27T13:42:40.863", - "on": False, - "temperature": 2320, - }, - "type": "ZHAThermostat", - "uniqueid": "00:24:46:00:00:11:6f:56-01-0201", - } + "config": { + "battery": 25, + "coolsetpoint": 1111, + "fanmode": None, + "heatsetpoint": 2222, + "mode": "heat", + "offset": 0, + "on": True, + "reachable": True, + }, + "ep": 1, + "etag": "074549903686a77a12ef0f06c499b1ef", + "lastseen": "2020-11-27T13:45Z", + "manufacturername": "Zen Within", + "modelid": "Zen-01", + "name": "Zen-01", + "state": { + "lastupdated": "2020-11-27T13:42:40.863", + "on": False, + "temperature": 2320, + }, + "type": "ZHAThermostat", + "uniqueid": "00:24:46:00:00:11:6f:56-01-0201", } ], ) @@ -455,31 +446,29 @@ async def test_climate_device_with_cooling_support( "sensor_payload", [ { - "0": { - "config": { - "battery": 25, - "coolsetpoint": None, - "fanmode": "auto", - "heatsetpoint": 2222, - "mode": "heat", - "offset": 0, - "on": True, - "reachable": True, - }, - "ep": 1, - "etag": "074549903686a77a12ef0f06c499b1ef", - "lastseen": "2020-11-27T13:45Z", - "manufacturername": "Zen Within", - "modelid": "Zen-01", - "name": "Zen-01", - "state": { - "lastupdated": "2020-11-27T13:42:40.863", - "on": False, - "temperature": 2320, - }, - "type": "ZHAThermostat", - "uniqueid": "00:24:46:00:00:11:6f:56-01-0201", - } + "config": { + "battery": 25, + "coolsetpoint": None, + "fanmode": "auto", + "heatsetpoint": 2222, + "mode": "heat", + "offset": 0, + "on": True, + "reachable": True, + }, + "ep": 1, + "etag": "074549903686a77a12ef0f06c499b1ef", + "lastseen": "2020-11-27T13:45Z", + "manufacturername": "Zen Within", + "modelid": "Zen-01", + "name": "Zen-01", + "state": { + "lastupdated": "2020-11-27T13:42:40.863", + "on": False, + "temperature": 2320, + }, + "type": "ZHAThermostat", + "uniqueid": "00:24:46:00:00:11:6f:56-01-0201", } ], ) @@ -591,32 +580,30 @@ async def test_climate_device_with_fan_support( "sensor_payload", [ { - "0": { - "config": { - "battery": 25, - "coolsetpoint": None, - "fanmode": None, - "heatsetpoint": 2222, - "mode": "heat", - "preset": "auto", - "offset": 0, - "on": True, - "reachable": True, - }, - "ep": 1, - "etag": "074549903686a77a12ef0f06c499b1ef", - "lastseen": "2020-11-27T13:45Z", - "manufacturername": "Zen Within", - "modelid": "Zen-01", - "name": "Zen-01", - "state": { - "lastupdated": "2020-11-27T13:42:40.863", - "on": False, - "temperature": 2320, - }, - "type": "ZHAThermostat", - "uniqueid": "00:24:46:00:00:11:6f:56-01-0201", - } + "config": { + "battery": 25, + "coolsetpoint": None, + "fanmode": None, + "heatsetpoint": 2222, + "mode": "heat", + "preset": "auto", + "offset": 0, + "on": True, + "reachable": True, + }, + "ep": 1, + "etag": "074549903686a77a12ef0f06c499b1ef", + "lastseen": "2020-11-27T13:45Z", + "manufacturername": "Zen Within", + "modelid": "Zen-01", + "name": "Zen-01", + "state": { + "lastupdated": "2020-11-27T13:42:40.863", + "on": False, + "temperature": 2320, + }, + "type": "ZHAThermostat", + "uniqueid": "00:24:46:00:00:11:6f:56-01-0201", } ], ) @@ -775,19 +762,17 @@ async def test_clip_climate_device( "sensor_payload", [ { - "1": { - "name": "Thermostat", - "type": "ZHAThermostat", - "state": {"on": True, "temperature": 2260, "valve": 30}, - "config": { - "battery": 100, - "heatsetpoint": 2200, - "mode": "auto", - "offset": 10, - "reachable": True, - }, - "uniqueid": "00:00:00:00:00:00:00:00-00", - } + "name": "Thermostat", + "type": "ZHAThermostat", + "state": {"on": True, "temperature": 2260, "valve": 30}, + "config": { + "battery": 100, + "heatsetpoint": 2200, + "mode": "auto", + "offset": 10, + "reachable": True, + }, + "uniqueid": "00:00:00:00:00:00:00:00-00", } ], ) @@ -803,11 +788,7 @@ async def test_verify_state_update( == HVACAction.HEATING ) - event_changed_sensor = { - "r": "sensors", - "id": "1", - "state": {"on": False}, - } + event_changed_sensor = {"r": "sensors", "state": {"on": False}} await mock_websocket_data(event_changed_sensor) await hass.async_block_till_done() @@ -827,7 +808,6 @@ async def test_add_new_climate_device( event_added_sensor = { "e": "added", "r": "sensors", - "id": "1", "sensor": { "id": "Thermostat id", "name": "Thermostat", @@ -862,14 +842,12 @@ async def test_add_new_climate_device( "sensor_payload", [ { - "1": { - "name": "CLIP thermostat sensor", - "type": "CLIPThermostat", - "state": {}, - "config": {}, - "uniqueid": "00:00:00:00:00:00:00:00-00", - }, - } + "name": "CLIP thermostat sensor", + "type": "CLIPThermostat", + "state": {}, + "config": {}, + "uniqueid": "00:00:00:00:00:00:00:00-00", + }, ], ) @pytest.mark.parametrize("config_entry_options", [{CONF_ALLOW_CLIP_SENSOR: False}]) @@ -883,26 +861,24 @@ async def test_not_allow_clip_thermostat(hass: HomeAssistant) -> None: "sensor_payload", [ { - "0": { - "config": { - "battery": 25, - "heatsetpoint": 2222, - "mode": None, - "preset": "auto", - "offset": 0, - "on": True, - "reachable": True, - }, - "ep": 1, - "etag": "074549903686a77a12ef0f06c499b1ef", - "lastseen": "2020-11-27T13:45Z", - "manufacturername": "Zen Within", - "modelid": "Zen-01", - "name": "Zen-01", - "state": {"lastupdated": "none", "on": None, "temperature": 2290}, - "type": "ZHAThermostat", - "uniqueid": "00:24:46:00:00:11:6f:56-01-0201", - } + "config": { + "battery": 25, + "heatsetpoint": 2222, + "mode": None, + "preset": "auto", + "offset": 0, + "on": True, + "reachable": True, + }, + "ep": 1, + "etag": "074549903686a77a12ef0f06c499b1ef", + "lastseen": "2020-11-27T13:45Z", + "manufacturername": "Zen Within", + "modelid": "Zen-01", + "name": "Zen-01", + "state": {"lastupdated": "none", "on": None, "temperature": 2290}, + "type": "ZHAThermostat", + "uniqueid": "00:24:46:00:00:11:6f:56-01-0201", } ], ) @@ -922,38 +898,36 @@ async def test_no_mode_no_state(hass: HomeAssistant) -> None: "sensor_payload", [ { - "0": { - "config": { - "battery": 58, - "heatsetpoint": 2200, - "locked": False, - "mode": "heat", - "offset": -200, - "on": True, - "preset": "manual", - "reachable": True, - "schedule": {}, - "schedule_on": False, - "setvalve": False, - "windowopen_set": False, - }, - "ep": 1, - "etag": "404c15db68c318ebe7832ce5aa3d1e30", - "lastannounced": "2022-08-31T03:00:59Z", - "lastseen": "2022-09-19T11:58Z", - "manufacturername": "_TZE200_b6wax7g0", - "modelid": "TS0601", - "name": "Thermostat", - "state": { - "lastupdated": "2022-09-19T11:58:24.204", - "lowbattery": False, - "on": False, - "temperature": 2200, - "valve": 0, - }, - "type": "ZHAThermostat", - "uniqueid": "84:fd:27:ff:fe:8a:eb:89-01-0201", - } + "config": { + "battery": 58, + "heatsetpoint": 2200, + "locked": False, + "mode": "heat", + "offset": -200, + "on": True, + "preset": "manual", + "reachable": True, + "schedule": {}, + "schedule_on": False, + "setvalve": False, + "windowopen_set": False, + }, + "ep": 1, + "etag": "404c15db68c318ebe7832ce5aa3d1e30", + "lastannounced": "2022-08-31T03:00:59Z", + "lastseen": "2022-09-19T11:58Z", + "manufacturername": "_TZE200_b6wax7g0", + "modelid": "TS0601", + "name": "Thermostat", + "state": { + "lastupdated": "2022-09-19T11:58:24.204", + "lowbattery": False, + "on": False, + "temperature": 2200, + "valve": 0, + }, + "type": "ZHAThermostat", + "uniqueid": "84:fd:27:ff:fe:8a:eb:89-01-0201", } ], ) diff --git a/tests/components/deconz/test_deconz_event.py b/tests/components/deconz/test_deconz_event.py index 0e998776174..adbea618efb 100644 --- a/tests/components/deconz/test_deconz_event.py +++ b/tests/components/deconz/test_deconz_event.py @@ -243,32 +243,30 @@ async def test_deconz_events( "sensor_payload", [ { - "1": { - "config": { - "battery": 95, - "enrolled": 1, - "on": True, - "pending": [], - "reachable": True, - }, - "ep": 1, - "etag": "5aaa1c6bae8501f59929539c6e8f44d6", - "lastseen": "2021-07-25T18:07Z", - "manufacturername": "lk", - "modelid": "ZB-KeypadGeneric-D0002", - "name": "Keypad", - "state": { - "action": "invalid_code", - "lastupdated": "2021-07-25T18:02:51.172", - "lowbattery": False, - "panel": "exit_delay", - "seconds_remaining": 55, - "tampered": False, - }, - "swversion": "3.13", - "type": "ZHAAncillaryControl", - "uniqueid": "00:00:00:00:00:00:00:01-00", - } + "config": { + "battery": 95, + "enrolled": 1, + "on": True, + "pending": [], + "reachable": True, + }, + "ep": 1, + "etag": "5aaa1c6bae8501f59929539c6e8f44d6", + "lastseen": "2021-07-25T18:07Z", + "manufacturername": "lk", + "modelid": "ZB-KeypadGeneric-D0002", + "name": "Keypad", + "state": { + "action": "invalid_code", + "lastupdated": "2021-07-25T18:02:51.172", + "lowbattery": False, + "panel": "exit_delay", + "seconds_remaining": 55, + "tampered": False, + }, + "swversion": "3.13", + "type": "ZHAAncillaryControl", + "uniqueid": "00:00:00:00:00:00:00:01-00", } ], ) @@ -296,7 +294,6 @@ async def test_deconz_alarm_events( event_changed_sensor = { "r": "sensors", - "id": "1", "state": {"action": AncillaryControlAction.EMERGENCY}, } await mock_websocket_data(event_changed_sensor) @@ -318,7 +315,6 @@ async def test_deconz_alarm_events( event_changed_sensor = { "r": "sensors", - "id": "1", "state": {"action": AncillaryControlAction.FIRE}, } await mock_websocket_data(event_changed_sensor) @@ -340,7 +336,6 @@ async def test_deconz_alarm_events( event_changed_sensor = { "r": "sensors", - "id": "1", "state": {"action": AncillaryControlAction.INVALID_CODE}, } await mock_websocket_data(event_changed_sensor) @@ -362,7 +357,6 @@ async def test_deconz_alarm_events( event_changed_sensor = { "r": "sensors", - "id": "1", "state": {"action": AncillaryControlAction.PANIC}, } await mock_websocket_data(event_changed_sensor) @@ -384,7 +378,6 @@ async def test_deconz_alarm_events( event_changed_sensor = { "r": "sensors", - "id": "1", "state": {"action": AncillaryControlAction.ARMED_AWAY}, } await mock_websocket_data(event_changed_sensor) @@ -396,7 +389,6 @@ async def test_deconz_alarm_events( event_changed_sensor = { "r": "sensors", - "id": "1", "state": {"panel": AncillaryControlPanel.ARMED_AWAY}, } await mock_websocket_data(event_changed_sensor) @@ -420,29 +412,27 @@ async def test_deconz_alarm_events( "sensor_payload", [ { - "1": { - "config": { - "devicemode": "undirected", - "on": True, - "reachable": True, - "sensitivity": 3, - "triggerdistance": "medium", - }, - "etag": "13ff209f9401b317987d42506dd4cd79", - "lastannounced": None, - "lastseen": "2022-06-28T23:13Z", - "manufacturername": "aqara", - "modelid": "lumi.motion.ac01", - "name": "Aqara FP1", - "state": { - "lastupdated": "2022-06-28T23:13:38.577", - "presence": True, - "presenceevent": "leave", - }, - "swversion": "20210121", - "type": "ZHAPresence", - "uniqueid": "xx:xx:xx:xx:xx:xx:xx:xx-01-0406", - } + "config": { + "devicemode": "undirected", + "on": True, + "reachable": True, + "sensitivity": 3, + "triggerdistance": "medium", + }, + "etag": "13ff209f9401b317987d42506dd4cd79", + "lastannounced": None, + "lastseen": "2022-06-28T23:13Z", + "manufacturername": "aqara", + "modelid": "lumi.motion.ac01", + "name": "Aqara FP1", + "state": { + "lastupdated": "2022-06-28T23:13:38.577", + "presence": True, + "presenceevent": "leave", + }, + "swversion": "20210121", + "type": "ZHAPresence", + "uniqueid": "xx:xx:xx:xx:xx:xx:xx:xx-01-0406", } ], ) @@ -481,7 +471,6 @@ async def test_deconz_presence_events( ): event_changed_sensor = { "r": "sensors", - "id": "1", "state": {"presenceevent": presence_event}, } await mock_websocket_data(event_changed_sensor) @@ -500,7 +489,6 @@ async def test_deconz_presence_events( event_changed_sensor = { "r": "sensors", - "id": "1", "state": {"presenceevent": PresenceStatePresenceEvent.NINE}, } await mock_websocket_data(event_changed_sensor) @@ -524,28 +512,26 @@ async def test_deconz_presence_events( "sensor_payload", [ { - "1": { - "config": { - "battery": 100, - "on": True, - "reachable": True, - }, - "etag": "463728970bdb7d04048fc4373654f45a", - "lastannounced": "2022-07-03T13:57:59Z", - "lastseen": "2022-07-03T14:02Z", - "manufacturername": "Signify Netherlands B.V.", - "modelid": "RDM002", - "name": "RDM002 44", - "state": { - "expectedeventduration": 400, - "expectedrotation": 75, - "lastupdated": "2022-07-03T11:37:49.586", - "rotaryevent": 2, - }, - "swversion": "2.59.19", - "type": "ZHARelativeRotary", - "uniqueid": "xx:xx:xx:xx:xx:xx:xx:xx-14-fc00", - } + "config": { + "battery": 100, + "on": True, + "reachable": True, + }, + "etag": "463728970bdb7d04048fc4373654f45a", + "lastannounced": "2022-07-03T13:57:59Z", + "lastseen": "2022-07-03T14:02Z", + "manufacturername": "Signify Netherlands B.V.", + "modelid": "RDM002", + "name": "RDM002 44", + "state": { + "expectedeventduration": 400, + "expectedrotation": 75, + "lastupdated": "2022-07-03T11:37:49.586", + "rotaryevent": 2, + }, + "swversion": "2.59.19", + "type": "ZHARelativeRotary", + "uniqueid": "xx:xx:xx:xx:xx:xx:xx:xx-14-fc00", } ], ) @@ -575,7 +561,6 @@ async def test_deconz_relative_rotary_events( for rotary_event, duration, rotation in ((1, 100, 50), (2, 200, -50)): event_changed_sensor = { "r": "sensors", - "id": "1", "state": { "rotaryevent": rotary_event, "expectedeventduration": duration, @@ -600,7 +585,6 @@ async def test_deconz_relative_rotary_events( event_changed_sensor = { "r": "sensors", - "id": "1", "name": "123", } await mock_websocket_data(event_changed_sensor) diff --git a/tests/components/deconz/test_device_trigger.py b/tests/components/deconz/test_device_trigger.py index 97197589442..1d3196ba8e9 100644 --- a/tests/components/deconz/test_device_trigger.py +++ b/tests/components/deconz/test_device_trigger.py @@ -47,25 +47,23 @@ def stub_blueprint_populate_autouse(stub_blueprint_populate: None) -> None: "sensor_payload", [ { - "1": { - "config": { - "alert": "none", - "battery": 60, - "group": "10", - "on": True, - "reachable": True, - }, - "ep": 1, - "etag": "1b355c0b6d2af28febd7ca9165881952", - "manufacturername": "IKEA of Sweden", - "mode": 1, - "modelid": "TRADFRI on/off switch", - "name": "TRÅDFRI on/off switch ", - "state": {"buttonevent": 2002, "lastupdated": "2019-09-07T07:39:39"}, - "swversion": "1.4.018", - "type": "ZHASwitch", - "uniqueid": "d0:cf:5e:ff:fe:71:a4:3a-01-1000", - } + "config": { + "alert": "none", + "battery": 60, + "group": "10", + "on": True, + "reachable": True, + }, + "ep": 1, + "etag": "1b355c0b6d2af28febd7ca9165881952", + "manufacturername": "IKEA of Sweden", + "mode": 1, + "modelid": "TRADFRI on/off switch", + "name": "TRÅDFRI on/off switch ", + "state": {"buttonevent": 2002, "lastupdated": "2019-09-07T07:39:39"}, + "swversion": "1.4.018", + "type": "ZHASwitch", + "uniqueid": "d0:cf:5e:ff:fe:71:a4:3a-01-1000", } ], ) @@ -153,32 +151,30 @@ async def test_get_triggers( "sensor_payload", [ { - "1": { - "config": { - "battery": 95, - "enrolled": 1, - "on": True, - "pending": [], - "reachable": True, - }, - "ep": 1, - "etag": "5aaa1c6bae8501f59929539c6e8f44d6", - "lastseen": "2021-07-25T18:07Z", - "manufacturername": "lk", - "modelid": "ZB-KeypadGeneric-D0002", - "name": "Keypad", - "state": { - "action": "armed_stay", - "lastupdated": "2021-07-25T18:02:51.172", - "lowbattery": False, - "panel": "exit_delay", - "seconds_remaining": 55, - "tampered": False, - }, - "swversion": "3.13", - "type": "ZHAAncillaryControl", - "uniqueid": "00:00:00:00:00:00:00:00-00", - } + "config": { + "battery": 95, + "enrolled": 1, + "on": True, + "pending": [], + "reachable": True, + }, + "ep": 1, + "etag": "5aaa1c6bae8501f59929539c6e8f44d6", + "lastseen": "2021-07-25T18:07Z", + "manufacturername": "lk", + "modelid": "ZB-KeypadGeneric-D0002", + "name": "Keypad", + "state": { + "action": "armed_stay", + "lastupdated": "2021-07-25T18:02:51.172", + "lowbattery": False, + "panel": "exit_delay", + "seconds_remaining": 55, + "tampered": False, + }, + "swversion": "3.13", + "type": "ZHAAncillaryControl", + "uniqueid": "00:00:00:00:00:00:00:00-00", } ], ) @@ -250,24 +246,22 @@ async def test_get_triggers_for_alarm_event( "sensor_payload", [ { - "1": { - "config": { - "alert": "none", - "group": "10", - "on": True, - "reachable": True, - }, - "ep": 1, - "etag": "1b355c0b6d2af28febd7ca9165881952", - "manufacturername": "IKEA of Sweden", - "mode": 1, - "modelid": "Unsupported model", - "name": "TRÅDFRI on/off switch ", - "state": {"buttonevent": 2002, "lastupdated": "2019-09-07T07:39:39"}, - "swversion": "1.4.018", - "type": "ZHASwitch", - "uniqueid": "d0:cf:5e:ff:fe:71:a4:3a-01-1000", - } + "config": { + "alert": "none", + "group": "10", + "on": True, + "reachable": True, + }, + "ep": 1, + "etag": "1b355c0b6d2af28febd7ca9165881952", + "manufacturername": "IKEA of Sweden", + "mode": 1, + "modelid": "Unsupported model", + "name": "TRÅDFRI on/off switch ", + "state": {"buttonevent": 2002, "lastupdated": "2019-09-07T07:39:39"}, + "swversion": "1.4.018", + "type": "ZHASwitch", + "uniqueid": "d0:cf:5e:ff:fe:71:a4:3a-01-1000", } ], ) @@ -293,25 +287,23 @@ async def test_get_triggers_manage_unsupported_remotes( "sensor_payload", [ { - "1": { - "config": { - "alert": "none", - "battery": 60, - "group": "10", - "on": True, - "reachable": True, - }, - "ep": 1, - "etag": "1b355c0b6d2af28febd7ca9165881952", - "manufacturername": "IKEA of Sweden", - "mode": 1, - "modelid": "TRADFRI on/off switch", - "name": "TRÅDFRI on/off switch ", - "state": {"buttonevent": 2002, "lastupdated": "2019-09-07T07:39:39"}, - "swversion": "1.4.018", - "type": "ZHASwitch", - "uniqueid": "d0:cf:5e:ff:fe:71:a4:3a-01-1000", - } + "config": { + "alert": "none", + "battery": 60, + "group": "10", + "on": True, + "reachable": True, + }, + "ep": 1, + "etag": "1b355c0b6d2af28febd7ca9165881952", + "manufacturername": "IKEA of Sweden", + "mode": 1, + "modelid": "TRADFRI on/off switch", + "name": "TRÅDFRI on/off switch ", + "state": {"buttonevent": 2002, "lastupdated": "2019-09-07T07:39:39"}, + "swversion": "1.4.018", + "type": "ZHASwitch", + "uniqueid": "d0:cf:5e:ff:fe:71:a4:3a-01-1000", } ], ) @@ -353,7 +345,6 @@ async def test_functional_device_trigger( event_changed_sensor = { "r": "sensors", - "id": "1", "state": {"buttonevent": 1002}, } await mock_websocket_data(event_changed_sensor) diff --git a/tests/components/deconz/test_gateway.py b/tests/components/deconz/test_gateway.py index cafead19d69..bc7c3362d6b 100644 --- a/tests/components/deconz/test_gateway.py +++ b/tests/components/deconz/test_gateway.py @@ -121,13 +121,11 @@ async def test_gateway_device_configuration_url_when_addon( "sensor_payload", [ { - "1": { - "name": "presence", - "type": "ZHAPresence", - "state": {"presence": False}, - "config": {"on": True, "reachable": True}, - "uniqueid": "00:00:00:00:00:00:00:00-00", - } + "name": "presence", + "type": "ZHAPresence", + "state": {"presence": False}, + "config": {"on": True, "reachable": True}, + "uniqueid": "00:00:00:00:00:00:00:00-00", } ], ) diff --git a/tests/components/deconz/test_lock.py b/tests/components/deconz/test_lock.py index 3ebd4fea978..923e8d768c8 100644 --- a/tests/components/deconz/test_lock.py +++ b/tests/components/deconz/test_lock.py @@ -96,27 +96,25 @@ async def test_lock_from_light( "sensor_payload", [ { - "1": { - "config": { - "battery": 100, - "lock": False, - "on": True, - "reachable": True, - }, - "ep": 11, - "etag": "a43862f76b7fa48b0fbb9107df123b0e", - "lastseen": "2021-03-06T22:25Z", - "manufacturername": "Onesti Products AS", - "modelid": "easyCodeTouch_v1", - "name": "Door lock", - "state": { - "lastupdated": "2021-03-06T21:25:45.624", - "lockstate": "unlocked", - }, - "swversion": "20201211", - "type": "ZHADoorLock", - "uniqueid": "00:00:00:00:00:00:00:00-00", - } + "config": { + "battery": 100, + "lock": False, + "on": True, + "reachable": True, + }, + "ep": 11, + "etag": "a43862f76b7fa48b0fbb9107df123b0e", + "lastseen": "2021-03-06T22:25Z", + "manufacturername": "Onesti Products AS", + "modelid": "easyCodeTouch_v1", + "name": "Door lock", + "state": { + "lastupdated": "2021-03-06T21:25:45.624", + "lockstate": "unlocked", + }, + "swversion": "20201211", + "type": "ZHADoorLock", + "uniqueid": "00:00:00:00:00:00:00:00-00", } ], ) @@ -132,7 +130,6 @@ async def test_lock_from_sensor( event_changed_sensor = { "r": "sensors", - "id": "1", "state": {"lockstate": "locked"}, } await mock_websocket_data(event_changed_sensor) @@ -142,7 +139,7 @@ async def test_lock_from_sensor( # Verify service calls - aioclient_mock = mock_put_request("/sensors/1/config") + aioclient_mock = mock_put_request("/sensors/0/config") # Service lock door diff --git a/tests/components/deconz/test_logbook.py b/tests/components/deconz/test_logbook.py index 2303ee3a298..d23680225f1 100644 --- a/tests/components/deconz/test_logbook.py +++ b/tests/components/deconz/test_logbook.py @@ -30,30 +30,28 @@ from tests.components.logbook.common import MockRow, mock_humanify "sensor_payload", [ { - "1": { - "config": { - "armed": "disarmed", - "enrolled": 0, - "on": True, - "panel": "disarmed", - "pending": [], - "reachable": True, - }, - "ep": 1, - "etag": "3c4008d74035dfaa1f0bb30d24468b12", - "lastseen": "2021-04-02T13:07Z", - "manufacturername": "Universal Electronics Inc", - "modelid": "URC4450BC0-X-R", - "name": "Keypad", - "state": { - "action": "armed_away,1111,55", - "lastupdated": "2021-04-02T13:08:18.937", - "lowbattery": False, - "tampered": True, - }, - "type": "ZHAAncillaryControl", - "uniqueid": "00:0d:6f:00:13:4f:61:39-01-0501", - } + "config": { + "armed": "disarmed", + "enrolled": 0, + "on": True, + "panel": "disarmed", + "pending": [], + "reachable": True, + }, + "ep": 1, + "etag": "3c4008d74035dfaa1f0bb30d24468b12", + "lastseen": "2021-04-02T13:07Z", + "manufacturername": "Universal Electronics Inc", + "modelid": "URC4450BC0-X-R", + "name": "Keypad", + "state": { + "action": "armed_away,1111,55", + "lastupdated": "2021-04-02T13:08:18.937", + "lowbattery": False, + "tampered": True, + }, + "type": "ZHAAncillaryControl", + "uniqueid": "00:0d:6f:00:13:4f:61:39-01-0501", } ], ) @@ -64,8 +62,8 @@ async def test_humanifying_deconz_alarm_event( sensor_payload: dict[str, Any], ) -> None: """Test humanifying deCONZ alarm event.""" - keypad_event_id = slugify(sensor_payload["1"]["name"]) - keypad_serial = serial_from_unique_id(sensor_payload["1"]["uniqueid"]) + keypad_event_id = slugify(sensor_payload["name"]) + keypad_serial = serial_from_unique_id(sensor_payload["uniqueid"]) keypad_entry = device_registry.async_get_device( identifiers={(DECONZ_DOMAIN, keypad_serial)} ) diff --git a/tests/components/deconz/test_number.py b/tests/components/deconz/test_number.py index c2f40bd9ff5..f027e6b5a9f 100644 --- a/tests/components/deconz/test_number.py +++ b/tests/components/deconz/test_number.py @@ -23,18 +23,16 @@ from tests.test_util.aiohttp import AiohttpClientMocker TEST_DATA = [ ( # Presence sensor - delay configuration { - "0": { - "name": "Presence sensor", - "type": "ZHAPresence", - "state": {"dark": False, "presence": False}, - "config": { - "delay": 0, - "on": True, - "reachable": True, - "temperature": 10, - }, - "uniqueid": "00:00:00:00:00:00:00:00-00", - } + "name": "Presence sensor", + "type": "ZHAPresence", + "state": {"dark": False, "presence": False}, + "config": { + "delay": 0, + "on": True, + "reachable": True, + "temperature": 10, + }, + "uniqueid": "00:00:00:00:00:00:00:00-00", }, { "entity_count": 3, @@ -61,18 +59,16 @@ TEST_DATA = [ ), ( # Presence sensor - duration configuration { - "0": { - "name": "Presence sensor", - "type": "ZHAPresence", - "state": {"dark": False, "presence": False}, - "config": { - "duration": 0, - "on": True, - "reachable": True, - "temperature": 10, - }, - "uniqueid": "00:00:00:00:00:00:00:00-00", - } + "name": "Presence sensor", + "type": "ZHAPresence", + "state": {"dark": False, "presence": False}, + "config": { + "duration": 0, + "on": True, + "reachable": True, + "temperature": 10, + }, + "uniqueid": "00:00:00:00:00:00:00:00-00", }, { "entity_count": 3, diff --git a/tests/components/deconz/test_select.py b/tests/components/deconz/test_select.py index 8a43181efaf..3864af65cd4 100644 --- a/tests/components/deconz/test_select.py +++ b/tests/components/deconz/test_select.py @@ -24,29 +24,27 @@ from tests.test_util.aiohttp import AiohttpClientMocker TEST_DATA = [ ( # Presence Device Mode { - "1": { - "config": { - "devicemode": "undirected", - "on": True, - "reachable": True, - "sensitivity": 3, - "triggerdistance": "medium", - }, - "etag": "13ff209f9401b317987d42506dd4cd79", - "lastannounced": None, - "lastseen": "2022-06-28T23:13Z", - "manufacturername": "aqara", - "modelid": "lumi.motion.ac01", - "name": "Aqara FP1", - "state": { - "lastupdated": "2022-06-28T23:13:38.577", - "presence": True, - "presenceevent": "leave", - }, - "swversion": "20210121", - "type": "ZHAPresence", - "uniqueid": "xx:xx:xx:xx:xx:xx:xx:xx-01-0406", - } + "config": { + "devicemode": "undirected", + "on": True, + "reachable": True, + "sensitivity": 3, + "triggerdistance": "medium", + }, + "etag": "13ff209f9401b317987d42506dd4cd79", + "lastannounced": None, + "lastseen": "2022-06-28T23:13Z", + "manufacturername": "aqara", + "modelid": "lumi.motion.ac01", + "name": "Aqara FP1", + "state": { + "lastupdated": "2022-06-28T23:13:38.577", + "presence": True, + "presenceevent": "leave", + }, + "swversion": "20210121", + "type": "ZHAPresence", + "uniqueid": "xx:xx:xx:xx:xx:xx:xx:xx-01-0406", }, { "entity_count": 5, @@ -59,35 +57,33 @@ TEST_DATA = [ "options": ["leftright", "undirected"], }, "option": PresenceConfigDeviceMode.LEFT_AND_RIGHT.value, - "request": "/sensors/1/config", + "request": "/sensors/0/config", "request_data": {"devicemode": "leftright"}, }, ), ( # Presence Sensitivity { - "1": { - "config": { - "devicemode": "undirected", - "on": True, - "reachable": True, - "sensitivity": 3, - "triggerdistance": "medium", - }, - "etag": "13ff209f9401b317987d42506dd4cd79", - "lastannounced": None, - "lastseen": "2022-06-28T23:13Z", - "manufacturername": "aqara", - "modelid": "lumi.motion.ac01", - "name": "Aqara FP1", - "state": { - "lastupdated": "2022-06-28T23:13:38.577", - "presence": True, - "presenceevent": "leave", - }, - "swversion": "20210121", - "type": "ZHAPresence", - "uniqueid": "xx:xx:xx:xx:xx:xx:xx:xx-01-0406", - } + "config": { + "devicemode": "undirected", + "on": True, + "reachable": True, + "sensitivity": 3, + "triggerdistance": "medium", + }, + "etag": "13ff209f9401b317987d42506dd4cd79", + "lastannounced": None, + "lastseen": "2022-06-28T23:13Z", + "manufacturername": "aqara", + "modelid": "lumi.motion.ac01", + "name": "Aqara FP1", + "state": { + "lastupdated": "2022-06-28T23:13:38.577", + "presence": True, + "presenceevent": "leave", + }, + "swversion": "20210121", + "type": "ZHAPresence", + "uniqueid": "xx:xx:xx:xx:xx:xx:xx:xx-01-0406", }, { "entity_count": 5, @@ -100,35 +96,33 @@ TEST_DATA = [ "options": ["High", "Medium", "Low"], }, "option": "Medium", - "request": "/sensors/1/config", + "request": "/sensors/0/config", "request_data": {"sensitivity": 2}, }, ), ( # Presence Trigger Distance { - "1": { - "config": { - "devicemode": "undirected", - "on": True, - "reachable": True, - "sensitivity": 3, - "triggerdistance": "medium", - }, - "etag": "13ff209f9401b317987d42506dd4cd79", - "lastannounced": None, - "lastseen": "2022-06-28T23:13Z", - "manufacturername": "aqara", - "modelid": "lumi.motion.ac01", - "name": "Aqara FP1", - "state": { - "lastupdated": "2022-06-28T23:13:38.577", - "presence": True, - "presenceevent": "leave", - }, - "swversion": "20210121", - "type": "ZHAPresence", - "uniqueid": "xx:xx:xx:xx:xx:xx:xx:xx-01-0406", - } + "config": { + "devicemode": "undirected", + "on": True, + "reachable": True, + "sensitivity": 3, + "triggerdistance": "medium", + }, + "etag": "13ff209f9401b317987d42506dd4cd79", + "lastannounced": None, + "lastseen": "2022-06-28T23:13Z", + "manufacturername": "aqara", + "modelid": "lumi.motion.ac01", + "name": "Aqara FP1", + "state": { + "lastupdated": "2022-06-28T23:13:38.577", + "presence": True, + "presenceevent": "leave", + }, + "swversion": "20210121", + "type": "ZHAPresence", + "uniqueid": "xx:xx:xx:xx:xx:xx:xx:xx-01-0406", }, { "entity_count": 5, @@ -141,7 +135,7 @@ TEST_DATA = [ "options": ["far", "medium", "near"], }, "option": PresenceConfigTriggerDistance.FAR.value, - "request": "/sensors/1/config", + "request": "/sensors/0/config", "request_data": {"triggerdistance": "far"}, }, ), diff --git a/tests/components/deconz/test_sensor.py b/tests/components/deconz/test_sensor.py index 7c83452c6be..c29ed09c4c0 100644 --- a/tests/components/deconz/test_sensor.py +++ b/tests/components/deconz/test_sensor.py @@ -899,7 +899,7 @@ TEST_DATA = [ ] -@pytest.mark.parametrize(("sensor_1_payload", "expected"), TEST_DATA) +@pytest.mark.parametrize(("sensor_payload", "expected"), TEST_DATA) @pytest.mark.parametrize("config_entry_options", [{CONF_ALLOW_CLIP_SENSOR: True}]) async def test_sensors( hass: HomeAssistant, @@ -952,7 +952,7 @@ async def test_sensors( # Change state - event_changed_sensor = {"r": "sensors", "id": "1"} + event_changed_sensor = {"r": "sensors"} event_changed_sensor |= expected["websocket_event"] await mock_websocket_data(event_changed_sensor) await hass.async_block_till_done() @@ -974,14 +974,12 @@ async def test_sensors( "sensor_payload", [ { - "1": { - "name": "CLIP temperature sensor", - "type": "CLIPTemperature", - "state": {"temperature": 2600}, - "config": {}, - "uniqueid": "00:00:00:00:00:00:00:02-00", - }, - } + "name": "CLIP temperature sensor", + "type": "CLIPTemperature", + "state": {"temperature": 2600}, + "config": {}, + "uniqueid": "00:00:00:00:00:00:00:02-00", + }, ], ) @pytest.mark.parametrize("config_entry_options", [{CONF_ALLOW_CLIP_SENSOR: False}]) @@ -1065,7 +1063,6 @@ async def test_add_new_sensor( event_added_sensor = { "e": "added", "r": "sensors", - "id": "1", "sensor": { "id": "Light sensor id", "name": "Light level sensor", @@ -1102,14 +1099,12 @@ async def test_dont_add_sensor_if_state_is_none( sensor_property: str, ) -> None: """Test sensor with scaled data is not created if state is None.""" - sensor_payload |= { - "1": { - "name": "Sensor 1", - "type": sensor_type, - "state": {sensor_property: None}, - "config": {}, - "uniqueid": "00:00:00:00:00:00:00:00-00", - } + sensor_payload["0"] = { + "name": "Sensor 1", + "type": sensor_type, + "state": {sensor_property: None}, + "config": {}, + "uniqueid": "00:00:00:00:00:00:00:00-00", } await config_entry_factory() @@ -1120,25 +1115,23 @@ async def test_dont_add_sensor_if_state_is_none( "sensor_payload", [ { - "1": { - "config": { - "on": True, - "reachable": True, - }, - "ep": 2, - "etag": "c2d2e42396f7c78e11e46c66e2ec0200", - "lastseen": "2020-11-20T22:48Z", - "manufacturername": "BOSCH", - "modelid": "AIR", - "name": "BOSCH Air quality sensor", - "state": { - "airquality": "poor", - "lastupdated": "2020-11-20T22:48:00.209", - }, - "swversion": "20200402", - "type": "ZHAAirQuality", - "uniqueid": "00:00:00:00:00:00:00:00-02-fdef", - } + "config": { + "on": True, + "reachable": True, + }, + "ep": 2, + "etag": "c2d2e42396f7c78e11e46c66e2ec0200", + "lastseen": "2020-11-20T22:48Z", + "manufacturername": "BOSCH", + "modelid": "AIR", + "name": "BOSCH Air quality sensor", + "state": { + "airquality": "poor", + "lastupdated": "2020-11-20T22:48:00.209", + }, + "swversion": "20200402", + "type": "ZHAAirQuality", + "uniqueid": "00:00:00:00:00:00:00:00-02-fdef", } ], ) @@ -1350,7 +1343,7 @@ async def test_special_danfoss_battery_creation( @pytest.mark.parametrize( "sensor_payload", - [{"0": {"type": "not supported", "name": "name", "state": {}, "config": {}}}], + [{"type": "not supported", "name": "name", "state": {}, "config": {}}], ) @pytest.mark.usefixtures("config_entry_setup") async def test_unsupported_sensor(hass: HomeAssistant) -> None: diff --git a/tests/components/deconz/test_services.py b/tests/components/deconz/test_services.py index ec9ace90116..72d69c4559e 100644 --- a/tests/components/deconz/test_services.py +++ b/tests/components/deconz/test_services.py @@ -239,13 +239,11 @@ async def test_service_refresh_devices( "sensor_payload", [ { - "1": { - "name": "Switch 1", - "type": "ZHASwitch", - "state": {"buttonevent": 1000}, - "config": {"battery": 100}, - "uniqueid": "00:00:00:00:00:00:00:01-00", - } + "name": "Switch 1", + "type": "ZHASwitch", + "state": {"buttonevent": 1000}, + "config": {"battery": 100}, + "uniqueid": "00:00:00:00:00:00:00:01-00", } ], ) @@ -284,7 +282,7 @@ async def test_service_refresh_devices_trigger_no_state_update( } }, "sensors": { - "1": { + "0": { "name": "Switch 1", "type": "ZHASwitch", "state": {"buttonevent": 1000}, @@ -319,13 +317,11 @@ async def test_service_refresh_devices_trigger_no_state_update( "sensor_payload", [ { - "1": { - "name": "Switch 1", - "type": "ZHASwitch", - "state": {"buttonevent": 1000, "gesture": 1}, - "config": {"battery": 100}, - "uniqueid": "00:00:00:00:00:00:00:03-00", - }, + "name": "Switch 1", + "type": "ZHASwitch", + "state": {"buttonevent": 1000, "gesture": 1}, + "config": {"battery": 100}, + "uniqueid": "00:00:00:00:00:00:00:03-00", } ], )