Dépannage d'un frigo avec ESPhome

salut
Petit drame familial hier soir - Frigo HS

je vous passe les détails sur le transvasage en urgence de tout le « frais » vers le frigo Bakup du garage (du coup j’ai plus de place pour les bières !!!)
Recherche pour un neuf…ah quand même… 500 a 600€ !!!

donc passage en mode DIY…ce matin diagnostic (merci youtube)
la résistance du moteur du compresseur a l’air normale… il a pas l’air cramé, essayons ailleurs

si je shunt le fil marron (qui va au thermostat et en revient ) directement sur le bornier du moteur, le compresseur démarre !!!
j’en déduis que c’est le bloc thermostat qui déconne (un truc pas facilement démontable avec des led, ,le réglage de la température et le controle du ventilo normal / forcé

AH AH !!! si c’est vraiment un contact « sec » je peux peut être faire qqchose. a la mode barbare, avec un bête relai !..

j’essaye un de mes capteurs zigbee Aquara température sans fil , depuis l’intérieur du frigo ET CA PASSE. Je peux donc avoir une mesure de température « inter frigo » qui remonte sur HA
le reste est a tenter: un ESP01 avec son module relai pourra servir de contact sec pour la commande du compresseur (c’est minimal mais je vois pas pourquoi ça marcherais pas)

Flashage « esphome » du dit esp01 (avec un FTDI USB tres pratique)
Un petit script esphome pour déclarer,une entité « climate » (elle recupere la température du zigbee par home assistant et l’utilise comme mesure « locale »

ça a l’air de marcher (quelques petites remarques) :

  • le flashage OTA ne marche pas (parce que c’est un ESP01 ?)
  • c’"est moche (mais on peut le cacher)

code ci dessous, et j’essaye de mettre quelques photos d’illustrations après

substitutions:
  device: e152
  device_ip: 192.168.1.152
  <<: !include ../secrets.yaml

esphome:
  name: "${device}_frigo"
  platform: ESP8266
  board: nodemcuv2
#  board: esp01_1m

# Enable Home Assistant API

wifi:
  ssid: ${wifi_ssid}
  password: ${wifi_password}
  manual_ip:
    static_ip: ${device_ip}
    gateway: 192.168.1.1
    subnet: 255.255.255.0
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "recovery_${device}"
    password: "a1b2c3d4"
    
###############   Services de base    
web_server:
  port: 80

captive_portal:
logger:
api:
ota:

#########################

switch:
  - platform: restart
    name: "${device}_Restart"
    
  - platform: output
    name: "relay"
    id: "relay"
    output: 'e152_relay'
    
  - platform: output
    name: "led"
    id: "led"
    output: 'e152_led'    


###################  Spécifique espo01 relay

sensor:
  - platform: wifi_signal
    name: "${device}_WiFi"
    update_interval: 60s
  - platform: uptime
    name: "${device}_Uptime"
  - platform: homeassistant
    name: "temp_frigo"
    id: temp_frigo
    entity_id: sensor.z_lumi_th02_temperature
#    internal: true

output:
  - platform: gpio
    pin: D3
    id: 'e152_relay'
  - platform: gpio
    pin: D4
    id:  'e152_led'

  
climate:
  - platform: thermostat
    name: "Frigo_Climate"
    id: "frigo_climate"
    sensor: temp_frigo
    default_target_temperature_high: 8 °C
    hysteresis: 1 °C    
    visual:
      min_temperature: 2 °C
      max_temperature: 14 °C
      temperature_step: 0.5 °C

    cool_action:
      - switch.turn_on: relay 
    idle_action:
      - switch.turn_off: relay




4 « J'aime »

C’est quand même le plus grave. :scream:
Et merci pour les infos! Effectivement, ça revient moins cher qu’un neuf.

Si ça marche bien, j’essayerai faire plus pro(pre) :
un nodemcu avec un capteur DS18B20 et quelques led d’état (pixels adressables WS2812) + un petit écran OLED pour l’affichage « mesure et consigne » pour rendre ça complètement « local » (en démontant un vieux lecteur CD PC KC, on peut récuperer un ruban flex qui passe sous le joint de porte

par contre , next level, mais je sais pas (encore) faire : J’ai vu aussi que on peut mettre un codeur rotatif pour modif de la consigne en full Local (mais toujours remonté dans HA)…
… si je m’ennuie pendant les vacances…( mais la, le code esphome risque de serieusement se compliquer !!!)

Bonjour,
Super idée, j’ai donc essayé aussi de mettre les xiaomi dans frigo/congel. A ma grande surprise cela fonctionne aussi.
Merci pour l’astuce, et belle réalisation.

Super du DIY « classe » pour sauver des bières… j’adore :+1: :joy:

Question un peu hors sujet mais dans le même esprit …un sensor dans le congel quelqu’un a essayé si les infos remontaient et surtout si il tient la tempé ?

Je préconiserai de lire la datasheet avant pour voir la plage de température de fonctionnement… :wink:

Le datasheet c’est du théorique, je demandais si quelqu’un avait tenté l’expérience quelle que soit la plage donnée par Xiaomi… :sunglasses:

Bonsoir,

Chez moi même problème, réglé avec un thermomètre aquara collé à l’intérieur du frigo, une prise connectée et une automatisation qui coupe le courant en dessous de 6° et qui met le courant au dessus de 7°
5 mois que cela fonctionne parfaitement
Pas de diy mais installé en 3mn

@+

1 « J'aime »

Bonjour - petite mise a jour pour du code esphome sur cette appli (sur un nodemcu) avec un petit PCB custom
lien esp easy du pcb

avec :

  • un capteur de température ds18B20 (mais il n’est pas utilisé dans la régul), car c’est un zigbee acquara qui mesure la temp DANS le frigo)
  • un relai
  • un écran oled I2C
  • une quelques pixels d’indication d’état (2 leds RGB d’un ruban WS2812, commandé par 1 unique GPIO)

la régul de la temp est déclarée comme un « climate » entity, qui permet de bien de simplifier la gestion des automatismes et la prise en charge dans HA (et même d’être complètement local si la température est mesurée par le ds18b20 embarqué (par exemple via un cable flex sous le joint)

le code pour l’écran est "a coup de « lambda » pompé ailleurs, mais ça marche

Manque plus qu’a mettre ça dans un boitier « propre », mais c’est ni ma spécialité, ni ma priorité

future amélioration : (utiliser une IO libre pour connecter un petite capteur « motion sensor » pour allumer / eteindre l’ércan en fonction de si il y a qqun a proximité

substitutions:
  device: n182
  device_ip: 192.168.1.182
  <<: !include ../secrets.yaml

esphome:  
  name: "${device}_frigo_display"
  platform: ESP8266
  board: nodemcuv2
  
  on_boot:
    - priority: 600.0 # after sensor setup, before WIFI initialization 
      then:
        - light.turn_on:
            id: "${device}_p1"
            brightness: 25%
            red: 50%
            green: 0%
            blue: 0%
        - light.turn_on:
            id: "${device}_p2"
            brightness: 50%
            red: 100%
            green: 0%
            blue: 0%
            
    - priority: -500.0
      then:
        - climate.control:
            id: "${device}_climate"
            mode: COOL
            target_temperature: 8°C


    - priority: -1000.0 #after wifi initialized
      then:
        if:
          condition:
            wifi.connected:
          then:
            - light.turn_on:
                id: "${device}_p1"
                brightness: 25%
                red: 0%
                green: 25%
                blue: 0%
            - light.turn_off:
                id: "${device}_p2"
            - switch.turn_on: "${device}_screen"  # allumage de l'écran au boot
######################   WIFI 
wifi:
  ssid: ${wifi_ssid}
  password: ${wifi_password}
  manual_ip:
    static_ip: ${device_ip}
    gateway: 192.168.1.1
    subnet: 255.255.255.0
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "recovery_${device}"
    password: "a1b2c3d4"

captive_portal:

web_server:
  port: 80
# Enable logging
logger:

# Enable Home Assistant API
api:
#  password: "a1b2c3d4"  mdp DE l ESP pour acceder a l'esp depuis home assistant

ota:
######################   Initialisations
time:
  - platform: homeassistant
    id: ha_time
    on_time:
      - seconds: 0
        minutes: '*'
        then:
#          - switch.turn_off: "${device}_screen"
          - light.turn_off: "${device}_p2"          
          - if:
              condition:
                wifi.connected:
              then:
                - light.turn_on:
                    id: "${device}_p1"
                    brightness: 25%
                    red: 0%
                    green: 25%
                    blue: 0%
              else:
                - light.turn_on:
                    id: "${device}_p1"
                    brightness: 50%
                    red: 100%
                    green: 0%
                    blue: 0%
              
########################### Déclaration protocoles DALLAS  + I2C
dallas:
  - pin: D5 #GPIO14 - Sensor IOT
    update_interval: 60s
    
i2c:
  sda: D2
  scl: D1

font:
  - file: "Roboto-Regular.ttf"
    id: roboto
    size: 20
    
  - file: "Roboto-Regular.ttf"
    id: roboto_big
    size: 40
    
display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    address: 0x3C
    id: my_display
    lambda: |-
      if (id(n182_screen).state) {
        it.print(0, 0, id(roboto), "FRIGO :");
        it.printf(128, 21, id(roboto_big), TextAlign::TOP_RIGHT, "%.1f°C", id(temp_frigo).state);
      } else {
        it.printf(0, 0, id(roboto), TextAlign::TOP_RIGHT, "---------");
      }


##### declaration DS18B20 1 +    +    Pixel WS2812  D4
output:
  - platform: gpio
    pin: D7
    id: "${device}_relay"

switch:
  - platform: restart
    name: "${device}_Restart"
    
  - platform: gpio
    name: "${device}_screen"    #bouton allumage ecran pin virtual 
    id: "${device}_screen"
    pin: D6

  - platform: output
    name: "Relay"
    id: "relay"
    output: "${device}_relay"
    
light:
  - platform: fastled_clockless
    chipset: WS2811
    pin: D4
    num_leds: 2
    rgb_order: GRB
    name: "${device}_ws2812"
    id: "${device}_ws2812"
    internal: true
    
  - platform: partition
    name: "${device}_p1"
    id: "${device}_p1"
    segments:
      - id: "${device}_ws2812"
        from: 0
        to: 0
  - platform: partition
    name: "${device}_p2"
    id: "${device}_p2"
    segments:
      - id: "${device}_ws2812"
        from: 1
        to: 1

binary_sensor:
  - platform: status
    name: "${device}_Status"
    
#  - platform: gpio
#    pin: D7
#    name: "${device}_Tac_BTN"
#    id: "${device}_tact_btn"
#    on_press:
#      - light.toggle: "${device}_p2"

    
sensor:
  - platform: wifi_signal
    name: "${device}_WiFi"
    update_interval: 60s
  - platform: uptime
    name: "${device}_Uptime"
    
  - platform: homeassistant
    name: "temp_frigo"
    id: temp_frigo
    entity_id: sensor.z_lumi_th02_temperature
#    internal: true
    
  - platform: dallas
    index: 0 #address: 0x0D8000001F97B428  #index: 0
    name: "${device}_temp_ds18b20"
    id: "${device}_temp_ds18b20"

climate:
  - platform: thermostat
    name: "Frigo.Climate"
    id: "${device}_climate"
    sensor: temp_frigo       #"${device}_temp_ds18b20"
   
    default_target_temperature_high: 8 °C
    
    hysteresis: 0.2 °C
    visual:
      min_temperature: 2 °C
      max_temperature: 24 °C
      temperature_step: 0.5 °C

    cool_action:
      - switch.turn_on: relay 
      - light.turn_on:
          id: "${device}_p2"
          brightness: 50%
          red: 00%
          green: 00%
          blue: 50%   
#      - switch.turn_off: relay_2
    idle_action:
      - switch.turn_off: relay
      - light.turn_on:
          id: "${device}_p2"
          brightness: 25%
          red: 00%
          green: 25%
          blue: 00%   
#      - switch.turn_on: relay_2

C’est gonflé mais j’adore. Bravo. Dans le frigo, j’aurai plus mis une sonde ds18b20 que aqara a cause du taux d’humidité et la liaison filaire.

J’avais la flemme de démonter un des mes vieux lecteurs CD pour récuperer un ruban flex a ressouder sur conducteur 3 fils comme j’ai fait pour le congélateur)

  • euh - oui, je ça, ca aurais besoin d’un petit coup de dégivrage !

chez moi, les sondes température zigbee sans fils sont tres très bien et visiblement sont captées sans pb de dedans le firgo

1 « J'aime »

Excellent et bravo ! quel pragmatisme !! La faim donne les moyens… et la bière aussi. :slight_smile: