Skip to content

Commit

Permalink
Create default better entity names (#8)
Browse files Browse the repository at this point in the history
  • Loading branch information
balloob committed Jun 14, 2022
1 parent c2ef71f commit 0dd0ad1
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 34 deletions.
6 changes: 0 additions & 6 deletions custom_components/matter_experimental/binary_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback

from matter_server.client.model.device import MatterDevice
from matter_server.vendor import device_types
from matter_server.vendor.chip.clusters import Objects as clusters

Expand All @@ -38,11 +37,6 @@ async def async_setup_entry(
class MatterBinarySensor(MatterEntity, BinarySensorEntity):
"""Representation of a Matter binary sensor."""

def __init__(self, device: MatterDevice, mapping: DeviceMapping) -> None:
"""Initialize the sensor."""
super().__init__(device, mapping)
self._attr_name = device.node.name or f"Matter Sensor {device.node.node_id}"

@callback
def _update_from_device(self) -> None:
"""Update from device."""
Expand Down
16 changes: 16 additions & 0 deletions custom_components/matter_experimental/entity.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,22 @@ def __init__(self, device: MatterDevice, mapping: DeviceMapping) -> None:
self._device_mapping = mapping
self._attr_unique_id = f"{device.node.unique_id}-{device.endpoint_id}-{device.device_type.device_type}"

device_type_name = device.device_type.__doc__[:-1]
name = device.node.name
if name:
name += f" {device_type_name}"
else:
name = f"{device_type_name} {device.node.node_id}"

# If this device has multiple of this device type, add their endpoint.
if (
sum(dev.device_type is device.device_type for dev in device.node.devices)
> 1
):
name += f" ({device.endpoint_id})"

self._attr_name = name

@property
def device_info(self) -> entity.DeviceInfo | None:
"""Return device info for device registry."""
Expand Down
1 change: 0 additions & 1 deletion custom_components/matter_experimental/light.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ class MatterLight(MatterEntity, LightEntity):
def __init__(self, device: MatterDevice, mapping: DeviceMapping) -> None:
"""Initialize the light."""
super().__init__(device, mapping)
self._attr_name = device.node.name or f"Matter Light {device.node.node_id}"
if self._supports_brightness():
self._attr_supported_color_modes = [ColorMode.BRIGHTNESS]

Expand Down
6 changes: 0 additions & 6 deletions custom_components/matter_experimental/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback

from matter_server.client.model.device import MatterDevice
from matter_server.vendor import device_types
from matter_server.vendor.chip.clusters import Objects as clusters
from matter_server.vendor.chip.clusters.Types import NullValue
Expand Down Expand Up @@ -52,11 +51,6 @@ class MatterSensor(MatterEntity, SensorEntity):
_attr_state_class = SensorStateClass.MEASUREMENT
_device_mapping: SensorDeviceMapping

def __init__(self, device: MatterDevice, mapping: SensorDeviceMapping) -> None:
"""Initialize the sensor."""
super().__init__(device, mapping)
self._attr_name = device.node.name or f"Matter Sensor {device.node.node_id}"

@callback
def _update_from_device(self) -> None:
"""Update from device."""
Expand Down
6 changes: 0 additions & 6 deletions custom_components/matter_experimental/switch.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback

from matter_server.client.model.device import MatterDevice
from matter_server.vendor import device_types
from matter_server.vendor.chip.clusters import Objects as clusters

Expand All @@ -38,11 +37,6 @@ async def async_setup_entry(
class MatterSwitch(MatterEntity, SwitchEntity):
"""Representation of a Matter switch."""

def __init__(self, device: MatterDevice, mapping: DeviceMapping) -> None:
"""Initialize the switch."""
super().__init__(device, mapping)
self._attr_name = device.node.name or f"Matter Switch {device.node.node_id}"

async def async_turn_on(self, **kwargs: Any) -> None:
"""Turn switch on."""
await self._device.send_command(
Expand Down
26 changes: 21 additions & 5 deletions matter_server/client/matter.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,9 @@ async def connect(self):
!= self.client.server_info.compressedFabricId
):
self.adapter.logger.warning(
"Connected to a server with a new fabric ID. Resetting data"
"Connected to a server with a new fabric ID (current: %s, server: %s). Resetting data",
data.get("compressed_fabric_id"),
self.client.server_info.compressedFabricId,
)
data = None
# TODO can we detect all known nodes to the server and interview them?
Expand Down Expand Up @@ -123,7 +125,12 @@ async def _interview_node(self, node_id: int) -> None:

self.adapter.delay_save_data(self._data_to_save)

await self.adapter.setup_node(self._nodes[node_id])
try:
await self.adapter.setup_node(self._nodes[node_id])
except Exception: # pylint: disable=broad-except
self.adapter.logger.exception(
"Unexptected error setting up node %s", node_id
)

def _schedule_interview_retry(self, nodes: set[int], timeout=INTERVIEW_RETRY_TIME):
"""Schedule a retry of failed nodes."""
Expand Down Expand Up @@ -184,10 +191,19 @@ async def _client_listen(self) -> None:
async def _handle_driver_ready(self) -> None:
"""Handle driver ready."""
await self.driver_ready.wait()
tasks = [self.adapter.setup_node(node) for node in self.get_nodes()]
nodes = self.get_nodes()
tasks = [self.adapter.setup_node(node) for node in nodes]

if tasks:
await asyncio.gather(*tasks)
results = await asyncio.gather(*tasks, return_exceptions=True)

for node, result in zip(nodes, results):
if isinstance(result, Exception):
self.adapter.logger.error(
"Unexpected error setting up node %s",
node.node_id,
exc_info=result,
)

to_interview = {
node_id for node_id, info in self._nodes.items() if info is None
Expand All @@ -200,7 +216,7 @@ async def _handle_driver_ready(self) -> None:

def _data_to_save(self) -> dict:
return {
"compressed_fabric_id": self.client.driver.compressed_fabric_id,
"compressed_fabric_id": self.client.server_info.compressedFabricId,
"next_node_id": self.next_node_id,
"nodes": {
node_id: node.raw_data if node else None
Expand Down
10 changes: 0 additions & 10 deletions matter_server/client/model/driver.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,3 @@ def __init__(self, client: client.Client, server_info: ServerInformation):
self._client = client
self.device_controller = DeviceController(client)
self.read_subscriptions = ReadSubscriptions(client)

@property
def fabric_id(self) -> int:
"""Fabric ID."""
return self.server_info.fabricId

@property
def compressed_fabric_id(self) -> int:
"""Compressed fabric ID."""
return self.server_info.compressedFabricId

0 comments on commit 0dd0ad1

Please sign in to comment.