Aller au contenu
Mir

[App Tierce] TeslaMate MQTT Telegram Bot

Messages recommandés

@dranreb38 Je n'ai pas terminé le portage de l'application de Mir. Il me reste quelques données additionnelles qui ne sont pas encore prises en compte dans cette version à exploiter afin de les afficher dans les messages. C'est prévu dans les prochaines évolutions.

 

Juste par curiosité, tu utilises le script Python ou le container Docker ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour !

@gourou : Je n'arrive pas à voir comment c'est fait pour récupérer toutes les données dans un seul message MQTT. Pour moi, dans le datagramme, il n'y a que la donnée poussée dans la queue MQTT et pas tout le reste. Du coup, comment récupérer toutes les données de l'état de la voiture lorsque l'on récupère une mise à jour sur le temps de charge par exemple ?

J'ai rajouté dans une PR la syntaxe pour envoyer une position GPS via Telegram ainsi qu'une petite retouche sur les unités.

 

@dranreb38 : C'est étrange. Même avec un docker-compose build puis un docker-compose up -d ? Vous avez exactement le même contenu de fichier "teslamte_telegram_bot.py" que dans le dépôt dans le répertoire "src" ?

Partager ce message


Lien à poster
Partager sur d’autres sites

@Mir Cette ligne récupère le temps restant pour terminer la charge selon la limite indiquée par l'utilisateur dans la voiture et non, comme son nom laisse croire, la charge complète. Par full charge il faut comprendre la charge jusqu'à la limite de charge demandée.

if msg.topic == "teslamate/cars/"+str(CAR_ID)+"/time_to_full_charge"

Partager ce message


Lien à poster
Partager sur d’autres sites

Voci toutes les informations disponibles via le broker MQTT :

 

Topic Example Description
teslamate/cars/$car_id/display_name Blue Thunder Vehicle Name
teslamate/cars/$car_id/state asleep Status of the vehicle (e.g. online, asleep, charging)
teslamate/cars/$car_id/since 2019-02-29T23:00:07Z Date of the last status change
teslamate/cars/$car_id/healthy true Health status of the logger for that vehicle
teslamate/cars/$car_id/version 2019.32.12.2 Software Version
teslamate/cars/$car_id/update_available false Indicates if a software update is available
teslamate/cars/$car_id/update_version 2019.32.12.3 Software version of the available update
     
teslamate/cars/$car_id/model 3 Either "S", "3", "X" or "Y"
teslamate/cars/$car_id/trim_badging P100D Trim badging
teslamate/cars/$car_id/exterior_color DeepBlue The exterior color
teslamate/cars/$car_id/wheel_type Pinwheel18 The wheel type
teslamate/cars/$car_id/spoiler_type None The spoiler type
     
teslamate/cars/$car_id/geofence 🏡 Home The name of the Geo-fence, if one exists at the current position
     
teslamate/cars/$car_id/latitude 35.278131 Last reported car latitude
teslamate/cars/$car_id/longitude 29.744801 Last reported car longitude
teslamate/cars/$car_id/shift_state D Current/Last Shift State (D/N/R/P)
teslamate/cars/$car_id/speed 12 Current Speed in km/h
teslamate/cars/$car_id/heading 340 Last reported car direction
teslamate/cars/$car_id/elevation 70 Current elevation above sea level in meters
     
teslamate/cars/$car_id/locked true Indicates if the car is locked
teslamate/cars/$car_id/sentry_mode false Indicates if Sentry Mode is active
teslamate/cars/$car_id/windows_open false Indicates if any of the windows are open
teslamate/cars/$car_id/doors_open false Indicates if any of the doors are open
teslamate/cars/$car_id/trunk_open false Indicates if the trunk is open
teslamate/cars/$car_id/frunk_open false Indicates if the frunk is open
teslamate/cars/$car_id/is_user_present false Indicates if a user is present in the vehicle
     
teslamate/cars/$car_id/is_climate_on true Indicates if the climate control is on
teslamate/cars/$car_id/inside_temp 20.8 Inside Temperature in °C
teslamate/cars/$car_id/outside_temp 18.4 Temperature in °C
teslamate/cars/$car_id/is_preconditioning false Indicates if the vehicle is being preconditioned
     
teslamate/cars/$car_id/odometer 1653 Car odometer in km
teslamate/cars/$car_id/est_battery_range_km 372.5 Estimated Range in km
teslamate/cars/$car_id/rated_battery_range_km 401.63 Rated Range in km
teslamate/cars/$car_id/ideal_battery_range_km 335.79 Ideal Range in km
     
teslamate/cars/$car_id/battery_level 88 Battery Level Percentage
teslamate/cars/$car_id/usable_battery_level 85 Usable battery level percentage
teslamate/cars/$car_id/plugged_in true If car is currently plugged into a charger
teslamate/cars/$car_id/charge_energy_added 5.06 Last added energy in kWh
teslamate/cars/$car_id/charge_limit_soc 90 Charge Limit Configured in Percentage
teslamate/cars/$car_id/charge_port_door_open true Indicates if the charger door is open
teslamate/cars/$car_id/charger_actual_current 2.05 Current amperage supplied by charger
teslamate/cars/$car_id/charger_phases 3 Number of charger power phases (1-3)
teslamate/cars/$car_id/charger_power 48.9 Charger Power
teslamate/cars/$car_id/charger_voltage 240 Charger Voltage
teslamate/cars/$car_id/scheduled_charging_start_time 2019-02-29T23:00:07Z Start time of the scheduled charge
teslamate/cars/$car_id/time_to_full_charge 1.83 Hours remaining to full charge

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui, mais comment avoir en une fois la "charge_limit_soc" ainsi que l'actuelle "battery_level" et "charge_energy_added" lorsque l'on reçoit ce message "time_to_full_charge" de la queue MQTT ?

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est bien ce que je dis : la queue MQTT ne fournit que la donnée qui lui incombe et pas tout le reste.

D'où mon passage par l'API pour récupérer le reste des données et n'en faire qu'un message selon le topic poussé.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est à partir de la ligne 261 que je gère cela :

 

Le principe est qu'à chaque tour on ne reçoit qu'un seul message MQTT. Donc non on ne peut pas avoir en une fois toutes les données, mais on s'en fout en fait. En attendant d'avoir toutes les données on les stocke silencieusement dans des variables. L'idée, c'est bien de ne pas demander explicitement les infos via une autre API ou un JSON, car on les récupérera tôt ou tard via un prochain message MQTT.

 

Lorsque (au bout de plusieurs tours) j'ai assez d'informations pour envoyer un message, j'appelle le Bot. D'un tour à l'autre les informations sont stockées dans des variables d'où ce genre de tests :

if pseudo != "" and model != "" and etat_connu != "" and locked != "" and usable_battery_level != "":

 

Par exemple ici je m'assure que j'ai récupéré au moins 5 informations spécifiques avant d'envoyer le premier message. Du coup j'ai au moins reçu 5 messages MQTT avant d'envoyer mon premier message Telegram... Je conserve les informations statiques entre chaque tour de sorte à ne plus avoir à attendre ces informations une fois que je les ai déjà eues. Par exemple je n'envoie rien à Telegram avant 5 messages au minimum, mais selon le contenu du 6e message, je pourrais renvoyer un second Telegram aussitôt, selon la pertinence de l'information.

 

Modifié par gourou

Partager ce message


Lien à poster
Partager sur d’autres sites

Il me semblait que c'était stateless et qu'on perdait les données à chaque tour.

En tout cas, merci beaucoup pour le partage ! C'est du beau code ! (je débute en Python 😅)

Partager ce message


Lien à poster
Partager sur d’autres sites

Il est beau, car il est documenté/commenté... mais j'estime que je ne fais que du travail d'amateur (je ne suis pas développeur), la preuve le nommage de mes variables ne suit pas une règle précise, c'est plutôt du grand n'importe quoi ce que je fais je pense... mais merci pour le compliment.

 

Dans les fonctions toutes les variables sont disponibles en lecture seule, pour les surcharger et conserver la modification en dehors de la fonction, il faut les déclarer comme variables globales :

        global model
        global km
Modifié par gourou

Partager ce message


Lien à poster
Partager sur d’autres sites

Il y a 11 heures, gourou a dit :

@dranreb38 Je n'ai pas terminé le portage de l'application de Mir. Il me reste quelques données additionnelles qui ne sont pas encore prises en compte dans cette version à exploiter afin de les afficher dans les messages. C'est prévu dans les prochaines évolutions.

 

Juste par curiosité, tu utilises le script Python ou le container Docker ?

Hello @gourou,

Heu ..., je ne sais comment te répondre 😅. Voici comment j'ai procédé, installation via un docker-compose.yml avec tes infos ci-dessous :

 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=xxxxxxxxxxx # à changer selon votre profil
      - TELEGRAM_BOT_CHAT_ID=xxxxxxxxxxxxx # à changer selon votre profil
      - LANGUAGE=FR # to be changed : FR stands for French / EN stands for English

puis un git pull https://github.com/Mirrdhyn/TeslaMate_Telegram_Bot-1 fourni par  @Mir dans le même dossier du docker-compose.yml .

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok, si tu fais un docker-compose, c'est que tu utilises le container docker.

Le container Docker contient tout ce qui est nécessaire à son fonctionnement, il est inutile de faire un git clone ou git pull des sources.

Partager ce message


Lien à poster
Partager sur d’autres sites

Il y a 2 heures, Mir a dit :

 

@dranreb38 : C'est étrange. Même avec un docker-compose build puis un docker-compose up -d ? Vous avez exactement le même contenu de fichier "teslamte_telegram_bot.py" que dans le dépôt dans le répertoire "src" ?

Hello @Mir, je pense avoir compris pourquoi je n'ai pas les informations manquantes, dans mon docker-compose.yml j'ai mis les information de @gourou pour l'image telegram

telegrambot:
    image: gouroufr/teslamate-telegram:latest

Est-ce cela la raison ?

Merci pour votre travail 👍

Partager ce message


Lien à poster
Partager sur d’autres sites

@dranreb38 Je pense qu'en effet, si vous faite un pull, il faut alors faire un build pour avoir l'image contenant les modifications à jour dans le container. Ensuite vous pouvez lancer le container qui contient alors les dernières modifications du fichier que je mets à jour sur le dépôt.

Partager ce message


Lien à poster
Partager sur d’autres sites

Je vais intégrer les fonctionnalités implémentées par @Mir au fur et à mesure.

 

Je viens de pousser une mise à jour (source et container docker) qui inclut l'affichage de l'état des portes, de la batterie et l'autonomie (en Km et miles) et ...un plan Google Map indiquant la position de la voiture (attention : de nouvelles variables d'environnement font leur apparition, le yml est à modifier, voir le readme.md)

Modifié par gourou

Partager ce message


Lien à poster
Partager sur d’autres sites

Je viens faire la même install de ma VM sur mon RPI4 (de Prod) avec le même fichier docker-compose.yml, mais cela ne fonctionne pas !.

Dans les log's Containers > teslamate_telegrambot_1 > Logs j'ai ce message d'erreur :


2021-04-23T19:09:25.269776174Z standard_init_linux.go:219: exec user process caused: exec format error,
2021-04-23T19:14:23.088179456Z standard_init_linux.go:219: exec user process caused: exec format error,
2021-04-23T19:15:24.389625251Z standard_init_linux.go:219: exec user process caused: exec format error

Et bien sur aucun message de Télégram !!!.

Une idée ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello @gourou

Est-ce que tu pourrais construire une image ARM , je me bat avec la solution de @Mir quand je build j'ai des

messages d'erreurs au niveau de la cryptography après avoir lancer un docker-compose build

ERROR: Command errored out with exit status 1:
   command: /usr/local/bin/python /usr/local/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py build_wheel /tmp/tmpoz9fim3k
       cwd: /tmp/pip-install-9ejwj35n/cryptography_23289f655e524f099fd2397c11aed645
This package requires Rust >=1.41.0.
  ----------------------------------------
  ERROR: Failed building wheel for cryptography
Successfully built paho-mqtt tornado
Failed to build cryptography
ERROR: Could not build wheels for cryptography which use PEP 517 and cannot be installed directly
The command '/bin/sh -c ln -sf /usr/share/zoneinfo/Europe/Paris /etc/timezone &&      ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime &&      python -m pip install -r requirements.txt' returned a non-zero code: 1
ERROR: Service 'teslamatetelegrambot' failed to build : Build failed

je suis bloqué :(

 

Modifié par dranreb38
correction

Partager ce message


Lien à poster
Partager sur d’autres sites

J'imagine qu'il y a une bibliothèque qui pose un souci avec le Pi.

 

Je vais faire quelques recherches sur Google, mais comme je n'ai pas de Raspberry pour le tester, ça va être compliqué pour moi de t'aider beaucoup là car le build cross-plateforme je ne maitrise pas.

Modifié par gourou

Partager ce message


Lien à poster
Partager sur d’autres sites

@gourou, merci de ta réponse, dommage que tu ne possède pas de Raspberry pour un build compatible ARM .

 

Peux être que  @Mir à pu faire l'installation de son 1 post sur un Raspberry , ce qui pourrait m'aider pour comprendre pourquoi je ne peux faire un build .

Je vais refaire une install sur un autre RPI pour investiguer sans mettre en vrac mon RPI4 opérationnel .

 

Partager ce message


Lien à poster
Partager sur d’autres sites

En lisant les docs sur les utilisateurs rencontrant ce genre de souci, il semblerait y avoir un rapport avec OpenSSL et l'installation du module cryptography. Essaye d'ajouter dans le fichier requirements.txt une ligne avec "cryptography" (sans les " ")  et retente le build.

 

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.