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
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
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 !