MeshCore Ninja Alpha
All software

MeshCore for Home Assistant

Integration Beta

MeshCore HA

Custom Home Assistant integration for monitoring and controlling MeshCore nodes over USB, BLE or TCP, with sensors, services, diagnostics and optional map upload support.

Details

Kind
Integrations
Maturity
Beta
Maintainers
meshcore-dev, Alex Wolden
Language
python
Licensing
Open source
License
MIT
Latest version
2.8.0 · 2026-06-18

Capabilities

Platforms

home-assistant

Interfaces

GUIAPI

Connections

BLESerialUSBTCPMQTT

Capabilities

MessagingContactsNode configurationMonitoringTelemetryMappingAutomation

Install

Releases

from GitHub · updated 2026-06-23
  1. v2.8.0 # Latest 6 days ago · 2026-06-18 01:55 UTC

    Features

    • Unified Contact Discovery Mode (#261) — the two overlapping contact-discovery flags (disable_contact_discovery and the never-shipped large_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_contact all 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_info assumed a dict-shaped public_key; a TELEMETRY/GPS event from a node that wasn't a tracked repeater/client/root raised AttributeError on 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_received result from the get_msg loops 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=true maps 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/date display 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. No meshcore-py floor change (still >=2.3.7).
  2. v2.7.0 # 23 days ago · 2026-06-01 02:44 UTC

    Features

    • Self-diagnostic sensors for the companion node (#251) — opt-in polling of the locally-attached companion's get_stats_core / get_stats_radio / get_stats_packets, exposed as 13+ new sensors on the main device. Local-transport queries only — no mesh traffic.
    • Region-scoped channel broadcasts (#250) — new scope parameter on meshcore.send_channel_message for TC_FLOOD region-scoped sends. Optional flood_scopes allowlist in global settings labels incoming scoped messages with their region name.
    • Remove orphan devices from the UI (#247) — repeater, client, and contact devices that are no longer tracked can now be deleted via the HA device page. Hub and live devices are refused. Closes #229.
    • Repeater neighbor count sensor (#228) — per-repeater count of active neighbors derived from the existing neighbor list.
    • hop_count + snr on incoming channel messages (#245) — logbook event now carries SNR and hop count for channel traffic, matching the existing DM behavior.
    • Conditional recipient type selection (#218) — adapts the message-input UI based on the chosen recipient.

    Fixes

    • Region-scope (TC_FLOOD) RX_LOG correlation (#246) — fixes a 4-byte transport-code offset that broke RX_LOG correlation for all region-scoped messages and corrects the AES plaintext offset. Closes #237, #242, #198.
    • path_hash_size on rx_log correlation entry (#249) — completes #226 by propagating the per-hop hash width to every consumer of meshcore_message.
    • execute_command response normalization (#248) — req_*_sync helpers that return plain dicts, lists, scalars, or None are now surfaced correctly instead of being silently dropped or raising a confusing error.
    • Discovered-contact cleanup post-#236 (#252) — repairs four cleanup paths that the #236 unique_id migration left looking up entities by the old format.
    • Recorder cap on discovered-contact select (#254) — options is now excluded from recorder state, dodging the 16 KiB per-state attribute cap that fired warnings on dense meshes. Closes #243.
    • Removed hass.helpers.entity_registry.async_get() accessor (#253) — switched to er.async_get(hass) in three contact services. Fixes AttributeError on recent HA core.
    • MQTT startup wait (#244) — fixes a task that blocked HA boot.
    • recv errors as count + measurement (#239) — corrects sensor types.
    • multi-entry message_sent fan-out (#235) — filters by entry_id.
    • Contact-diagnostic unique_id scoping (#236) — scoped by entry_id with one-time migration.
    • TZ-aware UTC timestamp on meshcore_message (#234).
    • RX_LOG multi-byte path size parsing (#226).

    Docs

    • Companion Integration API page (#217)
    • ESPHome BLE bridge workaround (#223)
    • Discord community channel linked in README + docs site

    Notes

    • Minimum Home Assistant version remains 2023.8.0.
    • The meshcore-py floor is >=2.3.7 (was bumped in #222).
    • #236's unique_id migration runs once per install on first start of this release. Entities migrate automatically. Users on the broken cleanup state from earlier #236-only installs will see the Phase 4 orphan sweep clean up stale registry entries (covered by #252).
    • #251 self-diagnostics defaults off. Enable in Global Settings if you want the new sensors.
  3. v2.6.0 # 2 months ago · 2026-04-28 05:19 UTC

    Features

    • Structured query services for companion integrations (#216) — new meshcore.get_contacts, meshcore.get_channels, and meshcore.trace services return typed responses so companions don't have to scrape execute_command output.
    • SNR + hop count on incoming DM events (#215) — meshcore_message events now include hop_count (always) and snr (V3 firmware) for direct messages, matching what was already available for channel messages via rx_log_data.
    • Repeater neighbor sensors (#211) — per-repeater SNR and activity sensors with auto-cleanup of stale neighbors, plus an opt-in toggle and configurable airtime cost in the global settings.
    • Per-device online binary sensor (#209) — replaces the imprecise global device.connected flag with per-device binary_sensor.*_online entities derived from _last_successful_request timing.
    • Stale discovered-contact cleanup (#183) — new days_threshold parameter on clear_discovered_contacts, plus an opt-in daily auto-cleanup with a configurable threshold.
    • Adaptive RX_LOG poll-wait (#182) — replaces the blocking 500ms sleep on incoming channel messages with a 50ms-step poll that fires as soon as data arrives, with a background pass for late-arriving repeater RX_LOGs delivered as meshcore_delivery_update events.

    Fixes

    • Entity-identity stabilization (#201) — removes device name from unique_id (one-time startup migration), refreshes SELF_INFO after config-modifying commands, and adds missing async_write_ha_state() so frontend updates without a reload.
    • Map uploader (#200) — corrects ADV_TYPE_CHAT and points the uploader at meshcore.io.
    • Telemetry sensors (#191) — restores missing device_class and units on telemetry sensors.
    • execute_command AttributeError (#190) — removes a stale set_command_result call.

    Docs

    • README now links to the meshcore-card Lovelace card (#220).
    • Installation docs USB firmware note (#133).

    Notes

    • Migration on first start: #201 strips device names from unique_id once per upgrade; entities migrate automatically. Some users may see a brief reload as the registry updates.
    • The minimum Home Assistant version remains 2023.8.0.
Show all 20 releases →

Project signals

popularity 2026-06-23 verification 2026-06-23
GitHub stars
212
Forks
52
Watchers
11
Open issues
47
Contributors
30
Source available
Yes
Releases available
Yes
Signed releases
No
CI builds
Yes
Documentation
Yes
  • README labels the integration as work in progress and notes BLE has not been thoroughly tested.

Tags