Trackeur solaire Esphome

Bonjour à tous,

Mon problème.
Je suis en train de créer sous ESPHOME la partie logiciel de mon trackeur solaire pour mes panneaux solaire.

Je vais utiliser un esp32vroom pour cela avec comme capteurs une cellule 4 axes pour suivre le soleil, 4 capteur fin de course pour chaque axe, un anémomètre pour le vent et un sélecteur 3 positions pour 3 modes auto, manuel et off.
Je débute totalement avec ESPHOME, et je souhaiterais savoir si mon code est juste ou tout simplement bon a rien.
Je n’ai pas pu le tester car toujours en attente de réception de matériel.
Merci a tous.

Ma configuration


[center]## System Information

version core-2024.12.5
installation_type Home Assistant Supervised
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.13.0
os_name Linux
os_version 6.1.0-26-amd64
arch x86_64
timezone Europe/Berlin
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
HACS Data ok
GitHub API Calls Remaining 5000
Installed Version 2.0.1
Stage running
Available Repositories 1495
Downloaded Repositories 5
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Debian GNU/Linux 12 (bookworm)
update_channel stable
supervisor_version supervisor-2024.12.0
agent_version 1.6.0
docker_version 27.3.1
disk_total 914.4 GB
disk_used 31.8 GB
healthy true
supported true
host_connectivity true
supervisor_connectivity true
ntp_synchronized true
virtualization
supervisor_api ok
version_api ok
installed_addons File editor (5.8.0), Samba share (12.3.2), Terminal & SSH (9.16.0), Mosquitto broker (6.4.1), Zigbee2MQTT (1.42.0-2), Home Assistant Google Drive Backup (0.112.1), Duck DNS (1.18.0), ESPHome Device Builder (2024.12.2)
Dashboards
dashboards 5
resources 2
views 5
mode storage
Recorder
oldest_recorder_run 13 décembre 2024 à 17:43
current_recorder_run 21 décembre 2024 à 01:37
estimated_db_size 59.62 MiB
database_engine sqlite
database_version 3.45.3
[/center]

CODE

esphome:
  name: trackeur
  friendly_name: Trackeur

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

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

ota:
  - platform: esphome
    password: "xxxxxxxxxxxxxxxxxxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip: 
   static_ip: 192.168.1.101
   gateway:  192.168.1.254
   subnet: 255.255.255.0

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Trackeur Fallback Hotspot"
    password: "xxxxxxxxxxxxxxxxxxxxxx"

captive_portal:

time:
  - platform: homeassistant
    id: homeassistant_time

sensor:
  - platform: adc
    pin: GPIO32
    name: "capteur_est"
    attenuation: 12dB
    filters:
    - round: 1
    id: capteur_est
    update_interval: 1s

  - platform: adc
    pin: GPIO33
    name: "capteur_ouest"
    attenuation: 12dB
    filters:
    - round: 1
    id: capteur_ouest
    update_interval: 1s

  - platform: adc
    pin: GPIO34
    name: "capteur_sud"
    attenuation: 12dB
    filters:
    - round: 1
    id: capteur_sud
    update_interval: 1s
    
  - platform: adc
    pin: GPIO35
    name: "capteur_nord"
    attenuation: 12dB
    filters:
    - round: 1
    id: capteur_nord
    update_interval: 1s

switch:
  - platform: gpio
    pin: GPIO4
    name: "rotation_est"
    id: rotation_est

  - platform: gpio
    pin: GPIO13
    name: "rotation_ouest" 
    id: rotation_ouest

  - platform: gpio
    pin: GPIO14
    name: "rotation_nord"
    id: rotation_nord

  - platform: gpio
    pin: GPIO16
    name: "rotation_sud"
    id: rotation_sud

binary_sensor:
  - platform: pulse_meter
    pin: GPIO4
    mode: INPUT
    id: capteur_vent
    unit_of_measurement: 'm/s'
    name: "capteur_vent"

  - platform: gpio
    pin: GPIO22
    name: "mode_manuel"
    id: mode_manuel
    
  - platform: gpio
    pin: GPIO17
    name: "fin_de_course_est"
    id: fin_de_course_est

  - platform: gpio
    pin: GPIO18
    name: "fin_de_course_ouest"
    id: fin_de_course_ouest

  - platform: gpio
    pin: GPIO19
    name: "fin_de_course_nord"
    id: fin_de_course_nord

  - platform: gpio
    pin: GPIO21
    name: "fin_de_course_sud"
    id: fin_de_course_sud
           
  - platform: gpio
    pin: GPIO23
    name: "mode_automatique"
    id: mode_automatique
    on_state:
      if:
        time:
        - platform: sntp
          on_time:
          - seconds: 0
            minutes: 30
            hours: 22
            days_of_week: MON-SUN
            then:
            - script.execute: mode_nuit
      else:
        if:
        time:
        - platform: sntp
          on_time:
          - seconds: 0
            minutes: 30
            hours: 7
            days_of_week: MON-SUN
            then:
            - script.execute: positionnement_trackeur
      if:
        condition:
# ici je ne suis pas sur de moi
          lambda: 'return id(capteur_vent.state > 10;'
          then:
            - script.execute: mode_vent

script:
  id: positionnement_trackeur
    mode: mode_automatique
    then:
      while:
        condition:
# du coup ici non plus
          lambda: 'return id(capteur_est).state < id(capteur_ouest).state;'
          and:
            if:
              condition:
                fin_de_course_est.is_off: fin_de_course_est
          then:
          -switch_on: rotation_est
      
      while:
        condition:
# encore ici
          lambda: 'return id(capteur_ouest).state < id(capteur_est).state;'
          and:
            if:
              condition:
                fin_de_course_ouest.is_off: fin_de_course_ouest
          then:
            -switch_on: rotation_ouest

      while:
        condition:
# bien sur ici aussi
          lambda: 'return id(capteur_sud).state < id(capteur_nord).state;'
          and:
            if:
              condition:
                fin_de_course_sud.is_off: fin_de_course_sud
          then:
            -switch_on: rotation_sud
          
      while:
        condition:
# idem ici
          lambda: 'return id(capteur_nord).state < id(capteur_sud).state;'
          and:
            if:
              condition:
                fin_de_course_nord.is_off: fin_de_course_nord
          then:
            -switch_on: rotation_nord

  id: mode_nuit
    mode: mode_nuit
      then:
        while:
          codition:
            fin_de_course_est.is_off: fin_de_course_est
          then:
            -switch_on: rotation_est
        while:
          condition:
            fin_de_course_sud.is_off:fin_de_course_sud
          then:
            -switch_on: rotation_sud

  id: mode_vent
    mode: mode_vent
      then:
        while:
          codition:
            fin_de_course_est.is_off: fin_de_course_est
          then:
            -switch_on: rotation_est
        while:
          condition:
            fin_de_course_nor.is_off:fin_de_course_nord
          then:
            -switch_on: rotation_nord