Features
-
Unified Contact Discovery Mode (#261) — the two overlapping contact-discovery flags (
disable_contact_discoveryand the never-shippedlarge_mesh_mode) are collapsed into a single Contact Discovery Mode select with three choices:- Entity per contact (default) — one diagnostic binary_sensor per discovered contact, same as before.
- Data only — discovered (un-added) contacts are tracked as data with no per-contact entity, while added/curated contacts keep theirs. On dense meshes this avoids hundreds of low-utility entities and the entity-registry churn they drive. The dropdown, services, chat panel, an aggregate summary sensor, and
meshcore.get_discovered_contactall keep working. - Disabled — no discovered-contact processing at all.
Set it at install time or in Configure → Global Settings.
Fixes
- Telemetry/GPS AttributeError from untracked nodes (#266) —
_get_node_infoassumed a dict-shapedpublic_key; a TELEMETRY/GPS event from a node that wasn't a tracked repeater/client/root raisedAttributeErroron the string-shaped key and killed the handler. - node_status sensor stuck "Disconnected" (#267) — the status callback set its value but never pushed state, so the header indicator could show disconnected (while actually connected) until the next device event. Now pushes on event and seeds an initial value at setup.
- UTC-aware MQTT timestamps (#259) — status, raw event, and normalized packet payloads now emit offset-aware ISO 8601 timestamps so consumers don't misread local time as UTC. Fixes #258.
- Quiet benign reconnect-race log noise (#268) — the
no_event_receivedresult from theget_msgloops during config re-add / reconnect is downgraded to debug; real errors still log at ERROR. - Flood-scope
*wildcard (#263) — a raw*entry in the flood-scope allowlist is now recognized as the global wildcard and skipped, instead of deriving a junk transport key for a non-existent#*region.
Notes
- Migration on first start: existing installs migrate config entry v2 → v3 automatically.
disable_contact_discovery=truemaps to Disabled; otherwise the mode defaults to Entity per contact, so behavior is unchanged unless you opt into Data only. No reload, no entity-registry churn. - MQTT timestamp format change (#259): the
time/datedisplay fields in MQTT packet payloads now reflect UTC wall-clock rather than local time. If you parse those downstream, note the shift. - Minimum Home Assistant version remains
2023.8.0. Nomeshcore-pyfloor change (still>=2.3.7).