Aperçu des notifications

Aide sur les notifications

Tout ce qu'il faut pour faire tourner le Notifier à côté de votre TeslaMate, et quoi vérifier quand un événement n'arrive pas.

Avant de commencer

Trois choses, et la plupart des installations TeslaMate ont déjà les deux premières.

  • TeslaMate avec un broker MQTT. Mosquitto fait partie du fichier Compose par défaut de TeslaMate.
  • Docker sur la même machine que TeslaMate, ou sur n'importe quel hôte qui atteint le broker.
  • Accès Internet sortant. Aucun port entrant, et votre TeslaMate n'a pas besoin d'être public.

Installer le Notifier

Votre TeslaMate ne peut pas joindre votre téléphone tout seul, et une notification iOS ne peut arriver que via Apple. Le Notifier est le petit conteneur qui surveille MQTT et transmet les événements. Il tourne à côté de TeslaMate et n'ouvre jamais de port.

  1. Récupérez votre jeton dans l'app

    Ouvrez HedgieMate, allez dans Réglages puis Notifications push et activez-les. L'app affiche un jeton de liaison commençant par hm_ et l'identifiant du serveur TeslaMate auquel vous êtes connecté. Copiez les deux.

    Le jeton relie l'app au conteneur. Traitez-le comme un mot de passe.

  2. Ajoutez le conteneur à votre fichier Compose

    Ouvrez le docker-compose.yml depuis lequel vous lancez TeslaMate et ajoutez le service ci-dessous. En restant dans le même fichier, il partage le réseau de votre broker, donc MQTT_HOST est simplement le nom du service du 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:

    Le volume est facultatif. Il conserve les noms des voitures après un redémarrage ; sans lui, le relais les complète quand même. Utilisez un volume nommé plutôt qu'un bind mount : le conteneur tourne avec un utilisateur non root et ne peut pas écrire dans un répertoire hôte créé par Docker en root.

  3. Démarrez-le

    Lancez le nouveau service. Le reste de votre stack n'a pas besoin de redémarrer.

    Terminal
    docker compose up -d hedgiemate-notifier

    Lisez ensuite le journal. Un démarrage correct affiche la connexion au broker et les identifiants de voiture surveillés.

    Terminal
    docker compose logs -f hedgiemate-notifier
  4. Vérifiez dans l'app

    L'app marque le serveur comme connecté en quelques secondes. Vous pouvez alors activer ou désactiver chaque événement, voiture par voiture.

    Rien n'arrive tant que la voiture ne change pas réellement d'état. Brancher le câble est le moyen le plus rapide de voir le premier événement.

Sans Compose

Si TeslaMate n'est pas géré par Compose, docker run fait la même chose. Pointez MQTT_HOST vers un hôte que le conteneur peut atteindre.

Terminal
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

Plusieurs TeslaMate

Lancez un Notifier à côté de chaque serveur. Le même jeton de liaison fonctionne partout. C'est l'identifiant de serveur qui les distingue dans l'app.

Configuration

Tout se règle par variables d'environnement. Trois sont obligatoires, les autres ont des valeurs par défaut qui fonctionnent.

Variable Par défaut Description
HEDGIEMATE_USER_TOKEN obligatoire aucune Jeton de liaison fourni par l'app. Commence par hm_.
MQTT_HOST obligatoire aucune Nom d'hôte de votre broker MQTT. Dans Compose, c'est le nom du service, en général mosquitto.
SERVER_ID obligatoire aucune UUID du serveur fourni par l'app. Le conteneur démarre sans, mais les réglages par serveur et par voiture faits dans l'app sont alors ignorés.
MQTT_PORT 1883 Port du broker.
MQTT_USERNAME aucune Nom d'utilisateur du broker, s'il demande une authentification.
MQTT_PASSWORD aucune Mot de passe du broker.
MQTT_CLIENT_ID hedgiemate-notifier Identifiant client utilisé sur le broker. Changez-le si autre chose s'y connecte déjà sous ce nom.
MQTT_TLS false Mettez true pour un broker en TLS. Le port par défaut passe alors à 8883.
MQTT_NAMESPACE aucune Doit correspondre au MQTT_NAMESPACE de votre TeslaMate, si vous en avez défini un. Les topics deviennent teslamate<namespace>/cars/#.
CAR_IDS 1 Identifiants de voiture à surveiller, séparés par des virgules, par exemple 1,2. Chaque voiture a sa propre machine à états.
LOG_LEVEL info debug, info, warn ou error.
RELAY_URL https://push.hedgiemate.com Adresse du relais. Il n'y a pas de raison de la modifier.

Tous les événements

Chaque ligne est un interrupteur indépendant par voiture dans l'app. Les mises à jour des Live Activities ne sont pas des notifications et ne figurent pas ici.

Notification Envoyée quand
Conduite
Trajet démarré state → driving
Trajet terminé state leaves driving
Charge
Charge démarrée charging_state → Charging
Charge terminée charging_state → Complete
Charge interrompue charging_state leaves Charging without Complete
Câble branché plugged_in → true
Câble débranché plugged_in → false
Batterie
Batterie faible battery_level ≤ BATTERY_LOW_THRESHOLD
Niveau de batterie atteint battery_level ≥ BATTERY_HIGH_THRESHOLD
Position
Entrée dans une zone geofence set
Sortie d'une zone geofence cleared or changed
Sécurité
Enregistrement Sentry center_display_state = 7
Véhicule
Mise à jour logicielle update_available → true
Mise en veille state → asleep pending
En veille state → asleep
Véhicule réveillé state leaves asleep

Rien n'arrive

Parcourez la liste dans l'ordre. La plupart des cas sont parmi les trois premiers.

L'app indique toujours que le serveur n'est pas connecté

Vérifiez avec docker compose ps que le conteneur tourne vraiment, puis lisez son journal. La cause habituelle est un mauvais MQTT_HOST : dans Compose, c'est le nom du service du broker, mosquitto, pas localhost.

Le conteneur tourne, mais aucun événement ne part

CAR_IDS doit correspondre à l'identifiant de voiture utilisé par TeslaMate. TeslaMate numérote les voitures à partir de 1, et avec plusieurs voitures on les liste : CAR_IDS=1,2.

MQTT se connecte et le journal reste silencieux

Si vous avez défini MQTT_NAMESPACE dans TeslaMate, mettez la même valeur sur le Notifier. Sans elle, les noms de topics ne correspondent pas et le conteneur n'a rien à lire.

Certains événements arrivent, d'autres jamais

Chaque événement est un interrupteur par voiture dans l'app. Ouvrez le serveur dans Réglages et vérifiez la liste des événements de cette voiture.

Les notifications de batterie ne partent jamais

BATTERY_LOW_THRESHOLD et BATTERY_HIGH_THRESHOLD valent 20 et 90 par défaut. Elles partent une fois par session de charge : une voiture qui n'a pas franchi le seuil depuis le début de la charge n'en envoie aucune.

Les notifications s'arrêtent au bout de quelques jours

Assurez-vous que le service a restart: unless-stopped pour revenir avec l'hôte. Vérifiez ensuite iOS : un mode de concentration ou les réglages de notification de l'app peuvent les absorber.

Les Live Activities n'apparaissent pas

Les Live Activities doivent être autorisées pour HedgieMate dans les Réglages iOS, et une session doit être en cours. La Dynamic Island nécessite un iPhone 14 Pro ou plus récent.

Le broker demande un identifiant ou du TLS

Renseignez MQTT_USERNAME et MQTT_PASSWORD. Pour TLS, mettez MQTT_TLS à true, ce qui fait passer le port par défaut à 8883.

Vous voulez voir ce qu'il fait

Mettez LOG_LEVEL sur debug, reproduisez le cas, puis remettez la valeur d'origine. Debug affiche chaque message MQTT et chaque décision prise à partir de lui.

Questions

Pourquoi ai-je besoin du Notifier ?

Votre TeslaMate tourne sur votre propre serveur et ne peut pas joindre votre téléphone, et seule Apple peut délivrer une notification iOS. Le Notifier comble ce vide : il surveille vos topics MQTT, repère le changement d'état et envoie l'événement pour livraison.

Mon TeslaMate doit-il être accessible depuis internet ?

Non. Le Notifier n'ouvre que des connexions sortantes : rien à exposer, aucun port à rediriger pour que les notifications fonctionnent.

Qu'est-ce qui quitte réellement mon serveur ?

Le type d'événement, le niveau de batterie, l'état de charge et le nom du geofence si vous en utilisez. Les coordonnées et les trajets restent sur votre TeslaMate, et l'adresse de votre serveur n'est jamais envoyée. Les données d'événement sont supprimées au bout de quelques heures.

Peut-il tourner sur une autre machine que TeslaMate ?

Oui, tant qu'il atteint votre broker MQTT. Pointez MQTT_HOST vers cet hôte et vérifiez que le port du broker est joignable depuis là.

Est-ce que ça marche avec plusieurs voitures ?

Oui. Listez les identifiants dans CAR_IDS : chaque voiture a son propre suivi d'état et ses propres interrupteurs dans l'app.

Que se passe-t-il si le relais est injoignable ?

Le conteneur réessaie quelques fois avec un délai croissant, puis abandonne cet événement. Il continue de tourner et traite normalement le changement d'état suivant.

Stocke-t-il quelque chose ?

Uniquement un cache des noms de voitures, et seulement si vous montez le volume facultatif. Tout le reste reste en mémoire tant que le conteneur tourne.

Comment le mettre à jour ?

Retéléchargez l'image et recréez le service. Les notes de version sont sur la page releases de GitHub.

Comment couper les notifications ?

Désactivez-les dans l'app, ou arrêtez le conteneur. Les deux fonctionnent séparément, et rien d'autre dans votre stack TeslaMate n'en dépend.

Code source

Le Notifier est du Go sous licence MIT. Relisez le code, ou ouvrez une issue si quelque chose cloche.

LukStankovic/hedgiemate-notifier

Image Docker hedgiemate/notifier:latest Docker Hub

Besoin d'aide ?

Des soucis lors de la configuration ? Nous sommes là pour vous aider à démarrer.