Aller au contenu
Mir

[App Tierce] TeslaMate MQTT Telegram Bot

Messages recommandés

Bonjour,

Après quelques essais avec Teslamate, et en fouillant la doc de l'outil, il est possible de faire quelques interrogations sur le brocker MQTT pour ensuite bidouiller quelques automatisations selon les statistiques que l'on reçoit par Tesla.

La documentation en question : https://docs.teslamate.org/docs/integrations/mqtt

Et, étant utilisateur de Telegram depuis des années, et notamment des bots de la plateforme, je me suis dit que ça pourrait être sympa d'avoir les changements d'états de la voiture au fur et à mesure. Et bien, si cela vous dit aussi, voici quelques partages pour mettre cela en place.

- Pré-requis : Avoir Docker, docker-compose, Teslamate qui fonctionne déjà et un éditeur de texte.

Dans le dépôt partagé par TelsaMate, on peut récupérer tout ce qu'il faut pour commencer : https://github.com/JakobLichterfeld/TeslaMate_Telegram_Bot

Il faut git clone le dépôt, puis on rajoute un fichier docker-compose.yml avec ce contenu :

version: "3"
services:
 teslamatetelegrambot:
   image: teslamatetelegrambot/teslamatetelegrambot:latest
   restart: unless-stopped
   environment:
     - MQTT_BROKER_HOST=IP_Adress
     - MQTT_BROKER_PORT=1883 #optional, default 1883
     - TELEGRAM_BOT_API_KEY=secret_api_key
     - TELEGRAM_BOT_CHAT_ID=secret_chat_id
   ports:
     - 1883
   build:
     context: .
     dockerfile: Dockerfile

Normalement, avec TeslaMate qui tourne déjà, vous pouvez mettre l'adresse IP du serveur qui écoute sur le port indiqué pour MQTT.

TELEGRAM_BOT_API_KEY est à mettre à jour en allant parler à @BotFather sur Telegram pour créer votre propre bot.

TELEGRAM_BOT_CHAT_ID est à mettre à jour avec votre numéro unique de votre compte Telegram (pas le numéro de mobile). Pour le trouver, taper dans Telegram dans une discussion ouverte (par exemple dans les messages sauvés) @getidsbot suivi d'un espace puis cliquer sur "You" et vous aurez votre chat_id.

1109167409_Capturedcran2021-04-0716_54_43.png.944f17e84ca848b80d8bc9ba78647f4c.png

Le bot inline en ajoutant un espace, ça donne ça

Ensuite, dans le dossier src, il y a un fichier à modifier teslamte_telegram_bot.py

Et dedans, il y a un petit exemple pour aller voir s'il y a une mise à jour disponible pour la voiture.

 

Mais si vous voulez savoir quand la voiture à la portière qui s'ouvre, ou qu'elle change d'état, voici quelques bouts de code à mettre :

Sous le premier client.subscribe, on rajoute celui là :

client.subscribe("teslamate/cars/1/doors_open")

Puis, sous le code pour annoncer la mise à jour :

if msg.topic == "teslamate/cars/1/doors_open":
		print("Voiture 1 / Portière / changement d'état : "+str(msg.payload.decode()))
		door_state = "ouverte" if msg.payload.decode() == "true" else "fermée"
		bot.send_message(
			chat_id,
			text="<b>"+"Voiture 1"+"</b>"+" Portière "+door_state,
			parse_mode=ParseMode.HTML,
		)

On peut aussi récupérer le temps restant de charge.

A voir si ça ne spam pas durant la nuit 😅

client.subscribe("teslamate/cars/1/time_to_full_charge")

Puis

if msg.topic == "teslamate/cars/1/time_to_full_charge" and float(msg.payload.decode()) > 0.0 :
		print("Voiture 1 / Temps de recharge restant "+str(msg.payload.decode())+" en heure")
		temps_restant = float(msg.payload.decode()) * float(60)
		texte_temps = str(temps_restant)+" minutes pour être chargée." if temps_restant > 1 else str(temps_restant)+" minute pour être chargée."
		bot.send_message(
			chat_id,
			text="<b>"+"Voiture 1"+"</b>"+" Reste "+texte_temps,
			parse_mode=ParseMode.HTML,
		)

Pour démarrer tout ça, la documentation du dépôt n'indique pas comment faire lorsque vous avez modifié votre code.

Mais pour cela, voici comment :

docker-compose build
docker-compose up -d

Ne pas faire de docker-compose pull. Sinon, il va chercher l'image dans le Docker Hub et non la votre en local pour démarrer. De fait, votre code ne fonctionnera pas puisqu'il n'existe pas.

Au démarrage, vous aurez une rafale de messages dans le brocker. Ensuite, vous aurez au fil de l'eau les mises à jour d'état.

Vous pouvez voir les logs du brocker d'ailleurs, permettant de debug un peu.

 

Et voilà ce que ça donne !

1078436209_Capturedcran2021-04-0716_46_58.png.b07b5bd5c1d9c119b43c19a6e74e27b1.png

 

En espérant que cela puisse vous être utile 🤗

Partager ce message


Lien à poster
Partager sur d’autres sites

Je profite de la bonne idée de ce topic pour partager une autre méthode permettant d'accéder aux données de Teslamate de l'extérieur.

 

Dans la même veine on peut exposer les topics MQTT via une restAPI avec https://github.com/tlj/teslamate-mqtt-api (si jamais comme moi vous avez ajouté une couche de sécurité avec des identifiants sur MQTT j'ai forké ce code pour ajouter ces derniers si ça vous intéresse, le développeur ne l'ayant pas supporté de base).

Ainsi on peut par exemple taper dessus avec un widget type https://github.com/DrieStone/TeslaData-Widget sous iOS (via Scriptable) ou n'importe quel autre client pouvant faire des requêtes sur une restAPI standard.

 

Ce qui donne un truc comme ça pour ceux qui veulent un widget dynamique permanent (iOS 14 requis), on peut également l'utiliser sur une tuile simple plutôt qu'une double, ou bien une double sans la map, et modifiable à volonté vu que ça reste du javascript :

IMG_0408.thumb.PNG.35fb068ffbbd88f60419bee20c7b117a.PNG

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour 🙂

J'ai rassemblé tout mon code, refacto et fait quelques modifications.

Tout est disponible là : https://github.com/Mirrdhyn/TeslaMate_Telegram_Bot-1

Et voici ce que ça donne :

295723155_Capturedcran2021-04-0909_05_07.png.5776d72f44208e908d18624e6e7e29b7.png

 

A chaque fois qu'un événement de changement d'état de la voiture se produit, ou qu'elle se met en charge ou que le temps de charge change, un message sur le bot Telegram de votre choix s'affichera.

Toutes les contributions sont les bienvenues dans ce code 🙏

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai mis à jour le dépôt pour récupérer la dernière position GPS connue lorsque la voiture se verrouille.

Ca peut être pas mal pour la retrouver dans un parking plein air, ou dans les rues d'une ville par exemple 😀

Il y a aussi quelques conditions ajoutées pour éviter de recevoir des notifications en doublon.

Si vous avez réussi à mettre en place votre bot, et que vous avez des idées ou des cas d'usage, n'hésitez pas à partager 🙏

Partager ce message


Lien à poster
Partager sur d’autres sites

Ce qui pourrait m'être utile, c'est être prévenu quand la charge a atteint un ou des % (en fournissant une valeur ou n valeurs en parametre).

Tu pourrais aussi envoyer un message lors d'un départ arrêté avec pédale à fond (ou presque) avec les valeurs de 0 à 100 et les autres valeurs habituelles

Voila déjà deux idées. Mais je crains que cela ne va pas te prendre trop longtemps.

Si j'en ai d'autres qi peuvent me servir pour mes rallyes, je te proposerai.

J'ai dejà installé teslamate, je vais installer ton addon.

Il me tarde d'avoir ma SR+.

Partager ce message


Lien à poster
Partager sur d’autres sites

Je vais tester mon bout de code sur le temps de recharge demain si j’ai le temps de faire une petite recharge. En fonction de ce que je remonte, je verrai pour faire le code d’alerte à tel % de charge 👍

Les valeurs de vitesse et autres, je ne les ai pas via l’API. Faudrait taper dans les données de Teslamate directement et les exposer dans l’api si c’est jouable.

Partager ce message


Lien à poster
Partager sur d’autres sites

Le build du container  tel que proposé par Mir échoue sur mon NAS (car l'interface est limitée et ne permet pas de fournir le dockerfile et le dossier src) et j'avoue que j'ai la flème de monter un repository sur mon PC juste pour compiler et fournir le docker au NAS. J'ai publié sur hub.docker.com dans gouroufr/teslamate-telegram le container avec les évolutions apportées par @Mir. Pour ceux qui veulent monter directement tout d'un coup, Teslamate et le bot Telegram, voici le docker-compose qui va bien :

 

version: "3"

services:
  teslamate:
    image: teslamate/teslamate:latest
    restart: always
    environment:
      - DATABASE_USER=teslamate  # à changer et recopier dans database et grafana
      - DATABASE_PASS=secret     # à changer et recopier dans database et grafana
      - DATABASE_NAME=teslamate  # à recopier dans database et grafana
      - DATABASE_HOST=database
      - MQTT_HOST=mosquitto
    ports:
      - 4000:4000
    volumes:
      - ./import:/opt/app/import
    cap_drop:
      - all

  database:
    image: postgres:12
    restart: always
    environment:
      - POSTGRES_USER=teslamate  # mettre la même chose que dans la définition du container teslamate (voir plus haut)
      - POSTGRES_PASSWORD=secret # mettre la même chose que dans la définition du container teslamate (voir plus haut)
      - POSTGRES_DB=teslamate    # mettre la même chose que dans la définition du container teslamate (voir plus haut)
    volumes:
      - teslamate-db:/var/lib/postgresql/data

  grafana:
    image: teslamate/grafana:latest
    restart: always
    environment:
      - DATABASE_USER=teslamate # mettre la même chose que dans la définition du container teslamate (voir plus haut)
      - DATABASE_PASS=secret    # mettre la même chose que dans la définition du container teslamate (voir plus haut)
      - DATABASE_NAME=teslamate # mettre la même chose que dans la définition du container teslamate (voir plus haut)
      - DATABASE_HOST=database  # mettre la même chose que dans la définition du container teslamate (voir plus haut)
    ports:
      - 3000:3000
    volumes:
      - teslamate-grafana-data:/var/lib/grafana

  mosquitto:
    image: eclipse-mosquitto:1.6
    restart: always
    ports:
      - 1883:1883
    volumes:
      - mosquitto-conf:/mosquitto/config
      - mosquitto-data:/mosquitto/data
      
  telegrambot:
    image: gouroufr/teslamate-telegram:latest
    restart: always
    environment:
      - MQTT_BROKER_HOST=mosquitto   # le nom "mosquitto" sera automagiquement résolu avec l'IP du container ad'hoc
      - MQTT_BROKER_PORT=1883 #optional, default 1883
      - TELEGRAM_BOT_API_KEY=1234567890:123456789012345678901234567890 # à changer selon votre profil
      - TELEGRAM_BOT_CHAT_ID=1234567890 # à changer selon votre profil
    ports:
      - 1883

volumes:
  teslamate-db:
  teslamate-grafana-data:
  mosquitto-conf:
  mosquitto-data:

Attention : ici il n'y a pas le build vu que cela échoue sur mon NAS. Si vous voulez reconstruire le container et donc y inclure la dernière version des fichiers requirements et teslamte_telegram_bot.py (en attendant la MàJ du repo public), vous devrez ajouter avant la section "volumes:" les 3 dernières lignes du fichier original de @Mir

 

Mise à jour du 11/04 : J'ai créé un dépôt public avec le container complet (qui ne nécessite pas de build en local) avec les développements de @Mir. Le fichier de configuration a été modifié.

 

Dispo si besoin d'aide...

Modifié par gourou
Publication du container sur : gouroufr/teslamate-telegram:latest

Partager ce message


Lien à poster
Partager sur d’autres sites

Il y a 5 heures, Mir a dit :

Malheureusement ce dépôt n’est pas à moi 😅

Comme je ne fais que build en local, je n’ai effectivement pas ce souci.

Toutes mes excuses pour ça ☺️

 

Ok, je m'en occupe donc sur un nouveau dépôt.

 

J'ai publié le container avec tes modifications sur gouroufr/teslamate-telegram:latest et mis à jour mon message du 10/04 avec le fichier de configuration qui va bien.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour.

J'ai quelques retouches à faire après avoir faire quelques essais hier.

Avec ce fichier, tel qu'il est, ça me génère bien trop de notifications sur la charge 😅

J'en reçois une chaque minute environ. Pendant une charge nocturne... Pas cool 😆

Pareil pour les portières ; à chaque montée et descente, puis on met en D et on commence à rouler, j'ai au moins 5 ou 6 notifications de changement d'état.

Moi qui ne voulait pas m'y coller, je crois que je vais devoir passer par la case PostgreSQL pour stocker des états et faire des comparaisons pour que les notifications de changement d'état soient un peu plus pertinentes.

Ce stockage de paramètres pourraient aussi être intéressant pour l'idée de @tben sur la notification en fonction du % de batterie.

A voir si j'ai le temps de m'y coller... En attendant, je vais plutôt faire des essaies de conditions et je mettrai mon dépôt à jour avec mon fichier Python ☺️

Partager ce message


Lien à poster
Partager sur d’autres sites

Je pensais à rendre ça dynamique via des commandes passées au bot par l’utilisateur.

C’est un peu plus complexe parce qu’il faut alors récupérer les commandes via un webhook Telegram puis noter ça dans la base qui sera lu ensuite lors d’un message du brocker MQTT.

Partager ce message


Lien à poster
Partager sur d’autres sites

Une base de données pour stocker les quelques variables gérées par ce script me semble largement overkill !

Un stockage dans un fichier dans /tmp/ est bien suffisant... Si tu veux vraiment utiliser des requêtes SQL, fais alors du SQLITE local.

 

Ensuite pour la quantité de notifications que cela génère, il me semble que ça sera à l'utilisateur de choisir, du coup il faudrait mettre dans des variables l'ensemble de la configuration afin de permettre à chacun de définir ce qui doit faire l'objet d'une notification de ce qui doit rester silencieux. Tu l'as déjà fait pour la configuration de l'API KEY et du CHAT ID, donc en fait c'est la même chose.

 

Annonce ici tes mises à jour, je tenterai de suivre le rythme pour mettre à jour le container sur mon dépôt et ainsi faciliter le déploiement pour tout le monde.

Modifié par gourou

Partager ce message


Lien à poster
Partager sur d’autres sites

Mise à jour du dépôt avec au menu (😁):

- Variables globales pour activer des notifications dans le fichier source python

- Meilleure gestion des notifications de charge (notification que si demandé au fil de la charge, cf point ci-dessus) + notification si limite de SOC atteinte pendant la charge (celle qui est configurée sur l'appli et/ou l'écran de bord)

- Meilleure prise en charge du temps de charge

- Un 🎁 s'affiche si mise à jour firmware disponible

 

Prochaine étape, bouger les variables dans le docker-compose.

Mais pas tout de suite. D'autres choses urgentes à faire 😁

Bien entendu, si vous avez un peu de temps et que vous voulez proposer une PR, ne pas hésiter 🙏

Partager ce message


Lien à poster
Partager sur d’autres sites

Je le ferai surement, pour m'amuser. Surement sur le sujet de l'ecoconduite.

Mais j'ai déjà d'abord à adapter tous mes outils de rallye à la Tesla et aussi les adapter à canserver.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour :)

Un peu compliqué ces derniers jours, mais en utilisant le bot, j'ai vu quelques soucis que j'ai tenté de corriger.

J'espère que tout fonctionne maintenant.

Si vous voulez récupérer le dernier fichier en date sur le dépôt, il doit vous annoncer quelques trucs utiles, comme le temps de charge (qui ne marchait plus).

Partager ce message


Lien à poster
Partager sur d’autres sites

TELEGRAM_BOT_API_KEY - TELEGRAM_BOT_CHAT_IDBonjour,

Pour suivre ce topic et mise en place. (enfin si j'arrive avec Télégram) pour l'instant j'ai interfacé avec domoticz

Merci !

Edit: installation OK , mais premier problème avec Télégram comment créer les infos pour TELEGRAM_BOT_API_KEY & TELEGRAM_BOT_CHAT_ID ?

oui google est mon ami ...

 

 

 

Modifié par dranreb38

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai fait un fork du travail de @Mir pour directement récupérer les données dans le broker MQTT de Teslamate et non passer par un JSON additionnel. N'hésitez pas à commenter et proposer des PR...

 

Le source est là : https://github.com/gouroufr/teslamate-telegram

La version docker "ready to use" est là : https://hub.docker.com/repository/docker/gouroufr/teslamate-telegram

 

Partager ce message


Lien à poster
Partager sur d’autres sites





×
×
  • Créer...
Automobile Propre

Automobile Propre est un site d'information communautaire qui est dédié à tout ce qui concerne l'automobile et l'environnement. Les thématiques les plus populaires de notre blog auto sont la voiture électrique et les hybrides, mais nous abordons également la voiture GNV / GPL, les auto à l'hydrogène, les apects politiques et environnementaux liés à l'automobile. Les internautes sont invités à réagir aux articles du blog dans les commentaires, mais également dans les différents forums qui sont mis à leur dispositon. Le plus populaire d'entre eux est certainement le forum voiture électrique qui centralise les discussions relatives à l'arrivée de ces nouveaux véhicules. Un lexique centralise les définitions des principaux mots techniques utilisés sur le blog, tandis qu'une base de données des voitures (commercialisées ou non) recense les voitures électriques et hybrides.