Panoramica notifiche

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.

  1. 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.

  2. 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.

  3. Avvialo

    Fai partire il nuovo servizio. Il resto dello stack non deve riavviarsi.

    Terminale
    docker compose up -d hedgiemate-notifier

    Poi leggi il log. Un avvio corretto mostra la connessione al broker e gli ID delle auto monitorate.

    Terminale
    docker compose logs -f hedgiemate-notifier
  4. 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.

Terminale
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

Immagine Docker hedgiemate/notifier:latest Docker Hub

Serve Aiuto?

Hai problemi con la configurazione? Siamo qui per aiutarti a iniziare.