github meshcore-dev/meshcore-ha v3.0.0-beta
3.0.0-beta

pre-release3 hours ago

Beta of the internal rewrite. This release gets updated in place while it soaks. Same events, services, entity ids and default polling as 2.10. If you install it and something regresses, open an issue with the log.

Requirements

  • Home Assistant 2025.6 or newer. The code already needed APIs newer than the 2023.8 we advertised.
  • meshcore 2.3.11 or newer.

What changed

Radio

  • The integration owns the radio session now. No SDK auto reconnect, our own backoff, and subscriptions survive a reconnect. Going deaf after a link drop until you reload is gone.
  • Every command goes through one gate. Remote requests match their own reply by node prefix + tag, so two commands in flight can't take each other's response.
  • connected goes false when the link actually drops, not ~100s later.
  • Login checks LOGIN_FAILED, wrong password fails fast. Neighbour paging is bounded.

Traffic

  • New traffic_policy option in Global Settings. legacy (default) is exactly the old polling and retry numbers. governed is a flat per radio budget split into flood / direct / message lanes, deferral instead of failure, persisted across restarts. Rates show on the rate limiter sensor and in the log.

Config

  • Edits apply in place. Only connection identity and the cli_console_enabled / self_diagnostics_enabled toggles reload the entry. Add/remove/edit a tracked node, change intervals, brokers, discovery, or press the firmware button and the radio session stays up.
  • Entries get a unique_id. Adding the same radio twice is refused. messages_interval is in Global Settings now.
  • Entry migrates v3 → v4 on load. Downgrade still works, the old data is kept.

Events and services

  • Every meshcore_* event has entry_id and device_id.
  • Private key and channel secrets are redacted on the bus and raw MQTT. expose_secrets turns that off.
  • DMs fire meshcore_message_sent right away and a terminal meshcore_delivery_update. Channel sends fire meshcore_message at t=0, the repeater count arrives on meshcore_delivery_update. New meshcore_message_send_failed. Unknown sender DMs are published with sender_name: null instead of dropped.
  • execute_command refuses factory reset, key import and raw frames. add_selected_contact / remove_selected_contact are admin. send_message with no recipient errors cleanly. trace takes 6 char prefixes. cleanup_unavailable_contacts only touches contact sensors of that entry. Prefix args resolve for send_login_sync and the other sync helpers, and SDK errors come back as an error dict instead of a 500.

Entities

  • Telemetry entities for LPP types that never got any: accelerometer, colour, gyro per axis, barometer, altitude, frequency, percentage, load, concentration, distance, energy, direction, time, switch.
  • Radio identity sensors (tx power, lat/lon, freq, bw, sf) populate at startup.
  • select.meshcore_contact defaults to the placeholder, so a renamed or removed target can't redirect a drafted message.
  • Adverts no longer write the whole contact store per packet or reschedule the tick. MQTT uploader starts in the background instead of blocking setup.

Notes

  • Architecture diagram lives in docs/architecture/.

Don't miss a new meshcore-ha release

NewReleases is sending notifications on new releases.