Electrolyseur E-Pool Technologie Justsalt

Salut
pour Cyber
il faut que tu Install le module esphome si ce n’est pas déjà fait !
après tu connectes ESP32 a ton pc et tu l’Install
jusque là Youtube est ton ami :slight_smile:

une fois installé tu peux le brancher a coté de ta piscine
et pour finir tu retournes dans esphome et tu « edit » ton ESPhome

#  JustSalt
substitutions:
  mac_justsalt: "94:DE:B8:A1:1A:AC"
  
esphome:
  name: esphome-web-ecc470
  friendly_name: ESPHome Web ecc470

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:
  baud_rate: 0

# Enable Home Assistant API
api:
  encryption:
    key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

ota:


wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esphome-Web-Ecc470"
    password: "eEzs1d6LU1bH"

captive_portal:

esp32_ble_tracker:
  on_ble_advertise:
    - mac_address:
       - ${mac_justsalt}
      then:
        - lambda: |-
            ESP_LOGD("ble_adv", "New BLE device");
            ESP_LOGD("ble_adv", "  address: %s", x.address_str().c_str());
            ESP_LOGD("ble_adv", "  name: %s", x.get_name().c_str());
            id(ble_name2).publish_state(x.get_name().c_str());

ble_client:
  - mac_address:  ${mac_justsalt}
    auto_connect: true
    id: JustSaltPro
    on_connect:
      then:
        - ble_client.numeric_comparison_reply:
            id: JustSaltPro
            accept: True
        
binary_sensor:
  - platform: ble_presence
    mac_address: ${mac_justsalt}
    name: JustSaltPro

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

  - id: ble_name
    name: "Name BLE"
    platform: template 
  - id: ble_name2
    name: "Name"
    platform: template 

  - id: ble_valeur
    name: "Valeur BLE"
    platform: template 

sensor:
  - platform: wifi_signal
    name: Wifi signal
    update_interval: 10s
  - platform: uptime
    name: Uptime
  
  - platform: ble_rssi
    mac_address:  ${mac_justsalt}
    name: "JustSalt RSSI"  

  - platform: template
    name: "BLE Sensor"
    id: ble_sensor


  - platform: template
    name: "JustSalt Temperature"
    id: JustSalt_temperature_sensor
    unit_of_measurement: "°C"
    accuracy_decimals: 1
    state_class: measurement
    device_class: temperature
  
  - platform: template
    name: "JustSalt pH"
    id: JustSalt_ph_sensor
    unit_of_measurement: "pH"
    accuracy_decimals: 2
    state_class: measurement
    icon: mdi:ph
  
  - platform: template
    name: "JustSalt ORP"
    id: JustSalt_orp_sensor
    unit_of_measurement: "mV"
    accuracy_decimals: 0
    state_class: measurement
    device_class: voltage
  
  - platform: template
    name: "JustSalt TDS"
    id: JustSalt_tds_sensor
    unit_of_measurement: "g/L"
    accuracy_decimals: 1
    state_class: measurement
    icon: mdi:water-opacity


  - platform: ble_client
    ble_client_id: JustSaltPro
    id: device_name
    service_uuid: '1800'  # Generic Access Profile
    characteristic_uuid: '2a00'  # Device Name
    type: characteristic
    lambda: |-
      std::string data_string(x.begin(), x.end());
      id(ble_name).publish_state(data_string.c_str());
      return (float)x.size();


  - 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
    #update_interval: 30s
    notify: true
    lambda: |-      
      ESP_LOGD("ble_client.receive", "start - value received with %d bytes: [%.*s]", x.size(), x.size(), &x[0]);
      std::string value2(x.begin(), x.end());
      std::string rawhex = format_hex_pretty((uint8_t *) value2.c_str(), value2.size()).c_str();
      ESP_LOGD("raw_hex", "%s", rawhex.c_str());
      
      rawhex.erase(std::remove(rawhex.begin(), rawhex.end(), '.'), rawhex.end());
      //ESP_LOGD("raw_hex_stripped", "%s", rawhex.c_str());
      ESP_LOGD("raw_hex_stripped", "value received with %d bytes: [%.*s]", rawhex.size(), rawhex.c_str());
      id(ble_valeur).publish_state(rawhex.c_str());
         
      switch (x.size()) {
        case 6:
          //id(ble_valeur6).publish_state(rawhex.c_str());
          break;
        case 9:
          //id(ble_valeur9).publish_state(rawhex.c_str());
          break;
        case 10:{

          }break;
          
        case 12: {
          std::string temppart1 = rawhex.substr(8, 4);
          ESP_LOGD("chaine 10", "%s", temppart1.c_str());
          uint16_t orphex = (x[8] << 8) & x[9];
          float orp = static_cast<float>(orphex);
          id(JustSalt_orp_sensor).publish_state(orp);
          }break;

        case 21:{
          std::string temppart1 = rawhex.substr(6, 4);
          ESP_LOGD("chaine 10", "%s", temppart1.c_str());
          uint16_t orphex = (x[6] << 8) & x[7];
          float orp = static_cast<float>(orphex);
          id(JustSalt_orp_sensor).publish_state(orp);
          }break;


        case 76:{
          std::string temppart2 = rawhex.substr(10, 2);
          ESP_LOGD("chaine 76", "%s", temppart2.c_str());
          uint8_t phhex = x[5];
          float ph = static_cast<float>(phhex)/10;
          id(JustSalt_ph_sensor).publish_state(ph);

          std::string temppart3 = rawhex.substr(44, 4);
          ESP_LOGD("chaine 76", "%s", temppart3.c_str());
          uint16_t tempeauhex = x[22] << 8 & x[23];
          float tempeau = static_cast<float>(tempeauhex);
          id(JustSalt_temperature_sensor).publish_state(tempeau);

          std::string temppart1 = rawhex.substr(52, 2);
          ESP_LOGD("chaine 76", "%s", temppart1.c_str());
          uint8_t selhex = x[26] ;
          float sel = static_cast<float>(selhex)/10;
          id(JustSalt_tds_sensor).publish_state(sel);
          }break;
        case 80:
          //id(ble_valeur80).publish_state(rawhex.c_str());
          break;
      }
      return 0;


switch:      
  - platform: restart
    name: JustSalt_Gatway restart    

fait bien attention de garder tous ce qui ce trouve entre « esphome: » et « captive portal: »
pense a mettre @ mac de ton epool dans « mac_justsalt » tout en haut du code
ensuite tu clic sur install , pour qu’il compile et pousse le code en Wifi dans ESP32

une fois fait-tu vas dans ton Epool
Menu > communication Bluetooth appairage et tu attends que ce soit inscrit « reussi »

Les modifications de récupération des valeurs ne sont pas probantes du tout pour moi !
mais on va trouver :slight_smile:

si tu as tout bien fait tu devrais avoir un truc du genre

pour récupérer les logs rien de rien compliqué
tu va dans ton module ESPhome et tu clic sur le bouton Logs de ton ESP32 tu verras les tram passer en temps réel
ça ressemble a ça

pour résumer a ce stade ,
il faut ,fiabiliser l interrogation du Epool , la récupération des trames reste aléatoire
la Position de toutes les valeurs

  • PH,ORP, température ,sel
  • consigne ORP, Production ORP
  • consigne PH, taux acide , correcteur: acide
  • date , heure langue, vol piscine , version logiciel , slave
  • ID code, SN , température local
    et pour le moment on ne sait pas si l’on travaille sur les bonnes Caractéristiques !
    Pour le Sel ça me paraît bien !

Correction de code température corrigé
par contre elle est de temps en temps a 0 :confused:
je met que le bloc concerné

     switch (x.size()) {


        case 71: {
          std::string temppart1 = rawhex.substr(18, 4);
          ESP_LOGD("chaine 71", "%s", temppart1.c_str());
          uint16_t orphex = (x[9] << 8) + x[10];
          ESP_LOGD("chaine 71", "%x", orphex);
          float orp = static_cast<float>(orphex);
          id(JustSalt_orp_sensor).publish_state(orp);
          }break;

        case 76:{
          std::string temppart2 = rawhex.substr(10, 2);
          ESP_LOGD("chaine 76", "%s", temppart2.c_str());
          uint8_t phhex = x[5];
          float ph = static_cast<float>(phhex)/10;
          id(JustSalt_ph_sensor).publish_state(ph);

          std::string temppart3 = rawhex.substr(44, 4);
          ESP_LOGD("chaine 76", "%s", temppart3.c_str());
          
          uint16_t tempeauhex = (x[22]<< 8) + x[23];
          ESP_LOGD("chaine 76", "%x", tempeauhex);
          
          float tempeau = static_cast<float>(tempeauhex)/10;
          id(JustSalt_temperature_sensor).publish_state(tempeau);

          std::string temppart1 = rawhex.substr(52, 2);
          ESP_LOGD("chaine 76", "%s", temppart1.c_str());
          uint8_t selhex = x[26] ;
          float sel = static_cast<float>(selhex)/10;
          id(JustSalt_tds_sensor).publish_state(sel);
          }break;
        case 80:
          //id(ble_valeur80).publish_state(rawhex.c_str());
          break;
      }

ca avance :wink:
image

Super travail !! Quels sont les problèmes toujours présent ? Sous quelle fréquence, les données sont updater ?

Re
pour ce qui est du travail il en reste :slight_smile:
mais ca dépend surtout de ce que l on veux faire avec ESP
est ce que l on veux juste les données courante ou plus ?

en ce qui concerne la mise a jours des donnée c est « batard » une fois la conection faite au service il envois 1 seul fois les tram 71 et 75 , puis ca semble êtres des donné de maj que l’on reçoi par notification d’abonnement au service

du coup j ai ajouté un arrêt de la connexion toutes les 2 minutes et pour 20 seconde
on va voir si ca fonctionne dans le temps mais a première vu c est pas mal

mais déjà vous pouvez me dire si vos valeurs sont corrects ! sinon les quelles ?
la température du justsalt intérieur est encore a trouver

voici le dernier code

#  JustSalt
substitutions:
  mac_justsalt: "94:DE:B8:A1:1A:AC"
#  service_uuid: '09912756-7b32-4629-aeb1-b309d9a338ae'
#  characteristic_uuid: 'ef785c24-22bb-463d-b651-0b7445ba091c'
  
esphome:
  name: esphome-web-ecc470
  friendly_name: ESPHome Web ecc470

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:
  baud_rate: 0

# Enable Home Assistant API
api:
  encryption:
    key: "**************************"

ota:


wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esphome-Web-Ecc470"
    password: "eEzs1d6LU1bH"

captive_portal:

bluetooth_proxy:
  active: true

time:
  - platform: homeassistant
    id: homeassistant_time
    on_time:
      - seconds: 0
        minutes: /2
        then:
          - switch.turn_off: ble_switch_com
          - delay: 20s
          - switch.turn_on: ble_switch_com

esp32_ble_tracker:
  on_ble_advertise:
    - mac_address:
       - ${mac_justsalt}
      then:
        - lambda: |-
            ESP_LOGD("ble_adv", "New BLE device");
            ESP_LOGD("ble_adv", "  address: %s", x.address_str().c_str());
            ESP_LOGD("ble_adv", "  name: %s", x.get_name().c_str());
            id(ble_name2).publish_state(x.get_name().c_str());

ble_client:
  - mac_address:  ${mac_justsalt}
    auto_connect: true
    id: JustSaltPro
    on_connect:
      then:
        - ble_client.numeric_comparison_reply:
            id: JustSaltPro
            accept: True
        
binary_sensor:
  - platform: ble_presence
    mac_address: ${mac_justsalt}
    name: JustSaltPro

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

  - id: ble_name
    name: "Name BLE"
    platform: template 
  
  - id: ble_name2
    name: "Name"
    platform: template 


  - id: version_logiciel
    name: "version logiciel"
    platform: template 
  
  - id: Slave
    name: "Slave"
    platform: template 

sensor:
  - platform: wifi_signal
    name: Wifi signal
    update_interval: 10s
  - platform: uptime
    name: Uptime
  
  - platform: ble_rssi
    mac_address:  ${mac_justsalt}
    name: "JustSalt RSSI"  

  - platform: template
    name: "volume piscine"
    id: JustSalt_volume_sensor
    unit_of_measurement: "m3"
    
  - platform: template
    name: "JustSalt Temperature"
    id: JustSalt_temperature_sensor
    unit_of_measurement: "°C"
    accuracy_decimals: 1
    state_class: measurement
    device_class: temperature
  
  - platform: template
    name: "JustSalt Temperature Int"
    id: JustSalt_temperature_int_sensor
    unit_of_measurement: "°C"
    accuracy_decimals: 1
    state_class: measurement
    device_class: temperature
  
  - platform: template
    name: "JustSalt pH"
    id: JustSalt_ph_sensor
    unit_of_measurement: "pH"
    accuracy_decimals: 2
    state_class: measurement
    icon: mdi:ph
  
  - platform: template
    name: "JustSalt pH consigne"
    id: JustSalt_ph_consigne_sensor
    unit_of_measurement: "pH"
    accuracy_decimals: 2
    state_class: measurement
    icon: mdi:ph

  - platform: template
    name: "JustSalt ORP"
    id: JustSalt_orp_sensor
    unit_of_measurement: "mV"
    accuracy_decimals: 0
    state_class: measurement
    device_class: voltage
  
  - platform: template
    name: "JustSalt TDS"
    id: JustSalt_tds_sensor
    unit_of_measurement: "g/L"
    accuracy_decimals: 1
    state_class: measurement
    icon: mdi:water-opacity


  - platform: ble_client
    ble_client_id: JustSaltPro
    id: device_name
    service_uuid: '1800'  # Generic Access Profile
    characteristic_uuid: '2a00'  # Device Name
    type: characteristic
    lambda: |-
      std::string data_string(x.begin(), x.end());
      id(ble_name).publish_state(data_string.c_str());
      return (float)x.size();


  - platform: ble_client
    ble_client_id: JustSaltPro
    name: "traitement"
    id: sensor_state    
    service_uuid: '09912756-7b32-4629-aeb1-b309d9a338ae'
    characteristic_uuid: 'ef785c24-22bb-463d-b651-0b7445ba091c'
    type: characteristic
    update_interval: 30s
    notify: true
    lambda: |-      
      ESP_LOGD("ble_client.receive", "start - value received with %d bytes: [%.*s]", x.size(), x.size(), &x[0]);
      std::string value2(x.begin(), x.end());
      std::string rawhex = format_hex_pretty((uint8_t *) value2.c_str(), value2.size()).c_str();
      ESP_LOGD("raw_hex", "%s", rawhex.c_str());
      
      rawhex.erase(std::remove(rawhex.begin(), rawhex.end(), '.'), rawhex.end());
      //ESP_LOGD("raw_hex_stripped", "%s", rawhex.c_str());
      ESP_LOGD("raw_hex_stripped", "value received with %d bytes: [%.*s]", rawhex.size(), rawhex.c_str());
         
      switch (x.size()) {

        case 9: {
          std::string temppart1 = rawhex.substr(10, 4);
          ESP_LOGD("chaine 9", "%s", temppart1.c_str());
          uint16_t tempinthex = (x[5] << 8) + x[6];
          ESP_LOGD("chaine 9", "%x", tempinthex);
          float tempint = static_cast<float>(tempinthex)/10;
          //id(JustSalt_temperature_int_sensor).publish_state(tempint);
          }break;

        case 71: {
          std::string temppart1 = rawhex.substr(18, 4);
          ESP_LOGD("chaine 71", "%s", temppart1.c_str());
          uint16_t orphex = (x[9] << 8) + x[10];
          ESP_LOGD("chaine 71", "%x", orphex);
          float orp = static_cast<float>(orphex);
          id(JustSalt_orp_sensor).publish_state(orp);
          
          std::string temppart3 = rawhex.substr(30, 4);
          ESP_LOGD("chaine 71", "version : %s", temppart3.c_str());
          id(version_logiciel).publish_state(temppart3);
          }break;

        case 76:{
          std::string temppart2 = rawhex.substr(10, 2);
          ESP_LOGD("chaine 76", "%s", temppart2.c_str());
          uint8_t phhex = x[5];
          float ph = static_cast<float>(phhex)/10;
          id(JustSalt_ph_sensor).publish_state(ph);

          std::string temppart3 = rawhex.substr(44, 4);
          ESP_LOGD("chaine 76", "%s", temppart3.c_str());
          uint16_t tempeauhex = (x[22]<< 8) + x[23];
          ESP_LOGD("chaine 76", "%x", tempeauhex);
          float tempeau = static_cast<float>(tempeauhex)/10;
          id(JustSalt_temperature_sensor).publish_state(tempeau);

          std::string temppart1 = rawhex.substr(52, 2);
          ESP_LOGD("chaine 76", "%s", temppart1.c_str());
          uint8_t selhex = x[26] ;
          float sel = static_cast<float>(selhex)/10;
          id(JustSalt_tds_sensor).publish_state(sel);

          std::string temppart4 = rawhex.substr(104, 2);
          ESP_LOGD("chaine 76", "%s", temppart4.c_str());
          uint8_t volhex = x[52] ;
          float vol = static_cast<float>(volhex);
          id(JustSalt_volume_sensor).publish_state(vol);
          
          }break;

        case 78:{
          std::string temppart2 = rawhex.substr(24, 2);
          ESP_LOGD("chaine 78", "%s", temppart2.c_str());
          uint8_t phhex = x[12];
          float ph = static_cast<float>(phhex)/10;
          id(JustSalt_ph_consigne_sensor).publish_state(ph);

          }break;
      }
      return 1;


switch:      
  - platform: restart
    name: JustSalt_Gatway restart    

  - platform: ble_client
    id: ble_switch_com
    ble_client_id: JustSaltPro
    name: "Enable com JustSalt"
1 « J'aime »

Okay il faut que j’essaie ton code sur mon installation qui est un peu différente (j’ai un électrolyseur Kristal Pool). Chez moi toutes les infos sont dans une seule trame et effectivement elle n’est envoyé que lors de la connexion, donc je pense qu’il faudra continuer à déconnecter/reconnecter pour mettre à jour les valeurs.
Je pense que la prochaine étape qui serait intéressante serait de pouvoir modifier les consignes de pH depuis HA qu’en penses tu ?

Bon j’ai merde lé c’est un esp32 c6 que j’ai commandé et pas encore compatible esphome. J’essayerai sur mon esp32 eth ce week-end

Pour ma part j’ai prévu un petit projet autour de cela :

connecté à epool

récupération ph redox température via epool blé.
Manque d’eau ?
Mode hivernage ?
récupération circulation eau via sonde analogique en place
récupération température /hum local technique
Entrée volet piscine
Entrée niveau d eau piscine

pilotage ventilation local via relais base sur température et humidité locl
pilotage pompe filtrage via relais zigbee basé sur la température eau avec possibilité marché forcé via bouton / sécurité pompe basé sur: circulation consommation elec pompe niveau eau piscine
Alerte ph
Alerte sel
pilotage pac via relais zigbee basé sur température eau / production solaire maison
forcé via afficheur / bouton
pilotage éclairage piscine via relais
pilotage éclairage extérieur via relais zigbee
Pilotage electrovanne puit pour arrosage via relais zigbee ev

Mac:

matériel :

boîtier rail din?
relais zigbee: 3
relais zigbee ev: 1
relais: 2
esp32 ble rj 45: 1
Dht22
afficheur / écran sd1306 ou ILI9488
bouton
voyant
ventillateur extracteur
Ultrasonic Hc-sr04

1 « J'aime »

salut !
pour moi ORP ne fonctionnais pas
du coup j ai chercher et je pense avoir trouvé si vous pouviez affirmer ou infirmer
sinon pour l écriture ca va êtres chaud
impossible pour moi de savoir la trame a envoyer

#  JustSalt
substitutions:
  mac_justsalt: "AA:DE:BB:CC:AA:AA"
#  service_uuid: '09912756-7b32-4629-aeb1-b309d9a338ae'
#  characteristic_uuid: 'ef785c24-22bb-463d-b651-0b7445ba091c'
  
esphome:
  name: esphome-web-ecc470
  friendly_name: ESPHome Web ecc470

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:
  baud_rate: 0

# Enable Home Assistant API
api:
  encryption:
    key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

ota:


wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esphome-Web-Ecc470"
    password: "eEzs1d6LU1bH"

captive_portal:

bluetooth_proxy:
  active: true

time:
  - platform: homeassistant
    id: homeassistant_time
    on_time:
      - seconds: 0
        minutes: /2
        then:
          - switch.turn_off: ble_switch_com
          - delay: 20s
          - switch.turn_on: ble_switch_com

esp32_ble_tracker:
  on_ble_advertise:
    - mac_address:
       - ${mac_justsalt}
      then:
        - lambda: |-
            ESP_LOGD("ble_adv", "New BLE device");
            ESP_LOGD("ble_adv", "  address: %s", x.address_str().c_str());
            ESP_LOGD("ble_adv", "  name: %s", x.get_name().c_str());
            id(ble_name2).publish_state(x.get_name().c_str());

ble_client:
  - mac_address:  ${mac_justsalt}
    auto_connect: true
    id: JustSaltPro
    on_connect:
      then:
        - ble_client.numeric_comparison_reply:
            id: JustSaltPro
            accept: True
        
binary_sensor:
  - platform: ble_presence
    mac_address: ${mac_justsalt}
    name: JustSaltPro

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

  - id: ble_name
    name: "Name BLE"
    platform: template 
  
  - id: ble_name2
    name: "Name"
    platform: template 


  - id: version_logiciel
    name: "version logiciel"
    platform: template 
  
  - id: Slave
    name: "Slave"
    platform: template 

sensor:
  - platform: wifi_signal
    name: Wifi signal
    update_interval: 10s
  - platform: uptime
    name: Uptime
  
  - platform: ble_rssi
    mac_address:  ${mac_justsalt}
    name: "JustSalt RSSI"  

  - platform: template
    name: "volume piscine"
    id: JustSalt_volume_sensor
    unit_of_measurement: "m3"
    
  - platform: template
    name: "JustSalt Temperature"
    id: JustSalt_temperature_sensor
    unit_of_measurement: "°C"
    accuracy_decimals: 1
    state_class: measurement
    device_class: temperature
  
  - platform: template
    name: "JustSalt Temperature Int"
    id: JustSalt_temperature_int_sensor
    unit_of_measurement: "°C"
    accuracy_decimals: 1
    state_class: measurement
    device_class: temperature
  
  - platform: template
    name: "JustSalt pH"
    id: JustSalt_ph_sensor
    unit_of_measurement: "pH"
    accuracy_decimals: 2
    state_class: measurement
    icon: mdi:ph
  
  - platform: template
    name: "JustSalt pH consigne"
    id: JustSalt_ph_consigne_sensor
    unit_of_measurement: "pH"
    accuracy_decimals: 2
    state_class: measurement
    icon: mdi:ph

  - platform: template
    name: "JustSalt ORP"
    id: JustSalt_orp_sensor
    unit_of_measurement: "mV"
    accuracy_decimals: 0
    state_class: measurement
    device_class: voltage
  
  - platform: template
    name: "JustSalt TDS"
    id: JustSalt_tds_sensor
    unit_of_measurement: "g/L"
    accuracy_decimals: 1
    state_class: measurement
    icon: mdi:water-opacity


  - platform: ble_client
    ble_client_id: JustSaltPro
    id: device_name
    service_uuid: '1800'  # Generic Access Profile
    characteristic_uuid: '2a00'  # Device Name
    type: characteristic
    lambda: |-
      std::string data_string(x.begin(), x.end());
      id(ble_name).publish_state(data_string.c_str());
      return (float)x.size();


  - platform: ble_client
    ble_client_id: JustSaltPro
    name: "traitement"
    id: sensor_state    
    service_uuid: '09912756-7b32-4629-aeb1-b309d9a338ae'
    characteristic_uuid: 'ef785c24-22bb-463d-b651-0b7445ba091c'
    type: characteristic
    update_interval: 30s
    notify: true
    lambda: |-      
      ESP_LOGD("ble_client.receive", "start - value received with %d bytes: [%.*s]", x.size(), x.size(), &x[0]);
      std::string value2(x.begin(), x.end());
      std::string rawhex = format_hex_pretty((uint8_t *) value2.c_str(), value2.size()).c_str();
      ESP_LOGD("raw_hex", "%s", rawhex.c_str());
      
      rawhex.erase(std::remove(rawhex.begin(), rawhex.end(), '.'), rawhex.end());
      //ESP_LOGD("raw_hex_stripped", "%s", rawhex.c_str());
      ESP_LOGD("raw_hex_stripped", "value received with %d bytes: [%.*s]", rawhex.size(), rawhex.c_str());
         
      switch (x.size()) {

        case 9: {
          std::string temppart1 = rawhex.substr(10, 4);
          ESP_LOGD("chaine 9", "%s", temppart1.c_str());
          uint16_t tempinthex = (x[5] << 8) + x[6];
          ESP_LOGD("chaine 9", "%x", tempinthex);
          float tempint = static_cast<float>(tempinthex)/10;
          //id(JustSalt_temperature_int_sensor).publish_state(tempint);
          }break;
        case 13: {
          std::string temppart1 = rawhex.substr(10, 4);
          ESP_LOGD("chaine 13", "%s", temppart1.c_str());
          uint16_t orphex = (x[5] << 8) + x[6];
          ESP_LOGD("chaine 13", "%x", orphex);
          float orp = static_cast<float>(orphex);
          id(JustSalt_orp_sensor).publish_state(orp);
          }break;
        case 71: {

          
          std::string temppart3 = rawhex.substr(30, 4);
          ESP_LOGD("chaine 71", "version : %s", temppart3.c_str());
          id(version_logiciel).publish_state(temppart3);
          }break;

        case 76:{
          std::string temppart2 = rawhex.substr(10, 2);
          ESP_LOGD("chaine 76", "%s", temppart2.c_str());
          uint8_t phhex = x[5];
          float ph = static_cast<float>(phhex)/10;
          id(JustSalt_ph_sensor).publish_state(ph);

          std::string temppart3 = rawhex.substr(44, 4);
          ESP_LOGD("chaine 76", "%s", temppart3.c_str());
          uint16_t tempeauhex = (x[22]<< 8) + x[23];
          ESP_LOGD("chaine 76", "%x", tempeauhex);
          float tempeau = static_cast<float>(tempeauhex)/10;
          id(JustSalt_temperature_sensor).publish_state(tempeau);

          std::string temppart1 = rawhex.substr(52, 2);
          ESP_LOGD("chaine 76", "%s", temppart1.c_str());
          uint8_t selhex = x[26] ;
          float sel = static_cast<float>(selhex)/10;
          id(JustSalt_tds_sensor).publish_state(sel);

          std::string temppart4 = rawhex.substr(104, 2);
          ESP_LOGD("chaine 76", "%s", temppart4.c_str());
          uint8_t volhex = x[52] ;
          float vol = static_cast<float>(volhex);
          id(JustSalt_volume_sensor).publish_state(vol);
          
          }break;

        case 78:{
          std::string temppart2 = rawhex.substr(24, 2);
          ESP_LOGD("chaine 78", "%s", temppart2.c_str());
          uint8_t phhex = x[12];
          float ph = static_cast<float>(phhex)/10;
          id(JustSalt_ph_consigne_sensor).publish_state(ph);

          }break;
      }
      return 1;


switch:      
  - platform: restart
    name: JustSalt_Gatway restart    

  - platform: ble_client
    id: ble_switch_com
    ble_client_id: JustSaltPro
    name: "Enable com JustSalt"

j’ai bien compilé le code sans douci avec mon adresse mac, programmé l’esp, mais jai un souci l’esp est vu offline dans esphome, alors que je le vois bien connecté a mon wifi et l’ip repond.

As ru bien mis lta Key d encription ?

c bon javais erreur de dns, un comble pour un architecte reseau^^
bon cette fois ci je n’arrive plus a appairé avec le dernier code, j’ai verifier la mac est bien bonne je vais retenter

[18:45:14][C][logger:166]: Logger:
[18:45:14][C][logger:167]: Level: DEBUG
[18:45:14][C][logger:169]: Log Baud Rate: 0
[18:45:14][C][logger:170]: Hardware UART: UART0
[18:45:14][C][template.text_sensor:020]: Template Sensor ‹ version logiciel ›
[18:45:14][C][template.text_sensor:020]: Template Sensor ‹ Slave ›
[18:45:14][C][uptime.sensor:031]: Uptime Sensor ‹ Uptime ›
[18:45:14][C][uptime.sensor:031]: Device Class: ‹ duration ›
[18:45:14][C][template.sensor:022]: Template Sensor ‹ JustSalt pH ›
[18:45:14][C][template.sensor:022]: Template Sensor ‹ JustSalt pH consigne ›
[18:45:14][C][template.sensor:022]: State Class: ‹ measurement ›
[18:45:15][C][template.sensor:022]: Template Sensor ‹ JustSalt ORP ›
[18:45:15][C][ble_presence:011]: BLE Presence ‹ JustSaltPro ›
[18:45:15][C][version.text_sensor:021]: Version Text Sensor ‹ ESPHome Version ›
[18:45:15][C][ble_rssi:011]: BLE RSSI Sensor ‹ JustSalt RSSI ›
[18:45:15][C][ble_sensor:020]: Characteristic UUID: EF785C24-22BB-463D-B651-0B7445BA091C
[18:45:15][C][restart:068]: Restart Switch ‹ JustSalt_Gatway restart ›
[18:45:15][C][ble_switch:068]: BLE Client Switch ‹ Enable com JustSalt ›
[18:45:15][C][ble_switch:070]: Icon: ‹ mdi:bluetooth ›
[18:45:15][C][ble_switch:091]: Restore Mode: always OFF
[18:45:15][C][captive_portal:088]: Captive Portal:
[18:45:15][D][esp32_ble_client:110]: [0] [JUSTSALTMAC] ESP_GATTC_NOTIFY_EVT
[18:45:15][D][ble_sensor:089]: [device_name] ESP_GATTC_NOTIFY_EVT: handle=0x13, value=0x0
[18:45:15][D][ble_sensor:089]: [traitement] ESP_GATTC_NOTIFY_EVT: handle=0x13, value=0x0
[18:45:15][D][ble_client.receive:199]: start - value received with 71 bytes:
[18:45:15][C][ota:096]: Over-The-Air Updates:
[18:45:15][C][ota:097]: Address: 192.168.1.201:3232
[18:45:15][C][ota:100]: Using Password.
[18:45:15][D][esp32_ble_client:110]: [0] [JUSTSALTMAC] ESP_GATTC_NOTIFY_EVT
[18:45:15][D][ble_sensor:089]: [device_name] ESP_GATTC_NOTIFY_EVT: handle=0x13, value=0x0
[18:45:15][D][ble_sensor:089]: [traitement] ESP_GATTC_NOTIFY_EVT: handle=0x13, value=0x0
[18:45:15][D][ble_client.receive:199]: start - value received with 71 bytes:
[18:45:15][D][esp32_ble_client:110]: [0] [JUSTSALTMAC] ESP_GATTC_NOTIFY_EVT
[18:45:15][D][ble_sensor:089]: [device_name] ESP_GATTC_NOTIFY_EVT: handle=0x13, value=0x0
[18:45:15][D][ble_sensor:089]: [traitement] ESP_GATTC_NOTIFY_EVT: handle=0x13, value=0x0
[18:45:15][D][ble_client.receive:199]: start - value received with 71 bytes:
[18:45:15][D][raw_hex:202]: 00.47.02.E1.0F.18.03.1C.04.2E.1D.18.00.00.00.F1.00.00.00.00.E4.0F.18.03.1C.04.2F.1E.47.00.0A.00.00.00.00.00.00.E4.0F.18.03.1C.05.00.00.47.00.0A.00.00.00.00.00.00.E4.0F.18.03.1C.06.00.00.46.00.0B.00.00.00.00.00.00 (71)
[18:45:15][D][raw_hex_stripped:206]: value received with 147 bytes:
[18:45:15][D][chaine 71:230]: version : F100
[18:45:15][D][text_sensor:064]: ‹ version logiciel ›: Sending state ‹ F100 ›
[18:45:15][D][sensor:094]: ‹ traitement ›: Sending state 1.00000 with 0 decimals of accuracy
[18:45:15][D][esp32_ble_client:110]: [0] [JUSTSALTMAC] ESP_GATTC_NOTIFY_EVT
[18:45:16][D][ble_sensor:089]: [device_name] ESP_GATTC_NOTIFY_EVT: handle=0x13, value=0x0
[18:45:16][D][ble_sensor:089]: [traitement] ESP_GATTC_NOTIFY_EVT: handle=0x13, value=0x0
[18:45:16][D][ble_client.receive:199]: start - value received with 71 bytes:
[18:45:16][D][raw_hex:202]: 00.47.02.E2.0F.18.03.1C.06.01.32.00.01.00.00.00.3C.00.00.00.E1.0F.18.03.1C.0D.2D.04.18.00.00.00.F1.00.00.00.00.E4.0F.18.03.1C.0D.2E.04.47.00.0B.00.00.00.00.00.00.E4.0F.18.03.1C.0E.00.00.47.00.0B.00.00.00.00.00.00 (71)
[18:45:16][D][raw_hex_stripped:206]: value received with 147 bytes:
[18:45:16][D][chaine 71:230]: version : 003C
[18:45:16][D][text_sensor:064]: ‹ version logiciel ›: Sending state ‹ 003C ›
[18:45:16][D][esp32_ble_client:110]: [0] [JUSTSALTMAC] ESP_GATTC_NOTIFY_EVT
[18:45:16][D][esp32_ble_client:110]: [0] [JUSTSALTMAC] ESP_GATTC_NOTIFY_EVT
[18:45:16][D][ble_sensor:089]: [device_name] ESP_GATTC_NOTIFY_EVT: handle=0x13, value=0x0
[18:45:16][D][ble_sensor:089]: [traitement] ESP_GATTC_NOTIFY_EVT: handle=0x13, value=0x0
[18:45:16][D][ble_client.receive:199]: start - value received with 71 bytes:
[18:45:16][D][raw_hex:202]: 00.47.02.E2.0F.18.03.1C.0E.12.01.00.02.00.00.00.3C.00.00.00.E1.0F.18.03.1D.01.2E.1A.18.00.00.00.F1.00.00.00.00.E4.0F.18.03.1D.01.2F.1A.46.00.0C.00.00.00.00.00.00.E4.0F.18.03.1D.02.00.00.46.00.0C.00.00.00.00.00.00 (71)
[18:45:16][D][raw_hex_stripped:206]: value received with 147 bytes:
[18:45:16][D][chaine 71:230]: version : 003C
[18:45:16][D][text_sensor:064]: ‹ version logiciel ›: Sending state ‹ 003C ›
[18:45:16][D][esp32_ble_client:110]: [0] [JUSTSALTMAC] ESP_GATTC_NOTIFY_EVT
[18:45:16][D][ble_sensor:089]: [device_name] ESP_GATTC_NOTIFY_EVT: handle=0x13, value=0x0
[18:45:16][D][ble_sensor:089]: [traitement] ESP_GATTC_NOTIFY_EVT: handle=0x13, value=0x0
[18:45:16][D][ble_client.receive:199]: start - value received with 71 bytes:
[18:45:16][D][raw_hex:202]: 00.47.02.E2.0F.18.03.1D.02.10.3A.00.00.00.00.00.3C.00.00.00.E1.0F.18.03.1D.04.2E.1F.18.00.00.00.F1.00.00.00.00.E4.0F.18.03.1D.04.2F.1F.46.00.0C.00.00.00.00.00.00.E4.0F.18.03.1D.05.00.00.46.00.0C.00.00.00.00.00.00 (71)

Tu as bien mis la machine du justsalt
Une fois l esp pré et en route
Tu lance la filtration pour mètre ton justsalt en route
Et tu vas dessus pour lancer l apperage
Pour ma part esp est a 1 m environ du justsalt

Super ça marche tu dois donc avoir les valeurs côté ha

je dois avoir une coquille quelques par dans ce que j’ai fait car j’ai rien dans ha je le vois offline dans esphome pourtant j’accedes bien au log quand je clique dessus … chelou

ahah c bon j’ai trouvé; j’ai du mettre status_use_ping à true dans les options avancés de esphome

Je ne peux pas vous aider sur la valeur de l’ORP car je ne l’ai pas sur mon électrolyseur…
Par contre j’ai réussi à trouver la trame pour écrire des valeurs

ah ça c’est une bonne nouvelle,

moi jy suis presque :

mais rien dans HA

@Cyber_Chris , tu ne regarde pas au bonne endroits
ou tu n as pas fini l installation de esphome dans HA

si tu vas dans Paramètres → appareils , est ce que tu vois esphome ?
si oui esphome est complètement installé
sinon
ajoute l intégration et hop c est magic

@Brak27
si tu identifie ce qu’il faut changer comme valeur donne moi la trame et j essaie d’appliquer ca !
a moins que tu t y colle :slight_smile:

sinon pour l orp defois j ai des valeur a la C** du genre 18868 donc j imagine que le debut de retour de trame donne le type de valeur retourné ou un truc du genre , le debug n est pas fini :slight_smile:

merci en effet j’étais pas aller au bout


les valeurs sont justes. il manques orp pourtant je l’ai bien sur l’afficheur.

Elle est plus long a arriver

Voici les trames que j’ai pu récupérer lorsque j’ai modifié la consigne de pH depuis l’application epool:

Il y a de forte chance que les UUID(s) soient les mêmes je pense. Je suis encore expatrié loin de mon installation pendant 1mois donc ce sera compliqué de tester tout ça pour l’instant…

1 « J'aime »