AppDaemon apps and dashboard cards for Home Assistant that enhance the MeshCore integration with:
- Dynamic map visualisation with time-based filtering
- Real-time hop count and SNR tracking from messages
- Filterable contact lists by node type and time threshold
- Sortable views by last advertisement or last message
- Signal quality metrics (RSSI, SNR) from mesh network paths
✅ Dynamic contact filtering by time threshold and node type
✅ Sort contacts by last advertisement or last message
✅ Live map visualization with automatic updates
✅ Message hop tracking with signal quality (SNR/RSSI)
✅ Multi-path reception tracking (see all routes a message took)
✅ Clean, multi-column dashboard views
- Home Assistant with MeshCore integration installed
- AppDaemon add-on
- HACS Frontend cards:
- auto-entities
- config-template-card
- multiple-entity-row
- card-mod
- ha-map-card
- mushroom-cards (for input controls)
Go to Settings → Devices & Services → Helpers and create:
- Name:
MeshCore Threshold Hours - Entity ID:
input_number.meshcore_threshold_hours - Minimum:
0.1(allows filtering down to ~6 minutes) - Maximum:
672(28 days) - Step:
0.5 - Unit:
hours - Default:
12
- Name:
MeshCore Type - Entity ID:
input_select.meshcore_type - Options:
All
Client
Repeater
Room Server
- Name:
MeshCore Sort By - Entity ID:
input_select.meshcore_sort_by - Options:
Last Advert
Last Message
The location depends on your installation method:
Home Assistant OS / Supervised (AppDaemon add-on):
/addon_configs/a0d7b954_appdaemon/apps/
Access via: \\your-ha-ip\addon_configs\########_appdaemon\apps\
Docker / Manual Installation:
/config/appdaemon/apps/
Access via: \\your-ha-ip\config\appdaemon\apps\
To find your path:
- Install File Editor or Studio Code Server add-on
- Look for existing AppDaemon files like
hello.py - Note the directory path shown
-
Copy the app files to your AppDaemon apps directory:
meshcore_map.pymeshcore_hops.py
-
Edit
apps.yamlin the same directory and add:
meshcore_map:
module: meshcore_map
class: MeshCoreMapEntities
meshcore_hops:
module: meshcore_hops
class: MeshCoreHops-
Restart AppDaemon (Settings → Add-ons → AppDaemon → Restart)
-
Verify by checking AppDaemon logs for:
INFO AppDaemon: Calling initialize() for meshcore_map
INFO AppDaemon: Calling initialize() for meshcore_hops
INFO meshcore_map: MeshCoreMapEntities initialized
INFO meshcore_hops: MeshCoreHops initialized
INFO meshcore_hops: Name cache built with XXXX entries
- Confirm sensors exist in Developer Tools → States:
sensor.meshcore_map_entitiessensor.meshcore_hops_*(created when messages are received)
Copy the card configurations from the dashboard/ folder to your Lovelace dashboard.
Creates a sensor (sensor.meshcore_map_entities) containing a filtered list of contacts for the map card. Updates automatically based on your threshold and node type settings.
Listens to MeshCore raw events and creates sensors (sensor.meshcore_hops_{pubkey}) for each contact that sends a message. Tracks:
- Hop count - Number of hops the message took
- SNR/RSSI - Signal quality metrics
- Multi-path receptions - All routes a message took through the mesh
- Location data - Latitude/longitude from the contact sensor
- Last message time - For sorting by recent activity
| Attribute | Description |
|---|---|
sender_name |
Contact display name |
pubkey_prefix |
Contact's public key prefix |
latitude |
Contact's latitude (from advert) |
longitude |
Contact's longitude (from advert) |
path_length |
Best reception hop count |
snr |
Best reception SNR |
rssi |
Best reception RSSI |
max_hops |
Longest path observed |
longest_path |
Full route string for visualization |
receptions |
Array of all reception paths |
reception_count |
Number of paths captured |
last_message_time |
Unix timestamp |
last_message_formatted |
ISO formatted timestamp |
last_message_text |
First 100 chars of message |
- Check AppDaemon logs for errors
- Verify MeshCore integration is working and receiving messages
- Ensure
meshcore_raw_eventevents are being fired (check Developer Tools → Events)
This is normal for contacts not yet in your contact list. The script will use a name-based sensor ID instead.
- Check that your MeshCore device is receiving messages
- Verify the threshold hours setting isn't filtering out recent activity
MIT License - See LICENSE file for details.




