Projet: Hacker le BlueTooth de Victron avec un ESP32 M5Stack

Hello,

Je débute juste un nouveau projet qui peut intéresser d'autres contributeurs. Le voici en résumé.

En deux mots: Construire à base d'un M5Stack Core 2 un clone du Cerbo GX + GX Touch de Victron qui sont super, mais un peu cher.
Pour commencer, l'objectif serait déjà de pouvoir afficher les données d'un Smart Solar pour avoir quelques infos sur la production solaire.

, ce qui permet en théorie de récupérer les données de tous leurs appareils "Smart" (chargeurs, régulateurs, shuts, ...). Mais ça n'a pas l'air aussi simple, en tout cas pour moi.
J'ai commencé à essayer de comprendre le , ...
Si vous êtes familiers avec ces technos, vos lumières seront les bienvenues.

Là où je butte en ce moment c'est pour trouver les UUID des "caractéristics" des valeurs (voltages, ampérage,...) d'un SmartSolar. Je me sers de l'App Android nRF connect pour les snifer, mais je n'arrive pas à les trouver.

Ma plateforme est l'IDE Arduino en C++ .
Il semblerait qu'autour de Victron on parle pas mal le Python, mais je ne m'y suis pas encore mis.
Les sous étapes du projet sont:
- Connexion en client BLE au SmartSolar.
- Récupération des données . UUID et GATT, là j'ai du mal pour le moment.
- Décryptage . Les données Victron seraient cryptées, la clé de cryptage est effectivement donnée par l'App Victron Connect. Ca c'est simple à obtenir, mais comment l'utiliser ?
- Affichage des données. Ca c'est simple.
Amicalement.
FX

L'équipage
01 jan. 2024
01 jan. 2024

Les UUID sont dans la page que tu as mise en lien.


01 jan. 2024

Les UUID des valeurs remontées.


fxvt:Hello FredericL,
J'ai vu ça effectivement sur la page en question, et me semble-t-il dans une page de code sur un github. Mais cette liste est incomplète et je n'arrive pas à trouver la liste complète des UUID pour les données que le SmartSolar peut envoyer.
Par ailleurs, dans l'app nRF Connect je ne retrouve pas du tout ces valeurs quand je me connecte à mon régulateur.
Je vais creuser...·le 01 jan. 18:42
01 jan. 2024

Cela sert à quoi ??
OU
Servira à quoi ??


Lady_C:la réponse est à la 3eme ligne de la demande·le 01 jan. 18:44
fxvt:En deux mots ça servira a avoir en affichage permanent ces données sans avoir à consulter son smartphone car j'aime bien être connecté mais pas au point de naviguer avec mon téléphone à la main.
Et puis c'est aussi pour le plaisir de programmer qqchse.·le 01 jan. 18:45
Trimaran:Matsyl, ça sert à prendre du café le soir, à faire des cauchemars ? A oublier l'essentiel de la voile !·le 01 jan. 21:55
01 jan. 2024
01 jan. 2024

Fais une recherche sur github avec "victron ble", tu devrais trouver ton bonheur.
github.com[...]ron_ble
Sur github.com[...]ron-ble , dans le dossier tests, il y a des identifiants de données dans le code.


01 jan. 2024

Je ne sais pas si cela peut te servir, mais il y a quelques temps déjà, j'avais écrit un petit programme arduino pour récupérer les données du Smartshunt 500A/50mV de Victron afin de l'afficher dans OpenCPN.

D'origine, ces données sont transmises via le protocole VE.Direct en Bluetooth sur tablette et téléphone, mais je souhaitais avoir un affichage permanent dans OpenCPN et autres, ce qui m'évite ainsi d'utiliser mon téléphone

Comme il s'agit d'une phrase Nmea0183, je peux l'afficher aussi de façon indépendante dans une petite fenêtre déplaçable, écrite en python (si nécessaire et quand j'utilise un autre programme de nav').

Quelques infos sur cette

voili, voilà...


fxvt:Hello Schnaps,
J'ai fait un peu la même chose en récupérant les données de notre BMV700 pour les envoyer sur le réseau nmea2000 également avec la library de Victron. Mais c'était en filaire donc ça allait.
Là où j'ai du mal parce que c'est nouveau pour moi c'est qu'avec le régulateur solaire smart c'est du bluetooth BLE avec cryptage mis en place par Victron pour la sécurité, ce qui est normal, mais un peux sioux car pas encore bien documenté.
Mais ça va venir.
Amicalement.
FX·le 02 jan. 22:16
MMW33:@bmayer Cela ne te rappelle t-il pas un petit devoir pré-retraite ? ou mets tu cela sur le compte d'un alzeimer opportunément hyper précoce, voire juvénile ;+) ;+) ·le 09 jan. 11:42
02 jan. 2024

un cerbo GX n'est pas si cher... consomme peu en plus


fxvt:Hello cedric1983,Oui ce n'est pas exorbitant mais si on veut un affichage permanent des données il faut y ajouter un gx Touch. Et on arrive à 400€. Un M5Stack coûte environ 50 €. Fois dix.
J'y viendrai peut être au cerbox , c'est simple à raccorder au nmea2000, en plus on a l'appli Victron sur l'Axiom, mais l'affichage ne serait pas permanent et sur nos autres afficheurs comme les i70 ou les Triton T41 les donnes de type régulateur ne sont pas encore affichables.
Amicalement.
FX·le 02 jan. 22:09
04 jan. 2024

salut,
je ne sais pas si tu lis l'anglais, mais il y a dans cette discussion :
community.victronenergy.com[...]on.html
un post du 9 may 2022 d'un certain : Wolfgang huse qui semble avoir fait ce que tu veux faire.

en cherchant son nom sur google, je suis tombé sur un github qui semble etre le sien, ou il y a le fichier INO correspondant :
github.com[...]ble.ino

peut être une piste ?


fxvt:Hello,
Merci nitrosails pour ces liens.
J'avais déjà lu et relu le 1er lien du blog de Victron ainsi que son développement de 2023. En revanche je n'avais pas poussé aussi loin que toi en creusant du coté de ce Wolfgang Huse.
Et ça valait la peine car son script a l'air pas mal après l'avoir parcouru rapidement et complilé.
Il a été écrit pour le Victron SmartShunt. Je vais donc voir comment l'adapter au Victron SmartSolar et au Smart BMV712.
Pour le moment, j'ai toujours les mêmes points d'attention: Pour les UUID je vais tester un autre snifer BLE que nRF Connect qui est BLE Scanner. Et je ne vois pas dans le script de W.Huse de décryptage des données. Ne serait-elles pas cryptés sur le SmartShunt comme elles le sont sur le SmartSolar ? Mystère pour le moment.
Amicalement.
FX·le 04 jan. 15:08
Lady_C:@fxvt : l'esp32 dispose d'un module de chiffrement/déchiffrement. je ne suis pas un grand connaisseur du BT 4.0, mais je dirais que le déchiffrement est fait à la volée lors de la communication BT, les clés ayant été implémentées aux lignes 309-312.·le 05 jan. 10:13
05 jan. 2024

Une piste: Signal K et le plugin signalk-victron-ble ( github.com[...]ron-ble & github.com[...]ron-ble )


fxvt:Hello Sailabout,
Merci pour ces liens. J'avais repéré ces infos...en Python. Si je n'avance pas assez vite en C++ il va falloir que je me mette au Python.
Amicalement.
FX·le 05 jan. 09:58
Lady_C:sur esp32, ce n'est pas du Python, mais du microPython.
toutes les fonctions et librairies du Python ne sont pas forcément portables.·le 05 jan. 10:09
Schnaps :@ fxvt : Le python est largement à ta portée...·le 05 jan. 10:53
05 jan. 2024

fxvt:Hello Lady_C
Merci pour ces liens. Le premier qui est une communication de Victron est celui qui m'avait décidé à commencer ce petit projet.
Quant aux autres liens, je les avais également noté mais pas encore eu le temps de les étudier. Dans ces scripts le puzzle semble se compléter, il y est question d'adresse mac, de clé de cryptage. On progresse.
Merci.
Amicalement.
FX·le 05 jan. 11:57
05 jan. 2024

Salut,

tu as aussi la doc open source de Victron:



Bon ca date un peu ...

Bonnes nav en 2024

Pascal


08 jan. 2024

peut etre que tu peux trouver des infos ici :

github.com[...]ple.ino


Lady_C:Comme déjà dit·le 08 jan. 15:27
nitrosails:Oups effectivement....Désolé·le 09 jan. 11:24
08 jan. 2024

un up pour suivre !


08 jan. 2024

Hello,
J'ai fait quelques essais à bord ce weekend après avoir adapté le sketch github.com[...]Display
à mon M5Stack Core2 et ça fonctionne.
En fait il y a plusieurs méthodes pour se connecter en bluetooth aux appareils Victron et ça ne rend pas la tâche plus simple.
J'ai déjà refait l'affichage pour qu'il soit un peu plus attrayant. Je vous posterai une petite image.
J'ai déjà commencé à voir comment y ajoute une seconde connexion BLE sur le Smart BMV702 pour avoir en plus le SOC et le solde des Ah de la batterie.

Mais c'est vrai que c'est très cool, sans sortir son téléphone ou la tablette, d'avoir pour une dizaine d'Euro l'affichage de:
- Voltage Panneaux
- Ampérage Panneaux
- Voltage Batterie
- Ampérage Batterie (entrant)
- Production du jour
Et quand le BMV sera connecté:
- % remplissage de la batterie
- Solde Ampères Entrant/Sortant de la Batterie.

J'avais déjà le SOC, le voltage et les Ah sur le réseau NMEA2000, mais là c'est sympa de l'avoir sur ce petit afficheur qui ne coute rien par rapport à un Raymarine i70 :-)
Amicalement.
FX


08 jan. 2024

Voici un premier template pour avoir un petit aperçu.
Mais il y a encore pas mal d'ajustements prévus.



a_guy:Super ! Bravo je crois que je vais aussi me lancer mais juste pour mon chargeur de quai !·le 09 jan. 14:11
Corvette:Bravo 👍·le 23 avr. 14:04
21 avr. 202421 avr. 2024

Hello,
J'ai avancé sur ce petit POC.
Le M5Stack Core 2 communique en Bluetooth avec :

le régulateur solaire Victron SmartSoalar 75/15 pour affcher
- Production en W du panneau
- les A sortant du régulateur vers la batterie
- la production journalière
- la phase du cycle de charge (Absorption, bulk...)

Le Moniteur de batterie Victron SmartBMV 712 dont il affiche:
- le % de charge de la batterie
- le bilan en A de la batterie, (en orange si on décharge, comme sur l'image)
- le voltage de la batterie
- le temps restant pour être à 100% de charge. Petit pb d'affichage.

Je pense peut-être porter ce petit projet sur un wt32-sc01 plus qui offre un affichage un peu plus gros sans trop consommer.

Voici le résultat.
Amicalement.
FX



BenjiC34:Trop bien! :) ·le 22 avr. 12:56
21 avr. 2024

Je viens de recharger la vidéo qui ne passait pas.


Pfuîîî...
Bravo !

Perso, j'ai également réalisé un affichage mais en moins bien...

A partir du Smartshunt 500A/50mV, je récupère les data à l'aide d'un programme arduino pour ensuite les afficher dans un écran TFT 3.5. (tension batterie lithium, SOC, puissance consommée, batterie moteur, etc.).

Par wifi (nmea4wifi), j'affiche également ces données sur OpenCPN dans le cockpit.

Sur OpenCPN (comme sur l'écran TFT), l'affichage change de couleur sous un certain seuil et une alarme retentit.

Pour l'instant, j'en reste là, mais j'observe ton travail avec attention...


Corvette:Vraiment bien 👍 Côté consommation, on parle de combien watt/heure environ ?·le 25 avr. 14:55

Hello Schnaps,

Ton montage est pas mal du tout! Il est surtout bien fini et bien intégré.
Du coup j'ai plein de questions:
- D'où vient le boitier, est-ce le l'impression 3D ?
- Quelle carte as tu utilisé Uno, Méga, ESP32... ?
- Quel circuit utilises tu pour l'alim 12V > Carte ?
- Quelle liaison utilises tu entre le SmartShunt et la carte, cable VE-Direct ou Bluetooth ?
- Utilise tu la bibliothèque Victron VE-direct ?
- L'afficheur de droite sur la seconde photo affiche quoi, des niveaux de réservoir ?
- Si ce sont des niveaux, quels capteurs utilises tu ?

Amicalement.
FX


Bonjour François-Xavier,

Désolé du retard à répondre.
Beaucoup de questions...

- D'où vient le boitier, est-ce le l'impression 3D ?

En effet, ce sont des boitiers que j'ai imprimés moi-même, après en avoir dessiné et testé différents modèles. J'ai finalement trouvé par hasard le STL sur Thingiverse et il me convient parfaitement. Il permet de caser l'écran shield et tous les fils que je fais sortir au dos du boitier dans le minimum d'espace.
On ne le voit pas sur la photo, mais sur le côté il y un accès pour le câble USB dédié, s'il faut modifier/améliorer le programme.

- Quelle carte as tu utilisé Uno, Méga, ESP32... ?

Une Mega, car plusieurs E/S et correspond à la taille du shield TFT 3.5

- Quel circuit utilises tu pour l'alim 12V > Carte ?

Simple alimentation 12v/9v acheté sur Amazon et/ou Aliexpress.

- Quelle liaison utilises tu entre le SmartShunt et la carte, cable VE-Direct ou Bluetooth ?

Ni l'un ni l'autre (le câble VE-direct est trop cher pour cela). Un câble deux fils sur le TX et Gnd de la sortie VE-Direct du Smartshunt connecté au RX(x) et TX(x) de l'arduino.

- Utilise tu la bibliothèque Victron VE-direct ?

Oui

- L'afficheur de droite sur la seconde photo affiche quoi, des niveaux de réservoir ?

Un reliquat de mon précédent bateau...
Affichage du Reste-Eau et du Reste-Fuel en pourcentage et volume. L'affichage des deux demi-camemberts est issu du lien que je t'avais envoyé (et que tu avais déjà, je crois).
Les données de la ligne du dessous (pression, heures moteur et la batterie moteur) ne sont pas temporisées, ce qui me permet de vérifier de suite si tout fonctionne normalement.

- Si ce sont des niveaux, quels capteurs utilises tu ?

Pour le fuel, une jauge capacitive.
Pour le réservoir eau, c'est plus compliqué : j'ai installé à la sortie de la pompe à eau un capteur à effet Hall, mais j'ai du mal à l'étalonner correctement.
J'avoue que ce n'est pas une priorité d'autant que je ne souhaite pas percer le haut du réservoir pour y mettre une jauge résistive ou capacitive...
Là également, il s'agit d'une carte Méga.

En fait, toute cette installation est difficilement duplicable, notamment dû au fait que j'ai créé des phrases Nmea0183 spécifiques, en plus des existants, ce qui me donne plus de souplesse dans l'affichage des données sur OpenCPN et/ou TZ.

En effet, autant l'affichage dans le carré est sympa et utile, autant l'affichage des données batterie (tension et SOC) sur le PC tablette dans le cockpit m'est beaucoup plus utile, quand je suis en solo.

Au départ, j'avais "tweaker" le plugin dashboard d'OCN pour afficher ces données mais je ne les avais donc pas sur les autre softs ou sans lancer OCN au préalable.
J'ai donc écrit un petit programme en python qui permet d'afficher un bandeau déplaçable avec ces deux données et ainsi, en fonction du programme ouvert, je peux afficher ou non ces données, et ce, n'importe où sur l'écran qui est dans le cockpit.

Mais comme toute bonne bidouille non indispensable, je continue (en fonction de mon temps libre) à modifier/améliorer ce système... ;-)


Phare de la pointe de Vénus Tahiti

Phare du monde

  • 4.5 (59)

Phare de la pointe de Vénus Tahiti

2022