mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 21:27:38 +00:00
Add device entry id to events (#44407)
* Add device entry id to events * Only add device id if device is known for now
This commit is contained in:
parent
e9f7e67f4c
commit
c1027cace6
@ -12,6 +12,7 @@ import voluptuous as vol
|
|||||||
from homeassistant import config_entries
|
from homeassistant import config_entries
|
||||||
from homeassistant.components.binary_sensor import DEVICE_CLASSES_SCHEMA
|
from homeassistant.components.binary_sensor import DEVICE_CLASSES_SCHEMA
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
|
ATTR_DEVICE_ID,
|
||||||
CONF_COMMAND_OFF,
|
CONF_COMMAND_OFF,
|
||||||
CONF_COMMAND_ON,
|
CONF_COMMAND_ON,
|
||||||
CONF_DEVICE,
|
CONF_DEVICE,
|
||||||
@ -37,6 +38,7 @@ from homeassistant.const import (
|
|||||||
)
|
)
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import callback
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
from homeassistant.helpers.device_registry import DeviceRegistry
|
||||||
from homeassistant.helpers.restore_state import RestoreEntity
|
from homeassistant.helpers.restore_state import RestoreEntity
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
@ -275,6 +277,10 @@ async def async_setup_internal(hass, entry: config_entries.ConfigEntry):
|
|||||||
# Setup some per device config
|
# Setup some per device config
|
||||||
devices = _get_device_lookup(config[CONF_DEVICES])
|
devices = _get_device_lookup(config[CONF_DEVICES])
|
||||||
|
|
||||||
|
device_registry: DeviceRegistry = (
|
||||||
|
await hass.helpers.device_registry.async_get_registry()
|
||||||
|
)
|
||||||
|
|
||||||
# Declare the Handle event
|
# Declare the Handle event
|
||||||
@callback
|
@callback
|
||||||
def async_handle_receive(event):
|
def async_handle_receive(event):
|
||||||
@ -297,9 +303,18 @@ async def async_setup_internal(hass, entry: config_entries.ConfigEntry):
|
|||||||
data_bits = get_device_data_bits(event.device, devices)
|
data_bits = get_device_data_bits(event.device, devices)
|
||||||
device_id = get_device_id(event.device, data_bits=data_bits)
|
device_id = get_device_id(event.device, data_bits=data_bits)
|
||||||
|
|
||||||
# Register new devices
|
if device_id not in devices:
|
||||||
if config[CONF_AUTOMATIC_ADD] and device_id not in devices:
|
if config[CONF_AUTOMATIC_ADD]:
|
||||||
_add_device(event, device_id)
|
_add_device(event, device_id)
|
||||||
|
else:
|
||||||
|
return
|
||||||
|
|
||||||
|
device_entry = device_registry.async_get_device(
|
||||||
|
identifiers={(DOMAIN, *device_id)},
|
||||||
|
connections=set(),
|
||||||
|
)
|
||||||
|
if device_entry:
|
||||||
|
event_data[ATTR_DEVICE_ID] = device_entry.id
|
||||||
|
|
||||||
# Callback to HA registered components.
|
# Callback to HA registered components.
|
||||||
hass.helpers.dispatcher.async_dispatcher_send(SIGNAL_EVENT, event, device_id)
|
hass.helpers.dispatcher.async_dispatcher_send(SIGNAL_EVENT, event, device_id)
|
||||||
|
@ -5,6 +5,10 @@ from unittest.mock import call
|
|||||||
from homeassistant.components.rfxtrx import DOMAIN
|
from homeassistant.components.rfxtrx import DOMAIN
|
||||||
from homeassistant.components.rfxtrx.const import EVENT_RFXTRX_EVENT
|
from homeassistant.components.rfxtrx.const import EVENT_RFXTRX_EVENT
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import callback
|
||||||
|
from homeassistant.helpers.device_registry import (
|
||||||
|
DeviceRegistry,
|
||||||
|
async_get_registry as async_get_device_registry,
|
||||||
|
)
|
||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry
|
||||||
@ -75,6 +79,8 @@ async def test_fire_event(hass, rfxtrx):
|
|||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
await hass.async_start()
|
await hass.async_start()
|
||||||
|
|
||||||
|
device_registry: DeviceRegistry = await async_get_device_registry(hass)
|
||||||
|
|
||||||
calls = []
|
calls = []
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
@ -88,6 +94,16 @@ async def test_fire_event(hass, rfxtrx):
|
|||||||
await rfxtrx.signal("0b1100cd0213c7f210010f51")
|
await rfxtrx.signal("0b1100cd0213c7f210010f51")
|
||||||
await rfxtrx.signal("0716000100900970")
|
await rfxtrx.signal("0716000100900970")
|
||||||
|
|
||||||
|
device_id_1 = device_registry.async_get_device(
|
||||||
|
identifiers={("rfxtrx", "11", "0", "213c7f2:16")}, connections=set()
|
||||||
|
)
|
||||||
|
assert device_id_1
|
||||||
|
|
||||||
|
device_id_2 = device_registry.async_get_device(
|
||||||
|
identifiers={("rfxtrx", "16", "0", "00:90")}, connections=set()
|
||||||
|
)
|
||||||
|
assert device_id_2
|
||||||
|
|
||||||
assert calls == [
|
assert calls == [
|
||||||
{
|
{
|
||||||
"packet_type": 17,
|
"packet_type": 17,
|
||||||
@ -96,6 +112,7 @@ async def test_fire_event(hass, rfxtrx):
|
|||||||
"id_string": "213c7f2:16",
|
"id_string": "213c7f2:16",
|
||||||
"data": "0b1100cd0213c7f210010f51",
|
"data": "0b1100cd0213c7f210010f51",
|
||||||
"values": {"Command": "On", "Rssi numeric": 5},
|
"values": {"Command": "On", "Rssi numeric": 5},
|
||||||
|
"device_id": device_id_1.id,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"packet_type": 22,
|
"packet_type": 22,
|
||||||
@ -104,6 +121,7 @@ async def test_fire_event(hass, rfxtrx):
|
|||||||
"id_string": "00:90",
|
"id_string": "00:90",
|
||||||
"data": "0716000100900970",
|
"data": "0716000100900970",
|
||||||
"values": {"Command": "Chime", "Rssi numeric": 7, "Sound": 9},
|
"values": {"Command": "Chime", "Rssi numeric": 7, "Sound": 9},
|
||||||
|
"device_id": device_id_2.id,
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user