Homeassistant does not recognize all esphome entities

Hi i’m in trouble with esphome and homeassisant .
i thought it was a DB problem but i clean all databases. of homeassistant.

homeassistant 2025.12.5 detect my esphome 2026.7.4 but it appear only some entities not all

If someone can help me :slight_smile: here are some informations

esphome web :


homeassistant for the same esphome

the yaml is :

substitutions:
  device_home: fpg
  device_zone: garden
  device_type: 4relay
  device_usag: pump
  device_numb: '1'
  device_id: ${device_home}_${device_zone}_${device_type}_${device_usag}_${device_numb}
  device_name: "${device_zone}-${device_type}-${device_usag}-${device_numb}"
  friendly_name: "${device_zone} ${device_usag}"

# available GPIO 
# -2,4,12,13,-14,-15, (touch, adc,hspi)
# 22,23,
# 26,27,32,33,-34,-35,36,39 (adc)
# -5,-19,-18,-21 (relay)
# -25 (status led)
  pin_status_led: GPIO25
  pin_i2c_sda: GPIO14
  pin_i2c_scl:  GPIO15
  pin_dht: GPIO2
  pin_illum : GPIO34
  pin_water_flow: GPIO35
  pin_relay_1: GPIO5
  pin_relay_2: GPIO18
  pin_relay_3: GPIO19
  pin_relay_4: GPIO21



  project_name: "${device_usag}-${device_numb}.202408100945"
  log_level: debug # warn # Enable levels logging https://esphome.io/components/logger.html
  # none, error, warn, info, debug (default), verbose, very_verbose
  # changed log level from debug to warn 11/13 by mgamache

# external_components:
#   - source: github://pr#13426
#     components: [wifi]
#     refresh: 1h

safe_mode:
  disabled: True
  
esphome:
  name: ${device_name}
  friendly_name: ${friendly_name}
  min_version: 2024.6.0
  name_add_mac_suffix: false
  project:
    name: ${project_name}
    version: dev
  includes:
    - esp32_wdt.h
  on_boot:
    then:
      - lambda: |-
          set_esp32_wdt_timeout();
          
###### board specific ######
esp32:
  board: esp32dev
  variant: ESP32
  cpu_frequency: 240MHZ
  flash_size: 4MB
  framework:
    type: esp-idf
    #log_level: DEBUG
    sdkconfig_options:
      CONFIG_LWIP_MAX_SOCKETS: "32"
      # CONFIG_PM_ENABLE: "n"
      # # Prevent IDF from trying to power-down UART in light sleep, which causes
      # # uart_param_config to return ESP_ERR_NOT_SUPPORTED on some targets
      # CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP: "n"
      # CONFIG_UART_ISR_IN_IRAM: "y"

psram:
  mode: quad
  speed: 80MHz

# Enable logging
logger:
  level: ${log_level}
  logs:
    text_sensor: ERROR

# external_components:
#   - source: github://pr#11579
#     components: [http_request]
#     refresh: 1h

# Enable Home Assistant API
api:
  reboot_timeout: 0s
  encryption:
    key: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

ota:
  - platform: esphome
    password: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

sun:
  latitude: -XXXXXXXXXXXX
  longitude: -XXXXXXXXXXXXXXXXX

wifi:
  networks:
    - ssid: !secret wifi_ssid
      password: !secret wifi_password
      # bssid: XXXXXXXXXXXXXXXXX
      manual_ip:
          static_ip: 192.168.10.103
          gateway: 192.168.10.1
          subnet: 255.255.255.0
  #reboot_timeout:
  power_save_mode: none
  fast_connect: True
  use_psram: true
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "${friendly_name}"
    password: !secret wifi_password_fallback
    manual_ip:
      static_ip: 192.168.10.103
      gateway: 192.168.10.1
      subnet: 255.255.255.0

# To have a "next url" for improv serial
web_server:
  port: 80
  # auth:
  #   username: !secret webserver_username
  #   password: !secret webserver_password
  version: 3
  log: False

status_led:
  pin: ${pin_status_led}

# i2c:
#   - id: ${device_id}_i2c
#     sda: GPIO14
#     scl: GPIO15   
#     scan: true    

# Sync time with Home Assistant.
time:
  - platform: sntp
    #timezone: America/Santiago
    servers: 192.168.10.1
    id: ${device_id}_sntp_time
    on_time:
      # Every 10 seconds
      - seconds: 1/5
        then:
          - script.execute: ${device_id}_script_pump

      - seconds: 0/10
        then:
          - script.execute: ${device_id}_low_flow

    on_time_sync:
      then:
        - logger.log: "Synchronized system clock"

globals:
  - id: pump_irrig_1
    type: int
    restore_value: yes
    initial_value: '0'
  - id: pump_irrig_2
    type: int
    restore_value: yes
    initial_value: '0'
  - id: low_flow
    type: int
    restore_value: yes
    initial_value: '0'
  - id: alerta_persistente
    type: int
    restore_value: yes
    initial_value: '1'

button:
  - platform: restart
    name: "restart"
    entity_category: "diagnostic"
    id: ${device_id}_restart
    
  - platform: factory_reset
    name: Restart with Factory Default Settings
    id: ${device_id}_factory_reset
    entity_category: "diagnostic"

http_request:
  id: ${device_id}_http_request_id
  verify_ssl: false
  timeout: 2s
  watchdog_timeout: 4s
    

###### project specific ######
text_sensor:
  - platform: wifi_info
    scan_results:
      name: Wifi Scan Result
      id: ${device_id}_wifi_scan

  - platform: template
    id: ${device_id}_time
    name: "Current time"
    lambda: |-
      char str[17];
      time_t currTime = id(${device_id}_sntp_time).now().timestamp;
      strftime(str, sizeof(str), "%Y-%m-%d %H:%M", localtime(&currTime));
      return  { str };
    update_interval: 60s
    entity_category: "diagnostic"

sensor:
  - platform: pulse_meter
    pin: ${pin_water_flow}
    id: ${device_id}_water_flow
    device_class: water
    internal_filter: 30ms
    unit_of_measurement: 'L/min'
    name: 'Pump flow'
    accuracy_decimals: 1 
    timeout: 1s 
    filters:
      - multiply: 0.02

    total:
      unit_of_measurement: 'm³'
      name: 'total pumped'
      device_class: water
      state_class: total_increasing
      id: ${device_id}_water_pumped
      accuracy_decimals: 1
      filters:
        - multiply: 0.00002
        
  - platform: internal_temperature
    name: "Internal temp"
    id: ${device_id}_int_temp
    accuracy_decimals: 2
    entity_category: "diagnostic"
    update_interval: 120s

  - platform: wifi_signal # Reports the WiFi signal strength/RSSI in dB
    name: "WiFi Signal dB"
    id: ${device_id}_wifi_strength
    update_interval: 3s
    entity_category: "diagnostic"
    internal: true

  - platform: copy # Reports the WiFi signal strength in %
    source_id: ${device_id}_wifi_strength
    name: "WiFi Signal Percent"
    filters:
      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
    unit_of_measurement: "%"
    entity_category: "diagnostic"
    
  - platform: uptime
    name: "Uptime"
    entity_category: "diagnostic"

  - platform: dht
    model: am2302
    pin: ${pin_dht}
    temperature:
      name: "Temperatura"
      id: ${device_id}_temp
    humidity:
      name: "Humedad"
      id: ${device_id}_humi

  - platform: absolute_humidity
    id: ${device_id}_humi_abs
    name: "Humedad absoluta"
    temperature: ${device_id}_temp
    humidity: ${device_id}_humi

  - platform: template
    id: ${device_id}_humidex
    name: "Humidex"
    unit_of_measurement: °C
    state_class: measurement
    lambda: |-
      const float T = id(${device_id}_temp).state;
      const float Td = id(${device_id}_dewp).state;
      const float e = 6.11 * exp(5417.7530 * ((1 / 273.16) - (1 / (Td + 273.15)))); 
      const float Humidex = T + 0.5555 * (e - 10);
      return Humidex;
    accuracy_decimals: 2 
    update_interval: 10s

  - platform: template
    name: "Punto rocio"
    id: ${device_id}_dewp
    unit_of_measurement: "°C"
    state_class: measurement
    lambda: |- 
      const float H = id(${device_id}_humi).state;
      const float T = id(${device_id}_temp).state;
      const float b = 18.678;
      const float c = 257.14;
      const float d = 234.5;
      const float gamma = log(H / 100 * exp((b - T / d) * (T / (c + T))));
      const float Tdp = ((c * gamma / (b - gamma)));
      return Tdp;
    accuracy_decimals: 2 
    update_interval: 10s
    
  - platform: adc
    pin: ${pin_illum}
    name: "Illuminacion"
    id: ${device_id}_lum
    update_interval: 5s
    unit_of_measurement: V
    accuracy_decimals: 3
    # attenuation: 11db
    # filters:
    #   - lambda: |-
    #       return 500 /((10000.0 * (3.3 - x))/x);

  - platform: sun
    name: "Sol elevacion"
    id: ${device_id}_sun_elev
    type: elevation

  - platform: sun
    name: "sun azimut"
    id: ${device_id}_sun_azim
    type: azimuth
    
binary_sensor:
  - platform: status
    name: "Status"
    entity_category: "diagnostic"

switch:
  - platform: template
    id: ${device_id}_low_flow_error
    name: Low Flow error
    restore_mode: RESTORE_DEFAULT_OFF
    optimistic: true     
    turn_off_action: 
      then:
        - lambda: 
            id(alerta_persistente) = 0;
           
     
  - platform: template
    id: ${device_id}_solar_pump_auto
    name:  Solar pump auto
    entity_category: config
    restore_mode: RESTORE_DEFAULT_OFF
    optimistic: true        
     
  - platform: template
    id: ${device_id}_clean_filters_auto
    name: Clean filters auto
    entity_category: config
    restore_mode: RESTORE_DEFAULT_OFF
    optimistic: true        
     
  - platform: template
    name: "Clean filters"
    id: ${device_id}_clean_filters
    optimistic: true
    restore_mode: RESTORE_DEFAULT_OFF
    turn_on_action: 
      then:
        # - switch.turn_on: ${device_id}_paso_casa
        # - delay: 10s
        # - switch.turn_on: ${device_id}_grid
        # - delay: 20s
        - switch.turn_on: ${device_id}_paso_filtro
        - delay: 20s
        - switch.turn_off: ${device_id}_paso_filtro
        - delay: 20s
        - switch.turn_on: ${device_id}_paso_filtro
        - delay: 20s
        - switch.turn_off: ${device_id}_paso_filtro
        - delay: 20s
        - switch.turn_on: ${device_id}_paso_filtro
        - delay: 20s
        - switch.turn_off: ${device_id}_paso_filtro
        # - switch.turn_off: ${device_id}_grid
        # - switch.turn_off: ${device_id}_paso_casa
        - switch.turn_off: ${device_id}_clean_filters


    turn_off_action: 
      then:
        # - switch.turn_off: ${device_id}_paso_filtro
        # - switch.turn_off: ${device_id}_grid
        # - switch.turn_off: ${device_id}_paso_casa
        
  - platform: template
    name: "Pumps4irrig"
    id: ${device_id}_irrig
    optimistic: true
    restore_mode: RESTORE_DEFAULT_OFF
    turn_on_action: 
      then:
        - script.execute: ${device_id}_start_irrig

    turn_off_action: 
      then:
        - script.execute: ${device_id}_stop_irrig

    
  - platform: template
    name: "Pumps grid"
    id: ${device_id}_grid
    optimistic: true
    restore_mode: RESTORE_DEFAULT_OFF
    on_turn_on: 
      then:
        - script.execute: ${device_id}_start_grid

    on_turn_off: 
      then:
        - script.execute: ${device_id}_stop_grid

  - platform: template
    name: "Pumps solar"
    id: ${device_id}_solr
    optimistic: true
    restore_mode: RESTORE_DEFAULT_OFF
    on_turn_on: 
      then:
        - script.execute: ${device_id}_start_solr

    on_turn_off: 
      then:
        - script.execute: ${device_id}_stop_solr
    
  - platform: template
    name: "Paso Casa"
    id: ${device_id}_paso_casa
    optimistic: true
    restore_mode: RESTORE_DEFAULT_OFF
    turn_on_action: 
      then:
        - switch.turn_on: ${device_id}_relay3
    turn_off_action: 
      then:
        - switch.turn_off: ${device_id}_relay3

  - platform: template
    name: "Paso Filtro"
    id: ${device_id}_paso_filtro
    optimistic: true
    restore_mode: RESTORE_DEFAULT_OFF
    turn_on_action: 
      then:
        - switch.turn_on: ${device_id}_relay4

    turn_off_action: 
      then:
        - switch.turn_off: ${device_id}_relay4

# Physical switches / relay
  - platform: gpio
    name: "relay1"
    id: ${device_id}_relay1
    pin: ${pin_relay_1}
    restore_mode: RESTORE_DEFAULT_OFF
    #internal: true 
    
  - platform: gpio
    name: "relay2"
    id: ${device_id}_relay2
    pin: ${pin_relay_2}
    restore_mode: RESTORE_DEFAULT_OFF
    #internal: true 

  - platform: gpio
    name: "relay3"
    id: ${device_id}_relay3
    pin: ${pin_relay_3}
    restore_mode: RESTORE_DEFAULT_OFF
    #internal: true 

  - platform: gpio 
    name: "relay4"
    id: ${device_id}_relay4
    pin: ${pin_relay_4}
    restore_mode: RESTORE_DEFAULT_OFF
    #internal: true 

datetime:
  - platform: template
    name: Solar Pump progr start
    entity_category: config
    id: ${device_id}_Solar_pump_progr_start
    type: time
    optimistic: true
    restore_value: true

  - platform: template
    name: Solar Pump progr stop
    entity_category: config
    id: ${device_id}_Solar_pump_progr_stop
    type: time
    optimistic: true
    restore_value: true

  - platform: template
    name: Clean filters time
    entity_category: config
    id: ${device_id}_clean_filters_time
    type: time
    optimistic: true
    restore_value: true

#http://192.168.10.100/sensor/Solar%20Active%20Power
script:
  - id: ${device_id}_low_flow
    then: 
      - lambda: |-
          if (id(alerta_persistente) >= 2) {
            id(alerta_persistente) /= 2;
          }    

          if (id(alerta_persistente) <= 5){
            if ((id(${device_id}_solr).state 
                || id(${device_id}_grid).state ) 
                && id(${device_id}_water_flow).state <= 0
              ) {
              ESP_LOGD("PUMP", "Error State");
              id(${device_id}_low_flow_error).publish_state(true);
              id(alerta_persistente) *= 4;

            }else if ((id(${device_id}_solr).state 
                      || id(${device_id}_grid).state ) 
                      && id(${device_id}_water_flow).state > 0){
              id(${device_id}_low_flow_error).publish_state(false);
              ESP_LOGD("PUMP", "NO Error State");

              id(alerta_persistente) = 0;

            } else if (
                      ( ! id(${device_id}_solr).state 
                      && ! id(${device_id}_grid).state ) 
                      && id(${device_id}_water_flow).state <= 0
                      )
            {
              id(${device_id}_low_flow_error).publish_state(false);
            }
          }

  - id: ${device_id}_run_clean_filter
    then: 
      - lambda: |-
            id(${device_id}_clean_filters).turn_on();

  - id: ${device_id}_start_solr
    then: 
      - lambda: |-
          id(${device_id}_low_flow).stop();
          if ( id(${device_id}_temp).state > 0 ){
            
            if (( ! id(${device_id}_low_flow_error).state)
                && id(${device_id}_lum).state > 0.0 
                && (id(${device_id}_sun_azim).state > 271 || id(${device_id}_sun_azim).state < 89)
              ) 
            {
              id(${device_id}_relay2).turn_on();
              id(${device_id}_solr).publish_state(true);
            } else if (id(${device_id}_lum).state < 0.0
                        || id(${device_id}_sun_azim).state <= 271
                        || id(${device_id}_sun_azim).state >= 89){
              id(${device_id}_stop_solr).execute();
            }
          }else{
            id(${device_id}_stop_solr).execute();
          }
  - id: ${device_id}_stop_solr
    then: 
      - lambda: |-
            id(${device_id}_start_solr).stop();
            id(${device_id}_relay2).turn_off();
            id(${device_id}_solr).publish_state(false);

  - id: ${device_id}_start_grid
    then: 
      - lambda: |-
          if (id(${device_id}_temp).state > 0  
              && ( ! id(${device_id}_low_flow_error).state)
              ) {
            id(${device_id}_stop_solr).execute();
            id(${device_id}_grid).publish_state(true);
            id(${device_id}_relay1).turn_on();
          } else {
            id(${device_id}_grid).publish_state(false);
          }

  - id: ${device_id}_stop_grid
    then: 
      - lambda: |-
          id(${device_id}_start_grid).stop();
          id(${device_id}_relay1).turn_off();
          id(${device_id}_grid).publish_state(false);

  - id: ${device_id}_start_irrig
    then: 
      - lambda: |-
          if (id(${device_id}_temp).state > 0 
              && ( ! id(${device_id}_relay1).state ) 
          ) {
            id(${device_id}_stop_solr).execute();
            id(${device_id}_start_grid).execute();
            id(${device_id}_relay3).turn_on();
            id(${device_id}_paso_casa).publish_state(true);
          }

  - id: ${device_id}_stop_irrig
    then: 
      - lambda: |-
            id(${device_id}_paso_casa).publish_state(false);
            id(${device_id}_relay3).turn_off();
            id(${device_id}_stop_grid).execute();
            id(${device_id}_stop_solr).execute();

  - id: ${device_id}_script_pump
    then:
      - http_request.get:
          url: http://192.168.10.102/switch/Pumps
          capture_response: true
          on_response:
            then:
              - if:
                  condition:
                    - lambda: return response->status_code == 200;
                  then:
                    - lambda: |-
                        json::parse_json(body, [](JsonObject root) -> bool {
                              if(root["value"]){
                                ESP_LOGD("PUMP", "102 pump ON");
                                id(pump_irrig_1) = 1 ;
                                return true;
                              } else {
                                ESP_LOGD("PUMP", "102 pump OFF");
                                id(pump_irrig_1) = 0 ;
                                return false;
                              };
                        });
                        return;
                  else:
                    - logger.log:
                        format: "Error: Response status: %d, message %s"
                        args: [ 'response->status_code', 'body.c_str()' ]
                    - lambda: |-
                        ESP_LOGD("PUMP", "102 pump error");
                        id(pump_irrig_1) = 0 ;
      - delay: 250ms
      - http_request.get:
          url: http://192.168.10.104/switch/Pumps
          capture_response: true
          on_response:
            then:
              - if:
                  condition:
                    - lambda: return response->status_code == 200;
                  then:
                    - lambda: |-
                        ESP_LOGD("PUMP", "104");
                        json::parse_json(body, [](JsonObject root) -> bool {
                              if(root["value"]){
                                ESP_LOGD("PUMP", "104 pump ON");
                                id(pump_irrig_2) = 1 ;
                                return true;
                              } else {
                                ESP_LOGD("PUMP", "104 pump OFF");
                                id(pump_irrig_2) = 0 ;
                                return false;
                              };
                        });
                  else:
                    - logger.log:
                        format: "Error: Response status: %d, message %s"
                        args: [ 'response->status_code', 'body.c_str()' ]
                    - lambda: |-
                        ESP_LOGD("PUMP", "104 pump error");
                        id(pump_irrig_2) = 0 ;
      - delay: 250ms
      - if:
          condition:
            lambda: 'return (id(pump_irrig_1) + id(pump_irrig_2)) > 0;'
          then:
            if:
              condition:
                switch.is_off: ${device_id}_irrig
              then:
                switch.turn_on: ${device_id}_irrig
          else:
             if:
              condition:
                switch.is_on: ${device_id}_irrig
              then:
                switch.turn_off: ${device_id}_irrig  
      - script.execute: ${device_id}_run             

  - id: ${device_id}_run
    then: 
      - lambda: |-
          //ESP_LOGD("PUMP", "run script");
          int hour = id(${device_id}_sntp_time).now().hour;
          int minute = id(${device_id}_sntp_time).now().minute;
          int time = hour * 60 + minute;
          if (id(${device_id}_clean_filters_auto).state
              && hour == id(${device_id}_clean_filters_time).hour 
              && minute == id(${device_id}_clean_filters_time).minute){
            id(${device_id}_run_clean_filter).execute();

          } else if (! id(${device_id}_low_flow_error).state) {              
            if (id(${device_id}_irrig).state ) {
              ESP_LOGD("PUMP", "Pump status irrig on");
              id(${device_id}_start_irrig).execute();

            // if grid pump manualy enabeled
            } else if (id(${device_id}_grid).state) {
              ESP_LOGD("PUMP", "Pump status grid on");
              id(${device_id}_start_grid).execute();

            /* if solar pump automaticaly disabeled
            } else if ( id(${device_id}_solar_pump_auto).state
                            && ( time > ( id(${device_id}_Solar_pump_progr_stop).hour * 60 + id(${device_id}_Solar_pump_progr_stop).minute )))
                      ) 
            {
              ESP_LOGD("PUMP", "Pump solar automatically off");
              id(${device_id}_stop_solr).execute();
            */
            // if solar pump manualy enabeled
            } else if (id(${device_id}_solr).state) {
              ESP_LOGD("PUMP", "Pump solar manually on");
              id(${device_id}_start_solr).execute();

            // if solar pump automaticaly enabeled
            } else if ( id(${device_id}_solar_pump_auto).state
                       && time >= ( id(${device_id}_Solar_pump_progr_start).hour * 60 + id(${device_id}_Solar_pump_progr_start).minute )
                       && time <= ( id(${device_id}_Solar_pump_progr_stop).hour * 60 + id(${device_id}_Solar_pump_progr_stop).minute )
                      ) 
            {
              ESP_LOGD("PUMP", "Pump solar automatically on");
              id(${device_id}_start_solr).execute();

            // else stop all
            } else if ( !id(${device_id}_solar_pump_auto).state && id(${device_id}_solr).state) 
            {
              ESP_LOGD("PUMP", "Pump solar manually on");
               id(${device_id}_start_solr).execute();
            } else {
              ESP_LOGD("PUMP", "Pump stop all off on no case");
              id(${device_id}_stop_solr).execute();
              id(${device_id}_stop_grid).execute();
              id(${device_id}_paso_casa).publish_state(false);
            }
          } else {
              ESP_LOGD("PUMP", "Pump stop all off on low flow");
              id(${device_id}_stop_solr).execute();
              id(${device_id}_stop_grid).execute();
              id(${device_id}_paso_casa).publish_state(false);
          }