Régulation frigo sur Dallas

Bonjour,

Débutant sur HA, que j’utilise pour programmer des ESP32 via ESPHOME, j’essaye de remplacer une carte d’un congélateur défectueuse par esp32,sonde dallas et module relais.
En avançant progressivement (et lentement), j’ai bien la température de la sonde qui remonte, j’arrive à faire commuter le relais, via un switch virtuel sur HA, mais quand je tente l’automatisation avec la fonction « climate »…je m’y perds! (la température cible est à 22°C pour les tests uniquement!
Pour mes recherches, je me suis aidé de:
https://forum.hacf.fr/t/depannage-dun-frigo-avec-esphome/5554/9
https://forum.hacf.fr/t/hysteresis-thermostat-de-refrigerateur/14665/3

Quelqu’un pourrait il m’expliquer mon erreur, sachant que j’avais à l’idée que « climate » changerait l’état du switch virtuel et donc l’alimentation du relais, mais rien ne se passe.
Enfin faut-il initialiser le démarrage pour savoir dans quel état est le relais et/ou le switch virtuel?

Merci de votre aide.

esphome:
  name: esp32-c1
  friendly_name: esp32 C1

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "Evwu8rUDOQQLcMbQOjCd5O5c7oawjMpmsEoH3OYiiK4="

ota:
  - platform: esphome
    password: "325062a1a5bd34ba415bc6deed67f6c9"

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

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp32-C1 Fallback Hotspot"
    password: "8lHMgykZHqpR"

#déclaration bus 1-wire pour sonde dallas
one_wire:
  - platform: gpio
    pin: GPIO16
    id: bus_ds18b20_1

#déclaration des capteurs
sensor:
  - platform: dallas_temp
    one_wire_id: bus_ds18b20_1
    name: "Température Dallas 1"
    id: temp_dallas_1
    resolution: 12
    update_interval: 30s

#création d'un bouton virtuel
switch:
  - platform: output
    output: relais
    name: "switch relais"
    id: switch_relais

#Définition des actionneurs
output:
  - id: relais
    platform: gpio
    pin: 13

climate:
  - platform: thermostat
    name: "Thermostat Climate Controller"
    sensor: temp_dallas_1
    min_cooling_off_time: 30s
    min_cooling_run_time: 30s
    min_idle_time: 30s
    cool_action:
      - switch.turn_on: switch_relais
    idle_action:
      - switch.turn_off: switch_relais
    default_preset: Home
    preset:
      - name: Home
        default_target_temperature_high: 22 °C

[center]## System Information

version core-2025.1.0
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.13.1
os_name Linux
os_version 6.6.66-haos
arch x86_64
timezone Europe/Paris
config_dir /config
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 Home Assistant OS 14.1
update_channel stable
supervisor_version supervisor-2025.11.4
agent_version 1.6.0
docker_version 27.2.0
disk_total 30.8 GB
disk_used 7.2 GB
healthy true
supported true
host_connectivity true
supervisor_connectivity true
ntp_synchronized true
virtualization oracle
board ova
supervisor_api ok
version_api ok
installed_addons ESPHome Device Builder (2024.12.2)
Dashboards
dashboards 2
resources 0
views 1
mode storage
Recorder
oldest_recorder_run 6 janvier 2025 à 16:42
current_recorder_run 23 novembre 2025 à 11:51
estimated_db_size 5.16 MiB
database_engine sqlite
database_version 3.47.1
[/center]
[19:02:00][D][dallas.temp.sensor:054]: 'Température Dallas 1': Got Temperature=19.0°C
[19:02:00][D][sensor:094]: 'Température Dallas 1': Sending state 19.00000 °C with 1 decimals of accuracy
[19:02:00][D][climate:396]: 'Thermostat Climate Controller' - Sending state:
[19:02:00][D][climate:399]:   Mode: OFF
[19:02:00][D][climate:401]:   Action: OFF
[19:02:00][D][climate:410]:   Preset: HOME
[19:02:00][D][climate:419]:   Current Temperature: 19.00°C
[19:02:00][D][climate:425]:   Target Temperature: 22.00°C
[19:02:00][W][component:237]: Component dallas_temp.sensor took a long time for an operation (56 ms).
[19:02:00][W][component:238]: Components should block for at most 30 ms.
[19:02:06][D][esp32.preferences:114]: Saving 1 preferences to flash...
[19:02:06][D][esp32.preferences:143]: Saving 1 preferences to flash: 1 cached, 0 written, 0 failed
[19:02:30][D][dallas.temp.sensor:054]: 'Température Dallas 1': Got Temperature=20.9°C
[19:02:30][D][sensor:094]: 'Température Dallas 1': Sending state 20.93750 °C with 1 decimals of accuracy
[19:02:30][D][climate:396]: 'Thermostat Climate Controller' - Sending state:
[19:02:30][D][climate:399]:   Mode: OFF
[19:02:30][D][climate:401]:   Action: OFF
[19:02:30][D][climate:410]:   Preset: HOME
[19:02:30][D][climate:419]:   Current Temperature: 20.94°C
[19:02:30][D][climate:425]:   Target Temperature: 22.00°C
[19:02:30][W][component:237]: Component dallas_temp.sensor took a long time for an operation (56 ms).
[19:02:30][W][component:238]: Components should block for at most 30 ms.
[19:03:00][D][dallas.temp.sensor:054]: 'Température Dallas 1': Got Temperature=23.0°C
[19:03:00][D][sensor:094]: 'Température Dallas 1': Sending state 23.00000 °C with 1 decimals of accuracy
[19:03:00][D][climate:396]: 'Thermostat Climate Controller' - Sending state:
[19:03:00][D][climate:399]:   Mode: OFF
[19:03:00][D][climate:401]:   Action: OFF
[19:03:00][D][climate:410]:   Preset: HOME
[19:03:00][D][climate:419]:   Current Temperature: 23.00°C
[19:03:00][D][climate:425]:   Target Temperature: 22.00°C

Je retente mes essais. Dans ce log, la current temp passe bien au-dessus de la target temp, mais je n’ai pas de changement d’état du relais.

En passant par HA, j’ai eu un changement d’état…mais le visuel permet uniquement une consigne entre 10 et 30°C, ce qui ne va pas pour un frigo et j’aimerais que la consigne soit en dure dans l’ESP32, sans passer par HA (sauf pour un changement de consigne)

Bonjour,

Personne n’aurait de suggestions à mon soucis?

Merci de votre aide

Salut

Chez moi j’utilise les presets comme ça

climate:
  - platform: thermostat
    name: "Radiateur Fourmi "
    sensor: temperature_sensor
    min_idle_time: 0s
    min_heating_off_time: 0s
    min_heating_run_time: 0s
    heat_deadband: 0.2
    heat_overrun: 0.2
    default_preset: Chauffage Jour
    on_boot_restore_from: memory
    preset:
      - name: Chauffage Jour
        default_target_temperature_low: ${tempMax} °C
      - name: Chauffage Nuit
        default_target_temperature_low: ${tempMoy} °C
      - name: Diapose
        default_target_temperature_low:  ${tempMin} °C
    visual:
      min_temperature: 10
      max_temperature: 30
      temperature_step: 0.1
    heat_action:
      - switch.turn_on: heater
    idle_action:
      - switch.turn_off: heater

output:
  - platform: gpio
    pin: GPIO5
    id: 'heater_out'

switch:
  - platform: output
    output: 'heater_out'
    id: heater
    name: "Fourmi Chauffage"

sensor:
  - platform: dallas_temp
    address: 0x2f3ca4f649052628
    name: "Sonde Fourmi Temperature"
    id: temperature_sensor
    unit_of_measurement: "°C"
    state_class: "measurement"
    accuracy_decimals: 1
    filters:
      - round_to_multiple_of: 0.1

one_wire:
  - platform: gpio
    pin: GPIO4

Et pour les valeurs en dur

substitutions:
  tempMax: '26.0'
  tempMoy: '22.0'
  tempMin: '10.0'

Bonjour @gillout,

J’ai conçu une cave à vin avec un vieux frigo.

J’utilise des lambda sur les capteurs de température.

Il faut créer un input_number pour la consigne cave dans HA.

Je te laisse adapder les id et adresses :

esphome:
  name: esphome-web-a2c734
  friendly_name: ESP32_Cave
  on_boot: 
    then:
      - number.set: 
          id: rst_dif_cons_cave
          value: 0
      - delay: 60s
      - number.set: 
          id: rst_dif_cons_cave
          value: 1    

esp32:
  board: esp32dev
  framework:
    type: esp-idf

# Enable logging
logger:
  level: DEBUG

# Enable Home Assistant API
api:
  
ota:
  - platform: esphome

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: 192.168.1.2
    gateway: 192.168.1.254
    subnet: 255.255.255.0
  # Set up a wifi access point
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap: {}

captive_portal:

# Sets up Bluetooth LE (Only on ESP32) to allow the user
# to provision wifi credentials to the device.
esp32_improv:
  authorizer: none

# To have a "next url" for improv serial
web_server:
  local: true
  port: 80
  auth:
    username: !secret visit_esp_ssid
    password: !secret visit_esp_password

one_wire:
  - platform: gpio
    pin: GPIO23

number:
  - platform: template
  #Permet de relancer les conditions dif_cons_cave.
    name: "rst_dif_cons_cave"
    optimistic: True
    min_value: 0
    max_value: 1
    step: 1
    id: rst_dif_cons_cave
  
sensor: 
  - platform: dallas_temp
    update_interval: 5s
    address: 0xB1011453221CAA28
    name: "Temp_Cave"
    id: Temp_Cave
  - platform: dallas_temp
    update_interval: 5s
    address: 0xf00416588452ff28
    name: "Temp_Congel"
    id: Temp_Congel
  - platform: dallas_temp
    update_interval: 5s
    address: 0xB60114531D2BAA28
    name: "Temp_Garage"
    id: Temp_Garage
  - platform: homeassistant
    id: consigne_cave
    entity_id: input_number.consigne_cave
   
# Dif température consigne - cave
  - platform: template
    name: "Dif consigne cave"
    id: dif_cons_cave
    icon: mdi:thermometer
    unit_of_measurement: "°C"
    accuracy_decimals: 2
    lambda: |-
      return (((id(Temp_Cave).state - id(consigne_cave).state)) * id(rst_dif_cons_cave).state);
    on_value_range:
          - below: -0.25
            then:           
                  - delay: 
                      seconds: 30                
                  - switch.turn_off: relais_frigo
          - above: -0.2
            below: 0.75
            then:
              - switch.turn_off: relais_frigo
          - above: 0.8
            then: 
                  - delay: 
                      seconds: 30
                  - switch.turn_on: relais_frigo
    update_interval: 5s
            
switch:
  - platform: gpio
    name: "Frigo"
    pin: GPIO18
    id: relais_frigo

Je l’ai adapté pour ton cas. Car le code que j’ai créé à deux relais, un pour refroidir l’été et un autre pour réchauffer l’hiver.

Ca fonctionne très bien depuis des années chez moi.

Tiens nous au courant.

Merci je garde sous le coude…j’ai du passer sur un projet pro!