Hermes: Meshtastic
Commander
Integrazione Home Assistant che fa da ponte tra una mesh radio Meshtastic e la casa: i nodi autorizzati inviano comandi testuali che eseguono azioni e ricevono una risposta, e Home Assistant manda notifiche broadcast sulla mesh dalle automazioni. Tutto configurabile dalla card, senza YAML. Distribuita via HACS.
Cos’è
Hermes è un’integrazione per Home Assistant che fa da ponte tra una mesh radio Meshtastic e la casa domotica. Fa passare il testo attraverso il confine tra due mondi, in entrambe le direzioni:
- Comandi in ingresso dalla mesh: un nodo autorizzato invia una parola chiave, Hermes esegue l’azione Home Assistant mappata su quella parola e risponde via radio.
- Notifiche in uscita sulla mesh: i servizi
hermes.broadcastehermes.send_directsi chiamano da qualsiasi automazione, anche pianificata, così allarmi, eventi e promemoria raggiungono chi non ha campo telefonico.
È un livello applicativo sopra l’integrazione Meshtastic ufficiale: non gestisce la connessione al nodo (TCP, seriale o BLE), ne ascolta gli eventi e ne usa i servizi. Tutta la configurazione avviene dalla card, senza YAML scritto a mano, senza Jinja2 grezzo e senza risorse Lovelace da aggiungere.
Perché il nome Hermes
Hermes (greco Ἑρμῆς, il Mercurio romano) è il dio dei messaggeri, dei viaggiatori, dei confini e della comunicazione, l’araldo che porta i messaggi tra i mondi e attraversa ogni frontiera con l’elmo e i sandali alati. Il nome calza alla lettera: Hermes è un araldo che porta testo attraverso un confine, traducendo i comandi che arrivano dalla mesh LoRa in azioni della casa e riportando le notifiche della casa sulla rete radio.
Il nome si affianca al progetto gemello Chronos, dalla stessa linea di nomi di divinità greche.
Cosa fa
Comandi costruiti a bottoni. I comandi si creano scegliendo un’entità e cliccando: i tasti Read inseriscono un valore live nella risposta, i tasti Do eseguono qualcosa. Non si scrive mai il nome di un servizio, e i valori vengono offerti nel range che il dispositivo accetta davvero.
Split byte-safe. Ogni messaggio in uscita viene spezzato per stare nel payload Meshtastic, con un’intestazione (1/3), senza mai tagliare a metà un carattere multi-byte.
Silenzio di default. Una whitelist di nodi filtra i comandi, e i mittenti non autorizzati non ricevono nessuna risposta, perché rispondere confermerebbe che c’è un Home Assistant in ascolto.
La card
Una sola card raccoglie tutto il necessario per la mesh, in schede:
| Scheda | Cosa contiene |
|---|---|
| Status | Se i messaggi passano e perché no, la radio gateway, i contatori |
| Chat | Conversazioni per canale e per nodo, con le risposte inviate da qui |
| Log | Cosa Hermes ha deciso per ogni messaggio, inclusi quelli ignorati |
| Devices | Ogni nodo con batteria, segnale, hop e ultimo contatto |
| Map | I nodi come punti, opzionalmente tutta la mesh, con filtro a raggio |
| Messages | Costruzione dei comandi e preset di invio rapido |
| Home Assistant | Quali entità usano i comandi, e se esistono ancora |
| Settings | Tutto il configurabile, radio compresa |
Accanto alla card principale ne stanno altre due, pensate per una dashboard che usi già per altro: Hermes summary (lo stato come lista di parametri che si riflette su una riga per valore quando la colonna è stretta) e Hermes chat (leggere e inviare messaggi). Entrambe occupano solo l’altezza che serve e non cambiano nessuna impostazione.
Sicurezza
Il principio che guida tutto: un canale ti dice le cose, un messaggio diretto le cambia.
Su un canale l’unica protezione è la chiave condivisa: i messaggi portano un mittente ma niente lo dimostra, quindi chiunque abbia la chiave può spacciarsi per qualsiasi nodo, e lì la lista dei nodi autorizzati è una difesa debole. Su un messaggio diretto con PKC (firmware 2.5 e successivi) il mittente è verificato dal protocollo prima che il messaggio arrivi a Home Assistant, e la lista vale davvero.
La forma consigliata sono due istanze: le interrogazioni di stato su un canale, tutto ciò che agisce sui messaggi diretti. Aggiungere l’integrazione due volte non costa niente, e impedisce che una chiave di canale trapelata diventi il controllo di casa in mano a un altro. Un comando gira come Home Assistant stesso, senza utente e senza conferma, quindi la lista dei comandi è la lista dei permessi: il mittente non fornisce mai un servizio, un’entità o un template, l’unica cosa che un messaggio aggiunge è la parola chiave e, dove ammesso, un numero, letto in modo rigido e controllato nel range.
Da v1.2 questa garanzia non è più solo teorica: leggendo i metadati del pacchetto, Hermes può imporre che passino solo i messaggi cifrati per questo nodo (PKC), rifiutare quelli veicolati via MQTT e scartare quelli troppo vecchi o già gestiti, con una condition entity e un cooldown a fermare i replay. Gli interruttori partono spenti, perché dipendono da campi che firmware e integrazione base devono riportare, e la scheda Status mostra cosa portavano davvero i messaggi arrivati, così si conferma prima di affidarcisi.
Servizi
La pianificazione si ottiene componendo le normali automazioni di Home Assistant con questi servizi, non c’è uno scheduler interno.
| Servizio | Descrizione |
|---|---|
hermes.broadcast |
Invia un messaggio sul canale o DM dell’istanza |
hermes.send_direct |
Invia un messaggio diretto a un singolo nodo |
Entrambi passano dal motore di split byte-safe (massimo 200 byte per parte, intestazione (i/n), nessun carattere multi-byte spezzato).
Prerequisiti e installazione
Hermes lavora sopra l’integrazione Meshtastic ufficiale (domain: meshtastic), che deve essere installata e connessa per prima: è lei a possedere la connessione alla radio, e una sola integrazione può tenerla. Serve un firmware con PKC (≥ 2.5) se si vogliono usare i DM come canale affidabile.
L’installazione avviene via HACS con i badge My Home Assistant (un click apre HACS con il repository precompilato, un altro avvia il config flow). La card si registra da sola, quindi non c’è nessuna risorsa Lovelace da aggiungere a mano, e una vista Panel (1 card) è quella che le si addice, perché riempie lo schermo.
Stato
Hermes ha raggiunto il primo rilascio stabile (1.0), con il motore di split coperto da test (è Python puro, verificabile senza Home Assistant). Alcuni valori (timing di invio, limite di byte, schema degli eventi dell’integrazione base) restano default ragionevoli da tarare sull’hardware radio reale, come indicato nella documentazione del repository.
Licenza
Distribuito sotto licenza MIT.