Aiuto sulle notifiche
Tutto il necessario per far girare il Notifier accanto al tuo TeslaMate, e cosa controllare quando un evento non arriva.
Prima di iniziare
Tre cose, e la maggior parte delle installazioni TeslaMate ha già le prime due.
- TeslaMate con un broker MQTT. Mosquitto fa parte del file Compose predefinito di TeslaMate.
- Docker sulla stessa macchina di TeslaMate, o su qualsiasi host che raggiunga il broker.
- Accesso a internet in uscita. Nessuna porta in ingresso e il tuo TeslaMate non deve essere pubblico.
Installare il Notifier
Il tuo TeslaMate non può raggiungere il telefono da solo, e una notifica iOS può arrivare solo tramite Apple. Il Notifier è il piccolo container che osserva MQTT e passa gli eventi. Gira accanto a TeslaMate e non apre mai una porta.
-
Prendi il token nell'app
Apri HedgieMate, vai in Impostazioni e poi in Notifiche push e attivale. L'app mostra un token di collegamento che inizia con hm_ e l'ID del server TeslaMate a cui sei collegato. Copiali entrambi.
Il token collega l'app al container. Trattalo come una password.
-
Aggiungi il container al file Compose
Apri il docker-compose.yml da cui avvii TeslaMate e aggiungi il servizio qui sotto. Restando nello stesso file condivide la rete con il broker, quindi MQTT_HOST è semplicemente il nome del servizio del broker.
docker-compose.yml# add under services: in the docker-compose.yml you run TeslaMate from hedgiemate-notifier: image: hedgiemate/notifier:latest restart: unless-stopped depends_on: - mosquitto environment: HEDGIEMATE_USER_TOKEN: "hm_your_token_here" SERVER_ID: "your-server-uuid" MQTT_HOST: "mosquitto" MQTT_PORT: "1883" CAR_IDS: "1" LOG_LEVEL: "info" volumes: - hedgiemate-notifier-data:/data # and under the top-level volumes: key, adding it if the file has none hedgiemate-notifier-data:Il volume è facoltativo. Conserva i nomi delle auto tra un riavvio e l'altro; senza, li completa comunque il relay. Usa un volume con nome invece di un bind mount: il container gira con un utente non root e non può scrivere in una cartella dell'host creata da Docker come root.
-
Avvialo
Fai partire il nuovo servizio. Il resto dello stack non deve riavviarsi.
Terminaledocker compose up -d hedgiemate-notifier
Poi leggi il log. Un avvio corretto mostra la connessione al broker e gli ID delle auto monitorate.
Terminaledocker compose logs -f hedgiemate-notifier
-
Conferma nell'app
L'app segna il server come collegato in pochi secondi. Da lì puoi attivare o disattivare i singoli eventi, auto per auto.
Non arriva niente finché l'auto non cambia davvero stato. Collegare il cavo di ricarica è il modo più rapido per vedere il primo evento.
Senza Compose
Se TeslaMate non è gestito da Compose, docker run fa lo stesso lavoro. Punta MQTT_HOST a un host che il container può raggiungere.
docker run -d \ --name hedgiemate-notifier \ --restart unless-stopped \ -e HEDGIEMATE_USER_TOKEN="hm_your_token_here" \ -e SERVER_ID="your-server-uuid" \ -e MQTT_HOST="your-mqtt-host" \ -e CAR_IDS="1" \ hedgiemate/notifier:latest
Più di un TeslaMate
Avvia un Notifier accanto a ogni server. Lo stesso token di collegamento vale ovunque. A distinguerli nell'app è l'ID del server.
Configurazione
Tutto si imposta con variabili d'ambiente. Tre sono obbligatorie, le altre hanno valori predefiniti funzionanti.
| Variabile | Predefinito | Descrizione |
|---|---|---|
HEDGIEMATE_USER_TOKEN obbligatoria | nessuno | Token di collegamento dell'app. Inizia con hm_. |
MQTT_HOST obbligatoria | nessuno | Hostname del tuo broker MQTT. Dentro Compose è il nome del servizio, di solito mosquitto. |
SERVER_ID obbligatoria | nessuno | UUID del server dato dall'app. Il container parte anche senza, ma in quel caso le impostazioni per server e per auto fatte nell'app vengono ignorate. |
MQTT_PORT | 1883 | Porta del broker. |
MQTT_USERNAME | nessuno | Nome utente del broker, se richiede autenticazione. |
MQTT_PASSWORD | nessuno | Password del broker. |
MQTT_CLIENT_ID | hedgiemate-notifier | Client ID usato sul broker. Cambialo se qualcos'altro si collega già con questo. |
MQTT_TLS | false | Imposta true per un broker in TLS. La porta predefinita passa a 8883. |
MQTT_NAMESPACE | nessuno | Deve corrispondere al MQTT_NAMESPACE del tuo TeslaMate, se lo hai impostato. I topic diventano teslamate<namespace>/cars/#. |
CAR_IDS | 1 | ID delle auto da monitorare, separati da virgola, per esempio 1,2. Ogni auto ha la sua macchina a stati. |
LOG_LEVEL | info | debug, info, warn o error. |
RELAY_URL | https://push.hedgiemate.com | Indirizzo del relay. Non c'è motivo di cambiarlo. |
Tutti gli eventi
Ogni riga è un interruttore indipendente per auto nell'app. Gli aggiornamenti delle Live Activities non sono notifiche e non compaiono qui.
| Notifica | Inviata quando |
|---|---|
| Guida | |
| Viaggio iniziato | state → driving |
| Viaggio terminato | state leaves driving |
| Ricarica | |
| Ricarica avviata | charging_state → Charging |
| Ricarica completata | charging_state → Complete |
| Ricarica interrotta | charging_state leaves Charging without Complete |
| Cavo collegato | plugged_in → true |
| Cavo scollegato | plugged_in → false |
| Batteria | |
| Batteria scarica | battery_level ≤ BATTERY_LOW_THRESHOLD |
| Livello batteria raggiunto | battery_level ≥ BATTERY_HIGH_THRESHOLD |
| Posizione | |
| Ingresso geofence | geofence set |
| Uscita geofence | geofence cleared or changed |
| Sicurezza | |
| Registrazione Sentry | center_display_state = 7 |
| Veicolo | |
| Aggiornamento software | update_available → true |
| In fase di sospensione | state → asleep pending |
| In sospensione | state → asleep |
| Veicolo riattivato | state leaves asleep |
Non arriva niente
Scorri l'elenco dall'alto. Nella maggior parte dei casi è uno dei primi tre.
L'app continua a dire che il server non è collegato
Verifica con docker compose ps che il container sia davvero in esecuzione, poi leggi il log. La causa più comune è un MQTT_HOST sbagliato: dentro Compose è il nome del servizio del broker, mosquitto, non localhost.
Il container gira, ma non parte mai un evento
CAR_IDS deve corrispondere all'ID auto usato da TeslaMate. TeslaMate numera le auto da 1 e con più auto le elenchi: CAR_IDS=1,2.
MQTT si collega e il log resta muto
Se hai impostato MQTT_NAMESPACE in TeslaMate, imposta lo stesso valore anche sul Notifier. Senza, i nomi dei topic non coincidono e il container non ha nulla da leggere.
Alcuni eventi arrivano, altri mai
Ogni evento è un interruttore per auto nell'app. Apri il server nelle Impostazioni e controlla l'elenco eventi di quell'auto.
Le notifiche sulla batteria non partono mai
BATTERY_LOW_THRESHOLD e BATTERY_HIGH_THRESHOLD valgono 20 e 90 di default. Partono una volta per sessione di ricarica, quindi un'auto che non ha superato la soglia da quando ha iniziato a caricare non ne invia nessuna.
Le notifiche smettono di arrivare dopo qualche giorno
Assicurati che il servizio abbia restart: unless-stopped, così riparte con l'host. Poi controlla iOS: una modalità Full Immersion o le impostazioni notifiche dell'app possono assorbirle.
Le Live Activities non compaiono
Le Live Activities devono essere consentite per HedgieMate nelle Impostazioni di iOS e deve esserci una sessione attiva. La Dynamic Island richiede iPhone 14 Pro o successivo.
Il broker richiede login o TLS
Imposta MQTT_USERNAME e MQTT_PASSWORD. Per TLS metti MQTT_TLS su true, così la porta predefinita passa a 8883.
Vuoi vedere cosa sta facendo
Metti LOG_LEVEL su debug, riproduci il caso e poi rimettilo com'era. Debug registra ogni messaggio MQTT e ogni decisione presa a partire da esso.
Domande
Perché mi serve il Notifier?
Il tuo TeslaMate sta sul tuo server e non può raggiungere il telefono, e una notifica iOS può consegnarla solo Apple. Il Notifier copre quel vuoto: osserva i tuoi topic MQTT, rileva il cambio di stato e invia l'evento perché venga consegnato.
Il mio TeslaMate deve essere raggiungibile da internet?
No. Il Notifier apre solo connessioni in uscita, quindi non serve esporre nulla né inoltrare porte perché le notifiche funzionino.
Cosa esce davvero dal mio server?
Il tipo di evento, il livello della batteria, lo stato di ricarica e il nome del geofence se ne usi. Coordinate e percorsi restano sul tuo TeslaMate, e l'indirizzo del tuo server non viene mai inviato. I dati degli eventi vengono cancellati dopo qualche ora.
Può girare su una macchina diversa da TeslaMate?
Sì, purché raggiunga il tuo broker MQTT. Punta MQTT_HOST a quell'host e verifica che la porta del broker sia raggiungibile da lì.
Funziona con più auto?
Sì. Elenca gli ID in CAR_IDS: ogni auto ha il proprio tracciamento di stato e i propri interruttori nell'app.
Cosa succede se il relay non è raggiungibile?
Il container riprova alcune volte con attese crescenti e poi scarta quell'evento. Continua a girare e gestisce normalmente il cambio di stato successivo.
Salva qualcosa?
Solo una cache dei nomi delle auto, e solo se monti il volume facoltativo. Tutto il resto resta in memoria finché il container gira.
Come lo aggiorno?
Scarica di nuovo l'immagine e ricrea il servizio. Le note di rilascio sono nella pagina releases su GitHub.
Come disattivo le notifiche?
Spegnile nell'app oppure ferma il container. Ognuna delle due basta da sola, e nient'altro nel tuo stack TeslaMate dipende da lui.
Codice sorgente
Il Notifier è Go con licenza MIT. Leggi il codice o apri una issue se qualcosa non torna.
LukStankovic/hedgiemate-notifier
Serve Aiuto?
Hai problemi con la configurazione? Siamo qui per aiutarti a iniziare.