Custom Home Assistant Lovelace cards that display hub, node, contact, and channel statistics from the MeshCore mesh radio network integration.
- Home Assistant 2023.x or later
- MeshCore Integration — must be installed and configured. The cards read hub, node, and contact data directly from the devices and entities registered by this integration.
- Open HACS → Frontend
- Click the ⋮ menu → Custom repositories
- Add
https://github.com/jpettitt/meshcore-cardwith category Dashboard - Search for MeshCore Card and install it
- Reload your browser
- Download
meshcore-card.jsfrom the latest GitHub Release - Copy it to
config/www/meshcore-card.js - In Home Assistant go to Settings → Dashboards → Resources and add
/local/meshcore-card.jsas a JavaScript module - Reload your browser
This package provides three card types.
Displays all MeshCore hubs and their remote nodes, automatically discovered from the HA device and entity registry.
type: custom:meshcore-card- Hub status — online/offline indicator, node count, hardware model, firmware version
- RF parameters — frequency, bandwidth, spreading factor, TX power
- MQTT broker status — per-broker connection pills (green = connected, red = disconnected)
- Hub location — coordinates chip with a direct link to the MeshCore Analyzer map
- Remote nodes — automatically discovered:
- Online/offline status, RSSI and SNR badges, routing path, last seen time
- Battery percentage bar with voltage
- Location map link (resolved from the node's contact advertisement)
- Repeater nodes: TX/RX airtime bars, noise floor, uptime, TX/RX rate, relayed/canceled/duplicate traffic counts, sent/received totals
- Optional sensor readings: temperature, humidity, illuminance, pressure (configured per node)
- Drag-to-reorder — drag nodes in the visual editor to set display order
- Throttled rendering — updates at most once every 10 seconds
All options are available through the visual editor or in YAML.
type: custom:meshcore-card
hubs:
55733c: # hub identified by public key prefix
enabled: true # show/hide this hub (default: true)
battery_entity: sensor.x # override auto-detected battery % entity
voltage_entity: sensor.x # override auto-detected voltage entity
nodes:
MyNode: # node identified by name
enabled: true # show/hide this node (default: true)
battery_entity: sensor.x # override auto-detected battery % entity
voltage_entity: sensor.x # override auto-detected voltage entity
location_entity: sensor.x # override location source (entity with latitude/longitude
# attributes, scoped to all meshcore entities)
temperature_entity: sensor.x # temperature sensor to display (optional)
humidity_entity: sensor.x # humidity sensor to display (optional)
illuminance_entity: sensor.x # illuminance sensor to display (optional)
pressure_entity: sensor.x # pressure sensor to display (optional)
nodes_order: # display order for nodes (set via drag-and-drop in editor)
- MyNode
- OtherNode
grid_options:
rows: 4 # fix card height to N dashboard grid rows;
# content that doesn't fit is hidden cleanlyShorthand: true / false can be used instead of a full object to simply show or hide:
hubs:
55733c: true
aabbcc: false
nodes:
JPP: true
YubaMonitor: falseLists all binary_sensor.meshcore_*_contact entities sorted by most recently heard advertisement.
type: custom:meshcore-contact-card- Contact list — sorted by
last_advertdescending (most recently heard first) - Per contact: icon or entity picture, advertised name, node type badge, time since last heard, online/offline dot
- Location — coordinates link to MeshCore Analyzer map when lat/lon are present; shows "Unknown Location" when coordinates are 0,0
- Age filter — contacts older than
max_contact_age_daysare hidden - Grid-aware clipping — when placed in a fixed-height grid cell, partially visible rows are hidden cleanly
type: custom:meshcore-contact-card
max_contact_age_days: 7 # hide contacts not heard within this many days (default: 7)
grid_options:
rows: 4 # fix card height to N dashboard grid rowsLists all active MeshCore message channels (binary_sensor.meshcore_*_messages entities) sorted by channel index.
type: custom:meshcore-channel-card- Channel list — sorted by channel index
- Per channel: green dot when active, hub name, channel name
- Grid-aware clipping — when placed in a fixed-height grid cell, partially visible rows are hidden cleanly
type: custom:meshcore-channel-card
grid_options:
rows: 4 # fix card height to N dashboard grid rowsThe cards are localized into English, French, Dutch, and German. The active Home Assistant language is used automatically.
Note: French, Dutch, and German translations are machine-generated. If you spot an error or awkward phrasing, pull requests with corrections are very welcome!
To add a new language or correct an existing one, see src/translations/ and scripts/translate.mjs.
MIT

