esphome 2025.4.2__py3-none-any.whl → 2025.5.0b3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- esphome/__main__.py +16 -14
- esphome/components/ac_dimmer/ac_dimmer.cpp +3 -2
- esphome/components/adc/__init__.py +51 -34
- esphome/components/airthings_wave_base/__init__.py +1 -1
- esphome/components/alarm_control_panel/__init__.py +37 -2
- esphome/components/am43/cover/__init__.py +4 -5
- esphome/components/analog_threshold/analog_threshold_binary_sensor.cpp +6 -4
- esphome/components/analog_threshold/analog_threshold_binary_sensor.h +4 -5
- esphome/components/analog_threshold/binary_sensor.py +10 -8
- esphome/components/anova/climate.py +4 -5
- esphome/components/api/__init__.py +25 -8
- esphome/components/api/api_connection.cpp +81 -13
- esphome/components/api/api_connection.h +13 -1
- esphome/components/api/api_frame_helper.cpp +232 -177
- esphome/components/api/api_frame_helper.h +61 -8
- esphome/components/api/api_noise_context.h +13 -4
- esphome/components/api/api_pb2.cpp +1422 -1
- esphome/components/api/api_pb2.h +255 -1
- esphome/components/api/api_pb2_service.cpp +162 -49
- esphome/components/api/api_pb2_service.h +90 -51
- esphome/components/api/api_pb2_size.h +361 -0
- esphome/components/api/api_server.cpp +110 -34
- esphome/components/api/api_server.h +8 -0
- esphome/components/api/proto.h +86 -17
- esphome/components/as7341/as7341.h +1 -1
- esphome/components/atm90e32/__init__.py +1 -0
- esphome/components/atm90e32/atm90e32.cpp +576 -199
- esphome/components/atm90e32/atm90e32.h +128 -31
- esphome/components/atm90e32/atm90e32_reg.h +4 -2
- esphome/components/atm90e32/button/__init__.py +62 -10
- esphome/components/atm90e32/button/atm90e32_button.cpp +63 -4
- esphome/components/atm90e32/button/atm90e32_button.h +36 -4
- esphome/components/atm90e32/number/__init__.py +130 -0
- esphome/components/atm90e32/number/atm90e32_number.h +16 -0
- esphome/components/atm90e32/sensor.py +21 -4
- esphome/components/atm90e32/text_sensor/__init__.py +48 -0
- esphome/components/audio/__init__.py +96 -49
- esphome/components/audio/audio.h +48 -0
- esphome/components/audio/audio_decoder.cpp +1 -1
- esphome/components/audio/audio_resampler.cpp +2 -0
- esphome/components/audio/audio_resampler.h +1 -0
- esphome/components/ballu/climate.py +2 -9
- esphome/components/bang_bang/climate.py +5 -6
- esphome/components/bedjet/bedjet_hub.cpp +1 -0
- esphome/components/bedjet/climate/__init__.py +3 -8
- esphome/components/bedjet/fan/__init__.py +2 -11
- esphome/components/binary/fan/__init__.py +13 -16
- esphome/components/binary_sensor/__init__.py +13 -10
- esphome/components/bl0906/constants.h +16 -16
- esphome/components/ble_client/text_sensor/__init__.py +3 -5
- esphome/components/bluetooth_proxy/bluetooth_connection.cpp +4 -6
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +136 -21
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +7 -0
- esphome/components/button/__init__.py +11 -8
- esphome/components/canbus/canbus.cpp +3 -0
- esphome/components/canbus/canbus.h +16 -0
- esphome/components/ccs811/sensor.py +9 -6
- esphome/components/climate/__init__.py +35 -2
- esphome/components/climate/climate_mode.h +1 -1
- esphome/components/climate/climate_traits.h +63 -57
- esphome/components/climate_ir/__init__.py +57 -17
- esphome/components/climate_ir_lg/climate.py +2 -5
- esphome/components/climate_ir_lg/climate_ir_lg.cpp +7 -7
- esphome/components/climate_ir_lg/climate_ir_lg.h +1 -1
- esphome/components/color/__init__.py +2 -0
- esphome/components/const/__init__.py +5 -0
- esphome/components/coolix/climate.py +2 -9
- esphome/components/copy/cover/__init__.py +10 -9
- esphome/components/copy/fan/__init__.py +11 -9
- esphome/components/copy/lock/__init__.py +11 -9
- esphome/components/copy/text/__init__.py +9 -6
- esphome/components/cover/__init__.py +37 -2
- esphome/components/cse7766/cse7766.cpp +2 -1
- esphome/components/cst226/binary_sensor/__init__.py +28 -0
- esphome/components/cst226/binary_sensor/cs226_button.h +22 -0
- esphome/components/cst226/binary_sensor/cstt6_button.cpp +19 -0
- esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +27 -5
- esphome/components/cst226/touchscreen/cst226_touchscreen.h +10 -10
- esphome/components/current_based/cover.py +37 -36
- esphome/components/current_based/current_based_cover.cpp +2 -1
- esphome/components/daikin/climate.py +2 -9
- esphome/components/daikin/daikin.cpp +15 -9
- esphome/components/daikin/daikin.h +5 -5
- esphome/components/daikin_arc/climate.py +2 -7
- esphome/components/daikin_brc/climate.py +3 -5
- esphome/components/dallas_temp/dallas_temp.cpp +17 -24
- esphome/components/dallas_temp/dallas_temp.h +0 -1
- esphome/components/daly_bms/daly_bms.cpp +2 -1
- esphome/components/debug/debug_component.cpp +6 -1
- esphome/components/debug/debug_component.h +6 -0
- esphome/components/debug/debug_esp32.cpp +109 -254
- esphome/components/debug/sensor.py +14 -0
- esphome/components/deep_sleep/deep_sleep_esp32.cpp +13 -1
- esphome/components/delonghi/climate.py +2 -9
- esphome/components/demo/__init__.py +18 -20
- esphome/components/dfrobot_sen0395/switch/__init__.py +21 -22
- esphome/components/dps310/sensor.py +6 -6
- esphome/components/ee895/sensor.py +9 -9
- esphome/components/emmeti/climate.py +2 -9
- esphome/components/endstop/cover.py +17 -16
- esphome/components/endstop/endstop_cover.cpp +2 -1
- esphome/components/ens160_base/__init__.py +12 -9
- esphome/components/esp32/__init__.py +60 -3
- esphome/components/esp32/core.cpp +11 -5
- esphome/components/esp32/gpio.cpp +86 -24
- esphome/components/esp32/gpio.py +15 -16
- esphome/components/esp32/gpio_esp32.py +1 -2
- esphome/components/esp32/gpio_esp32_c2.py +1 -1
- esphome/components/esp32/gpio_esp32_c3.py +1 -1
- esphome/components/esp32/gpio_esp32_c6.py +1 -1
- esphome/components/esp32/gpio_esp32_h2.py +1 -1
- esphome/components/esp32_ble/ble.cpp +1 -0
- esphome/components/esp32_ble/ble.h +5 -3
- esphome/components/esp32_ble/ble_advertising.cpp +2 -1
- esphome/components/esp32_ble/ble_advertising.h +1 -0
- esphome/components/esp32_ble_server/__init__.py +3 -0
- esphome/components/esp32_ble_tracker/__init__.py +7 -1
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +192 -118
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +29 -3
- esphome/components/esp32_camera/esp32_camera.cpp +2 -1
- esphome/components/esp32_camera/esp32_camera.h +1 -1
- esphome/components/esp32_can/esp32_can.cpp +1 -1
- esphome/components/esp32_improv/esp32_improv_component.cpp +1 -1
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +1 -1
- esphome/components/esp32_rmt_led_strip/led_strip.h +7 -5
- esphome/components/esp32_rmt_led_strip/light.py +9 -1
- esphome/components/esp32_touch/esp32_touch.cpp +1 -1
- esphome/components/esp8266/gpio.cpp +69 -8
- esphome/components/ethernet/ethernet_component.cpp +1 -1
- esphome/components/event/__init__.py +13 -10
- esphome/components/factory_reset/switch/__init__.py +7 -21
- esphome/components/fan/__init__.py +52 -5
- esphome/components/fastled_base/__init__.py +1 -4
- esphome/components/fastled_base/fastled_light.cpp +1 -1
- esphome/components/feedback/cover.py +38 -33
- esphome/components/feedback/feedback_cover.cpp +2 -1
- esphome/components/fujitsu_general/climate.py +2 -9
- esphome/components/gcja5/gcja5.cpp +2 -1
- esphome/components/gpio/one_wire/gpio_one_wire.cpp +45 -43
- esphome/components/gpio/one_wire/gpio_one_wire.h +2 -1
- esphome/components/gpio_expander/cached_gpio.h +22 -7
- esphome/components/gps/__init__.py +47 -17
- esphome/components/gps/gps.cpp +42 -23
- esphome/components/gps/gps.h +17 -13
- esphome/components/graph/__init__.py +1 -2
- esphome/components/gree/climate.py +4 -6
- esphome/components/gree/gree.cpp +16 -2
- esphome/components/gree/gree.h +2 -2
- esphome/components/growatt_solar/growatt_solar.cpp +2 -1
- esphome/components/haier/climate.py +37 -34
- esphome/components/hbridge/fan/__init__.py +19 -17
- esphome/components/he60r/cover.py +4 -5
- esphome/components/heatpumpir/climate.py +3 -6
- esphome/components/hitachi_ac344/climate.py +2 -9
- esphome/components/hitachi_ac424/climate.py +2 -9
- esphome/components/hm3301/hm3301.h +1 -1
- esphome/components/hte501/sensor.py +6 -6
- esphome/components/http_request/__init__.py +39 -6
- esphome/components/http_request/http_request.cpp +20 -0
- esphome/components/http_request/http_request.h +57 -15
- esphome/components/http_request/http_request_arduino.cpp +22 -6
- esphome/components/http_request/http_request_arduino.h +4 -3
- esphome/components/http_request/http_request_host.cpp +141 -0
- esphome/components/http_request/http_request_host.h +37 -0
- esphome/components/http_request/http_request_idf.cpp +35 -3
- esphome/components/http_request/http_request_idf.h +10 -3
- esphome/components/http_request/httplib.h +9691 -0
- esphome/components/http_request/update/__init__.py +11 -8
- esphome/components/hyt271/sensor.py +6 -6
- esphome/components/i2c/i2c.h +4 -0
- esphome/components/i2c/i2c_bus_esp_idf.cpp +1 -1
- esphome/components/i2s_audio/__init__.py +131 -22
- esphome/components/i2s_audio/i2s_audio.h +44 -4
- esphome/components/i2s_audio/media_player/__init__.py +19 -9
- esphome/components/i2s_audio/microphone/__init__.py +63 -5
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +351 -61
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +40 -6
- esphome/components/i2s_audio/speaker/__init__.py +31 -5
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +155 -19
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +17 -4
- esphome/components/ili9xxx/ili9xxx_init.h +1 -1
- esphome/components/image/__init__.py +37 -17
- esphome/components/image/image.cpp +25 -8
- esphome/components/internal_temperature/internal_temperature.cpp +6 -4
- esphome/components/key_collector/__init__.py +35 -0
- esphome/components/key_collector/key_collector.cpp +8 -0
- esphome/components/key_collector/key_collector.h +10 -0
- esphome/components/kuntze/kuntze.cpp +2 -1
- esphome/components/ld2410/ld2410.h +1 -1
- esphome/components/ld2450/ld2450.h +1 -1
- esphome/components/light/__init__.py +57 -0
- esphome/components/lock/__init__.py +51 -4
- esphome/components/lock/automation.h +2 -13
- esphome/components/logger/__init__.py +22 -0
- esphome/components/logger/logger.cpp +154 -103
- esphome/components/logger/logger.h +211 -36
- esphome/components/logger/task_log_buffer.cpp +138 -0
- esphome/components/logger/task_log_buffer.h +69 -0
- esphome/components/lvgl/__init__.py +13 -5
- esphome/components/lvgl/automation.py +50 -1
- esphome/components/lvgl/defines.py +0 -1
- esphome/components/lvgl/lvgl_esphome.cpp +5 -1
- esphome/components/lvgl/text/__init__.py +1 -2
- esphome/components/mapping/__init__.py +134 -0
- esphome/components/matrix_keypad/matrix_keypad.cpp +2 -1
- esphome/components/max7219digit/max7219digit.cpp +28 -27
- esphome/components/mdns/__init__.py +11 -5
- esphome/components/mdns/mdns_component.cpp +11 -5
- esphome/components/mdns/mdns_component.h +3 -2
- esphome/components/mdns/mdns_esp32.cpp +4 -3
- esphome/components/mdns/mdns_esp8266.cpp +4 -2
- esphome/components/mdns/mdns_libretiny.cpp +4 -2
- esphome/components/mdns/mdns_rp2040.cpp +4 -2
- esphome/components/media_player/__init__.py +33 -1
- esphome/components/mhz19/sensor.py +11 -7
- esphome/components/micro_wake_word/__init__.py +99 -31
- esphome/components/micro_wake_word/automation.h +54 -0
- esphome/components/micro_wake_word/micro_wake_word.cpp +331 -319
- esphome/components/micro_wake_word/micro_wake_word.h +58 -105
- esphome/components/micro_wake_word/preprocessor_settings.h +19 -2
- esphome/components/micro_wake_word/streaming_model.cpp +158 -41
- esphome/components/micro_wake_word/streaming_model.h +85 -13
- esphome/components/microphone/__init__.py +139 -9
- esphome/components/microphone/automation.h +14 -2
- esphome/components/microphone/microphone.cpp +21 -0
- esphome/components/microphone/microphone.h +14 -5
- esphome/components/microphone/microphone_source.cpp +95 -0
- esphome/components/microphone/microphone_source.h +80 -0
- esphome/components/mics_4514/sensor.py +25 -14
- esphome/components/midea/climate.py +3 -4
- esphome/components/midea_ir/climate.py +3 -5
- esphome/components/mipi_spi/__init__.py +15 -0
- esphome/components/mipi_spi/display.py +474 -0
- esphome/components/mipi_spi/mipi_spi.cpp +481 -0
- esphome/components/mipi_spi/mipi_spi.h +171 -0
- esphome/components/mipi_spi/models/__init__.py +65 -0
- esphome/components/mipi_spi/models/amoled.py +72 -0
- esphome/components/mipi_spi/models/commands.py +82 -0
- esphome/components/mipi_spi/models/cyd.py +10 -0
- esphome/components/mipi_spi/models/ili.py +749 -0
- esphome/components/mipi_spi/models/jc.py +260 -0
- esphome/components/mipi_spi/models/lanbon.py +15 -0
- esphome/components/mipi_spi/models/lilygo.py +60 -0
- esphome/components/mipi_spi/models/waveshare.py +139 -0
- esphome/components/mitsubishi/climate.py +2 -5
- esphome/components/mitsubishi/mitsubishi.cpp +9 -9
- esphome/components/mixer/speaker/mixer_speaker.cpp +12 -22
- esphome/components/mixer/speaker/mixer_speaker.h +1 -3
- esphome/components/mlx90393/sensor.py +5 -0
- esphome/components/mlx90393/sensor_mlx90393.cpp +195 -13
- esphome/components/mlx90393/sensor_mlx90393.h +21 -4
- esphome/components/modbus/modbus.cpp +2 -1
- esphome/components/mqtt/__init__.py +1 -1
- esphome/components/mqtt/mqtt_client.cpp +6 -2
- esphome/components/mqtt/mqtt_const.h +4 -0
- esphome/components/mqtt/mqtt_fan.cpp +39 -0
- esphome/components/mqtt/mqtt_fan.h +2 -0
- esphome/components/ms5611/sensor.py +6 -6
- esphome/components/ms8607/sensor.py +3 -3
- esphome/components/network/__init__.py +1 -1
- esphome/components/nextion/base_component.py +17 -16
- esphome/components/nextion/display.py +11 -2
- esphome/components/nextion/nextion.cpp +39 -1
- esphome/components/nextion/nextion.h +50 -0
- esphome/components/noblex/climate.py +2 -9
- esphome/components/number/__init__.py +12 -9
- esphome/components/one_wire/one_wire_bus.cpp +14 -10
- esphome/components/one_wire/one_wire_bus.h +14 -8
- esphome/components/online_image/bmp_image.cpp +48 -11
- esphome/components/online_image/bmp_image.h +2 -0
- esphome/components/opentherm/binary_sensor/__init__.py +2 -4
- esphome/components/opentherm/number/__init__.py +11 -20
- esphome/components/opentherm/sensor/__init__.py +3 -3
- esphome/components/opentherm/switch/__init__.py +3 -5
- esphome/components/output/lock/__init__.py +11 -9
- esphome/components/packages/__init__.py +33 -31
- esphome/components/packet_transport/__init__.py +201 -0
- esphome/components/packet_transport/binary_sensor.py +19 -0
- esphome/components/packet_transport/packet_transport.cpp +534 -0
- esphome/components/packet_transport/packet_transport.h +154 -0
- esphome/components/packet_transport/sensor.py +19 -0
- esphome/components/pca9685/pca9685_output.cpp +2 -1
- esphome/components/pid/climate.py +2 -4
- esphome/components/pm2005/__init__.py +1 -0
- esphome/components/pm2005/pm2005.cpp +123 -0
- esphome/components/pm2005/pm2005.h +46 -0
- esphome/components/pm2005/sensor.py +86 -0
- esphome/components/pmsa003i/pmsa003i.cpp +43 -16
- esphome/components/pmsa003i/pmsa003i.h +25 -25
- esphome/components/pmsx003/pmsx003.cpp +195 -230
- esphome/components/pmsx003/pmsx003.h +51 -33
- esphome/components/pmsx003/sensor.py +21 -11
- esphome/components/pn7150/pn7150.h +2 -2
- esphome/components/pn7160/pn7160.h +2 -2
- esphome/components/prometheus/prometheus_handler.cpp +174 -0
- esphome/components/prometheus/prometheus_handler.h +17 -0
- esphome/components/psram/__init__.py +7 -5
- esphome/components/pulse_meter/pulse_meter_sensor.cpp +32 -12
- esphome/components/pulse_meter/pulse_meter_sensor.h +5 -5
- esphome/components/pzem004t/pzem004t.cpp +2 -1
- esphome/components/qspi_dbi/__init__.py +0 -1
- esphome/components/qspi_dbi/display.py +2 -1
- esphome/components/qspi_dbi/models.py +1 -2
- esphome/components/remote_base/__init__.py +91 -0
- esphome/components/remote_base/beo4_protocol.cpp +153 -0
- esphome/components/remote_base/beo4_protocol.h +43 -0
- esphome/components/remote_base/gobox_protocol.cpp +131 -0
- esphome/components/remote_base/gobox_protocol.h +54 -0
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +16 -9
- esphome/components/resampler/speaker/resampler_speaker.cpp +12 -10
- esphome/components/resampler/speaker/resampler_speaker.h +1 -1
- esphome/components/rf_bridge/rf_bridge.cpp +2 -1
- esphome/components/scd30/sensor.py +2 -3
- esphome/components/scd4x/sensor.py +4 -5
- esphome/components/sdp3x/sensor.py +2 -1
- esphome/components/sds011/sds011.cpp +2 -1
- esphome/components/select/__init__.py +19 -20
- esphome/components/sen5x/sen5x.cpp +55 -36
- esphome/components/sen5x/sensor.py +1 -1
- esphome/components/senseair/sensor.py +3 -3
- esphome/components/sensor/__init__.py +158 -14
- esphome/components/sensor/filter.cpp +23 -0
- esphome/components/sensor/filter.h +22 -0
- esphome/components/sgp30/sensor.py +14 -16
- esphome/components/sgp4x/sensor.py +1 -1
- esphome/components/sht4x/sht4x.cpp +43 -22
- esphome/components/sht4x/sht4x.h +1 -1
- esphome/components/shtcx/sensor.py +6 -6
- esphome/components/slow_pwm/slow_pwm_output.cpp +2 -1
- esphome/components/sml/text_sensor/__init__.py +4 -6
- esphome/components/sound_level/__init__.py +0 -0
- esphome/components/sound_level/sensor.py +97 -0
- esphome/components/sound_level/sound_level.cpp +194 -0
- esphome/components/sound_level/sound_level.h +73 -0
- esphome/components/speaker/media_player/__init__.py +4 -8
- esphome/components/speaker/media_player/speaker_media_player.cpp +0 -18
- esphome/components/speaker/media_player/speaker_media_player.h +0 -11
- esphome/components/speaker/speaker.h +4 -7
- esphome/components/speed/fan/__init__.py +17 -16
- esphome/components/spi/spi.h +11 -1
- esphome/components/sprinkler/__init__.py +18 -19
- esphome/components/sprinkler/sprinkler.cpp +6 -5
- esphome/components/switch/__init__.py +32 -42
- esphome/components/syslog/__init__.py +41 -0
- esphome/components/syslog/esphome_syslog.cpp +49 -0
- esphome/components/syslog/esphome_syslog.h +27 -0
- esphome/components/t6615/sensor.py +3 -3
- esphome/components/t6615/t6615.cpp +2 -1
- esphome/components/tca9555/tca9555.cpp +11 -6
- esphome/components/tcl112/climate.py +2 -9
- esphome/components/template/alarm_control_panel/__init__.py +7 -6
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +21 -17
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +2 -1
- esphome/components/template/cover/__init__.py +27 -21
- esphome/components/template/fan/__init__.py +14 -12
- esphome/components/template/lock/__init__.py +20 -25
- esphome/components/template/lock/automation.h +18 -0
- esphome/components/template/text/__init__.py +4 -3
- esphome/components/template/valve/__init__.py +32 -21
- esphome/components/template/valve/automation.h +24 -0
- esphome/components/text/__init__.py +32 -1
- esphome/components/text_sensor/__init__.py +24 -29
- esphome/components/thermostat/climate.py +5 -5
- esphome/components/time_based/cover.py +17 -16
- esphome/components/time_based/time_based_cover.cpp +2 -1
- esphome/components/tm1638/switch/__init__.py +10 -7
- esphome/components/tormatic/cover.py +4 -5
- esphome/components/toshiba/climate.py +3 -5
- esphome/components/touchscreen/touchscreen.cpp +3 -1
- esphome/components/tuya/climate/__init__.py +5 -6
- esphome/components/tuya/cover/__init__.py +6 -11
- esphome/components/tuya/select/__init__.py +15 -5
- esphome/components/tuya/select/tuya_select.cpp +6 -1
- esphome/components/tuya/select/tuya_select.h +5 -1
- esphome/components/uart/packet_transport/__init__.py +20 -0
- esphome/components/uart/packet_transport/uart_transport.cpp +88 -0
- esphome/components/uart/packet_transport/uart_transport.h +41 -0
- esphome/components/uart/switch/uart_switch.cpp +2 -1
- esphome/components/udp/__init__.py +126 -128
- esphome/components/udp/automation.h +40 -0
- esphome/components/udp/binary_sensor.py +3 -25
- esphome/components/udp/packet_transport/__init__.py +29 -0
- esphome/components/udp/packet_transport/udp_transport.cpp +36 -0
- esphome/components/udp/packet_transport/udp_transport.h +28 -0
- esphome/components/udp/sensor.py +3 -25
- esphome/components/udp/udp_component.cpp +26 -470
- esphome/components/udp/udp_component.h +21 -128
- esphome/components/update/__init__.py +31 -1
- esphome/components/uponor_smatrix/climate/__init__.py +4 -9
- esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +2 -1
- esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
- esphome/components/uptime/text_sensor/__init__.py +47 -7
- esphome/components/uptime/text_sensor/uptime_text_sensor.cpp +12 -7
- esphome/components/uptime/text_sensor/uptime_text_sensor.h +19 -0
- esphome/components/valve/__init__.py +34 -3
- esphome/components/valve/automation.h +1 -19
- esphome/components/vl53l0x/sensor.py +11 -0
- esphome/components/vl53l0x/vl53l0x_sensor.cpp +5 -1
- esphome/components/vl53l0x/vl53l0x_sensor.h +2 -1
- esphome/components/voice_assistant/__init__.py +36 -10
- esphome/components/voice_assistant/voice_assistant.cpp +170 -144
- esphome/components/voice_assistant/voice_assistant.h +26 -25
- esphome/components/waveshare_epaper/display.py +6 -0
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +439 -37
- esphome/components/waveshare_epaper/waveshare_epaper.h +60 -11
- esphome/components/whirlpool/climate.py +3 -5
- esphome/components/whynter/climate.py +3 -5
- esphome/components/xpt2046/touchscreen/xpt2046.cpp +1 -1
- esphome/components/yashima/climate.py +6 -6
- esphome/components/zhlt01/climate.py +2 -7
- esphome/config.py +13 -13
- esphome/config_validation.py +38 -58
- esphome/const.py +15 -1
- esphome/core/__init__.py +2 -0
- esphome/core/application.cpp +23 -10
- esphome/core/application.h +9 -1
- esphome/core/automation.h +4 -3
- esphome/core/component.cpp +28 -7
- esphome/core/component.h +10 -1
- esphome/core/defines.h +23 -17
- esphome/core/macros.h +4 -0
- esphome/core/scheduler.cpp +7 -1
- esphome/cpp_generator.py +6 -2
- esphome/dashboard/web_server.py +3 -3
- esphome/helpers.py +39 -0
- esphome/loader.py +4 -0
- esphome/log.py +15 -19
- esphome/mqtt.py +23 -10
- esphome/platformio_api.py +1 -1
- esphome/schema_extractors.py +0 -1
- esphome/voluptuous_schema.py +3 -1
- esphome/vscode.py +15 -0
- esphome/wizard.py +47 -37
- esphome/zeroconf.py +7 -3
- {esphome-2025.4.2.dist-info → esphome-2025.5.0b3.dist-info}/METADATA +10 -11
- {esphome-2025.4.2.dist-info → esphome-2025.5.0b3.dist-info}/RECORD +440 -380
- {esphome-2025.4.2.dist-info → esphome-2025.5.0b3.dist-info}/WHEEL +1 -1
- {esphome-2025.4.2.dist-info → esphome-2025.5.0b3.dist-info}/entry_points.txt +0 -0
- {esphome-2025.4.2.dist-info → esphome-2025.5.0b3.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.4.2.dist-info → esphome-2025.5.0b3.dist-info}/top_level.txt +0 -0
@@ -1,25 +1,18 @@
|
|
1
1
|
#include "debug_component.h"
|
2
|
+
|
2
3
|
#ifdef USE_ESP32
|
4
|
+
#include "esphome/core/application.h"
|
3
5
|
#include "esphome/core/log.h"
|
6
|
+
#include "esphome/core/hal.h"
|
7
|
+
#include <esp_sleep.h>
|
4
8
|
|
5
9
|
#include <esp_heap_caps.h>
|
6
10
|
#include <esp_system.h>
|
7
11
|
#include <esp_chip_info.h>
|
8
12
|
#include <esp_partition.h>
|
9
13
|
|
10
|
-
#
|
11
|
-
|
12
|
-
#elif defined(USE_ESP32_VARIANT_ESP32C3)
|
13
|
-
#include <esp32c3/rom/rtc.h>
|
14
|
-
#elif defined(USE_ESP32_VARIANT_ESP32C6)
|
15
|
-
#include <esp32c6/rom/rtc.h>
|
16
|
-
#elif defined(USE_ESP32_VARIANT_ESP32S2)
|
17
|
-
#include <esp32s2/rom/rtc.h>
|
18
|
-
#elif defined(USE_ESP32_VARIANT_ESP32S3)
|
19
|
-
#include <esp32s3/rom/rtc.h>
|
20
|
-
#elif defined(USE_ESP32_VARIANT_ESP32H2)
|
21
|
-
#include <esp32h2/rom/rtc.h>
|
22
|
-
#endif
|
14
|
+
#include <map>
|
15
|
+
|
23
16
|
#ifdef USE_ARDUINO
|
24
17
|
#include <Esp.h>
|
25
18
|
#endif
|
@@ -29,6 +22,90 @@ namespace debug {
|
|
29
22
|
|
30
23
|
static const char *const TAG = "debug";
|
31
24
|
|
25
|
+
// index by values returned by esp_reset_reason
|
26
|
+
|
27
|
+
static const char *const RESET_REASONS[] = {
|
28
|
+
"unknown source",
|
29
|
+
"power-on event",
|
30
|
+
"external pin",
|
31
|
+
"software via esp_restart",
|
32
|
+
"exception/panic",
|
33
|
+
"interrupt watchdog",
|
34
|
+
"task watchdog",
|
35
|
+
"other watchdogs",
|
36
|
+
"exiting deep sleep mode",
|
37
|
+
"brownout",
|
38
|
+
"SDIO",
|
39
|
+
"USB peripheral",
|
40
|
+
"JTAG",
|
41
|
+
"efuse error",
|
42
|
+
"power glitch detected",
|
43
|
+
"CPU lock up",
|
44
|
+
};
|
45
|
+
|
46
|
+
static const char *const REBOOT_KEY = "reboot_source";
|
47
|
+
static const size_t REBOOT_MAX_LEN = 24;
|
48
|
+
|
49
|
+
// on shutdown, store the source of the reboot request
|
50
|
+
void DebugComponent::on_shutdown() {
|
51
|
+
auto *component = App.get_current_component();
|
52
|
+
char buffer[REBOOT_MAX_LEN]{};
|
53
|
+
auto pref = global_preferences->make_preference(REBOOT_MAX_LEN, fnv1_hash(REBOOT_KEY + App.get_name()));
|
54
|
+
if (component != nullptr) {
|
55
|
+
strncpy(buffer, component->get_component_source(), REBOOT_MAX_LEN - 1);
|
56
|
+
}
|
57
|
+
ESP_LOGD(TAG, "Storing reboot source: %s", buffer);
|
58
|
+
pref.save(&buffer);
|
59
|
+
global_preferences->sync();
|
60
|
+
}
|
61
|
+
|
62
|
+
std::string DebugComponent::get_reset_reason_() {
|
63
|
+
std::string reset_reason;
|
64
|
+
unsigned reason = esp_reset_reason();
|
65
|
+
if (reason < sizeof(RESET_REASONS) / sizeof(RESET_REASONS[0])) {
|
66
|
+
reset_reason = RESET_REASONS[reason];
|
67
|
+
if (reason == ESP_RST_SW) {
|
68
|
+
auto pref = global_preferences->make_preference(REBOOT_MAX_LEN, fnv1_hash(REBOOT_KEY + App.get_name()));
|
69
|
+
char buffer[REBOOT_MAX_LEN]{};
|
70
|
+
if (pref.load(&buffer)) {
|
71
|
+
reset_reason = "Reboot request from " + std::string(buffer);
|
72
|
+
}
|
73
|
+
}
|
74
|
+
} else {
|
75
|
+
reset_reason = "unknown source";
|
76
|
+
}
|
77
|
+
ESP_LOGD(TAG, "Reset Reason: %s", reset_reason.c_str());
|
78
|
+
return reset_reason;
|
79
|
+
}
|
80
|
+
|
81
|
+
static const char *const WAKEUP_CAUSES[] = {
|
82
|
+
"undefined",
|
83
|
+
"undefined",
|
84
|
+
"external signal using RTC_IO",
|
85
|
+
"external signal using RTC_CNTL",
|
86
|
+
"timer",
|
87
|
+
"touchpad",
|
88
|
+
"ULP program",
|
89
|
+
"GPIO",
|
90
|
+
"UART",
|
91
|
+
"WIFI",
|
92
|
+
"COCPU int",
|
93
|
+
"COCPU crash",
|
94
|
+
"BT",
|
95
|
+
};
|
96
|
+
|
97
|
+
std::string DebugComponent::get_wakeup_cause_() {
|
98
|
+
const char *wake_reason;
|
99
|
+
unsigned reason = esp_sleep_get_wakeup_cause();
|
100
|
+
if (reason < sizeof(WAKEUP_CAUSES) / sizeof(WAKEUP_CAUSES[0])) {
|
101
|
+
wake_reason = WAKEUP_CAUSES[reason];
|
102
|
+
} else {
|
103
|
+
wake_reason = "unknown source";
|
104
|
+
}
|
105
|
+
ESP_LOGD(TAG, "Wakeup Reason: %s", wake_reason);
|
106
|
+
return wake_reason;
|
107
|
+
}
|
108
|
+
|
32
109
|
void DebugComponent::log_partition_info_() {
|
33
110
|
ESP_LOGCONFIG(TAG, "Partition table:");
|
34
111
|
ESP_LOGCONFIG(TAG, " %-12s %-4s %-8s %-10s %-10s", "Name", "Type", "Subtype", "Address", "Size");
|
@@ -42,171 +119,16 @@ void DebugComponent::log_partition_info_() {
|
|
42
119
|
esp_partition_iterator_release(it);
|
43
120
|
}
|
44
121
|
|
45
|
-
std::string DebugComponent::get_reset_reason_() {
|
46
|
-
std::string reset_reason;
|
47
|
-
switch (esp_reset_reason()) {
|
48
|
-
case ESP_RST_POWERON:
|
49
|
-
reset_reason = "Reset due to power-on event";
|
50
|
-
break;
|
51
|
-
case ESP_RST_EXT:
|
52
|
-
reset_reason = "Reset by external pin";
|
53
|
-
break;
|
54
|
-
case ESP_RST_SW:
|
55
|
-
reset_reason = "Software reset via esp_restart";
|
56
|
-
break;
|
57
|
-
case ESP_RST_PANIC:
|
58
|
-
reset_reason = "Software reset due to exception/panic";
|
59
|
-
break;
|
60
|
-
case ESP_RST_INT_WDT:
|
61
|
-
reset_reason = "Reset (software or hardware) due to interrupt watchdog";
|
62
|
-
break;
|
63
|
-
case ESP_RST_TASK_WDT:
|
64
|
-
reset_reason = "Reset due to task watchdog";
|
65
|
-
break;
|
66
|
-
case ESP_RST_WDT:
|
67
|
-
reset_reason = "Reset due to other watchdogs";
|
68
|
-
break;
|
69
|
-
case ESP_RST_DEEPSLEEP:
|
70
|
-
reset_reason = "Reset after exiting deep sleep mode";
|
71
|
-
break;
|
72
|
-
case ESP_RST_BROWNOUT:
|
73
|
-
reset_reason = "Brownout reset (software or hardware)";
|
74
|
-
break;
|
75
|
-
case ESP_RST_SDIO:
|
76
|
-
reset_reason = "Reset over SDIO";
|
77
|
-
break;
|
78
|
-
#ifdef USE_ESP32_VARIANT_ESP32
|
79
|
-
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 1, 4))
|
80
|
-
case ESP_RST_USB:
|
81
|
-
reset_reason = "Reset by USB peripheral";
|
82
|
-
break;
|
83
|
-
case ESP_RST_JTAG:
|
84
|
-
reset_reason = "Reset by JTAG";
|
85
|
-
break;
|
86
|
-
case ESP_RST_EFUSE:
|
87
|
-
reset_reason = "Reset due to efuse error";
|
88
|
-
break;
|
89
|
-
case ESP_RST_PWR_GLITCH:
|
90
|
-
reset_reason = "Reset due to power glitch detected";
|
91
|
-
break;
|
92
|
-
case ESP_RST_CPU_LOCKUP:
|
93
|
-
reset_reason = "Reset due to CPU lock up (double exception)";
|
94
|
-
break;
|
95
|
-
#endif // ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 1, 4)
|
96
|
-
#endif // USE_ESP32_VARIANT_ESP32
|
97
|
-
default: // Includes ESP_RST_UNKNOWN
|
98
|
-
switch (rtc_get_reset_reason(0)) {
|
99
|
-
case POWERON_RESET:
|
100
|
-
reset_reason = "Power On Reset";
|
101
|
-
break;
|
102
|
-
#if defined(USE_ESP32_VARIANT_ESP32)
|
103
|
-
case SW_RESET:
|
104
|
-
#elif defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || \
|
105
|
-
defined(USE_ESP32_VARIANT_ESP32S3) || defined(USE_ESP32_VARIANT_ESP32C6)
|
106
|
-
case RTC_SW_SYS_RESET:
|
107
|
-
#endif
|
108
|
-
reset_reason = "Software Reset Digital Core";
|
109
|
-
break;
|
110
|
-
#if defined(USE_ESP32_VARIANT_ESP32)
|
111
|
-
case OWDT_RESET:
|
112
|
-
reset_reason = "Watch Dog Reset Digital Core";
|
113
|
-
break;
|
114
|
-
#endif
|
115
|
-
case DEEPSLEEP_RESET:
|
116
|
-
reset_reason = "Deep Sleep Reset Digital Core";
|
117
|
-
break;
|
118
|
-
#if defined(USE_ESP32_VARIANT_ESP32)
|
119
|
-
case SDIO_RESET:
|
120
|
-
reset_reason = "SLC Module Reset Digital Core";
|
121
|
-
break;
|
122
|
-
#endif
|
123
|
-
case TG0WDT_SYS_RESET:
|
124
|
-
reset_reason = "Timer Group 0 Watch Dog Reset Digital Core";
|
125
|
-
break;
|
126
|
-
case TG1WDT_SYS_RESET:
|
127
|
-
reset_reason = "Timer Group 1 Watch Dog Reset Digital Core";
|
128
|
-
break;
|
129
|
-
case RTCWDT_SYS_RESET:
|
130
|
-
reset_reason = "RTC Watch Dog Reset Digital Core";
|
131
|
-
break;
|
132
|
-
#if !defined(USE_ESP32_VARIANT_ESP32C6) && !defined(USE_ESP32_VARIANT_ESP32H2)
|
133
|
-
case INTRUSION_RESET:
|
134
|
-
reset_reason = "Intrusion Reset CPU";
|
135
|
-
break;
|
136
|
-
#endif
|
137
|
-
#if defined(USE_ESP32_VARIANT_ESP32)
|
138
|
-
case TGWDT_CPU_RESET:
|
139
|
-
reset_reason = "Timer Group Reset CPU";
|
140
|
-
break;
|
141
|
-
#elif defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || \
|
142
|
-
defined(USE_ESP32_VARIANT_ESP32S3) || defined(USE_ESP32_VARIANT_ESP32C6)
|
143
|
-
case TG0WDT_CPU_RESET:
|
144
|
-
reset_reason = "Timer Group 0 Reset CPU";
|
145
|
-
break;
|
146
|
-
#endif
|
147
|
-
#if defined(USE_ESP32_VARIANT_ESP32)
|
148
|
-
case SW_CPU_RESET:
|
149
|
-
#elif defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || \
|
150
|
-
defined(USE_ESP32_VARIANT_ESP32S3) || defined(USE_ESP32_VARIANT_ESP32C6)
|
151
|
-
case RTC_SW_CPU_RESET:
|
152
|
-
#endif
|
153
|
-
reset_reason = "Software Reset CPU";
|
154
|
-
break;
|
155
|
-
case RTCWDT_CPU_RESET:
|
156
|
-
reset_reason = "RTC Watch Dog Reset CPU";
|
157
|
-
break;
|
158
|
-
#if defined(USE_ESP32_VARIANT_ESP32)
|
159
|
-
case EXT_CPU_RESET:
|
160
|
-
reset_reason = "External CPU Reset";
|
161
|
-
break;
|
162
|
-
#endif
|
163
|
-
case RTCWDT_BROWN_OUT_RESET:
|
164
|
-
reset_reason = "Voltage Unstable Reset";
|
165
|
-
break;
|
166
|
-
case RTCWDT_RTC_RESET:
|
167
|
-
reset_reason = "RTC Watch Dog Reset Digital Core And RTC Module";
|
168
|
-
break;
|
169
|
-
#if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) || \
|
170
|
-
defined(USE_ESP32_VARIANT_ESP32C6)
|
171
|
-
case TG1WDT_CPU_RESET:
|
172
|
-
reset_reason = "Timer Group 1 Reset CPU";
|
173
|
-
break;
|
174
|
-
case SUPER_WDT_RESET:
|
175
|
-
reset_reason = "Super Watchdog Reset Digital Core And RTC Module";
|
176
|
-
break;
|
177
|
-
case EFUSE_RESET:
|
178
|
-
reset_reason = "eFuse Reset Digital Core";
|
179
|
-
break;
|
180
|
-
#endif
|
181
|
-
#if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3)
|
182
|
-
case GLITCH_RTC_RESET:
|
183
|
-
reset_reason = "Glitch Reset Digital Core And RTC Module";
|
184
|
-
break;
|
185
|
-
#endif
|
186
|
-
#if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S3) || defined(USE_ESP32_VARIANT_ESP32C6)
|
187
|
-
case USB_UART_CHIP_RESET:
|
188
|
-
reset_reason = "USB UART Reset Digital Core";
|
189
|
-
break;
|
190
|
-
case USB_JTAG_CHIP_RESET:
|
191
|
-
reset_reason = "USB JTAG Reset Digital Core";
|
192
|
-
break;
|
193
|
-
#endif
|
194
|
-
#if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S3)
|
195
|
-
case POWER_GLITCH_RESET:
|
196
|
-
reset_reason = "Power Glitch Reset Digital Core And RTC Module";
|
197
|
-
break;
|
198
|
-
#endif
|
199
|
-
default:
|
200
|
-
reset_reason = "Unknown Reset Reason";
|
201
|
-
}
|
202
|
-
break;
|
203
|
-
}
|
204
|
-
ESP_LOGD(TAG, "Reset Reason: %s", reset_reason.c_str());
|
205
|
-
return reset_reason;
|
206
|
-
}
|
207
|
-
|
208
122
|
uint32_t DebugComponent::get_free_heap_() { return heap_caps_get_free_size(MALLOC_CAP_INTERNAL); }
|
209
123
|
|
124
|
+
static const std::map<int, const char *> CHIP_FEATURES = {
|
125
|
+
{CHIP_FEATURE_BLE, "BLE"},
|
126
|
+
{CHIP_FEATURE_BT, "BT"},
|
127
|
+
{CHIP_FEATURE_EMB_FLASH, "EMB Flash"},
|
128
|
+
{CHIP_FEATURE_EMB_PSRAM, "EMB PSRAM"},
|
129
|
+
{CHIP_FEATURE_WIFI_BGN, "2.4GHz WiFi"},
|
130
|
+
};
|
131
|
+
|
210
132
|
void DebugComponent::get_device_info_(std::string &device_info) {
|
211
133
|
#if defined(USE_ARDUINO)
|
212
134
|
const char *flash_mode;
|
@@ -242,44 +164,16 @@ void DebugComponent::get_device_info_(std::string &device_info) {
|
|
242
164
|
|
243
165
|
esp_chip_info_t info;
|
244
166
|
esp_chip_info(&info);
|
245
|
-
const char *model;
|
246
|
-
#if defined(USE_ESP32_VARIANT_ESP32)
|
247
|
-
model = "ESP32";
|
248
|
-
#elif defined(USE_ESP32_VARIANT_ESP32C3)
|
249
|
-
model = "ESP32-C3";
|
250
|
-
#elif defined(USE_ESP32_VARIANT_ESP32C6)
|
251
|
-
model = "ESP32-C6";
|
252
|
-
#elif defined(USE_ESP32_VARIANT_ESP32S2)
|
253
|
-
model = "ESP32-S2";
|
254
|
-
#elif defined(USE_ESP32_VARIANT_ESP32S3)
|
255
|
-
model = "ESP32-S3";
|
256
|
-
#elif defined(USE_ESP32_VARIANT_ESP32H2)
|
257
|
-
model = "ESP32-H2";
|
258
|
-
#else
|
259
|
-
model = "UNKNOWN";
|
260
|
-
#endif
|
167
|
+
const char *model = ESPHOME_VARIANT;
|
261
168
|
std::string features;
|
262
|
-
|
263
|
-
features
|
264
|
-
|
169
|
+
for (auto feature : CHIP_FEATURES) {
|
170
|
+
if (info.features & feature.first) {
|
171
|
+
features += feature.second;
|
172
|
+
features += ", ";
|
173
|
+
info.features &= ~feature.first;
|
174
|
+
}
|
265
175
|
}
|
266
|
-
if (info.features
|
267
|
-
features += "WIFI_BGN,";
|
268
|
-
info.features &= ~CHIP_FEATURE_WIFI_BGN;
|
269
|
-
}
|
270
|
-
if (info.features & CHIP_FEATURE_BLE) {
|
271
|
-
features += "BLE,";
|
272
|
-
info.features &= ~CHIP_FEATURE_BLE;
|
273
|
-
}
|
274
|
-
if (info.features & CHIP_FEATURE_BT) {
|
275
|
-
features += "BT,";
|
276
|
-
info.features &= ~CHIP_FEATURE_BT;
|
277
|
-
}
|
278
|
-
if (info.features & CHIP_FEATURE_EMB_PSRAM) {
|
279
|
-
features += "EMB_PSRAM,";
|
280
|
-
info.features &= ~CHIP_FEATURE_EMB_PSRAM;
|
281
|
-
}
|
282
|
-
if (info.features)
|
176
|
+
if (info.features != 0)
|
283
177
|
features += "Other:" + format_hex(info.features);
|
284
178
|
ESP_LOGD(TAG, "Chip: Model=%s, Features=%s Cores=%u, Revision=%u", model, features.c_str(), info.cores,
|
285
179
|
info.revision);
|
@@ -289,6 +183,8 @@ void DebugComponent::get_device_info_(std::string &device_info) {
|
|
289
183
|
device_info += features;
|
290
184
|
device_info += " Cores:" + to_string(info.cores);
|
291
185
|
device_info += " Revision:" + to_string(info.revision);
|
186
|
+
device_info += str_sprintf("|CPU Frequency: %" PRIu32 " MHz", arch_get_cpu_freq_hz() / 1000000);
|
187
|
+
ESP_LOGD(TAG, "CPU Frequency: %" PRIu32 " MHz", arch_get_cpu_freq_hz() / 1000000);
|
292
188
|
|
293
189
|
// Framework detection
|
294
190
|
device_info += "|Framework: ";
|
@@ -315,48 +211,7 @@ void DebugComponent::get_device_info_(std::string &device_info) {
|
|
315
211
|
device_info += "|Reset: ";
|
316
212
|
device_info += get_reset_reason_();
|
317
213
|
|
318
|
-
|
319
|
-
switch (rtc_get_wakeup_cause()) {
|
320
|
-
case NO_SLEEP:
|
321
|
-
wakeup_reason = "No Sleep";
|
322
|
-
break;
|
323
|
-
case EXT_EVENT0_TRIG:
|
324
|
-
wakeup_reason = "External Event 0";
|
325
|
-
break;
|
326
|
-
case EXT_EVENT1_TRIG:
|
327
|
-
wakeup_reason = "External Event 1";
|
328
|
-
break;
|
329
|
-
case GPIO_TRIG:
|
330
|
-
wakeup_reason = "GPIO";
|
331
|
-
break;
|
332
|
-
case TIMER_EXPIRE:
|
333
|
-
wakeup_reason = "Wakeup Timer";
|
334
|
-
break;
|
335
|
-
case SDIO_TRIG:
|
336
|
-
wakeup_reason = "SDIO";
|
337
|
-
break;
|
338
|
-
case MAC_TRIG:
|
339
|
-
wakeup_reason = "MAC";
|
340
|
-
break;
|
341
|
-
case UART0_TRIG:
|
342
|
-
wakeup_reason = "UART0";
|
343
|
-
break;
|
344
|
-
case UART1_TRIG:
|
345
|
-
wakeup_reason = "UART1";
|
346
|
-
break;
|
347
|
-
case TOUCH_TRIG:
|
348
|
-
wakeup_reason = "Touch";
|
349
|
-
break;
|
350
|
-
case SAR_TRIG:
|
351
|
-
wakeup_reason = "SAR";
|
352
|
-
break;
|
353
|
-
case BT_TRIG:
|
354
|
-
wakeup_reason = "BT";
|
355
|
-
break;
|
356
|
-
default:
|
357
|
-
wakeup_reason = "Unknown";
|
358
|
-
}
|
359
|
-
ESP_LOGD(TAG, "Wakeup Reason: %s", wakeup_reason);
|
214
|
+
std::string wakeup_reason = this->get_wakeup_cause_();
|
360
215
|
device_info += "|Wakeup: ";
|
361
216
|
device_info += wakeup_reason;
|
362
217
|
}
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import esphome.codegen as cg
|
2
2
|
from esphome.components import sensor
|
3
|
+
from esphome.components.esp32 import CONF_CPU_FREQUENCY
|
3
4
|
import esphome.config_validation as cv
|
4
5
|
from esphome.const import (
|
5
6
|
CONF_BLOCK,
|
@@ -10,6 +11,7 @@ from esphome.const import (
|
|
10
11
|
ICON_COUNTER,
|
11
12
|
ICON_TIMER,
|
12
13
|
UNIT_BYTES,
|
14
|
+
UNIT_HERTZ,
|
13
15
|
UNIT_MILLISECOND,
|
14
16
|
UNIT_PERCENT,
|
15
17
|
)
|
@@ -60,6 +62,14 @@ CONFIG_SCHEMA = {
|
|
60
62
|
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
|
61
63
|
),
|
62
64
|
),
|
65
|
+
cv.Optional(CONF_CPU_FREQUENCY): cv.All(
|
66
|
+
sensor.sensor_schema(
|
67
|
+
unit_of_measurement=UNIT_HERTZ,
|
68
|
+
icon="mdi:speedometer",
|
69
|
+
accuracy_decimals=0,
|
70
|
+
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
|
71
|
+
),
|
72
|
+
),
|
63
73
|
}
|
64
74
|
|
65
75
|
|
@@ -85,3 +95,7 @@ async def to_code(config):
|
|
85
95
|
if psram_conf := config.get(CONF_PSRAM):
|
86
96
|
sens = await sensor.new_sensor(psram_conf)
|
87
97
|
cg.add(debug_component.set_psram_sensor(sens))
|
98
|
+
|
99
|
+
if cpu_freq_conf := config.get(CONF_CPU_FREQUENCY):
|
100
|
+
sens = await sensor.new_sensor(cpu_freq_conf)
|
101
|
+
cg.add(debug_component.set_cpu_frequency_sensor(sens))
|
@@ -31,9 +31,12 @@ void DeepSleepComponent::set_wakeup_pin_mode(WakeupPinMode wakeup_pin_mode) {
|
|
31
31
|
#if !defined(USE_ESP32_VARIANT_ESP32C3) && !defined(USE_ESP32_VARIANT_ESP32C6)
|
32
32
|
void DeepSleepComponent::set_ext1_wakeup(Ext1Wakeup ext1_wakeup) { this->ext1_wakeup_ = ext1_wakeup; }
|
33
33
|
|
34
|
+
#if !defined(USE_ESP32_VARIANT_ESP32H2)
|
34
35
|
void DeepSleepComponent::set_touch_wakeup(bool touch_wakeup) { this->touch_wakeup_ = touch_wakeup; }
|
35
36
|
#endif
|
36
37
|
|
38
|
+
#endif
|
39
|
+
|
37
40
|
void DeepSleepComponent::set_run_duration(WakeupCauseToRunDuration wakeup_cause_to_run_duration) {
|
38
41
|
wakeup_cause_to_run_duration_ = wakeup_cause_to_run_duration;
|
39
42
|
}
|
@@ -65,7 +68,7 @@ bool DeepSleepComponent::prepare_to_sleep_() {
|
|
65
68
|
}
|
66
69
|
|
67
70
|
void DeepSleepComponent::deep_sleep_() {
|
68
|
-
#if !defined(USE_ESP32_VARIANT_ESP32C3) && !defined(USE_ESP32_VARIANT_ESP32C6)
|
71
|
+
#if !defined(USE_ESP32_VARIANT_ESP32C3) && !defined(USE_ESP32_VARIANT_ESP32C6) && !defined(USE_ESP32_VARIANT_ESP32H2)
|
69
72
|
if (this->sleep_duration_.has_value())
|
70
73
|
esp_sleep_enable_timer_wakeup(*this->sleep_duration_);
|
71
74
|
if (this->wakeup_pin_ != nullptr) {
|
@@ -84,6 +87,15 @@ void DeepSleepComponent::deep_sleep_() {
|
|
84
87
|
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
|
85
88
|
}
|
86
89
|
#endif
|
90
|
+
|
91
|
+
#if defined(USE_ESP32_VARIANT_ESP32H2)
|
92
|
+
if (this->sleep_duration_.has_value())
|
93
|
+
esp_sleep_enable_timer_wakeup(*this->sleep_duration_);
|
94
|
+
if (this->ext1_wakeup_.has_value()) {
|
95
|
+
esp_sleep_enable_ext1_wakeup(this->ext1_wakeup_->mask, this->ext1_wakeup_->wakeup_mode);
|
96
|
+
}
|
97
|
+
#endif
|
98
|
+
|
87
99
|
#if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32C6)
|
88
100
|
if (this->sleep_duration_.has_value())
|
89
101
|
esp_sleep_enable_timer_wakeup(*this->sleep_duration_);
|
@@ -1,20 +1,13 @@
|
|
1
1
|
import esphome.codegen as cg
|
2
2
|
from esphome.components import climate_ir
|
3
|
-
import esphome.config_validation as cv
|
4
|
-
from esphome.const import CONF_ID
|
5
3
|
|
6
4
|
AUTO_LOAD = ["climate_ir"]
|
7
5
|
|
8
6
|
delonghi_ns = cg.esphome_ns.namespace("delonghi")
|
9
7
|
DelonghiClimate = delonghi_ns.class_("DelonghiClimate", climate_ir.ClimateIR)
|
10
8
|
|
11
|
-
CONFIG_SCHEMA = climate_ir.
|
12
|
-
{
|
13
|
-
cv.GenerateID(): cv.declare_id(DelonghiClimate),
|
14
|
-
}
|
15
|
-
)
|
9
|
+
CONFIG_SCHEMA = climate_ir.climate_ir_with_receiver_schema(DelonghiClimate)
|
16
10
|
|
17
11
|
|
18
12
|
async def to_code(config):
|
19
|
-
|
20
|
-
await climate_ir.register_climate_ir(var, config)
|
13
|
+
await climate_ir.new_climate_ir(config)
|
@@ -17,7 +17,6 @@ from esphome.const import (
|
|
17
17
|
CONF_DEVICE_CLASS,
|
18
18
|
CONF_FORCE_UPDATE,
|
19
19
|
CONF_ICON,
|
20
|
-
CONF_ID,
|
21
20
|
CONF_INVERTED,
|
22
21
|
CONF_MAX_VALUE,
|
23
22
|
CONF_MIN_VALUE,
|
@@ -153,9 +152,10 @@ CONFIG_SCHEMA = cv.Schema(
|
|
153
152
|
},
|
154
153
|
],
|
155
154
|
): [
|
156
|
-
climate.
|
155
|
+
climate.climate_schema(DemoClimate)
|
156
|
+
.extend(cv.COMPONENT_SCHEMA)
|
157
|
+
.extend(
|
157
158
|
{
|
158
|
-
cv.GenerateID(): cv.declare_id(DemoClimate),
|
159
159
|
cv.Required(CONF_TYPE): cv.enum(CLIMATE_TYPES, int=True),
|
160
160
|
}
|
161
161
|
)
|
@@ -183,9 +183,10 @@ CONFIG_SCHEMA = cv.Schema(
|
|
183
183
|
},
|
184
184
|
],
|
185
185
|
): [
|
186
|
-
cover.
|
186
|
+
cover.cover_schema(DemoCover)
|
187
|
+
.extend(cv.COMPONENT_SCHEMA)
|
188
|
+
.extend(
|
187
189
|
{
|
188
|
-
cv.GenerateID(): cv.declare_id(DemoCover),
|
189
190
|
cv.Required(CONF_TYPE): cv.enum(COVER_TYPES, int=True),
|
190
191
|
}
|
191
192
|
)
|
@@ -211,9 +212,10 @@ CONFIG_SCHEMA = cv.Schema(
|
|
211
212
|
},
|
212
213
|
],
|
213
214
|
): [
|
214
|
-
fan.
|
215
|
+
fan.fan_schema(DemoFan)
|
216
|
+
.extend(cv.COMPONENT_SCHEMA)
|
217
|
+
.extend(
|
215
218
|
{
|
216
|
-
cv.GenerateID(CONF_OUTPUT_ID): cv.declare_id(DemoFan),
|
217
219
|
cv.Required(CONF_TYPE): cv.enum(FAN_TYPES, int=True),
|
218
220
|
}
|
219
221
|
)
|
@@ -251,7 +253,9 @@ CONFIG_SCHEMA = cv.Schema(
|
|
251
253
|
},
|
252
254
|
],
|
253
255
|
): [
|
254
|
-
light.
|
256
|
+
light.light_schema(DemoLight, light.LightType.RGB)
|
257
|
+
.extend(cv.COMPONENT_SCHEMA)
|
258
|
+
.extend(
|
255
259
|
{
|
256
260
|
cv.GenerateID(CONF_OUTPUT_ID): cv.declare_id(DemoLight),
|
257
261
|
cv.Required(CONF_TYPE): cv.enum(LIGHT_TYPES, int=True),
|
@@ -377,39 +381,33 @@ async def to_code(config):
|
|
377
381
|
await cg.register_component(var, conf)
|
378
382
|
|
379
383
|
for conf in config[CONF_CLIMATES]:
|
380
|
-
var =
|
384
|
+
var = await climate.new_climate(conf)
|
381
385
|
await cg.register_component(var, conf)
|
382
|
-
await climate.register_climate(var, conf)
|
383
386
|
cg.add(var.set_type(conf[CONF_TYPE]))
|
384
387
|
|
385
388
|
for conf in config[CONF_COVERS]:
|
386
|
-
var =
|
389
|
+
var = await cover.new_cover(conf)
|
387
390
|
await cg.register_component(var, conf)
|
388
|
-
await cover.register_cover(var, conf)
|
389
391
|
cg.add(var.set_type(conf[CONF_TYPE]))
|
390
392
|
|
391
393
|
for conf in config[CONF_FANS]:
|
392
|
-
var =
|
394
|
+
var = await fan.new_fan(conf)
|
393
395
|
await cg.register_component(var, conf)
|
394
|
-
await fan.register_fan(var, conf)
|
395
396
|
cg.add(var.set_type(conf[CONF_TYPE]))
|
396
397
|
|
397
398
|
for conf in config[CONF_LIGHTS]:
|
398
|
-
var =
|
399
|
+
var = await light.new_light(conf)
|
399
400
|
await cg.register_component(var, conf)
|
400
|
-
await light.register_light(var, conf)
|
401
401
|
cg.add(var.set_type(conf[CONF_TYPE]))
|
402
402
|
|
403
403
|
for conf in config[CONF_NUMBERS]:
|
404
|
-
var =
|
405
|
-
await cg.register_component(var, conf)
|
406
|
-
await number.register_number(
|
407
|
-
var,
|
404
|
+
var = await number.new_number(
|
408
405
|
conf,
|
409
406
|
min_value=conf[CONF_MIN_VALUE],
|
410
407
|
max_value=conf[CONF_MAX_VALUE],
|
411
408
|
step=conf[CONF_STEP],
|
412
409
|
)
|
410
|
+
await cg.register_component(var, conf)
|
413
411
|
cg.add(var.set_type(conf[CONF_TYPE]))
|
414
412
|
|
415
413
|
for conf in config[CONF_SENSORS]:
|
@@ -2,6 +2,7 @@ import esphome.codegen as cg
|
|
2
2
|
from esphome.components import switch
|
3
3
|
import esphome.config_validation as cv
|
4
4
|
from esphome.const import CONF_TYPE, ENTITY_CATEGORY_CONFIG
|
5
|
+
from esphome.cpp_generator import MockObjClass
|
5
6
|
|
6
7
|
from .. import CONF_DFROBOT_SEN0395_ID, DfrobotSen0395Component
|
7
8
|
|
@@ -26,32 +27,30 @@ Sen0395StartAfterBootSwitch = dfrobot_sen0395_ns.class_(
|
|
26
27
|
"Sen0395StartAfterBootSwitch", DfrobotSen0395Switch
|
27
28
|
)
|
28
29
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
30
|
+
|
31
|
+
def _switch_schema(class_: MockObjClass) -> cv.Schema:
|
32
|
+
return (
|
33
|
+
switch.switch_schema(
|
34
|
+
class_,
|
35
|
+
entity_category=ENTITY_CATEGORY_CONFIG,
|
36
|
+
)
|
37
|
+
.extend(
|
38
|
+
{
|
39
|
+
cv.GenerateID(CONF_DFROBOT_SEN0395_ID): cv.use_id(
|
40
|
+
DfrobotSen0395Component
|
41
|
+
),
|
42
|
+
}
|
43
|
+
)
|
44
|
+
.extend(cv.COMPONENT_SCHEMA)
|
37
45
|
)
|
38
|
-
|
39
|
-
)
|
46
|
+
|
40
47
|
|
41
48
|
CONFIG_SCHEMA = cv.typed_schema(
|
42
49
|
{
|
43
|
-
"sensor_active":
|
44
|
-
|
45
|
-
),
|
46
|
-
"
|
47
|
-
{cv.GenerateID(): cv.declare_id(Sen0395LedSwitch)}
|
48
|
-
),
|
49
|
-
"presence_via_uart": _SWITCH_SCHEMA.extend(
|
50
|
-
{cv.GenerateID(): cv.declare_id(Sen0395UartPresenceSwitch)}
|
51
|
-
),
|
52
|
-
"start_after_boot": _SWITCH_SCHEMA.extend(
|
53
|
-
{cv.GenerateID(): cv.declare_id(Sen0395StartAfterBootSwitch)}
|
54
|
-
),
|
50
|
+
"sensor_active": _switch_schema(Sen0395PowerSwitch),
|
51
|
+
"turn_on_led": _switch_schema(Sen0395LedSwitch),
|
52
|
+
"presence_via_uart": _switch_schema(Sen0395UartPresenceSwitch),
|
53
|
+
"start_after_boot": _switch_schema(Sen0395StartAfterBootSwitch),
|
55
54
|
}
|
56
55
|
)
|
57
56
|
|