Electrolyseur E-Pool Technologie Justsalt

Bonjour,
je ne suis pas bon en python et je n est pas eu le temps d’avancer le code que j ai fourni ne fonctionne pas convenablement, car je n arrive pas a lire le « characteristic_uuid » mon idée première était de faire des extractions des valeurs , pour ensuite pouvoir les comparer malheureusement je n ai pas avancé sur l’extraction, mais quand je re travaillerai sur le sujet je partagerais

je viens de regarder ce qu’était l’antenne LR-MB-POOL
c est exactement ce que j aimerais faire avec ESP32 mais pas vers un site internet mais vers Home assistant :slight_smile:
je devrais reprendre les essais et le dev dans 15 à 20 jours

Je découvre ce sujet qui m’intéresse fortement. je ne peux malheureusement pas aider au développement car je n’ai pas les compétences.

je suis équipé également d’un justsalt duo mais j’ai des difficultés à ajuster convenablement la consigne de l’électrolyseur pour un obtenir un taux de chlore stable.
Je suis en train de regarder pour acheter une sonde ORP, couplée à HA, ca me donnera plus d’info et tendance pour ajuster manuellement la consigne.

La suite sera de trouver un moyen de piloter l’électrolyseur automatique. Si votre travail permet d’historiser les infos de l’électrolyseur, ce serait déjà top. Mais si en plus, il y avait la possibiliter de pousser la consigne d’électrolyse, ce serait juste énorme.

j ai vu aussi qui disposait d une interface rs485/modbus mais j’ai trouvé aucune info technique dessus

Bonjour à tous,
J’ai pas mal avancé sur le sujet pendant la période hivernale cependant je ne peux pas effectuer des tests réels mon installation étant en hivernage.
Niveau matériel je m’étais équipé d’un ESP32, d’une clé NRF pour lire les trames bluetooth. Cependant ne pouvant pas me connecter et en temps même lire les trames échangés entre mon téléphone (Iphone) et l’électrolyseur j’ai abandonné d’utiliser la clé NRF.

La deuxième solution pour récupérer les trames ble et d’utiliser un téléphone android. En effet, en passant ce dernier en mode développeur, il est possible de lancer un enregistrement des trames, ensuite il suffit d’aller sur l’application epool et de se connecter normalement à l’électrolyseur.

Grâce à cette méthode, j’ai récupéré 2 logs avec les trames échangées que j’ai commencé à analyser avec Wireshark.

Je me suis arrêté sur la première trame avec une valeur envoyé par l’électrolyseur au téléphone et figurez vous que malgré sa longueur elle est très intéressante.

Voici les résultats obtenus après 2 tests :

La prochaine étape est de coder l’esp32, je penche pour l’instant sur de l’arduino (filtrer une trame bluetooth n’étant je crois pas possible avec esphome). J’ai commencé à écrire un code mais je le testerai d’ici 2 mois lorsque la piscine sera de nouveau en fonctionnement.
Le but de ce code serait de se connecter l’esp32 à l’électrolyseur de récupérer la trame commençant par : 004c01. Ensuite filtrer cette trame pour récupérer les bons couples puis les envoyer à HA par mqtt.

PS: J’ai également réussi à trouver la trame qui permet d’envoyer les valeurs de consigne de pH et de production.

Oui effectivement, il y a une interface modbus, cependant pour que celle ci soit exploitable il nous faudrait la documentation technique… J’ai contacté le constructeur pour qu’il me la fournisse, comme vous pouvez vous en douter il m’a remballé

Bonjour Brack27
super ta log , ca recoupe bien le ServiceUUID et le UUID
je travail actuellement sur l appairage après ,je suis sur que ca va rouler

Salut
petite MAJ
bon j arrive a me connecter au justSalt avec mon ESP32 mais je n arrive pas encore a récupérer la valeur !
pour le moment il faut renseigner l’adresse Mac du e-pool dans le fichier de conf …
je fait suivre le code des que j ai un résultat

Salut Ricky,
Tu écris ton code sur ESPHome ? Tu n’as pas l’adresse mac de l’électrolyseur ?

pour le moment le code ressemble a ca

captive_portal:

esp32_ble_tracker:


ble_client:
  - mac_address: '94:DE:B8:A1:1A:AC'
    auto_connect: true
    id: JustSaltPro
    on_passkey_request:
      then:
        - lambda: |-
            ESP_LOGD("ble_client_lambda", "pass key request");
        - ble_client.passkey_reply:
            id: JustSaltPro
            #passkey: 043953
            passkey: 000000
    on_connect:
      then:
        - lambda: |-
            ESP_LOGD("ble_client_lambda", "Connected to Just Salt");
            id(JustSaltPro)->pair();
    on_disconnect:
      then:
        - lambda: |-
            ESP_LOGD("ble_client_lambda", "Disconnected from Just Salt");
    on_passkey_notification:
      then:
        - logger.log:
            format: "Enter this passkey on your BLE device: %06d"
            args: [ passkey ]


sensor:
  - platform: wifi_signal
    name: Wifi signal
    update_interval: 10s
  - platform: uptime
    name: Uptime

  - platform: ble_client
    ble_client_id: JustSaltPro
    name: "valeur"
    id: sensor_state    
    service_uuid: '09912756-7b32-4629-aeb1-b309d9a338ae'
    characteristic_uuid: 'ef785c24-22bb-463d-b651-0b7445ba091c'
    type: characteristic
    lambda: |-
      std::string value(x.begin(), x.end());
      id(ble_valeur).publish_state(value);
      return 0;

text_sensor:
  - platform: version
    name: ESPHome Version
  - platform: wifi_info
    ssid:
      name: WiFi

  - platform: ble_client
    ble_client_id: JustSaltPro
    name: "valeur"
    id: make_state    
    service_uuid: '09912756-7b32-4629-aeb1-b309d9a338ae'
    characteristic_uuid: 'ef785c24-22bb-463d-b651-0b7445ba091c'
  - id: ble_valeur
    name: "Valeur BLE"
    platform: template 

switch:      
  - platform: restart
    name: JustSalt_Gatway restart    

mais les valeur ne remonte pas encore
je vais continuer a dev
il faut re-appairer a chaque compilation du code

J’avais réussi à me connecter et à récupérer des valeurs avec un code sur ESPHome, mais sur la même caractéristique (UUID) il y a beaucoup de trames qui sont pour la plupart pas intéressante.
Cependant je crois pas qu’il ne soit possible de mettre un filtre sur une trame avec ESPHome.

ble_client:
  - mac_address: a4:9e:69:de:83:38
    id: epool
    on_connect:
      then:
        - ble_client.numeric_comparison_reply:
            id: epool
            accept: True
sensor:
  - platform: ble_client
    type: characteristic
    ble_client_id: epool
    id: production_rate_percent
    service_uuid: '09912756-7B32-4629-AEB1-B309D9A338AE'
    characteristic_uuid: 'ef785c24-22bb-463d-b651-0b7445ba091c'
    lambda: |-
      if (x.size() == 42) {
        uint8_t production_rate_hex = x[20];
        float production_rate_percent = static_cast<float>(production_rate_hex);
        return production_rate_percent;

RE
mon bute est déjà de me connecter (fait)
et de récupérer les trames pour ce Service et cette caractéristique
les donné d historique je n’ en ai pas besoin :slight_smile: HA le fera
une fois les trame récupérées ce sera plus facile de décortiquer
dans l’état actuel je ne récupère rien :confused:
même pas le name du justSalt , ce n’est pas vraiment utile, mais bon
je vais essayer de bosser un peu dessus demain, mais ce n’est pas garanti :wink:

Bonjour,
j arrive bien a récupérer toutes les trames
elles sont toutes de taille différente !

du coup j ai faits des relever visuel sur le JustSalt
je les ai convertie en hexa puis regardé dans les tram si je trouvais les valeurs
cette recherche va avoir lieux plusieurs fois afin de valider les donnés !
si certaine personnes veulent participer pas échantillonnage je suis preneur !
(il vous faut juste un ESP32) et je vous fournirais code et procédure
plus on a de vérifier plus vite ce serra fiable :slight_smile:

malheureusement j ai merder dans la récup des logs du coup je n ais pas eu les tram a chaque relever

bref, ca donne un truc du genre:
Relever des valeurs
PH,ORP, température ,sel
puis dans les réglages
consigne ORP, Production ORP
consigne PH, taux acide , correcteur: acide
date , heure langue, vol piscine , version logiciel , slave
ID code, SN , température local

Relever 1
Hivernage = 1
ORP: 388 mv => hex:184
=> trouvé dans les chaine de taille 10 ,14 , 76
PH 7.1 => hex:47
=> trouvé dans les chaine de taille 76 ,71 ,17

Relever 3
Hivernage = 1
ORP: 374 mv => hex:176
=> trouvé dans les chaine de taille 10 ,17
PH 7.0 => hex:46
=> trouvé dans les chaine de taille 76 ,25 + pas présent dans la tram de 17

je peux donc déjà avoir un début hypothèse sur l’emplacement de certaine valeur
je vais refaire des relever , Mercredi et jeudi
je vous tiens informé , fin de semaine

Des trames avec des longueurs différentes, ça coïncide bien avec ce que j’avais sur Wireshark. Je vais voir si je trouve les valeurs dans les trames de même taille que toi

si ca t arrange je peux te donner mon code
la log de l ESP donne ca

et les capteur donne ca

ce qui et moche mais pratique :wink:

Pourrais tu m’envoyer cette trame complète ? Et les valeurs de ta piscine que tu as sur l’appli epool ?

salut
[16:07:17][D][raw_hex:152]: 00.4C.01.01.01.47.02.02.02.C6.03.01.64.06.02.01.63.08.01.64.09.02.00.9B.0A.01.1B.0B.01.00.0C.01.00.0D.02.00.3F.0E.02.0D.B2.0F.02.00.61.10.02.00.5B.11.02.00.46.12.
04.00.02.07.17.13.04.00.17.06.16.1F.02.02.58.28.02.0A.8C.29.01.03 (76)
[16:07:17][D][raw_hex:152]: 00.4B.01.2A.01.01.30.01.4C.31.01.00.32.01.25.33.01.64.35.01.43.37.01.30.39.01.06.50.01.02.51.01.01.5F.01.00.69.04.00.00.00.00.6A.01.00.8F.01.04.90.08.00.00.00.00.
00.00.00.00.91.08.00.00.00.00.00.06.6F.C7.92.01.15.93.02.00.88 (75)
[16:07:17][D][raw_hex:152]: 00.47.01.94.02.00.F8.95.04.01.72.F5.DF.96.02.02.04.97.02.01.00.99.16.47.45.4E.5F.30.35.32.32.2D.30.34.33.39.35.33.2D.30.30.33.00.00.00.9A.10.30.35.32.32.2D.30.34.
33.39.35.33.2D.30.30.33.00.9B.02.00.00.9C.02.00.00 (71)
[16:07:18][D][raw_hex:152]: 00.28.01.9D.08.00.00.00.00.00.00.01.FF.A3.08.00.00.00.00.00.00.02.F6.B0.01.54.B1.06.94.DE.B8.A1.1A.AC.D1.01.05.FE.01.01 (40)

ORP: 360 → mais passé a 359 pendant le relevé
PH: 7.0
Sel 2.7 g/L
temp eau: 15.5

Le début de ta première trame est exactement similaire à celle que j’avais décortiqué dans un précèdent post. La position des données « utiles » dans cette trame est quasiment la même que dans la mienne :

j’ai reçu mon esp32 je peux aider?

salut Cyber
je modifies le code demain pour récupérer les donnée indiquer par brak27
je le post avec les screen shot de ce que ca donne !
et je t expliquerai en même tant comment récupérer les tram si besoin
et oui tu vas pouvoir nous aider car plus on a de donnée plus ce sera rapide :slight_smile: