Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create default better entity names #8

Merged
merged 1 commit into from
Jun 14, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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