Fix devolo_home_network devices not reporting a MAC address (#129021)
parent
90547da007
commit
2149ea1306
|
@ -9,6 +9,7 @@ from devolo_plc_api.device_api import (
|
||||||
)
|
)
|
||||||
from devolo_plc_api.plcnet_api import DataRate, LogicalNetwork
|
from devolo_plc_api.plcnet_api import DataRate, LogicalNetwork
|
||||||
|
|
||||||
|
from homeassistant.const import ATTR_CONNECTIONS
|
||||||
from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC, DeviceInfo
|
from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC, DeviceInfo
|
||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
from homeassistant.helpers.update_coordinator import (
|
from homeassistant.helpers.update_coordinator import (
|
||||||
|
@ -45,7 +46,6 @@ class DevoloEntity(Entity):
|
||||||
|
|
||||||
self._attr_device_info = DeviceInfo(
|
self._attr_device_info = DeviceInfo(
|
||||||
configuration_url=f"http://{self.device.ip}",
|
configuration_url=f"http://{self.device.ip}",
|
||||||
connections={(CONNECTION_NETWORK_MAC, self.device.mac)},
|
|
||||||
identifiers={(DOMAIN, str(self.device.serial_number))},
|
identifiers={(DOMAIN, str(self.device.serial_number))},
|
||||||
manufacturer="devolo",
|
manufacturer="devolo",
|
||||||
model=self.device.product,
|
model=self.device.product,
|
||||||
|
@ -53,6 +53,10 @@ class DevoloEntity(Entity):
|
||||||
serial_number=self.device.serial_number,
|
serial_number=self.device.serial_number,
|
||||||
sw_version=self.device.firmware_version,
|
sw_version=self.device.firmware_version,
|
||||||
)
|
)
|
||||||
|
if self.device.mac:
|
||||||
|
self._attr_device_info[ATTR_CONNECTIONS] = {
|
||||||
|
(CONNECTION_NETWORK_MAC, self.device.mac)
|
||||||
|
}
|
||||||
self._attr_translation_key = self.entity_description.key
|
self._attr_translation_key = self.entity_description.key
|
||||||
self._attr_unique_id = (
|
self._attr_unique_id = (
|
||||||
f"{self.device.serial_number}_{self.entity_description.key}"
|
f"{self.device.serial_number}_{self.entity_description.key}"
|
||||||
|
|
|
@ -50,7 +50,7 @@ class MockDevice(Device):
|
||||||
self, session_instance: httpx.AsyncClient | None = None
|
self, session_instance: httpx.AsyncClient | None = None
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Give a mocked device the needed properties."""
|
"""Give a mocked device the needed properties."""
|
||||||
self.mac = DISCOVERY_INFO.properties["PlcMacAddress"]
|
self.mac = DISCOVERY_INFO.properties["PlcMacAddress"] if self.plcnet else None
|
||||||
self.mt_number = DISCOVERY_INFO.properties["MT"]
|
self.mt_number = DISCOVERY_INFO.properties["MT"]
|
||||||
self.product = DISCOVERY_INFO.properties["Product"]
|
self.product = DISCOVERY_INFO.properties["Product"]
|
||||||
self.serial_number = DISCOVERY_INFO.properties["SN"]
|
self.serial_number = DISCOVERY_INFO.properties["SN"]
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# serializer version: 1
|
# serializer version: 1
|
||||||
# name: test_setup_entry
|
# name: test_setup_entry[mock_device]
|
||||||
DeviceRegistryEntrySnapshot({
|
DeviceRegistryEntrySnapshot({
|
||||||
'area_id': None,
|
'area_id': None,
|
||||||
'config_entries': <ANY>,
|
'config_entries': <ANY>,
|
||||||
|
@ -35,3 +35,35 @@
|
||||||
'via_device_id': None,
|
'via_device_id': None,
|
||||||
})
|
})
|
||||||
# ---
|
# ---
|
||||||
|
# name: test_setup_entry[mock_repeater_device]
|
||||||
|
DeviceRegistryEntrySnapshot({
|
||||||
|
'area_id': None,
|
||||||
|
'config_entries': <ANY>,
|
||||||
|
'configuration_url': 'http://192.0.2.1',
|
||||||
|
'connections': set({
|
||||||
|
}),
|
||||||
|
'disabled_by': None,
|
||||||
|
'entry_type': None,
|
||||||
|
'hw_version': None,
|
||||||
|
'id': <ANY>,
|
||||||
|
'identifiers': set({
|
||||||
|
tuple(
|
||||||
|
'devolo_home_network',
|
||||||
|
'1234567890',
|
||||||
|
),
|
||||||
|
}),
|
||||||
|
'is_new': False,
|
||||||
|
'labels': set({
|
||||||
|
}),
|
||||||
|
'manufacturer': 'devolo',
|
||||||
|
'model': 'dLAN pro 1200+ WiFi ac',
|
||||||
|
'model_id': '2730',
|
||||||
|
'name': 'Mock Title',
|
||||||
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
|
'serial_number': '1234567890',
|
||||||
|
'suggested_area': None,
|
||||||
|
'sw_version': '5.6.1',
|
||||||
|
'via_device_id': None,
|
||||||
|
})
|
||||||
|
# ---
|
||||||
|
|
|
@ -27,13 +27,16 @@ from .mock import MockDevice
|
||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("device", ["mock_device", "mock_repeater_device"])
|
||||||
async def test_setup_entry(
|
async def test_setup_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
mock_device: MockDevice,
|
device: str,
|
||||||
device_registry: dr.DeviceRegistry,
|
device_registry: dr.DeviceRegistry,
|
||||||
snapshot: SnapshotAssertion,
|
snapshot: SnapshotAssertion,
|
||||||
|
request: pytest.FixtureRequest,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test setup entry."""
|
"""Test setup entry."""
|
||||||
|
mock_device: MockDevice = request.getfixturevalue(device)
|
||||||
entry = configure_integration(hass)
|
entry = configure_integration(hass)
|
||||||
assert await hass.config_entries.async_setup(entry.entry_id)
|
assert await hass.config_entries.async_setup(entry.entry_id)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
Loading…
Reference in New Issue