Home Assistant Integration via MQTT
Overview
Integrating Meshtastic into Home Assistant unlocks powerful home automation possibilities: track family members on a mesh map, get alerts when a node goes offline, and trigger smart-home actions based on mesh events. The integration uses MQTT as the transport layer, with Mosquitto as the local broker.
Step 1: Install and Configure Mosquitto
In Home Assistant, navigate to Settings → Add-ons → Add-on Store and install the Mosquitto broker add-on. After installation, open its configuration tab and add a user:
logins:
- username: meshuser
password: yourpassword
Start the add-on and enable Start on boot. Note your Home Assistant host IP — your Meshtastic node will connect to this address.
Step 2: Configure Your Meshtastic Node for MQTT
Open the Meshtastic app, go to Radio Configuration → MQTT and set:
- MQTT Server Address: your HA host IP (e.g.
192.168.1.100) - Username / Password: the credentials you set above
- Root Topic:
msh/US(or your region) - Uplink / Downlink Enabled: on
Also ensure your node has WiFi configured under Radio Configuration → Network.
Step 3: MQTT Sensor YAML in Home Assistant
Add the following to your configuration.yaml (adjust node IDs as needed):
mqtt:
sensor:
- name: "Node !a1b2c3d4 Battery"
state_topic: "msh/US/2/json/telemetry/!a1b2c3d4"
value_template: "{{ value_json.payload.device_metrics.battery_level }}"
unit_of_measurement: "%"
device_class: battery
- name: "Node !a1b2c3d4 Latitude"
state_topic: "msh/US/2/json/position/!a1b2c3d4"
value_template: "{{ value_json.payload.latitude_i | float / 1e7 }}"
- name: "Node !a1b2c3d4 Longitude"
state_topic: "msh/US/2/json/position/!a1b2c3d4"
value_template: "{{ value_json.payload.longitude_i | float / 1e7 }}"
Reload your YAML configuration after saving.
Step 4: Automations
Alert when a node hasn't been heard in 30 minutes:
automation:
- alias: "Mesh node offline alert"
trigger:
platform: state
entity_id: sensor.node_a1b2c3d4_battery
to: unavailable
for: "00:30:00"
action:
service: notify.mobile_app_your_phone
data:
message: "Node !a1b2c3d4 has not reported in 30 minutes"
Notify on critical battery:
- alias: "Mesh node low battery"
trigger:
platform: numeric_state
entity_id: sensor.node_a1b2c3d4_battery
below: 15
action:
service: notify.mobile_app_your_phone
data:
message: "Node !a1b2c3d4 battery critical: {{ states('sensor.node_a1b2c3d4_battery') }}%"
Trigger lights when a family member arrives home via mesh position:
- alias: "Welcome home via mesh"
trigger:
platform: zone
entity_id: device_tracker.mesh_family_member
zone: zone.home
event: enter
action:
service: light.turn_on
target:
entity_id: light.porch
To use zone-based presence, create a device_tracker that updates from the latitude/longitude sensors using a template or the MQTT device tracker integration.
Step 5: Lovelace Dashboard
For a mesh map view, install the Map card in Lovelace. Add a card of type map and reference your device tracker entities. You can also use the auto-entities HACS card to dynamically list all mesh node sensors. For richer visualization, some community members use Grafana with the InfluxDB integration to feed in MQTT telemetry.
No comments to display
No comments to display