Integration de API du contrôleur de piscine Oklyn

Mon problème

Bonjour a tous, j’essaye d’integrée les mesures et les commande posible par mon boitier qui controle ma piscine : OKLYN,

Je suis complètement débutant,
J’ai trouvé leur doc pour leur API : API - Aide & Support Oklyn

Apres quelque cherche j’ai compris qu’il fallait editer le fichier configuration.yaml, je me suis servi du Tuto pour commencé par de bonne base :

# Loads default set of integrations. Do not remove.
default_config:

# Text to speech
tts:
  - platform: google_translate

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

frontend:
  
  
  themes: !include_dir_merge_named themes

sensor: !include sensors.yaml

Puis créer donc un fichier sensors.yaml avec les info de l’api et l’aide de RESTful Sensor - Home Assistant

# Mesure Ph Piscine
- platform: rest
  resource: https://api.oklyn.fr/public/v1/device/my/data/ph
  method: GET
  name: "Ph Piscine"
  scan_interval: 60
  headers:
    X-API-TOKEN: xxxxx
    
# Mesure air Piscine
- platform: rest
  resource: https://api.oklyn.fr/public/v1/device/my/data/air
  method: GET
  name: "Air Piscine"
  scan_interval: 60
  headers:
    X-API-TOKEN: xxxxx
    
# Mesure Eau Piscine
- platform: rest
  resource: https://api.oklyn.fr/public/v1/device/my/data/water
  method: GET
  name: "Eau Piscine"
  scan_interval: 60
  headers:
    X-API-TOKEN: xxxx
    
 # Mesure redox
- platform: rest
  resource: https://api.oklyn.fr/public/v1/device/my/data/orp
  name: "redox Piscine"
  scan_interval: 60
  headers:
    X-API-TOKEN: xxxx

Apres redemarage j’ai bien les info qui remonte mais brutcomme leur doc en une ligne qui ne permet pas de l’integré par la suite sur le dashboard



Je souhaiterais si une personne a un peu de temps pour m’aider a ne prendre en compte déjà que les info utile a savoir ce qu’il y dans " value "

et dans un deuxième temps utilisé la commande PUT, affin de pilote avec un bouton switch l’auxiliaire en on / OFF, et la pompe en On / auto / Off

Ma configuration


Home Assistant 2022.8.6
Supervisor 2022.08.3
Operating System 8.4
Interface utilisateur : 20220802.0 - latest
Virtualbox


1 « J'aime »

Je m’auto répond pour ma première question pour avoir la " value" :
value_template: '{{ value_json.value }}'

# Mesure Ph Piscine
- platform: rest
  resource: https://api.oklyn.fr/public/v1/device/my/data/ph
  method: GET
  name: "Ph Piscine"
  scan_interval: 60
  value_template: '{{ value_json.value }}'
  headers:
    X-API-TOKEN: OPgaFqHAsuknOjV/v4fu1hhXnwg=
    
# Mesure air Piscine
- platform: rest
  resource: https://api.oklyn.fr/public/v1/device/my/data/air
  method: GET
  name: "Air Piscine"
  scan_interval: 60
  value_template: '{{ value_json.value }}'
  headers:
    X-API-TOKEN: OPgaFqHAsuknOjV/v4fu1hhXnwg=
    
# Mesure Eau Piscine
- platform: rest
  resource: https://api.oklyn.fr/public/v1/device/my/data/water
  method: GET
  name: "Eau Piscine"
  scan_interval: 60
  value_template: '{{ value_json.value }}'
  headers:
    X-API-TOKEN: OPgaFqHAsuknOjV/v4fu1hhXnwg=
    
 # Mesure redox
- platform: rest
  resource: https://api.oklyn.fr/public/v1/device/my/data/orp
  name: "redox Piscine"
  scan_interval: 60
  value_template: '{{ value_json.value }}'
  headers:
    X-API-TOKEN: OPgaFqHAsuknOjV/v4fu1hhXnwg=

Reste crée les commande PUT , ON / OFF auxiliére et ON/AUTO/OFF pompe
je trouve pas comment faire

Est ce que tu as regardé cette doc ? Ça a l’air de permettre de faire des PUT sur une API Reste comme tu le souhaites.

En cherchant sur le forum je vois que tu n’es pas le premier d’ailleurs a essayer de faire ça…

En tout cas je ne connaissais pas Oklyn (quel nom !) donc merci pour la découverte…

1 « J'aime »

merci je test ca, j’etais tombé dessus mais je comprenais pas ou mettre sont bloc maintenant je comprend.

c’est ok pour un switch on / off :

# Switch On / Off auxiliere 1
- platform: rest
  method: put
  resource: https://api.oklyn.fr/public/v1/device/my/aux
  name: "lumiére piscine"
  body_on: '{ "aux": "on"}'
  body_off: '{ "aux": "off"}'
  scan_interval: 600
  is_on_template: >-
    {% if value_json.aux == "on" %} True
    {% else %} False
    {% endif %}
  headers:
    content-type: "application/json"
    X-API-TOKEN: xxxxx

Reste pour le mode : on / auto / off je suis preneur d’une piste :slight_smile:

1 « J'aime »

J’ai pas encore assez d’expérience pour te guider plus mais je vois que d’autres essayent un Input_select et de l’automatisme après.

Si ça peut t’aider…

Bonjour
Dans quel dossier tu a mis le bloc
Merci

Bonjour, il me reste à intégrer le bouton auxiliaire et ceux de la pompe. Est-il possible d’avoir un exemple yaml et l’emplacement du dossier ?

voici le code pour ajouter le controle de la pompe en mode: on, off et auto. auto sera soit simple ou avancée. Le choix sera celui qui a été fait le dernier à la main depuis l’application.
J’ai inclu aussi les 2 sensors de température air/eau


sensor:
  - platform: rest
    resource: https://api.oklyn.fr/public/v1/device/my/data/air
    method: GET
    name: "Piscine air"
    scan_interval: 60
    value_template: '{{ value_json.value }}'
    headers:
        X-API-TOKEN: lacleAPIsur28caracteres
    unit_of_measurement: "C"

  - platform: rest
    resource: https://api.oklyn.fr/public/v1/device/my/data/water
    method: GET
    name: "Piscine eau"
    scan_interval: 60
    value_template: '{{ value_json.value }}'
    headers:
        X-API-TOKEN: lacleAPIsur28caracteres
    unit_of_measurement: "C"

rest_command:
  set_pump_off:
    url: https://api.oklyn.fr/public/v1/device/my/pump
    method: PUT
    headers:
      X-API-TOKEN: "lacleAPIsur28caracteres"
    payload: "pump=off"
    content_type: "application/x-www-form-urlencoded"

  set_pump_on:
    url: https://api.oklyn.fr/public/v1/device/my/pump
    method: PUT
    headers:
      X-API-TOKEN: "lacleAPIsur28caracteres"
    payload: "pump=on"
    content_type: "application/x-www-form-urlencoded"

  set_pump_auto:
    url: https://api.oklyn.fr/public/v1/device/my/pump
    method: PUT
    headers:
      X-API-TOKEN: "lacleAPIsur28caracteres"
    payload: "pump=auto"
    content_type: "application/x-www-form-urlencoded"

script:
  pump_off:
    alias: Set Pump to Off
    sequence:
      - service: rest_command.set_pump_off

  pump_on:
    alias: Set Pump to On
    sequence:
      - service: rest_command.set_pump_on

  pump_auto:
    alias: Set Pump to Auto
    sequence:
      - service: rest_command.set_pump_auto

input_select:
  pump_mode:
    name: Pump Mode
    options:
      - "off"
      - "on"
      - "auto"
    initial: "off"
    icon: mdi:water-pump

automation:
  - alias: Set Pump Based on Input Select
    trigger:
      - platform: state
        entity_id: input_select.pump_mode
    action:
      - choose:
          - conditions:
              - condition: state
                entity_id: input_select.pump_mode
                state: "off"
            sequence:
              - service: script.pump_off
          - conditions:
              - condition: state
                entity_id: input_select.pump_mode
                state: "on"
            sequence:
              - service: script.pump_on
          - conditions:
              - condition: state
                entity_id: input_select.pump_mode
                state: "auto"
            sequence:
              - service: script.pump_auto

Merci pour votre aide à tous, ci-joint une copie du resultat

bonjour Zigfou, tout comme toi je débute avec HA, et j’ai aussi un boitier oklyn :slight_smile:
j’ai donc un peu de mal à suivre la démarche dans le post. As tu au final un code complet ? et comme tu as manifestement tâtonné pourrais tu me donner la procédure complète si tu veux bien. Merci beaucoup. David

il faut déjà que tu ajoute toute les entité nécessaire avant de faire un Dashboard comme sur l’image ci dessus :

Moi j’ai fais dans :
Pour le controle de la pompe dans le fichier configuration.xaml ( j’ai pas test la version de leo2v2o qui je pense est mieux que moi )

#oklyn 
rest_command:
  pompe_on:
    url: "https://api.oklyn.fr/public/v1/device/my/pump"
    method: put
    payload: '{ "pump": "on"}'
    headers:
      content-type: "application/json"
      X-API-TOKEN:  nOnMs9KutZt0FFwx5ab8C1FtPls=
  pompe_off:
    url: "https://api.oklyn.fr/public/v1/device/my/pump"
    method: put
    payload: '{ "pump": "off"}'
    headers:
      content-type: "application/json"
      X-API-TOKEN:  ton-token 
  pompe_auto:
    url: "https://api.oklyn.fr/public/v1/device/my/pump"
    method: put
    payload: '{ "pump": "auto"}'
    headers:
      content-type: "application/json"
      X-API-TOKEN:  ton-token

et pour tout les autre sonde dans le dossier sensors.xaml


#Oklyn Sensor


#Ph 
- platform: rest
  resource: https://api.oklyn.fr/public/v1/device/my/data/ph
  name: "PH Piscine"
  unique_id: sensor.ph_piscine
  scan_interval: 60
  value_template: '{{ value_json.value }}'
  headers:
    content-type: "application/json"
    X-API-TOKEN:  ton-token 
#orp
- platform: rest
  resource: https://api.oklyn.fr/public/v1/device/my/data/orp
  name: "RedOx Piscine"
  unique_id: sensor.orp_piscine
  scan_interval: 60
  value_template: '{{value_json["value_raw"]}}'
  headers:
    content-type: "application/json"
    X-API-TOKEN:  ton-token
#Eau 
- platform: rest
  resource: https://api.oklyn.fr/public/v1/device/my/data/water
  name: "Temp Piscine"
  unique_id: sensor.eau_piscine
  device_class: temperature
  unit_of_measurement: "°C"
  scan_interval: 60
  value_template: '{{value_json["value_raw"]}}'
  headers:
    content-type: "application/json"
    X-API-TOKEN:  ton-token
 #Air  
- platform: rest
  resource: https://api.oklyn.fr/public/v1/device/my/data/air
  name: "Temp air Piscine"
  unique_id: sensor.air_piscine
  device_class: temperature
  unit_of_measurement: "°C"
  scan_interval: 60
  value_template: '{{value_json["value_raw"]}}'
  headers:
    content-type: "application/json"
    X-API-TOKEN:  ton-token
#Mode pompe 
- platform: rest
  resource: https://api.oklyn.fr/public/v1/device/my/pump
  name: "mode pompe piscine "
  unique_id: sensor.mode_pompe_piscine
  scan_interval: 60
  value_template: '{{value_json["pump"]}}'
  headers:
    content-type: "application/json"
    X-API-TOKEN:  ton-token
#Statut Ph 
- platform: rest
  resource: https://api.oklyn.fr/public/v1/device/my/data/ph
  name: "statut PH Piscine"
  unique_id: sensor.statut_ph_piscine
  scan_interval: 60
  value_template: '{{value_json["status"]}}'
  headers:
    content-type: "application/json"
    X-API-TOKEN:  ton-token
#Statut ORP 
- platform: rest
  resource: https://api.oklyn.fr/public/v1/device/my/data/orp
  name: "statut Red Ox Piscine"
  unique_id: sensor.statut_orp_piscine
  scan_interval: 60
  value_template: '{{value_json["status"]}}'
  headers:
    content-type: "application/json"
    X-API-TOKEN:  ton-token
#Statut Pompe 
- platform: rest
  resource: https://api.oklyn.fr/public/v1/device/my/pump
  name: "statut pompe piscine"
  unique_id: sensor.statut_pompe_piscine
  scan_interval: 60
  value_template: '{{value_json["status"]}}'
  headers:
    content-type: "application/json"
    X-API-TOKEN:  ton-token
#Statut Aux 
- platform: rest
  resource: https://api.oklyn.fr/public/v1/device/my/aux
  name: "statut aux"
  unique_id: sensor.statut_aux_piscine
  scan_interval: 15
  value_template: '{{value_json["aux"]}}'
  headers:
    content-type: "application/json"
    X-API-TOKEN:  ton-token
#Statut Aux 2
- platform: rest
  resource: https://api.oklyn.fr/public/v1/device/my/aux2
  name: "statut electrolyseur"
  unique_id: sensor.statut_aux2_piscine
  scan_interval: 15
  value_template: '{{value_json["status"]}}'
  headers:
    content-type: "application/json"
    X-API-TOKEN:  ton-token

Pense a modifier le " ton-token " par le token que tu retrouvera dans l’application oklyn, une fois fait ca tu aura toute les entité nécessaire dans HA pour faire une page piscine

merci beaucoup de ton retour. Mais comme je suis un total débutant … pas facile. Si j’ai bien compris il faudrait que je charge L’api pour ensuite modifier le code ? J’ai bien vu ma clé d’accès API dans mon application mais je n’arrive pas à trouver et charger l api dans HA.

Désolé je viens juste de voir ta demande.

Pour ma part, j’ai créé dans ma configuration YAML ceci.

homeassistant:
packages: !include_dir_named packages

Ensuite, j’ai ajouté ce qui suit dans le fichier config

piscine_oklyn.yaml

pour y copier-coller ce fichier:

################################
###         sensor:          ###
################################
sensor:
  # PH Piscine
  - platform: rest
    resource: https://api.oklyn.fr/public/v1/device/my/data/ph
    method: GET
    name: "PH Piscine"
    unique_id: "binary_sensor.PH Piscine"
    scan_interval: 60
    value_template: '{{value_json["value_raw"]}}'
    headers:
      content-type: "application/json"
      X-API-TOKEN: !secret oklyn_api 

  # RedOx Piscine
  - platform: rest
    resource: https://api.oklyn.fr/public/v1/device/my/data/orp
    method: GET
    name: "RedOx Piscine"
    unique_id: "binary_sensor.RedOx Piscine"
    scan_interval: 60
    value_template: '{{value_json["value_raw"]}}'
    headers:
      content-type: "application/json"
      X-API-TOKEN: !secret oklyn_api 

  # Température Piscine
  - platform: rest
    resource: https://api.oklyn.fr/public/v1/device/my/data/water
    method: GET
    name: "Temp Piscine"
    unique_id: "binary_sensor.Temp Piscine"
    device_class: temperature
    scan_interval: 60
    unit_of_measurement: "°C"
    value_template: '{{value_json["value_raw"]}}'
    headers:
      content-type: "application/json"
      X-API-TOKEN: !secret oklyn_api 

  # mode pompe piscine
  - platform: rest
    resource: https://api.oklyn.fr/public/v1/device/my/pump
    method: GET
    name: "mode pompe piscine"
    unique_id: "binary_sensor.mode pompe piscine"
    scan_interval: 10
    value_template: '{{value_json["pump"]}}'
    headers:
      content-type: "application/json"
      X-API-TOKEN: !secret oklyn_api 

  # statut PH Piscine
  - platform: rest
    resource: https://api.oklyn.fr/public/v1/device/my/data/ph
    method: GET
    name: "statut PH Piscine"
    unique_id: "binary_sensor.statut 'PH Piscine"
    scan_interval: 60
    value_template: '{{value_json["status"]}}'
    headers:
      content-type: "application/json"
      X-API-TOKEN: !secret oklyn_api 

  # statut RedOx Piscine
  - platform: rest
    resource: https://api.oklyn.fr/public/v1/device/my/data/orp
    method: GET
    name: "statut RedOx Piscine"
    unique_id: "binary_sensor.statut RedOx Piscine"
    scan_interval: 60
    value_template: '{{value_json["status"]}}'
    headers:
      content-type: "application/json"
      X-API-TOKEN: !secret oklyn_api 

  # statut pompe piscine
  - platform: rest
    resource: https://api.oklyn.fr/public/v1/device/my/pump
    method: GET
    name: "statut pompe piscine"
    unique_id: "binary_sensor.statut pompe piscine"
    scan_interval: 10
    value_template: '{{value_json["status"]}}'
    headers:
      content-type: "application/json"
      X-API-TOKEN: !secret oklyn_api 

  # statut aux
  - platform: rest
    resource: https://api.oklyn.fr/public/v1/device/my/aux
    name: "statut aux"
    unique_id: "sensor.statut_aux_piscine"
    scan_interval: 10
    value_template: '{{value_json["aux"]}}'
    headers:
      content-type: "application/json"
      X-API-TOKEN: !secret oklyn_api 

  # Mesure air Piscine
  - platform: rest
    resource: https://api.oklyn.fr/public/v1/device/my/data/air
    method: GET
    name: "Air Piscine"
    unique_id: "binary_sensor.air piscine"
    scan_interval: 600
    value_template: '{{value_json["value_raw"]}}'
    headers:
      content-type: "application/json"
      X-API-TOKEN: !secret oklyn_api 

  - platform: history_stats
    name: "Temps de fonctionnement pompe"
    unique_id: "temps_fonctionnement_pompe_piscine"
    entity_id: sensor.statut_pompe_piscine
    state: "on"
    type: time
    start: "{{ now().replace(hour=0, minute=0, second=0) }}"
    end: "{{ now() }}"

################################
###       rest_command:      ###
################################
rest_command:
  pompe_on:
    url: "https://api.oklyn.fr/public/v1/device/my/pump"
    method: put
    payload: '{"pump": "on"}'
    headers:
      content-type: "application/json"
      X-API-TOKEN: !secret oklyn_api 
      
  pompe_off:
    url: "https://api.oklyn.fr/public/v1/device/my/pump"
    method: put
    payload: '{"pump": "off"}'
    headers:
      content-type: "application/json"
      X-API-TOKEN: !secret oklyn_api 

  pompe_auto:
    url: "https://api.oklyn.fr/public/v1/device/my/pump"
    method: put
    payload: '{"pump": "auto"}'
    headers:
      content-type: "application/json"
      X-API-TOKEN: !secret oklyn_api 

  pergola_light1:
    url: "http://192.168.0.100/zns.cgi?cmd=l&o=64&p={{ pwm }}"
    method: get

  pergola_slider:
    url: "http://192.168.0.100/zns.cgi?cmd=m&m=1&a={{ pwm }}"
    method: get

################################
###          #switch:        ###
################################
switch:
  - platform: rest
    method: put
    resource: https://api.oklyn.fr/public/v1/device/my/aux
    name: "Lumiere piscine"
    unique_id: "binary_sensor.Lumiere piscine"
    scan_interval: 15
    body_on: '{"aux": "on"}'
    body_off: '{"aux": "off"}'
    is_on_template: >-
      {% if value_json.aux == "on" %} True
      {% else %} False
      {% endif %}
    headers:
      Content-Type: application/json
      X-API-TOKEN: !secret oklyn_api 

  - platform: template
    switches:
      pergola_switch_rain:
        unique_id: "Pergola: fermeture si pluie"
        value_template: "{{ is_state('input_boolean.pergola_rain', 'on') }}"
        turn_on:
          - action: rest_command.pergola_set_rain_on
          - action: input_boolean.turn_on
            entity_id: input_boolean.pergola_rain
        turn_off:
          - action: rest_command.pergola_set_rain_off
          - action: input_boolean.turn_off
            entity_id: input_boolean.pergola_rain

      pergola_switch_suntracking:
        unique_id: "Pergola: suivi solaire"
        value_template: "{{ is_state('input_boolean.pergola_suntracking', 'on') }}"
        turn_on:
          - action: rest_command.pergola_set_suntracking_on
          - action: input_boolean.turn_on
            entity_id: input_boolean.pergola_suntracking
        turn_off:
          - action: rest_command.pergola_set_suntracking_off
          - action: input_boolean.turn_off
            entity_id: input_boolean.pergola_suntracking

      pergola_switch_shade:
        unique_id: "Pergola: ombrage minimum"
        value_template: "{{ is_state('input_boolean.pergola_shade', 'on') }}"
        turn_on:
          - action: rest_command.pergola_set_shade_on
          - action: input_boolean.turn_on
            entity_id: input_boolean.pergola_shade
        turn_off:
          - action: rest_command.pergola_set_shade_off
          - action: input_boolean.turn_off
            entity_id: input_boolean.pergola_shade

      pergola_switch_winter:
        unique_id: "Pergola: hivernage"
        value_template: "{{ is_state('input_boolean.pergola_winter', 'on') }}"
        turn_on:
          - action: rest_command.pergola_set_winter_on
          - action: input_boolean.turn_on
            entity_id: input_boolean.pergola_winter
        turn_off:
          - action: rest_command.pergola_set_winter_off
          - action: input_boolean.turn_off
            entity_id: input_boolean.pergola_winter

Tu n’as plus qu’à copier mon tableau de bord

title: Piscine
icon: mdi:pool
cards:
  - type: vertical-stack
    cards:
      - type: horizontal-stack
        cards:
          - show_name: true
            show_icon: true
            type: button
            tap_action:
              action: call-service
              service: rest_command.pompe_auto
              target: {}
            show_state: false
            icon: mdi:pump
            name: " AUTO"
            icon_height: 20px
          - show_name: true
            show_icon: true
            type: button
            tap_action:
              action: call-service
              service: rest_command.pompe_on
              target: {}
            show_state: false
            name: " ON"
            icon: mdi:pump
            icon_height: 20px
          - show_name: true
            show_icon: true
            type: button
            tap_action:
              action: call-service
              service: rest_command.pompe_off
              target: {}
            icon: mdi:pump-off
            name: "OFF"
            show_state: false
            icon_height: 20px
        title: Oklyn Pompe de la Piscine
      - type: entities
        entities:
          - entity: sensor.statut_pompe_piscine
            secondary_info: none
          - entity: sensor.mode_pompe_piscine
            secondary_info: none
        state_color: true
      - graph: none
        type: sensor
        entity: sensor.temps_de_fonctionnement_pompe
        detail: 1
      - type: gauge
        needle: false
        severity:
          green: 50
          yellow: 650
          red: 1000
        max: 1000
        entity: sensor.piscine_power
      - type: history-graph
        entities:
          - entity: sensor.statut_pompe_piscine
        title: Piscine Historique de la pompe
        logarithmic_scale: false
        hours_to_show: 24
      - type: vertical-stack
        cards:
          - type: entities
            entities:
              - entity: script.demarrer_et_arreter_la_pompe_apres_la_duree_definie_2
  - type: vertical-stack
    cards:
      - type: custom:mini-graph-card
        entities:
          - entity: sensor.air_piscine
            name: Exterieur
          - entity: sensor.temp_piscine
            name: Piscine
        show_legend: true
        show_points: true
        line_width: 2
        hours_to_show: 24
      - type: vertical-stack
        cards:
          - type: custom:pool-monitor-card
            display:
              language: fr
            colors:
              normal_color: "#00b894"
            sensors:
              ph:
                entity: sensor.ph_piscine_2
              orp:
                entity: sensor.redox_piscine_2
    title: Capteurs de la piscine
  - type: vertical-stack
    cards:
      - type: vertical-stack
        cards:
          - type: vertical-stack
            cards:
              - type: entities
                entities:
                  - entity: switch.lumiere_piscine
                  - entity: sensor.statut_aux_2
                  - entity: sensor.conso_lumiere_piscine_power
                    name: "Conso Lumière "
                state_color: true
    title: Lumière de la pisicne
  - type: vertical-stack
    cards:
      - type: glance
        entities:
          - entity: sensor.vidange_et_remplissage_des_piscines_restrictions_xxx
    title: Restrictions
  - type: logbook
    title: Activité de la Pompe Piscine
    entities:
      - sensor.statut_pompe_piscine
      - switch.lumiere_piscine
    hours_to_show: 24
path: "5"
badges:
  - type: entity
    show_name: false
    show_state: true
    show_icon: true
    color: ""
    entity: sensor.temperature_exterieure_temperature

J’ai oublié, faut remplacer les

X-API-TOKEN: !secret oklyn_api

par ton api ou mettre

oklyn_api:ton api de l’appli oklyn à la place de ce message

dans le fichier secrets.yaml

Bonjour, depuis le 1er juin, mon boîtier Oklyn est HS et malheureusement, je ne serai plus en mesure de vous aider avec celui-ci.
Je suis en train de voir pour m’en faire un moi-même, vu que c’est un ESP12S.
Je vais partir avec une base ESP32 et m’inspirer de ce tuto https://forum.hacf.fr/t/ph-metre-diy-via-esphome/640

ah mince, il est hs a cause de quoi ?

Un petit coup d’orage et hop plus de boîtier. L’alimentation fonctionne le fusible est ok mais rien ne s’allume. Faut que j’essaie de faire démarrer que la puce pour voir