Skip to content
Closed
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
20 changes: 18 additions & 2 deletions custom_components/meshtastic/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,11 +187,25 @@ async def _setup_meshtastic_devices(
for node_id, node in nodes.items():
if node_id in filter_node_nums:
await _setup_meshtastic_device(
client, device_hardware_names, device_registry, entry, gateway_node, node, node_id
client,
device_hardware_names,
device_registry,
entry,
gateway_node,
node,
node_id,
ignore_via_device=True,
)

else:
await _remove_meshtastic_device(device_registry, entry, node_id)

for node_id, node in nodes.items():
if node_id in filter_node_nums:
await _setup_meshtastic_device(
client, device_hardware_names, device_registry, entry, gateway_node, node, node_id
)

return gateway_node


Expand All @@ -215,6 +229,8 @@ async def _setup_meshtastic_device( # noqa: PLR0913
gateway_node: Mapping[str, Any],
node: Mapping[str, Any],
node_id: int,
*,
ignore_via_device: bool = False,
) -> None:
gateway_node_id = cast("int", gateway_node["num"])
mac_address = base64.b64decode(node["user"]["macaddr"]).hex(":") if "macaddr" in node["user"] else None
Expand Down Expand Up @@ -251,7 +267,7 @@ async def _setup_meshtastic_device( # noqa: PLR0913
via_device = (DOMAIN, str(gateway_node_id)) if gateway_node_id != node_id else None

# remove via_device when it is set to ourself
if (via_device is not None and int(via_device[1]) == node_id) or (gateway_node_id == node_id):
if (via_device is not None and int(via_device[1]) == node_id) or (gateway_node_id == node_id) or ignore_via_device:
via_device = None

if existing_device:
Expand Down
3 changes: 2 additions & 1 deletion custom_components/meshtastic/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,8 @@ async def setup_platform_entry(

def on_coordinator_data_update() -> None:
entities = entity_factory(get_nodes(entry), entry.runtime_data)
new_entities = [s for s in entities if s.entity_id not in platform.entities]
existing_unique_ids = {e.unique_id for e in platform.entities.values()}
new_entities = [s for s in entities if s.unique_id not in existing_unique_ids]
if new_entities:
async_add_entities(new_entities)

Expand Down