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.
-
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.
-
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.
-
Démarrez-le
Lancez le nouveau service. Le reste de votre stack n'a pas besoin de redémarrer.
Terminaldocker 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.
Terminaldocker compose logs -f hedgiemate-notifier
-
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.
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
Besoin d'aide ?
Des soucis lors de la configuration ? Nous sommes là pour vous aider à démarrer.