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
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);
}

