Add better message to deCONZ event logbook when information is available (#45545)

* Add better message when information is available

* Fix pylint
This commit is contained in:
Robert Svensson 2021-01-26 08:15:39 +01:00 committed by GitHub
parent d110d42913
commit 622906965d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 143 additions and 12 deletions

View File

@ -8,7 +8,107 @@ from homeassistant.helpers.event import Event
from .const import DOMAIN as DECONZ_DOMAIN
from .deconz_event import CONF_DECONZ_EVENT, DeconzEvent
from .device_trigger import _get_deconz_event_from_device_id
from .device_trigger import (
CONF_BOTH_BUTTONS,
CONF_BOTTOM_BUTTONS,
CONF_BUTTON_1,
CONF_BUTTON_2,
CONF_BUTTON_3,
CONF_BUTTON_4,
CONF_CLOSE,
CONF_DIM_DOWN,
CONF_DIM_UP,
CONF_DOUBLE_PRESS,
CONF_DOUBLE_TAP,
CONF_LEFT,
CONF_LONG_PRESS,
CONF_LONG_RELEASE,
CONF_MOVE,
CONF_OPEN,
CONF_QUADRUPLE_PRESS,
CONF_QUINTUPLE_PRESS,
CONF_RIGHT,
CONF_ROTATE_FROM_SIDE_1,
CONF_ROTATE_FROM_SIDE_2,
CONF_ROTATE_FROM_SIDE_3,
CONF_ROTATE_FROM_SIDE_4,
CONF_ROTATE_FROM_SIDE_5,
CONF_ROTATE_FROM_SIDE_6,
CONF_ROTATED,
CONF_ROTATED_FAST,
CONF_ROTATION_STOPPED,
CONF_SHAKE,
CONF_SHORT_PRESS,
CONF_SHORT_RELEASE,
CONF_SIDE_1,
CONF_SIDE_2,
CONF_SIDE_3,
CONF_SIDE_4,
CONF_SIDE_5,
CONF_SIDE_6,
CONF_TOP_BUTTONS,
CONF_TRIPLE_PRESS,
CONF_TURN_OFF,
CONF_TURN_ON,
REMOTES,
_get_deconz_event_from_device_id,
)
ACTIONS = {
CONF_SHORT_PRESS: "Short press",
CONF_SHORT_RELEASE: "Short release",
CONF_LONG_PRESS: "Long press",
CONF_LONG_RELEASE: "Long release",
CONF_DOUBLE_PRESS: "Double press",
CONF_TRIPLE_PRESS: "Triple press",
CONF_QUADRUPLE_PRESS: "Quadruple press",
CONF_QUINTUPLE_PRESS: "Quintuple press",
CONF_ROTATED: "Rotated",
CONF_ROTATED_FAST: "Rotated fast",
CONF_ROTATION_STOPPED: "Rotated stopped",
CONF_MOVE: "Move",
CONF_DOUBLE_TAP: "Double tap",
CONF_SHAKE: "Shake",
CONF_ROTATE_FROM_SIDE_1: "Rotate from side 1",
CONF_ROTATE_FROM_SIDE_2: "Rotate from side 2",
CONF_ROTATE_FROM_SIDE_3: "Rotate from side 3",
CONF_ROTATE_FROM_SIDE_4: "Rotate from side 4",
CONF_ROTATE_FROM_SIDE_5: "Rotate from side 5",
CONF_ROTATE_FROM_SIDE_6: "Rotate from side 6",
}
INTERFACES = {
CONF_TURN_ON: "Turn on",
CONF_TURN_OFF: "Turn off",
CONF_DIM_UP: "Dim up",
CONF_DIM_DOWN: "Dim down",
CONF_LEFT: "Left",
CONF_RIGHT: "Right",
CONF_OPEN: "Open",
CONF_CLOSE: "Close",
CONF_BOTH_BUTTONS: "Both buttons",
CONF_TOP_BUTTONS: "Top buttons",
CONF_BOTTOM_BUTTONS: "Bottom buttons",
CONF_BUTTON_1: "Button 1",
CONF_BUTTON_2: "Button 2",
CONF_BUTTON_3: "Button 3",
CONF_BUTTON_4: "Button 4",
CONF_SIDE_1: "Side 1",
CONF_SIDE_2: "Side 2",
CONF_SIDE_3: "Side 3",
CONF_SIDE_4: "Side 4",
CONF_SIDE_5: "Side 5",
CONF_SIDE_6: "Side 6",
}
def _get_device_event_description(modelid: str, event: str) -> tuple:
"""Get device event description."""
device_event_descriptions: dict = REMOTES[modelid]
for event_type_tuple, event_dict in device_event_descriptions.items():
if event == event_dict[CONF_EVENT]:
return event_type_tuple
@callback
@ -25,9 +125,19 @@ def async_describe_events(
hass, event.data[ATTR_DEVICE_ID]
)
if deconz_event.device.modelid not in REMOTES:
return {
"name": f"{deconz_event.device.name}",
"message": f"fired event '{event.data[CONF_EVENT]}'.",
}
action, interface = _get_device_event_description(
deconz_event.device.modelid, event.data[CONF_EVENT]
)
return {
"name": f"{deconz_event.device.name}",
"message": f"fired event '{event.data[CONF_EVENT]}'.",
"message": f"'{ACTIONS[action]}' event for '{INTERFACES[interface]}' was fired.",
}
async_describe_event(DECONZ_DOMAIN, CONF_DECONZ_EVENT, async_describe_deconz_event)

View File

@ -24,35 +24,56 @@ async def test_humanifying_deconz_event(hass):
"state": {"buttonevent": 1000},
"config": {},
"uniqueid": "00:00:00:00:00:00:00:01-00",
}
},
"1": {
"id": "Hue remote id",
"name": "Hue remote",
"type": "ZHASwitch",
"modelid": "RWL021",
"state": {"buttonevent": 1000},
"config": {},
"uniqueid": "00:00:00:00:00:00:00:02-00",
},
}
config_entry = await setup_deconz_integration(hass, get_state_response=data)
gateway = get_gateway_from_config_entry(hass, config_entry)
event = gateway.events[0]
hass.config.components.add("recorder")
assert await async_setup_component(hass, "logbook", {})
entity_attr_cache = logbook.EntityAttributeCache(hass)
event1 = list(
events = list(
logbook.humanify(
hass,
[
MockLazyEventPartialState(
CONF_DECONZ_EVENT,
{
CONF_DEVICE_ID: event.device_id,
CONF_DEVICE_ID: gateway.events[0].device_id,
CONF_EVENT: 2000,
CONF_ID: event.event_id,
CONF_UNIQUE_ID: event.serial,
CONF_ID: gateway.events[0].event_id,
CONF_UNIQUE_ID: gateway.events[0].serial,
},
),
MockLazyEventPartialState(
CONF_DECONZ_EVENT,
{
CONF_DEVICE_ID: gateway.events[1].device_id,
CONF_EVENT: 2001,
CONF_ID: gateway.events[1].event_id,
CONF_UNIQUE_ID: gateway.events[1].serial,
},
),
],
entity_attr_cache,
{},
)
)[0]
)
assert event1["name"] == "Switch 1"
assert event1["domain"] == "deconz"
assert event1["message"] == "fired event '2000'."
assert events[0]["name"] == "Switch 1"
assert events[0]["domain"] == "deconz"
assert events[0]["message"] == "fired event '2000'."
assert events[1]["name"] == "Hue remote"
assert events[1]["domain"] == "deconz"
assert events[1]["message"] == "'Long press' event for 'Dim up' was fired."