Skip to content

Fix duplicated device name in entity IDs - #172

Closed
ColinSummers wants to merge 7 commits into
schmittx:mainfrom
ColinSummers:fix/entity-name-duplication
Closed

Fix duplicated device name in entity IDs#172
ColinSummers wants to merge 7 commits into
schmittx:mainfrom
ColinSummers:fix/entity-name-duplication

Conversation

@ColinSummers

Copy link
Copy Markdown

Problem

Entity IDs contained the device name twice (e.g. device_tracker.dad_ssid_dad). The integration manually built full entity names that included the resource name, while also setting device_info.name to the resource name. Modern Home Assistant generates entity IDs by prepending device_info.name to the entity name, so the resource name appeared twice.

Upstream report: #158, upstream fix: #159.

Fix

Migrate to the has_entity_name pattern:

  • Set _attr_has_entity_name = True on EeroEntity.
  • Move the network-name prefix and connection-type suffix options into a new _device_name() helper used by device_info, so they apply to the device name instead of every entity name.
  • The name property now returns only entity_description.name (or None when the description has no name, marking the entity as the device's primary entity).
  • Remove the redundant name override in EeroDeviceTrackerEntity — its description has no name, so the tracker becomes the primary entity and uses the device name directly.

Breaking change

Existing entity IDs will change (the duplicated device-name segment goes away). Automations, dashboards, and scripts referencing the old entity IDs will need to be updated after upgrading.

Fixes #6

🤖 Generated with Claude Code

ColinSummers and others added 7 commits July 20, 2026 12:48
async_remove_device raises KeyError when the device has already been
removed from the registry (e.g. by a prior iteration of the cleanup
loop). Python 3.14's ReadOnlyDict.pop() surfaces this as an unhandled
exception, causing the entire integration setup to fail with
setup_error.

Wrap the call in try/except to handle the race gracefully.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fix KeyError in device cleanup on Python 3.14
HA 2026.7 changed zone/person tracking to rely on the in_zones state
attribute. The old manual state/state_attributes approach doesn't set
in_zones, so zone.home reports 0 persons for router-based trackers.

BaseScannerEntity is the intended base class for connection-based
trackers — it derives state from is_connected and handles in_zones
automatically. The existing is_connected, source_type, ip_address,
mac_address, and hostname properties are exactly what it needs.

Closes #3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fix device tracker zone counting (HA 2026.7)
- api/eero.py:143: set_status_light_brightness(0) returned the bound
  method instead of calling it — added missing parentheses
- __init__.py:401: conf_activity[network_id] → .get(network_id, {})
  to guard against KeyError on migrated config entries
- __init__.py: fixed copy-pasted "Return the state attributes" docstrings
  on network and resource properties
- api/__init__.py:284: removed dead file.close() after with block
- api/network.py:87: "Adblock dasy" → "Adblock day"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
PP pass: fix brightness bug, KeyError guard, dead code
Migrate to has_entity_name pattern so Home Assistant does not
prepend the device name twice when generating entity IDs.
Move network prefix and connection type suffix into device_info.name
and return only the entity description name from the name property.

Fixes #6
@ColinSummers

Copy link
Copy Markdown
Author

Opened against the wrong repo by mistake; this belongs on the fork. Apologies for the noise — upstream already has #159 for this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Home/Away device_tracker does not work correctly for multiple locations (when not all networks are configured as active)

1 participant