github meshcore-dev/meshcore-ha v3.0.5

one hour ago

Features

  • Firmware update entities. Each companion and each tracked repeater or room server gets an update entity that compares the firmware the node reported with the newest stable MeshCore release for its role. They show in Settings > Updates with the release notes and a link to the release. The integration checks GitHub every 12 hours, one check for all entries, and uses no mesh airtime. There is no install action; nodes are flashed over USB or the web flasher. A repeater that has not reported a version shows no update until you press Refresh firmware version. See Firmware updates. Thanks @TheOriginal92. (#409)
  • Six MQTT brokers instead of four. This also fixes the uploader loading only slots 1 to 4, so a stored slot 5 or 6 was silently skipped. Thanks @beaugunderson. (#402)
  • WebSocket Path per MQTT broker. LetsMesh and MeshMapper serve MQTT at /, which was hardcoded; Mosquitto, EMQX and meshview.dk use /mqtt. The new field defaults to /, so existing brokers are unchanged. Thanks @bplein for the original PR and @Fywqdk for the meshview.dk report. (#400, #307, #399)

Fixes

  • Governed policy: a tracked node that advertises is polled again. A node that had failed a few polls kept doubling its backoff, up to 24 hours and across restarts, even after the companion heard it advertise. Hearing it now makes its next poll due at once and clears the failure counters, as already happened for auto-disabled nodes. A manual req_status_sync that gets a status now also marks the node online instead of leaving the Online sensor unknown until the next scheduled poll. Thanks @prusuino. (#401, #390)
  • An MQTT broker whose first connect fails now retries. A connect that failed with anything but a timeout, for example a refused WebSocket handshake at startup, left the broker disconnected until the entry reloaded. Thanks @michalsiman. (#410, #408)
  • Neighbor SNR sensors no longer write a state every few seconds. Their secs_ago and last_seen attributes were computed from the clock, so every coordinator update stored a new state and attribute row for every neighbor, 1.8 GB in 10 days on one install. Both attributes are removed. last_updated is a fixed timestamp with the same information; in a template, now() - last_updated is the age. Thanks @michalsiman. (#410, #407)

Notes

  • If you read secs_ago or last_seen from a neighbor sensor in a template or card, switch to last_updated.
  • The recorder stores every meshcore_raw_event by default. Events shows how to exclude them if you do not use them.
  • Validation: 489 integration tests on the pinned harness (HA 2026.2.3) and on current Home Assistant with Python 3.14, 396 unit tests, ruff clean.

Full changelog: v3.0.4...v3.0.5

Don't miss a new meshcore-ha release

NewReleases is sending notifications on new releases.