Beta / Work in Progress — This integration is under active development. Expect rough edges and breaking changes. If you run into issues, please open an issue on GitHub.
A companion HACS integration that adds a full-featured dashboard for your MeshCore mesh network in Home Assistant. Wraps the meshcore-ha integration to provide messaging, contact management, a map view, live stats, and a command console — all from the HA sidebar.
- Backend — Python, communicating with your node via the existing meshcore-ha integration (TCP, Serial, or BLE). Integrates with Home Assistant via its WebSocket API and async event system.
- Frontend — Vanilla ES modules using the Web Components API, served directly by Home Assistant's HTTP server.
A MeshCore companion radio plugged into your Home Assistant server becomes an always-on gateway to your mesh network. Unlike a phone or laptop that goes to sleep, a home server runs 24/7 — so your node never misses a message.
- Never miss a message — Every direct message is captured and stored, even when your phone is off or out of range.
- Send messages from anywhere — Open your HA dashboard from any browser or the HA mobile app and send messages to your mesh.
- Long-term message history — All messages persist to disk and survive HA restarts.
- Monitor your mesh passively — Live stats, sensor readings, and contact activity at a glance.
- Automate with HA — Pair with HA automations to get push notifications when a message arrives, or trigger alerts based on contact status.
Chat-style messaging interface for both channel broadcasts and direct messages. Conversations are listed in a sidebar (8 channels + DMs per contact). Messages show sender name, SNR, hop count, timestamp, and direction. Messages persist across restarts. Supports up to 200-character messages (MeshCore limit).
Sortable, searchable table of all known mesh contacts. Columns include name, public key prefix, SNR, last seen, battery, and type. Click any contact to open a detail dialog with full info and actions:
- Message — opens a DM conversation in the Messages tab
- Ping — sends a zero-width-space message to test reachability
- Remove — removes the contact from the local database
Shows contacts with GPS position data. Requires the underlying meshcore-ha entities to expose lat/lon attributes. Contacts without GPS data are excluded.
At-a-glance summary cards showing:
- Messages Today
- Node Name, Battery, TX Power, Region, Uptime
- Connection status and pubkey prefix
- Full table of all meshcore sensor entities and their current values
- Send Advertisement button
Raw MeshCore command console. Type any command supported by the meshcore-ha execute_command service. Command history with ↑/↓ navigation. Quick-access buttons for common commands: device_query, get_contacts, get_msgs, send_advert, reset_contacts.
Two HA sensor entities are created automatically:
| Entity | Description |
|---|---|
sensor.meshcore_ui_messages_today |
Count of messages received today |
sensor.meshcore_ui_active_contacts |
Contacts with activity in the past hour |
- Home Assistant 2024.1+
- meshcore-ha integration installed, configured, and working
- A MeshCore companion radio accessible via TCP, Serial, or BLE (configured in meshcore-ha)
⚠️ This integration does not connect to the radio directly. It is a UI layer on top ofmeshcore-ha. Install and configure that first.
- Open HACS in Home Assistant
- Click the three-dot menu → Custom repositories
- Add
https://github.com/Ratty7198/meshcore-ui-hawith category Integration - Find MeshCore UI and click Download
- Restart Home Assistant
- Go to Settings → Devices & Services → Add Integration and search for MeshCore UI
- Click through the setup wizard (it will warn if meshcore-ha isn't found)
Copy the custom_components/meshcore_ui folder into your Home Assistant config/custom_components/ directory, restart, and add the integration.
Frontend (Web Components, ES modules) Backend (Python, WebSocket API)
────────────────────────────────── ────────────────────────────────
ha_frontend/ custom_components/meshcore_ui/
panel.js (shell + tab router) __init__.py (setup + events)
views.js (5 tab components) websocket_api.py (13 WS commands)
components.js (shared utilities) store.py (persistent storage)
styles.js (shared CSS) config_flow.py (setup wizard)
sensor.py (HA sensor entities)
const.py (constants)
The frontend communicates exclusively with the backend via Home Assistant's WebSocket API. The backend listens to meshcore_message events fired by the meshcore-ha integration, persists them, and exposes them to the frontend. Outbound messages are sent by calling meshcore-ha services (send_channel_message, send_direct_message, execute_command).
Panel doesn't appear in sidebar:
Ensure the integration loaded without errors. Check Settings → System → Logs for meshcore_ui errors. Try a hard refresh of the browser (Ctrl+Shift+R).
"meshcore not found" during setup:
The meshcore (meshcore-ha) integration must be installed and have at least one working config entry before setting up this UI integration.
Messages not appearing:
The underlying meshcore-ha integration fires meshcore_message events. Confirm your radio is connected and messages are flowing by checking the meshcore-ha entities in Developer Tools → States.
Console commands fail:
Not all MeshCore CLI commands are supported by the execute_command service in meshcore-ha. Refer to the meshcore-ha documentation for supported commands.
MIT
- meshcore-ha — the underlying HA integration this UI wraps
- meshcore_py — the Python SDK
- MeshCore — the firmware and ecosystem
- meshtastic-ui-ha — the sibling project for Meshtastic
