esphome 2025.5.1__py3-none-any.whl → 2025.6.0__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 +20 -14
- esphome/components/a4988/a4988.cpp +1 -1
- esphome/components/absolute_humidity/absolute_humidity.cpp +6 -4
- esphome/components/ac_dimmer/ac_dimmer.cpp +4 -2
- esphome/components/adc/adc_sensor_esp32.cpp +5 -3
- esphome/components/adc/adc_sensor_esp8266.cpp +5 -3
- esphome/components/adc/adc_sensor_libretiny.cpp +5 -3
- esphome/components/adc/adc_sensor_rp2040.cpp +5 -3
- esphome/components/adc128s102/adc128s102.cpp +1 -1
- esphome/components/ade7880/ade7880.cpp +28 -17
- esphome/components/ade7953_base/ade7953_base.cpp +12 -9
- esphome/components/ade7953_i2c/ade7953_i2c.cpp +1 -1
- esphome/components/ade7953_spi/ade7953_spi.cpp +1 -1
- esphome/components/ads1115/ads1115.cpp +3 -5
- esphome/components/ads1118/ads1118.cpp +2 -1
- esphome/components/ags10/ags10.cpp +3 -2
- esphome/components/aht10/aht10.cpp +27 -29
- esphome/components/aic3204/aic3204.cpp +2 -2
- esphome/components/alarm_control_panel/__init__.py +1 -0
- esphome/components/am2315c/am2315c.cpp +2 -2
- esphome/components/am2320/am2320.cpp +2 -2
- esphome/components/am43/am43_base.h +1 -1
- esphome/components/am43/cover/am43_cover.cpp +4 -2
- esphome/components/analog_threshold/analog_threshold_binary_sensor.cpp +4 -2
- esphome/components/apds9306/apds9306.cpp +8 -5
- esphome/components/apds9960/apds9960.cpp +2 -2
- esphome/components/api/__init__.py +5 -0
- esphome/components/api/api_connection.cpp +753 -379
- esphome/components/api/api_connection.h +341 -283
- esphome/components/api/api_frame_helper.cpp +349 -344
- esphome/components/api/api_frame_helper.h +121 -94
- esphome/components/api/api_pb2.cpp +5 -0
- esphome/components/api/api_pb2.h +703 -227
- esphome/components/api/api_pb2_service.cpp +12 -688
- esphome/components/api/api_pb2_service.h +53 -207
- esphome/components/api/api_server.cpp +71 -29
- esphome/components/api/api_server.h +9 -0
- esphome/components/api/client.py +5 -4
- esphome/components/api/homeassistant_service.h +1 -1
- esphome/components/api/list_entities.cpp +1 -1
- esphome/components/api/proto.cpp +1 -0
- esphome/components/api/proto.h +5 -4
- esphome/components/api/subscribe_state.cpp +8 -16
- esphome/components/as3935/as3935.cpp +3 -3
- esphome/components/as5600/as5600.cpp +9 -7
- esphome/components/as7341/as7341.cpp +7 -5
- esphome/components/at581x/at581x.cpp +13 -10
- esphome/components/atm90e26/atm90e26.cpp +2 -2
- esphome/components/atm90e32/atm90e32.cpp +3 -3
- esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +5 -3
- esphome/components/bang_bang/bang_bang_climate.cpp +8 -5
- esphome/components/bedjet/bedjet_hub.cpp +6 -4
- esphome/components/beken_spi_led_strip/led_strip.cpp +11 -7
- esphome/components/bh1750/bh1750.cpp +2 -2
- esphome/components/binary_sensor/__init__.py +1 -0
- esphome/components/binary_sensor/automation.cpp +1 -2
- esphome/components/bl0906/bl0906.cpp +1 -1
- esphome/components/bl0942/bl0942.cpp +11 -8
- esphome/components/bl0942/sensor.py +1 -1
- esphome/components/ble_client/__init__.py +5 -1
- esphome/components/ble_client/output/ble_binary_output.cpp +6 -3
- esphome/components/ble_client/sensor/ble_sensor.cpp +9 -6
- esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +8 -5
- esphome/components/bluetooth_proxy/__init__.py +5 -1
- esphome/components/bluetooth_proxy/bluetooth_connection.cpp +5 -5
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +18 -16
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +1 -1
- esphome/components/bme280_base/bme280_base.cpp +5 -6
- esphome/components/bme680/bme680.cpp +3 -3
- esphome/components/bme680/sensor.py +2 -2
- esphome/components/bme680_bsec/bme680_bsec.cpp +11 -7
- esphome/components/bme680_bsec/sensor.py +7 -3
- esphome/components/bme68x_bsec2/__init__.py +6 -5
- esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +17 -13
- esphome/components/bme68x_bsec2/sensor.py +4 -4
- esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +1 -0
- esphome/components/bmi160/bmi160.cpp +11 -11
- esphome/components/bmp085/bmp085.cpp +2 -2
- esphome/components/bmp280_base/bmp280_base.cpp +3 -3
- esphome/components/bmp3xx_base/bmp3xx_base.cpp +13 -13
- esphome/components/bmp581/bmp581.cpp +33 -27
- esphome/components/bp1658cj/bp1658cj.cpp +5 -3
- esphome/components/bp5758d/bp5758d.cpp +1 -1
- esphome/components/button/__init__.py +1 -0
- esphome/components/canbus/canbus.cpp +1 -1
- esphome/components/cap1188/cap1188.cpp +6 -4
- esphome/components/captive_portal/captive_portal.cpp +1 -1
- esphome/components/ccs811/ccs811.cpp +3 -2
- esphome/components/cd74hc4067/cd74hc4067.cpp +1 -1
- esphome/components/ch422g/ch422g.cpp +2 -2
- esphome/components/chsc6x/chsc6x_touchscreen.cpp +6 -4
- esphome/components/climate/__init__.py +1 -0
- esphome/components/climate/climate.cpp +12 -7
- esphome/components/climate/climate.h +1 -1
- esphome/components/climate_ir/climate_ir.cpp +7 -4
- esphome/components/cm1106/__init__.py +1 -0
- esphome/components/cm1106/cm1106.cpp +112 -0
- esphome/components/cm1106/cm1106.h +40 -0
- esphome/components/cm1106/sensor.py +72 -0
- esphome/components/const/__init__.py +1 -0
- esphome/components/cover/__init__.py +1 -0
- esphome/components/cs5460a/cs5460a.cpp +16 -11
- esphome/components/cse7761/cse7761.cpp +2 -2
- esphome/components/cse7766/cse7766.cpp +0 -5
- esphome/components/cse7766/cse7766.h +5 -1
- esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +1 -1
- esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +6 -3
- esphome/components/current_based/current_based_cover.cpp +4 -2
- esphome/components/dac7678/dac7678_output.cpp +4 -4
- esphome/components/dallas_temp/dallas_temp.cpp +2 -3
- esphome/components/daly_bms/daly_bms.cpp +2 -1
- esphome/components/dashboard_import/__init__.py +1 -2
- esphome/components/datetime/__init__.py +3 -1
- esphome/components/datetime/date_entity.cpp +5 -5
- esphome/components/datetime/datetime_base.h +0 -5
- esphome/components/datetime/datetime_entity.cpp +8 -8
- esphome/components/datetime/time_entity.cpp +4 -4
- esphome/components/debug/debug_component.cpp +1 -5
- esphome/components/debug/debug_component.h +1 -1
- esphome/components/debug/debug_esp32.cpp +4 -2
- esphome/components/deep_sleep/deep_sleep_component.cpp +11 -5
- esphome/components/deep_sleep/deep_sleep_esp32.cpp +7 -5
- esphome/components/demo/__init__.py +206 -0
- esphome/components/demo/demo_alarm_control_panel.h +65 -0
- esphome/components/demo/demo_button.h +15 -0
- esphome/components/demo/demo_date.h +34 -0
- esphome/components/demo/demo_datetime.h +40 -0
- esphome/components/demo/demo_lock.h +17 -0
- esphome/components/demo/demo_select.h +15 -0
- esphome/components/demo/demo_text.h +18 -0
- esphome/components/demo/demo_time.h +34 -0
- esphome/components/demo/demo_valve.h +54 -0
- esphome/components/dfrobot_sen0395/commands.cpp +3 -3
- esphome/components/dht/dht.cpp +29 -50
- esphome/components/dht12/dht12.cpp +2 -2
- esphome/components/display/display.h +5 -3
- esphome/components/dps310/dps310.cpp +7 -5
- esphome/components/ds1307/ds1307.cpp +2 -2
- esphome/components/dsmr/dsmr.cpp +5 -3
- esphome/components/duty_cycle/duty_cycle_sensor.cpp +2 -2
- esphome/components/duty_time/duty_time_sensor.cpp +5 -3
- esphome/components/ee895/ee895.cpp +3 -3
- esphome/components/ektf2232/touchscreen/ektf2232.cpp +1 -1
- esphome/components/emc2101/emc2101.cpp +11 -9
- esphome/components/ens160_base/ens160_base.cpp +2 -2
- esphome/components/ens210/ens210.cpp +2 -2
- esphome/components/es7210/es7210.cpp +6 -4
- esphome/components/es7243e/es7243e.cpp +1 -1
- esphome/components/es8156/es8156.cpp +1 -1
- esphome/components/es8311/es8311.cpp +8 -6
- esphome/components/es8388/__init__.py +0 -0
- esphome/components/es8388/audio_dac.py +26 -0
- esphome/components/es8388/es8388.cpp +289 -0
- esphome/components/es8388/es8388.h +81 -0
- esphome/components/es8388/es8388_const.h +83 -0
- esphome/components/es8388/select/__init__.py +47 -0
- esphome/components/es8388/select/adc_input_mic_select.cpp +12 -0
- esphome/components/es8388/select/adc_input_mic_select.h +15 -0
- esphome/components/es8388/select/dac_output_select.cpp +12 -0
- esphome/components/es8388/select/dac_output_select.h +15 -0
- esphome/components/esp32/__init__.py +118 -23
- esphome/components/esp32/boards.py +208 -125
- esphome/components/esp32/const.py +6 -0
- esphome/components/esp32/gpio.py +14 -1
- esphome/components/esp32/gpio_esp32_c5.py +45 -0
- esphome/components/esp32/gpio_esp32_p4.py +43 -0
- esphome/components/esp32/preferences.cpp +7 -7
- esphome/components/esp32_ble/__init__.py +115 -0
- esphome/components/esp32_ble/ble.cpp +101 -54
- esphome/components/esp32_ble/ble.h +24 -5
- esphome/components/esp32_ble/ble_event.h +172 -32
- esphome/components/esp32_ble/ble_scan_result.h +24 -0
- esphome/components/esp32_ble/ble_uuid.h +1 -1
- esphome/components/esp32_ble/queue.h +53 -27
- esphome/components/esp32_ble_client/ble_client_base.cpp +4 -2
- esphome/components/esp32_ble_server/__init__.py +4 -1
- esphome/components/esp32_ble_server/ble_characteristic.cpp +1 -0
- esphome/components/esp32_ble_server/ble_server.h +0 -1
- esphome/components/esp32_ble_tracker/__init__.py +7 -2
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +107 -75
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +16 -16
- esphome/components/esp32_camera/esp32_camera.cpp +35 -27
- esphome/components/esp32_camera_web_server/camera_web_server.cpp +4 -2
- esphome/components/esp32_dac/esp32_dac.cpp +2 -2
- esphome/components/esp32_improv/__init__.py +5 -1
- esphome/components/esp32_improv/esp32_improv_component.cpp +2 -2
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +11 -7
- esphome/components/esp32_rmt_led_strip/light.py +5 -1
- esphome/components/esp32_touch/esp32_touch.cpp +12 -8
- esphome/components/esp8266/gpio.cpp +10 -1
- esphome/components/esp8266/preferences.cpp +6 -6
- esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
- esphome/components/esp_ldo/__init__.py +91 -0
- esphome/components/esp_ldo/esp_ldo.cpp +43 -0
- esphome/components/esp_ldo/esp_ldo.h +43 -0
- esphome/components/esphome/ota/ota_esphome.cpp +15 -8
- esphome/components/ethernet/ethernet_component.cpp +38 -26
- esphome/components/ethernet/ethernet_component.h +1 -1
- esphome/components/event/__init__.py +1 -0
- esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
- esphome/components/ezo/ezo.cpp +1 -1
- esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
- esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
- esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
- esphome/components/fan/__init__.py +1 -0
- esphome/components/fan/fan.cpp +30 -19
- esphome/components/fastled_base/fastled_light.cpp +7 -5
- esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
- esphome/components/fs3000/fs3000.cpp +1 -1
- esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
- esphome/components/ft63x6/ft63x6.cpp +5 -3
- esphome/components/gcja5/gcja5.cpp +0 -12
- esphome/components/gcja5/gcja5.h +8 -3
- esphome/components/gdk101/gdk101.cpp +2 -2
- esphome/components/globals/globals_component.h +13 -10
- esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
- esphome/components/gp8403/gp8403.cpp +4 -2
- esphome/components/gp8403/output/gp8403_output.cpp +4 -2
- esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
- esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
- esphome/components/gpio/switch/gpio_switch.cpp +1 -1
- esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
- esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
- esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
- esphome/components/growatt_solar/growatt_solar.cpp +6 -3
- esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
- esphome/components/haier/haier_base.cpp +2 -2
- esphome/components/haier/hon_climate.cpp +13 -6
- esphome/components/havells_solar/havells_solar.cpp +5 -2
- esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
- esphome/components/hdc1080/hdc1080.cpp +2 -2
- esphome/components/he60r/he60r.cpp +4 -2
- esphome/components/hlw8012/hlw8012.cpp +6 -4
- esphome/components/hm3301/hm3301.cpp +2 -2
- esphome/components/hmc5883l/hmc5883l.cpp +2 -2
- esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
- esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
- esphome/components/honeywellabp/honeywellabp.cpp +4 -2
- esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
- esphome/components/hte501/hte501.cpp +3 -2
- esphome/components/http_request/__init__.py +2 -2
- esphome/components/http_request/http_request.cpp +7 -5
- esphome/components/http_request/http_request_idf.cpp +4 -2
- esphome/components/http_request/ota/ota_http_request.cpp +1 -1
- esphome/components/htu21d/htu21d.cpp +2 -2
- esphome/components/htu31d/htu31d.cpp +2 -2
- esphome/components/hx711/hx711.cpp +2 -2
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
- esphome/components/hyt271/hyt271.cpp +2 -2
- esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
- esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
- esphome/components/i2s_audio/__init__.py +2 -0
- esphome/components/i2s_audio/i2s_audio.cpp +3 -4
- esphome/components/i2s_audio/i2s_audio.h +1 -1
- esphome/components/i2s_audio/media_player/__init__.py +1 -1
- esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +85 -77
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +6 -0
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +29 -11
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +1 -0
- esphome/components/iaqcore/iaqcore.cpp +3 -3
- esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
- esphome/components/ili9xxx/ili9xxx_display.h +1 -1
- esphome/components/image/image.cpp +1 -0
- esphome/components/ina219/ina219.cpp +2 -2
- esphome/components/ina226/ina226.cpp +8 -5
- esphome/components/ina260/ina260.cpp +1 -1
- esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
- esphome/components/ina3221/ina3221.cpp +2 -2
- esphome/components/inkplate6/display.py +12 -2
- esphome/components/inkplate6/inkplate.cpp +13 -9
- esphome/components/inkplate6/inkplate.h +7 -6
- esphome/components/integration/integration_sensor.cpp +1 -1
- esphome/components/internal_temperature/internal_temperature.cpp +4 -4
- esphome/components/json/json_util.cpp +4 -5
- esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
- esphome/components/key_collector/key_collector.cpp +4 -2
- esphome/components/kmeteriso/kmeteriso.cpp +4 -4
- esphome/components/kuntze/kuntze.cpp +4 -2
- esphome/components/lc709203f/__init__.py +1 -0
- esphome/components/lc709203f/lc709203f.cpp +299 -0
- esphome/components/lc709203f/lc709203f.h +55 -0
- esphome/components/lc709203f/sensor.py +93 -0
- esphome/components/lcd_base/lcd_display.cpp +2 -2
- esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
- esphome/components/lcd_menu/lcd_menu.cpp +6 -4
- esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
- esphome/components/ld2410/ld2410.cpp +6 -7
- esphome/components/ld2420/ld2420.cpp +9 -7
- esphome/components/ld2450/ld2450.cpp +6 -4
- esphome/components/ld2450/sensor.py +2 -2
- esphome/components/ledc/ledc_output.cpp +32 -28
- esphome/components/libretiny/const.py +1 -1
- esphome/components/libretiny/preferences.cpp +6 -7
- esphome/components/light/__init__.py +2 -1
- esphome/components/light/esp_hsv_color.h +1 -1
- esphome/components/light/light_state.cpp +9 -5
- esphome/components/light/light_state.h +15 -15
- esphome/components/light/light_transformer.h +1 -1
- esphome/components/lightwaverf/LwTx.cpp +1 -1
- esphome/components/lightwaverf/lightwaverf.cpp +1 -1
- esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
- esphome/components/lock/__init__.py +1 -0
- esphome/components/lock/lock.h +1 -1
- esphome/components/logger/__init__.py +6 -0
- esphome/components/logger/logger.cpp +11 -20
- esphome/components/logger/logger.h +5 -6
- esphome/components/logger/logger_esp32.cpp +5 -5
- esphome/components/ltr390/ltr390.cpp +8 -5
- esphome/components/ltr501/ltr501.cpp +19 -14
- esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
- esphome/components/lvgl/__init__.py +2 -2
- esphome/components/lvgl/automation.py +5 -4
- esphome/components/lvgl/defines.py +0 -2
- esphome/components/lvgl/lv_validation.py +1 -3
- esphome/components/lvgl/lvcode.py +7 -8
- esphome/components/lvgl/lvgl_esphome.cpp +26 -10
- esphome/components/lvgl/schemas.py +22 -23
- esphome/components/lvgl/trigger.py +8 -3
- esphome/components/lvgl/widgets/__init__.py +2 -2
- esphome/components/lvgl/widgets/canvas.py +9 -3
- esphome/components/lvgl/widgets/line.py +2 -1
- esphome/components/lvgl/widgets/tabview.py +7 -0
- esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
- esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
- esphome/components/max17043/max17043.cpp +2 -2
- esphome/components/max31855/max31855.cpp +2 -1
- esphome/components/max31856/max31856.cpp +9 -11
- esphome/components/max31865/max31865.cpp +6 -4
- esphome/components/max44009/max44009.cpp +2 -2
- esphome/components/max6675/max6675.cpp +1 -1
- esphome/components/max6956/max6956.cpp +5 -3
- esphome/components/max7219/max7219.cpp +8 -6
- esphome/components/max7219digit/automation.h +52 -0
- esphome/components/max7219digit/display.py +93 -1
- esphome/components/max7219digit/max7219digit.cpp +16 -13
- esphome/components/max9611/max9611.cpp +9 -6
- esphome/components/mcp23008/mcp23008.cpp +1 -1
- esphome/components/mcp23016/mcp23016.cpp +1 -1
- esphome/components/mcp23017/mcp23017.cpp +1 -1
- esphome/components/mcp23s08/mcp23s08.cpp +1 -1
- esphome/components/mcp23s17/mcp23s17.cpp +1 -1
- esphome/components/mcp3008/mcp3008.cpp +1 -1
- esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
- esphome/components/mcp3204/mcp3204.cpp +1 -1
- esphome/components/mcp4461/mcp4461.cpp +2 -2
- esphome/components/mcp4725/mcp4725.cpp +2 -2
- esphome/components/mcp4728/mcp4728.cpp +2 -2
- esphome/components/mcp9600/mcp9600.cpp +1 -1
- esphome/components/mcp9808/mcp9808.cpp +4 -4
- esphome/components/mdns/mdns_component.cpp +8 -2
- esphome/components/mdns/mdns_component.h +3 -1
- esphome/components/mdns/mdns_esp32.cpp +2 -2
- esphome/components/media_player/__init__.py +1 -0
- esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
- esphome/components/micro_wake_word/streaming_model.cpp +10 -6
- esphome/components/micronova/micronova.h +2 -2
- esphome/components/mics_4514/mics_4514.cpp +2 -2
- esphome/components/midea/air_conditioner.cpp +7 -5
- esphome/components/midea_ir/midea_ir.cpp +1 -1
- esphome/components/mipi_spi/mipi_spi.cpp +24 -15
- esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
- esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
- esphome/components/mlx90614/mlx90614.cpp +4 -3
- esphome/components/mmc5603/mmc5603.cpp +2 -2
- esphome/components/mmc5983/mmc5983.cpp +1 -1
- esphome/components/modbus/modbus.cpp +7 -5
- esphome/components/modbus_controller/modbus_controller.cpp +6 -4
- esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
- esphome/components/modbus_controller/switch/__init__.py +6 -2
- esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
- esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
- esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
- esphome/components/mpr121/mpr121.cpp +2 -2
- esphome/components/mpu6050/mpu6050.cpp +6 -6
- esphome/components/mpu6886/mpu6886.cpp +6 -6
- esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
- esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
- esphome/components/mqtt/mqtt_client.cpp +31 -24
- esphome/components/mqtt/mqtt_component.cpp +3 -3
- esphome/components/mqtt/mqtt_cover.cpp +8 -4
- esphome/components/mqtt/mqtt_fan.cpp +12 -6
- esphome/components/mqtt/mqtt_valve.cpp +4 -2
- esphome/components/ms5611/ms5611.cpp +2 -2
- esphome/components/ms8607/ms8607.cpp +2 -2
- esphome/components/msa3xx/msa3xx.cpp +16 -12
- esphome/components/my9231/my9231.cpp +7 -5
- esphome/components/nau7802/nau7802.cpp +6 -4
- esphome/components/neopixelbus/neopixelbus_light.h +2 -2
- esphome/components/network/ip_address.h +1 -1
- esphome/components/network/util.cpp +13 -0
- esphome/components/nextion/base_component.py +2 -0
- esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +3 -4
- esphome/components/nextion/display.py +34 -22
- esphome/components/nextion/nextion.cpp +182 -143
- esphome/components/nextion/nextion.h +36 -0
- esphome/components/nextion/nextion_commands.cpp +3 -3
- esphome/components/nextion/nextion_upload_arduino.cpp +69 -69
- esphome/components/nextion/nextion_upload_idf.cpp +79 -80
- esphome/components/nextion/sensor/nextion_sensor.cpp +5 -5
- esphome/components/nextion/switch/nextion_switch.cpp +2 -2
- esphome/components/nextion/text_sensor/nextion_textsensor.cpp +3 -3
- esphome/components/nfc/nci_message.h +1 -1
- esphome/components/nfc/ndef_record.h +1 -1
- esphome/components/nfc/ndef_record_text.h +1 -1
- esphome/components/nfc/ndef_record_uri.h +1 -1
- esphome/components/nfc/nfc.h +1 -1
- esphome/components/nfc/nfc_tag.h +1 -1
- esphome/components/noblex/noblex.cpp +1 -1
- esphome/components/npi19/npi19.cpp +5 -7
- esphome/components/number/__init__.py +11 -0
- esphome/components/number/number.cpp +1 -1
- esphome/components/number/number.h +0 -4
- esphome/components/online_image/__init__.py +13 -1
- esphome/components/online_image/online_image.cpp +26 -4
- esphome/components/online_image/online_image.h +21 -4
- esphome/components/opentherm/generate.py +3 -3
- esphome/components/opentherm/hub.cpp +11 -7
- esphome/components/opentherm/number/number.cpp +5 -3
- esphome/components/opentherm/opentherm.h +1 -1
- esphome/components/opentherm/schema.py +13 -13
- esphome/components/opentherm/validate.py +1 -1
- esphome/components/openthread/__init__.py +146 -0
- esphome/components/openthread/const.py +10 -0
- esphome/components/openthread/openthread.cpp +206 -0
- esphome/components/openthread/openthread.h +68 -0
- esphome/components/openthread/openthread_esp.cpp +164 -0
- esphome/components/openthread/tlv.py +58 -0
- esphome/components/openthread_info/__init__.py +0 -0
- esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
- esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
- esphome/components/openthread_info/text_sensor.py +105 -0
- esphome/components/output/float_output.cpp +1 -1
- esphome/components/output/switch/output_switch.cpp +1 -1
- esphome/components/packet_transport/packet_transport.cpp +6 -4
- esphome/components/pca6416a/pca6416a.cpp +2 -2
- esphome/components/pca9554/pca9554.cpp +6 -4
- esphome/components/pca9685/pca9685_output.cpp +12 -8
- esphome/components/pcd8544/pcd_8544.cpp +1 -1
- esphome/components/pcf85063/pcf85063.cpp +2 -2
- esphome/components/pcf8563/pcf8563.cpp +2 -2
- esphome/components/pcf8574/pcf8574.cpp +2 -2
- esphome/components/pid/pid_climate.cpp +8 -5
- esphome/components/pid/pid_climate.h +1 -1
- esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
- esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
- esphome/components/pipsolar/pipsolar.cpp +3 -3
- esphome/components/pm1006/pm1006.cpp +3 -7
- esphome/components/pm1006/pm1006.h +4 -1
- esphome/components/pm2005/pm2005.cpp +12 -13
- esphome/components/pm2005/sensor.py +1 -1
- esphome/components/pmsa003i/pmsa003i.cpp +2 -2
- esphome/components/pmsx003/pmsx003.cpp +0 -4
- esphome/components/pmsx003/pmsx003.h +5 -2
- esphome/components/pmwcs3/pmwcs3.cpp +9 -13
- esphome/components/pmwcs3/pmwcs3.h +0 -1
- esphome/components/pn532/pn532.cpp +7 -7
- esphome/components/pn532/pn532.h +1 -1
- esphome/components/pn532_spi/pn532_spi.cpp +1 -1
- esphome/components/pn7150/pn7150.cpp +4 -4
- esphome/components/pn7160/pn7160.cpp +4 -4
- esphome/components/power_supply/power_supply.cpp +6 -4
- esphome/components/power_supply/power_supply.h +1 -1
- esphome/components/prometheus/__init__.py +0 -1
- esphome/components/psram/__init__.py +59 -35
- esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
- esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
- esphome/components/pylontech/pylontech.cpp +2 -2
- esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
- esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
- esphome/components/pzemac/pzemac.cpp +4 -2
- esphome/components/pzemdc/pzemdc.cpp +4 -2
- esphome/components/qmc5883l/qmc5883l.cpp +2 -2
- esphome/components/qmp6988/qmp6988.cpp +2 -2
- esphome/components/qmp6988/qmp6988.h +1 -1
- esphome/components/qr_code/qr_code.cpp +5 -3
- esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
- esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
- esphome/components/rc522/rc522.cpp +5 -5
- esphome/components/rdm6300/rdm6300.cpp +1 -0
- esphome/components/remote_receiver/__init__.py +10 -2
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
- esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
- esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
- esphome/components/remote_transmitter/__init__.py +10 -2
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
- esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
- esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
- esphome/components/resistance/resistance_sensor.cpp +6 -3
- esphome/components/restart/button/restart_button.cpp +1 -1
- esphome/components/restart/switch/restart_switch.cpp +1 -1
- esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
- esphome/components/rp2040/__init__.py +7 -0
- esphome/components/rp2040/core.cpp +8 -1
- esphome/components/rp2040/gpio.cpp +26 -9
- esphome/components/rp2040/preferences.cpp +3 -3
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
- esphome/components/rp2040_pio_led_strip/light.py +1 -1
- esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
- esphome/components/rtttl/rtttl.cpp +11 -9
- esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
- esphome/components/safe_mode/safe_mode.cpp +9 -8
- esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
- esphome/components/scd30/scd30.cpp +11 -8
- esphome/components/scd4x/scd4x.cpp +12 -8
- esphome/components/sdl/display.py +40 -0
- esphome/components/sdl/sdl_esphome.cpp +2 -2
- esphome/components/sdl/sdl_esphome.h +8 -0
- esphome/components/sdm_meter/sdm_meter.cpp +5 -2
- esphome/components/sdp3x/sdp3x.cpp +11 -11
- esphome/components/sds011/sds011.cpp +5 -6
- esphome/components/sds011/sds011.h +4 -1
- esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
- esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
- esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
- esphome/components/selec_meter/selec_meter.cpp +5 -2
- esphome/components/select/__init__.py +1 -0
- esphome/components/select/select.cpp +1 -1
- esphome/components/select/select.h +0 -4
- esphome/components/sen0321/sen0321.cpp +2 -2
- esphome/components/sen21231/sen21231.cpp +1 -1
- esphome/components/sen5x/sen5x.cpp +10 -7
- esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
- esphome/components/sensirion_common/i2c_sensirion.h +1 -0
- esphome/components/sensor/__init__.py +11 -1
- esphome/components/sensor/filter.h +1 -1
- esphome/components/sensor/sensor.cpp +8 -4
- esphome/components/sensor/sensor.h +12 -11
- esphome/components/servo/servo.cpp +12 -9
- esphome/components/servo/servo.h +1 -1
- esphome/components/sfa30/sfa30.cpp +1 -1
- esphome/components/sgp30/sgp30.cpp +10 -8
- esphome/components/sgp4x/sgp4x.cpp +49 -61
- esphome/components/sgp4x/sgp4x.h +0 -1
- esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
- esphome/components/sht3xd/sht3xd.cpp +1 -1
- esphome/components/sht4x/sht4x.cpp +2 -2
- esphome/components/shtcx/shtcx.cpp +13 -16
- esphome/components/shutdown/button/shutdown_button.cpp +1 -1
- esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
- esphome/components/sim800l/sim800l.cpp +2 -2
- esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
- esphome/components/sm16716/sm16716.cpp +1 -1
- esphome/components/sm2135/sm2135.cpp +1 -1
- esphome/components/sm2235/sm2235.cpp +5 -3
- esphome/components/sm2335/sm2335.cpp +5 -3
- esphome/components/sml/sml.cpp +1 -1
- esphome/components/sn74hc165/sn74hc165.cpp +1 -2
- esphome/components/sn74hc595/sn74hc595.cpp +1 -2
- esphome/components/sntp/sntp_component.cpp +1 -1
- esphome/components/socket/__init__.py +2 -0
- esphome/components/socket/bsd_sockets_impl.cpp +51 -7
- esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
- esphome/components/socket/lwip_sockets_impl.cpp +51 -7
- esphome/components/socket/socket.cpp +31 -0
- esphome/components/socket/socket.h +27 -1
- esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
- esphome/components/sonoff_d1/sonoff_d1.h +2 -2
- esphome/components/sound_level/sound_level.cpp +4 -2
- esphome/components/speaker/media_player/__init__.py +3 -0
- esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
- esphome/components/speaker/media_player/speaker_media_player.h +6 -0
- esphome/components/spi/__init__.py +10 -2
- esphome/components/spi/spi.cpp +4 -4
- esphome/components/spi/spi_arduino.cpp +22 -9
- esphome/components/spi_device/spi_device.cpp +1 -2
- esphome/components/sprinkler/sprinkler.cpp +9 -6
- esphome/components/sps30/sps30.cpp +16 -15
- esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
- esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
- esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
- esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
- esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
- esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
- esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
- esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
- esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
- esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
- esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
- esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
- esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
- esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
- esphome/components/st7567_base/st7567_base.cpp +3 -3
- esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
- esphome/components/st7567_spi/st7567_spi.cpp +1 -1
- esphome/components/st7701s/st7701s.cpp +4 -2
- esphome/components/st7735/st7735.cpp +3 -3
- esphome/components/st7789v/st7789v.cpp +10 -7
- esphome/components/st7920/st7920.cpp +6 -4
- esphome/components/statsd/statsd.cpp +9 -5
- esphome/components/status_led/light/status_led_light.cpp +3 -3
- esphome/components/status_led/light/status_led_light.h +1 -1
- esphome/components/status_led/status_led.cpp +1 -1
- esphome/components/stepper/stepper.h +5 -3
- esphome/components/sts3x/sts3x.cpp +2 -2
- esphome/components/switch/__init__.py +1 -0
- esphome/components/switch/switch.cpp +18 -12
- esphome/components/switch/switch.h +14 -8
- esphome/components/sx1509/__init__.py +53 -20
- esphome/components/sx1509/sx1509.cpp +29 -5
- esphome/components/sx1509/sx1509.h +9 -1
- esphome/components/t6615/t6615.cpp +1 -0
- esphome/components/tc74/tc74.cpp +1 -1
- esphome/components/tca9548a/tca9548a.cpp +1 -1
- esphome/components/tca9555/tca9555.cpp +2 -2
- esphome/components/tcs34725/tcs34725.cpp +4 -4
- esphome/components/tee501/tee501.cpp +3 -2
- esphome/components/tem3200/tem3200.cpp +5 -6
- esphome/components/template/alarm_control_panel/__init__.py +6 -0
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +43 -12
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +4 -1
- esphome/components/template/cover/template_cover.cpp +1 -1
- esphome/components/template/select/template_select.cpp +6 -4
- esphome/components/template/text/template_text.cpp +2 -3
- esphome/components/template/valve/template_valve.cpp +5 -3
- esphome/components/text/__init__.py +10 -11
- esphome/components/text/text.cpp +1 -1
- esphome/components/text/text.h +0 -4
- esphome/components/text_sensor/__init__.py +1 -0
- esphome/components/text_sensor/text_sensor.cpp +8 -4
- esphome/components/text_sensor/text_sensor.h +6 -6
- esphome/components/thermostat/thermostat_climate.cpp +67 -43
- esphome/components/time/__init__.py +1 -2
- esphome/components/time_based/time_based_cover.cpp +4 -2
- esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
- esphome/components/tm1621/tm1621.cpp +3 -3
- esphome/components/tm1637/tm1637.cpp +9 -7
- esphome/components/tm1638/tm1638.cpp +7 -5
- esphome/components/tm1651/tm1651.cpp +2 -2
- esphome/components/tmp102/tmp102.cpp +1 -3
- esphome/components/tmp102/tmp102.h +0 -3
- esphome/components/tmp1075/tmp1075.cpp +12 -9
- esphome/components/tmp117/tmp117.cpp +2 -2
- esphome/components/tof10120/tof10120_sensor.cpp +2 -2
- esphome/components/tormatic/tormatic_cover.cpp +4 -2
- esphome/components/tsl2561/tsl2561.cpp +7 -5
- esphome/components/tsl2591/tsl2591.cpp +25 -27
- esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
- esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
- esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
- esphome/components/tuya/select/tuya_select.cpp +5 -3
- esphome/components/tx20/tx20.cpp +3 -3
- esphome/components/uart/__init__.py +4 -5
- esphome/components/uart/button/uart_button.cpp +1 -1
- esphome/components/uart/switch/uart_switch.cpp +2 -2
- esphome/components/uart/uart.cpp +2 -2
- esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
- esphome/components/uart/uart_component_esp8266.cpp +9 -7
- esphome/components/uart/uart_component_esp_idf.cpp +9 -7
- esphome/components/uart/uart_component_host.cpp +11 -8
- esphome/components/uart/uart_component_libretiny.cpp +8 -6
- esphome/components/uart/uart_component_rp2040.cpp +8 -6
- esphome/components/udp/udp_component.cpp +9 -5
- esphome/components/ufire_ec/ufire_ec.cpp +5 -3
- esphome/components/ufire_ise/ufire_ise.cpp +1 -1
- esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
- esphome/components/update/__init__.py +1 -0
- esphome/components/update/update_entity.cpp +1 -1
- esphome/components/update/update_entity.h +0 -3
- esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
- esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
- esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
- esphome/components/uptime/sensor/uptime_timestamp_sensor.cpp +1 -1
- esphome/components/usb_host/__init__.py +64 -0
- esphome/components/usb_host/usb_host.h +116 -0
- esphome/components/usb_host/usb_host_client.cpp +394 -0
- esphome/components/usb_host/usb_host_component.cpp +35 -0
- esphome/components/usb_uart/__init__.py +134 -0
- esphome/components/usb_uart/ch34x.cpp +80 -0
- esphome/components/usb_uart/cp210x.cpp +126 -0
- esphome/components/usb_uart/usb_uart.cpp +328 -0
- esphome/components/usb_uart/usb_uart.h +151 -0
- esphome/components/valve/__init__.py +1 -0
- esphome/components/veml3235/veml3235.cpp +13 -9
- esphome/components/veml7700/veml7700.cpp +10 -6
- esphome/components/voice_assistant/voice_assistant.cpp +7 -7
- esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
- esphome/components/web_server/server_index_v2.h +632 -630
- esphome/components/web_server/server_index_v3.h +411 -409
- esphome/components/web_server/web_server.cpp +5 -3
- esphome/components/web_server_base/web_server_base.cpp +1 -1
- esphome/components/web_server_idf/__init__.py +0 -2
- esphome/components/web_server_idf/utils.cpp +1 -1
- esphome/components/web_server_idf/web_server_idf.cpp +7 -3
- esphome/components/web_server_idf/web_server_idf.h +7 -0
- esphome/components/weikai/__init__.py +2 -0
- esphome/components/weikai/weikai.cpp +24 -22
- esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
- esphome/components/weikai_spi/weikai_spi.cpp +11 -6
- esphome/components/wiegand/wiegand.cpp +1 -1
- esphome/components/wifi/wifi_component.cpp +50 -37
- esphome/components/wifi/wifi_component.h +7 -4
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
- esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
- esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
- esphome/components/wireguard/wireguard.cpp +21 -21
- esphome/components/wl_134/text_sensor.py +1 -2
- esphome/components/wled/wled_light_effect.cpp +1 -1
- esphome/components/x9c/x9c.cpp +5 -3
- esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
- esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
- esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
- esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
- esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
- esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
- esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
- esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
- esphome/components/xl9535/xl9535.cpp +2 -2
- esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
- esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
- esphome/config.py +3 -2
- esphome/config_validation.py +46 -17
- esphome/const.py +10 -1
- esphome/core/__init__.py +37 -18
- esphome/core/application.cpp +197 -8
- esphome/core/application.h +116 -6
- esphome/core/component.cpp +36 -15
- esphome/core/component.h +43 -13
- esphome/core/config.py +12 -0
- esphome/core/defines.h +10 -2
- esphome/core/entity_base.cpp +4 -16
- esphome/core/entity_base.h +27 -13
- esphome/core/hal.h +5 -0
- esphome/core/helpers.cpp +1 -1
- esphome/core/helpers.h +5 -5
- esphome/core/log.h +2 -0
- esphome/core/log_const_en.h +4 -0
- esphome/core/scheduler.cpp +2 -2
- esphome/coroutine.py +3 -4
- esphome/cpp_generator.py +32 -32
- esphome/dashboard/core.py +2 -2
- esphome/dashboard/web_server.py +2 -2
- esphome/git.py +4 -4
- esphome/helpers.py +5 -6
- esphome/loader.py +8 -7
- esphome/log.py +7 -1
- esphome/platformio_api.py +2 -3
- esphome/storage_json.py +13 -5
- esphome/types.py +12 -13
- esphome/util.py +1 -2
- esphome/wizard.py +0 -16
- esphome/writer.py +5 -3
- esphome/yaml_util.py +6 -1
- esphome/zeroconf.py +1 -1
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/METADATA +12 -11
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/RECORD +753 -699
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/WHEEL +1 -1
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/entry_points.txt +0 -0
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/top_level.txt +0 -0
@@ -50,17 +50,15 @@ void ESP32BLETracker::setup() {
|
|
50
50
|
ESP_LOGE(TAG, "BLE Tracker was marked failed by ESP32BLE");
|
51
51
|
return;
|
52
52
|
}
|
53
|
-
|
54
|
-
|
55
|
-
this->scan_result_buffer_ = allocator.allocate(ESP32BLETracker::SCAN_RESULT_BUFFER_SIZE);
|
53
|
+
RAMAllocator<BLEScanResult> allocator;
|
54
|
+
this->scan_ring_buffer_ = allocator.allocate(SCAN_RESULT_BUFFER_SIZE);
|
56
55
|
|
57
|
-
if (this->
|
58
|
-
ESP_LOGE(TAG, "Could not allocate buffer for BLE Tracker!");
|
56
|
+
if (this->scan_ring_buffer_ == nullptr) {
|
57
|
+
ESP_LOGE(TAG, "Could not allocate ring buffer for BLE Tracker!");
|
59
58
|
this->mark_failed();
|
60
59
|
}
|
61
60
|
|
62
61
|
global_esp32_ble_tracker = this;
|
63
|
-
this->scan_result_lock_ = xSemaphoreCreateMutex();
|
64
62
|
|
65
63
|
#ifdef USE_OTA
|
66
64
|
ota::get_global_ota_callback()->add_on_state_callback(
|
@@ -120,27 +118,31 @@ void ESP32BLETracker::loop() {
|
|
120
118
|
}
|
121
119
|
bool promote_to_connecting = discovered && !searching && !connecting;
|
122
120
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
ESP_LOGW(TAG, "Too many BLE events to process. Some devices may not show up.");
|
129
|
-
}
|
121
|
+
// Process scan results from lock-free SPSC ring buffer
|
122
|
+
// Consumer side: This runs in the main loop thread
|
123
|
+
if (this->scanner_state_ == ScannerState::RUNNING) {
|
124
|
+
// Load our own index with relaxed ordering (we're the only writer)
|
125
|
+
size_t read_idx = this->ring_read_index_.load(std::memory_order_relaxed);
|
130
126
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
127
|
+
// Load producer's index with acquire to see their latest writes
|
128
|
+
size_t write_idx = this->ring_write_index_.load(std::memory_order_acquire);
|
129
|
+
|
130
|
+
while (read_idx != write_idx) {
|
131
|
+
// Process one result at a time directly from ring buffer
|
132
|
+
BLEScanResult &scan_result = this->scan_ring_buffer_[read_idx];
|
133
|
+
|
134
|
+
if (this->raw_advertisements_) {
|
135
|
+
for (auto *listener : this->listeners_) {
|
136
|
+
listener->parse_devices(&scan_result, 1);
|
137
|
+
}
|
138
|
+
for (auto *client : this->clients_) {
|
139
|
+
client->parse_devices(&scan_result, 1);
|
140
|
+
}
|
137
141
|
}
|
138
|
-
}
|
139
142
|
|
140
|
-
|
141
|
-
for (size_t i = 0; i < index; i++) {
|
143
|
+
if (this->parse_advertisements_) {
|
142
144
|
ESPBTDevice device;
|
143
|
-
device.parse_scan_rst(
|
145
|
+
device.parse_scan_rst(scan_result);
|
144
146
|
|
145
147
|
bool found = false;
|
146
148
|
for (auto *listener : this->listeners_) {
|
@@ -161,9 +163,19 @@ void ESP32BLETracker::loop() {
|
|
161
163
|
this->print_bt_device_info(device);
|
162
164
|
}
|
163
165
|
}
|
166
|
+
|
167
|
+
// Move to next entry in ring buffer
|
168
|
+
read_idx = (read_idx + 1) % SCAN_RESULT_BUFFER_SIZE;
|
169
|
+
|
170
|
+
// Store with release to ensure reads complete before index update
|
171
|
+
this->ring_read_index_.store(read_idx, std::memory_order_release);
|
172
|
+
}
|
173
|
+
|
174
|
+
// Log dropped results periodically
|
175
|
+
size_t dropped = this->scan_results_dropped_.exchange(0, std::memory_order_relaxed);
|
176
|
+
if (dropped > 0) {
|
177
|
+
ESP_LOGW(TAG, "Dropped %zu BLE scan results due to buffer overflow", dropped);
|
164
178
|
}
|
165
|
-
this->scan_result_index_ = 0;
|
166
|
-
xSemaphoreGive(this->scan_result_lock_);
|
167
179
|
}
|
168
180
|
if (this->scanner_state_ == ScannerState::STOPPED) {
|
169
181
|
this->end_of_scan_(); // Change state to IDLE
|
@@ -172,7 +184,7 @@ void ESP32BLETracker::loop() {
|
|
172
184
|
(this->scan_set_param_failed_ && this->scanner_state_ == ScannerState::RUNNING)) {
|
173
185
|
this->stop_scan_();
|
174
186
|
if (this->scan_start_fail_count_ == std::numeric_limits<uint8_t>::max()) {
|
175
|
-
ESP_LOGE(TAG, "
|
187
|
+
ESP_LOGE(TAG, "Scan could not restart after %d attempts, rebooting to restore stack (IDF)",
|
176
188
|
std::numeric_limits<uint8_t>::max());
|
177
189
|
App.reboot();
|
178
190
|
}
|
@@ -219,10 +231,10 @@ void ESP32BLETracker::loop() {
|
|
219
231
|
for (auto *client : this->clients_) {
|
220
232
|
if (client->state() == ClientState::DISCOVERED) {
|
221
233
|
if (this->scanner_state_ == ScannerState::RUNNING) {
|
222
|
-
ESP_LOGD(TAG, "Stopping scan to make connection
|
234
|
+
ESP_LOGD(TAG, "Stopping scan to make connection");
|
223
235
|
this->stop_scan_();
|
224
236
|
} else if (this->scanner_state_ == ScannerState::IDLE) {
|
225
|
-
ESP_LOGD(TAG, "Promoting client to connect
|
237
|
+
ESP_LOGD(TAG, "Promoting client to connect");
|
226
238
|
// We only want to promote one client at a time.
|
227
239
|
// once the scanner is fully stopped.
|
228
240
|
#ifdef USE_ESP32_BLE_SOFTWARE_COEXISTENCE
|
@@ -306,7 +318,7 @@ void ESP32BLETracker::start_scan_(bool first) {
|
|
306
318
|
|
307
319
|
// Start timeout before scan is started. Otherwise scan never starts if any error.
|
308
320
|
this->set_timeout("scan", this->scan_duration_ * 2000, []() {
|
309
|
-
ESP_LOGE(TAG, "
|
321
|
+
ESP_LOGE(TAG, "Scan never terminated, rebooting to restore stack (IDF)");
|
310
322
|
App.reboot();
|
311
323
|
});
|
312
324
|
|
@@ -370,9 +382,6 @@ void ESP32BLETracker::recalculate_advertisement_parser_types() {
|
|
370
382
|
|
371
383
|
void ESP32BLETracker::gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param) {
|
372
384
|
switch (event) {
|
373
|
-
case ESP_GAP_BLE_SCAN_RESULT_EVT:
|
374
|
-
this->gap_scan_result_(param->scan_rst);
|
375
|
-
break;
|
376
385
|
case ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT:
|
377
386
|
this->gap_scan_set_param_complete_(param->scan_param_cmpl);
|
378
387
|
break;
|
@@ -385,11 +394,57 @@ void ESP32BLETracker::gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_ga
|
|
385
394
|
default:
|
386
395
|
break;
|
387
396
|
}
|
397
|
+
// Forward all events to clients (scan results are handled separately via gap_scan_event_handler)
|
388
398
|
for (auto *client : this->clients_) {
|
389
399
|
client->gap_event_handler(event, param);
|
390
400
|
}
|
391
401
|
}
|
392
402
|
|
403
|
+
void ESP32BLETracker::gap_scan_event_handler(const BLEScanResult &scan_result) {
|
404
|
+
ESP_LOGV(TAG, "gap_scan_result - event %d", scan_result.search_evt);
|
405
|
+
|
406
|
+
if (scan_result.search_evt == ESP_GAP_SEARCH_INQ_RES_EVT) {
|
407
|
+
// Lock-free SPSC ring buffer write (Producer side)
|
408
|
+
// This runs in the ESP-IDF Bluetooth stack callback thread
|
409
|
+
// IMPORTANT: Only this thread writes to ring_write_index_
|
410
|
+
|
411
|
+
// Load our own index with relaxed ordering (we're the only writer)
|
412
|
+
size_t write_idx = this->ring_write_index_.load(std::memory_order_relaxed);
|
413
|
+
size_t next_write_idx = (write_idx + 1) % SCAN_RESULT_BUFFER_SIZE;
|
414
|
+
|
415
|
+
// Load consumer's index with acquire to see their latest updates
|
416
|
+
size_t read_idx = this->ring_read_index_.load(std::memory_order_acquire);
|
417
|
+
|
418
|
+
// Check if buffer is full
|
419
|
+
if (next_write_idx != read_idx) {
|
420
|
+
// Write to ring buffer
|
421
|
+
this->scan_ring_buffer_[write_idx] = scan_result;
|
422
|
+
|
423
|
+
// Store with release to ensure the write is visible before index update
|
424
|
+
this->ring_write_index_.store(next_write_idx, std::memory_order_release);
|
425
|
+
} else {
|
426
|
+
// Buffer full, track dropped results
|
427
|
+
this->scan_results_dropped_.fetch_add(1, std::memory_order_relaxed);
|
428
|
+
}
|
429
|
+
} else if (scan_result.search_evt == ESP_GAP_SEARCH_INQ_CMPL_EVT) {
|
430
|
+
// Scan finished on its own
|
431
|
+
if (this->scanner_state_ != ScannerState::RUNNING) {
|
432
|
+
if (this->scanner_state_ == ScannerState::STOPPING) {
|
433
|
+
ESP_LOGE(TAG, "Scan was not running when scan completed.");
|
434
|
+
} else if (this->scanner_state_ == ScannerState::STARTING) {
|
435
|
+
ESP_LOGE(TAG, "Scan was not started when scan completed.");
|
436
|
+
} else if (this->scanner_state_ == ScannerState::FAILED) {
|
437
|
+
ESP_LOGE(TAG, "Scan was in failed state when scan completed.");
|
438
|
+
} else if (this->scanner_state_ == ScannerState::IDLE) {
|
439
|
+
ESP_LOGE(TAG, "Scan was idle when scan completed.");
|
440
|
+
} else if (this->scanner_state_ == ScannerState::STOPPED) {
|
441
|
+
ESP_LOGE(TAG, "Scan was stopped when scan completed.");
|
442
|
+
}
|
443
|
+
}
|
444
|
+
this->set_scanner_state_(ScannerState::STOPPED);
|
445
|
+
}
|
446
|
+
}
|
447
|
+
|
393
448
|
void ESP32BLETracker::gap_scan_set_param_complete_(const esp_ble_gap_cb_param_t::ble_scan_param_cmpl_evt_param ¶m) {
|
394
449
|
ESP_LOGV(TAG, "gap_scan_set_param_complete - status %d", param.status);
|
395
450
|
if (param.status == ESP_BT_STATUS_DONE) {
|
@@ -444,34 +499,6 @@ void ESP32BLETracker::gap_scan_stop_complete_(const esp_ble_gap_cb_param_t::ble_
|
|
444
499
|
this->set_scanner_state_(ScannerState::STOPPED);
|
445
500
|
}
|
446
501
|
|
447
|
-
void ESP32BLETracker::gap_scan_result_(const esp_ble_gap_cb_param_t::ble_scan_result_evt_param ¶m) {
|
448
|
-
ESP_LOGV(TAG, "gap_scan_result - event %d", param.search_evt);
|
449
|
-
if (param.search_evt == ESP_GAP_SEARCH_INQ_RES_EVT) {
|
450
|
-
if (xSemaphoreTake(this->scan_result_lock_, 0)) {
|
451
|
-
if (this->scan_result_index_ < ESP32BLETracker::SCAN_RESULT_BUFFER_SIZE) {
|
452
|
-
this->scan_result_buffer_[this->scan_result_index_++] = param;
|
453
|
-
}
|
454
|
-
xSemaphoreGive(this->scan_result_lock_);
|
455
|
-
}
|
456
|
-
} else if (param.search_evt == ESP_GAP_SEARCH_INQ_CMPL_EVT) {
|
457
|
-
// Scan finished on its own
|
458
|
-
if (this->scanner_state_ != ScannerState::RUNNING) {
|
459
|
-
if (this->scanner_state_ == ScannerState::STOPPING) {
|
460
|
-
ESP_LOGE(TAG, "Scan was not running when scan completed.");
|
461
|
-
} else if (this->scanner_state_ == ScannerState::STARTING) {
|
462
|
-
ESP_LOGE(TAG, "Scan was not started when scan completed.");
|
463
|
-
} else if (this->scanner_state_ == ScannerState::FAILED) {
|
464
|
-
ESP_LOGE(TAG, "Scan was in failed state when scan completed.");
|
465
|
-
} else if (this->scanner_state_ == ScannerState::IDLE) {
|
466
|
-
ESP_LOGE(TAG, "Scan was idle when scan completed.");
|
467
|
-
} else if (this->scanner_state_ == ScannerState::STOPPED) {
|
468
|
-
ESP_LOGE(TAG, "Scan was stopped when scan completed.");
|
469
|
-
}
|
470
|
-
}
|
471
|
-
this->set_scanner_state_(ScannerState::STOPPED);
|
472
|
-
}
|
473
|
-
}
|
474
|
-
|
475
502
|
void ESP32BLETracker::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if,
|
476
503
|
esp_ble_gattc_cb_param_t *param) {
|
477
504
|
for (auto *client : this->clients_) {
|
@@ -494,13 +521,15 @@ optional<ESPBLEiBeacon> ESPBLEiBeacon::from_manufacturer_data(const ServiceData
|
|
494
521
|
return ESPBLEiBeacon(data.data.data());
|
495
522
|
}
|
496
523
|
|
497
|
-
void ESPBTDevice::parse_scan_rst(const
|
498
|
-
this->scan_result_ = param;
|
524
|
+
void ESPBTDevice::parse_scan_rst(const BLEScanResult &scan_result) {
|
499
525
|
for (uint8_t i = 0; i < ESP_BD_ADDR_LEN; i++)
|
500
|
-
this->address_[i] =
|
501
|
-
this->address_type_ =
|
502
|
-
this->rssi_ =
|
503
|
-
|
526
|
+
this->address_[i] = scan_result.bda[i];
|
527
|
+
this->address_type_ = static_cast<esp_ble_addr_type_t>(scan_result.ble_addr_type);
|
528
|
+
this->rssi_ = scan_result.rssi;
|
529
|
+
|
530
|
+
// Parse advertisement data directly
|
531
|
+
uint8_t total_len = scan_result.adv_data_len + scan_result.scan_rsp_len;
|
532
|
+
this->parse_adv_(scan_result.ble_adv, total_len);
|
504
533
|
|
505
534
|
#ifdef ESPHOME_LOG_HAS_VERY_VERBOSE
|
506
535
|
ESP_LOGVV(TAG, "Parse Result:");
|
@@ -558,13 +587,13 @@ void ESPBTDevice::parse_scan_rst(const esp_ble_gap_cb_param_t::ble_scan_result_e
|
|
558
587
|
ESP_LOGVV(TAG, " Data: %s", format_hex_pretty(data.data).c_str());
|
559
588
|
}
|
560
589
|
|
561
|
-
ESP_LOGVV(TAG, " Adv data: %s",
|
590
|
+
ESP_LOGVV(TAG, " Adv data: %s",
|
591
|
+
format_hex_pretty(scan_result.ble_adv, scan_result.adv_data_len + scan_result.scan_rsp_len).c_str());
|
562
592
|
#endif
|
563
593
|
}
|
564
|
-
|
594
|
+
|
595
|
+
void ESPBTDevice::parse_adv_(const uint8_t *payload, uint8_t len) {
|
565
596
|
size_t offset = 0;
|
566
|
-
const uint8_t *payload = param.ble_adv;
|
567
|
-
uint8_t len = param.adv_data_len + param.scan_rsp_len;
|
568
597
|
|
569
598
|
while (offset + 2 < len) {
|
570
599
|
const uint8_t field_length = payload[offset++]; // First byte is length of adv record
|
@@ -731,11 +760,14 @@ uint64_t ESPBTDevice::address_uint64() const { return esp32_ble::ble_addr_to_uin
|
|
731
760
|
|
732
761
|
void ESP32BLETracker::dump_config() {
|
733
762
|
ESP_LOGCONFIG(TAG, "BLE Tracker:");
|
734
|
-
ESP_LOGCONFIG(TAG,
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
|
763
|
+
ESP_LOGCONFIG(TAG,
|
764
|
+
" Scan Duration: %" PRIu32 " s\n"
|
765
|
+
" Scan Interval: %.1f ms\n"
|
766
|
+
" Scan Window: %.1f ms\n"
|
767
|
+
" Scan Type: %s\n"
|
768
|
+
" Continuous Scanning: %s",
|
769
|
+
this->scan_duration_, this->scan_interval_ * 0.625f, this->scan_window_ * 0.625f,
|
770
|
+
this->scan_active_ ? "ACTIVE" : "PASSIVE", YESNO(this->scan_continuous_));
|
739
771
|
switch (this->scanner_state_) {
|
740
772
|
case ScannerState::IDLE:
|
741
773
|
ESP_LOGCONFIG(TAG, " Scanner State: IDLE");
|
@@ -6,6 +6,7 @@
|
|
6
6
|
#include "esphome/core/helpers.h"
|
7
7
|
|
8
8
|
#include <array>
|
9
|
+
#include <atomic>
|
9
10
|
#include <string>
|
10
11
|
#include <vector>
|
11
12
|
|
@@ -62,7 +63,7 @@ class ESPBLEiBeacon {
|
|
62
63
|
|
63
64
|
class ESPBTDevice {
|
64
65
|
public:
|
65
|
-
void parse_scan_rst(const
|
66
|
+
void parse_scan_rst(const BLEScanResult &scan_result);
|
66
67
|
|
67
68
|
std::string address_str() const;
|
68
69
|
|
@@ -84,8 +85,6 @@ class ESPBTDevice {
|
|
84
85
|
|
85
86
|
const std::vector<ServiceData> &get_service_datas() const { return service_datas_; }
|
86
87
|
|
87
|
-
const esp_ble_gap_cb_param_t::ble_scan_result_evt_param &get_scan_result() const { return scan_result_; }
|
88
|
-
|
89
88
|
bool resolve_irk(const uint8_t *irk) const;
|
90
89
|
|
91
90
|
optional<ESPBLEiBeacon> get_ibeacon() const {
|
@@ -98,7 +97,7 @@ class ESPBTDevice {
|
|
98
97
|
}
|
99
98
|
|
100
99
|
protected:
|
101
|
-
void parse_adv_(const
|
100
|
+
void parse_adv_(const uint8_t *payload, uint8_t len);
|
102
101
|
|
103
102
|
esp_bd_addr_t address_{
|
104
103
|
0,
|
@@ -112,7 +111,6 @@ class ESPBTDevice {
|
|
112
111
|
std::vector<ESPBTUUID> service_uuids_{};
|
113
112
|
std::vector<ServiceData> manufacturer_datas_{};
|
114
113
|
std::vector<ServiceData> service_datas_{};
|
115
|
-
esp_ble_gap_cb_param_t::ble_scan_result_evt_param scan_result_{};
|
116
114
|
};
|
117
115
|
|
118
116
|
class ESP32BLETracker;
|
@@ -121,9 +119,7 @@ class ESPBTDeviceListener {
|
|
121
119
|
public:
|
122
120
|
virtual void on_scan_end() {}
|
123
121
|
virtual bool parse_device(const ESPBTDevice &device) = 0;
|
124
|
-
virtual bool parse_devices(
|
125
|
-
return false;
|
126
|
-
};
|
122
|
+
virtual bool parse_devices(const BLEScanResult *scan_results, size_t count) { return false; };
|
127
123
|
virtual AdvertisementParserType get_advertisement_parser_type() {
|
128
124
|
return AdvertisementParserType::PARSED_ADVERTISEMENTS;
|
129
125
|
};
|
@@ -210,6 +206,7 @@ class ESPBTClient : public ESPBTDeviceListener {
|
|
210
206
|
|
211
207
|
class ESP32BLETracker : public Component,
|
212
208
|
public GAPEventHandler,
|
209
|
+
public GAPScanEventHandler,
|
213
210
|
public GATTcEventHandler,
|
214
211
|
public BLEStatusEventHandler,
|
215
212
|
public Parented<ESP32BLE> {
|
@@ -240,6 +237,7 @@ class ESP32BLETracker : public Component,
|
|
240
237
|
void gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if,
|
241
238
|
esp_ble_gattc_cb_param_t *param) override;
|
242
239
|
void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param) override;
|
240
|
+
void gap_scan_event_handler(const BLEScanResult &scan_result) override;
|
243
241
|
void ble_before_disabled_event_handler() override;
|
244
242
|
|
245
243
|
void add_scanner_state_callback(std::function<void(ScannerState)> &&callback) {
|
@@ -285,14 +283,16 @@ class ESP32BLETracker : public Component,
|
|
285
283
|
bool ble_was_disabled_{true};
|
286
284
|
bool raw_advertisements_{false};
|
287
285
|
bool parse_advertisements_{false};
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
286
|
+
|
287
|
+
// Lock-free Single-Producer Single-Consumer (SPSC) ring buffer for scan results
|
288
|
+
// Producer: ESP-IDF Bluetooth stack callback (gap_scan_event_handler)
|
289
|
+
// Consumer: ESPHome main loop (loop() method)
|
290
|
+
// This design ensures zero blocking in the BT callback and prevents scan result loss
|
291
|
+
BLEScanResult *scan_ring_buffer_;
|
292
|
+
std::atomic<size_t> ring_write_index_{0}; // Written only by BT callback (producer)
|
293
|
+
std::atomic<size_t> ring_read_index_{0}; // Written only by main loop (consumer)
|
294
|
+
std::atomic<size_t> scan_results_dropped_{0}; // Tracks buffer overflow events
|
295
|
+
|
296
296
|
esp_bt_status_t scan_start_failed_{ESP_BT_STATUS_SUCCESS};
|
297
297
|
esp_bt_status_t scan_set_param_failed_{ESP_BT_STATUS_SUCCESS};
|
298
298
|
int connecting_{0};
|
@@ -46,17 +46,20 @@ void ESP32Camera::setup() {
|
|
46
46
|
|
47
47
|
void ESP32Camera::dump_config() {
|
48
48
|
auto conf = this->config_;
|
49
|
-
ESP_LOGCONFIG(TAG,
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
49
|
+
ESP_LOGCONFIG(TAG,
|
50
|
+
"ESP32 Camera:\n"
|
51
|
+
" Name: %s\n"
|
52
|
+
" Internal: %s\n"
|
53
|
+
" Data Pins: D0:%d D1:%d D2:%d D3:%d D4:%d D5:%d D6:%d D7:%d\n"
|
54
|
+
" VSYNC Pin: %d\n"
|
55
|
+
" HREF Pin: %d\n"
|
56
|
+
" Pixel Clock Pin: %d\n"
|
57
|
+
" External Clock: Pin:%d Frequency:%u\n"
|
58
|
+
" I2C Pins: SDA:%d SCL:%d\n"
|
59
|
+
" Reset Pin: %d",
|
60
|
+
this->name_.c_str(), YESNO(this->is_internal()), conf.pin_d0, conf.pin_d1, conf.pin_d2, conf.pin_d3,
|
61
|
+
conf.pin_d4, conf.pin_d5, conf.pin_d6, conf.pin_d7, conf.pin_vsync, conf.pin_href, conf.pin_pclk,
|
62
|
+
conf.pin_xclk, conf.xclk_freq_hz, conf.pin_sccb_sda, conf.pin_sccb_scl, conf.pin_reset);
|
60
63
|
switch (this->config_.frame_size) {
|
61
64
|
case FRAMESIZE_QQVGA:
|
62
65
|
ESP_LOGCONFIG(TAG, " Resolution: 160x120 (QQVGA)");
|
@@ -123,24 +126,29 @@ void ESP32Camera::dump_config() {
|
|
123
126
|
|
124
127
|
sensor_t *s = esp_camera_sensor_get();
|
125
128
|
auto st = s->status;
|
126
|
-
ESP_LOGCONFIG(TAG,
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
129
|
+
ESP_LOGCONFIG(TAG,
|
130
|
+
" JPEG Quality: %u\n"
|
131
|
+
" Framebuffer Count: %u\n"
|
132
|
+
" Contrast: %d\n"
|
133
|
+
" Brightness: %d\n"
|
134
|
+
" Saturation: %d\n"
|
135
|
+
" Vertical Flip: %s\n"
|
136
|
+
" Horizontal Mirror: %s\n"
|
137
|
+
" Special Effect: %u\n"
|
138
|
+
" White Balance Mode: %u",
|
139
|
+
st.quality, conf.fb_count, st.contrast, st.brightness, st.saturation, ONOFF(st.vflip),
|
140
|
+
ONOFF(st.hmirror), st.special_effect, st.wb_mode);
|
135
141
|
// ESP_LOGCONFIG(TAG, " Auto White Balance: %u", st.awb);
|
136
142
|
// ESP_LOGCONFIG(TAG, " Auto White Balance Gain: %u", st.awb_gain);
|
137
|
-
ESP_LOGCONFIG(TAG,
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
143
|
+
ESP_LOGCONFIG(TAG,
|
144
|
+
" Auto Exposure Control: %u\n"
|
145
|
+
" Auto Exposure Control 2: %u\n"
|
146
|
+
" Auto Exposure Level: %d\n"
|
147
|
+
" Auto Exposure Value: %u\n"
|
148
|
+
" AGC: %u\n"
|
149
|
+
" AGC Gain: %u\n"
|
150
|
+
" Gain Ceiling: %u",
|
151
|
+
st.aec, st.aec2, st.ae_level, st.aec_value, st.agc, st.agc_gain, st.gainceiling);
|
144
152
|
// ESP_LOGCONFIG(TAG, " BPC: %u", st.bpc);
|
145
153
|
// ESP_LOGCONFIG(TAG, " WPC: %u", st.wpc);
|
146
154
|
// ESP_LOGCONFIG(TAG, " RAW_GMA: %u", st.raw_gma);
|
@@ -85,8 +85,10 @@ void CameraWebServer::on_shutdown() {
|
|
85
85
|
}
|
86
86
|
|
87
87
|
void CameraWebServer::dump_config() {
|
88
|
-
ESP_LOGCONFIG(TAG,
|
89
|
-
|
88
|
+
ESP_LOGCONFIG(TAG,
|
89
|
+
"ESP32 Camera Web Server:\n"
|
90
|
+
" Port: %d",
|
91
|
+
this->port_);
|
90
92
|
if (this->mode_ == STREAM) {
|
91
93
|
ESP_LOGCONFIG(TAG, " Mode: stream");
|
92
94
|
} else {
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#include "esp32_dac.h"
|
2
|
-
#include "esphome/core/log.h"
|
3
2
|
#include "esphome/core/helpers.h"
|
3
|
+
#include "esphome/core/log.h"
|
4
4
|
|
5
5
|
#ifdef USE_ESP32
|
6
6
|
|
@@ -20,7 +20,7 @@ static constexpr uint8_t DAC0_PIN = 25;
|
|
20
20
|
static const char *const TAG = "esp32_dac";
|
21
21
|
|
22
22
|
void ESP32DAC::setup() {
|
23
|
-
ESP_LOGCONFIG(TAG, "
|
23
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
24
24
|
this->pin_->setup();
|
25
25
|
this->turn_off();
|
26
26
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
from esphome import automation
|
2
2
|
import esphome.codegen as cg
|
3
|
-
from esphome.components import binary_sensor, output
|
3
|
+
from esphome.components import binary_sensor, esp32_ble, output
|
4
|
+
from esphome.components.esp32_ble import BTLoggers
|
4
5
|
import esphome.config_validation as cv
|
5
6
|
from esphome.const import CONF_ID, CONF_ON_STATE, CONF_TRIGGER_ID
|
6
7
|
|
@@ -94,6 +95,9 @@ CONFIG_SCHEMA = cv.Schema(
|
|
94
95
|
|
95
96
|
|
96
97
|
async def to_code(config):
|
98
|
+
# Register the loggers this component needs
|
99
|
+
esp32_ble.register_bt_logger(BTLoggers.GATT, BTLoggers.SMP)
|
100
|
+
|
97
101
|
var = cg.new_Pvariable(config[CONF_ID])
|
98
102
|
await cg.register_component(var, config)
|
99
103
|
|
@@ -324,10 +324,10 @@ void ESP32ImprovComponent::process_incoming_data_() {
|
|
324
324
|
this->incoming_data_.clear();
|
325
325
|
}
|
326
326
|
} else if (this->incoming_data_.size() - 2 > length) {
|
327
|
-
ESP_LOGV(TAG, "Too much data received or data malformed; resetting buffer
|
327
|
+
ESP_LOGV(TAG, "Too much data received or data malformed; resetting buffer");
|
328
328
|
this->incoming_data_.clear();
|
329
329
|
} else {
|
330
|
-
ESP_LOGV(TAG, "Waiting for split data packets
|
330
|
+
ESP_LOGV(TAG, "Waiting for split data packets");
|
331
331
|
}
|
332
332
|
}
|
333
333
|
|
@@ -22,7 +22,7 @@ static const uint8_t RMT_CLK_DIV = 2;
|
|
22
22
|
#endif
|
23
23
|
|
24
24
|
void ESP32RMTLEDStripLightOutput::setup() {
|
25
|
-
ESP_LOGCONFIG(TAG, "
|
25
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
26
26
|
|
27
27
|
size_t buffer_size = this->get_buffer_size_();
|
28
28
|
|
@@ -143,7 +143,7 @@ void ESP32RMTLEDStripLightOutput::write_state(light::LightState *state) {
|
|
143
143
|
this->last_refresh_ = now;
|
144
144
|
this->mark_shown_();
|
145
145
|
|
146
|
-
ESP_LOGVV(TAG, "Writing RGB values to bus
|
146
|
+
ESP_LOGVV(TAG, "Writing RGB values to bus");
|
147
147
|
|
148
148
|
#if ESP_IDF_VERSION_MAJOR >= 5
|
149
149
|
esp_err_t error = rmt_tx_wait_all_done(this->channel_, 1000);
|
@@ -247,8 +247,10 @@ light::ESPColorView ESP32RMTLEDStripLightOutput::get_view_internal(int32_t index
|
|
247
247
|
}
|
248
248
|
|
249
249
|
void ESP32RMTLEDStripLightOutput::dump_config() {
|
250
|
-
ESP_LOGCONFIG(TAG,
|
251
|
-
|
250
|
+
ESP_LOGCONFIG(TAG,
|
251
|
+
"ESP32 RMT LED Strip:\n"
|
252
|
+
" Pin: %u",
|
253
|
+
this->pin_);
|
252
254
|
#if ESP_IDF_VERSION_MAJOR >= 5
|
253
255
|
ESP_LOGCONFIG(TAG, " RMT Symbols: %" PRIu32, this->rmt_symbols_);
|
254
256
|
#else
|
@@ -278,9 +280,11 @@ void ESP32RMTLEDStripLightOutput::dump_config() {
|
|
278
280
|
rgb_order = "UNKNOWN";
|
279
281
|
break;
|
280
282
|
}
|
281
|
-
ESP_LOGCONFIG(TAG,
|
282
|
-
|
283
|
-
|
283
|
+
ESP_LOGCONFIG(TAG,
|
284
|
+
" RGB Order: %s\n"
|
285
|
+
" Max refresh rate: %" PRIu32 "\n"
|
286
|
+
" Number of LEDs: %u",
|
287
|
+
rgb_order, *this->max_refresh_rate_, this->num_leds_);
|
284
288
|
}
|
285
289
|
|
286
290
|
float ESP32RMTLEDStripLightOutput::get_setup_priority() const { return setup_priority::HARDWARE; }
|
@@ -131,7 +131,9 @@ CONFIG_SCHEMA = cv.All(
|
|
131
131
|
esp32_idf=192,
|
132
132
|
esp32_s2_idf=192,
|
133
133
|
esp32_s3_idf=192,
|
134
|
+
esp32_p4_idf=192,
|
134
135
|
esp32_c3_idf=96,
|
136
|
+
esp32_c5_idf=96,
|
135
137
|
esp32_c6_idf=96,
|
136
138
|
esp32_h2_idf=96,
|
137
139
|
): cv.All(only_with_new_rmt_driver, cv.int_range(min=2)),
|
@@ -140,7 +142,9 @@ CONFIG_SCHEMA = cv.All(
|
|
140
142
|
cv.Optional(CONF_IS_RGBW, default=False): cv.boolean,
|
141
143
|
cv.Optional(CONF_IS_WRGB, default=False): cv.boolean,
|
142
144
|
cv.Optional(CONF_USE_DMA): cv.All(
|
143
|
-
esp32.only_on_variant(
|
145
|
+
esp32.only_on_variant(
|
146
|
+
supported=[esp32.const.VARIANT_ESP32S3, esp32.const.VARIANT_ESP32P4]
|
147
|
+
),
|
144
148
|
cv.only_with_esp_idf,
|
145
149
|
cv.boolean,
|
146
150
|
),
|
@@ -13,7 +13,7 @@ namespace esp32_touch {
|
|
13
13
|
static const char *const TAG = "esp32_touch";
|
14
14
|
|
15
15
|
void ESP32TouchComponent::setup() {
|
16
|
-
ESP_LOGCONFIG(TAG, "
|
16
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
17
17
|
touch_pad_init();
|
18
18
|
// set up and enable/start filtering based on ESP32 variant
|
19
19
|
#if defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3)
|
@@ -75,9 +75,11 @@ void ESP32TouchComponent::setup() {
|
|
75
75
|
}
|
76
76
|
|
77
77
|
void ESP32TouchComponent::dump_config() {
|
78
|
-
ESP_LOGCONFIG(TAG,
|
79
|
-
|
80
|
-
|
78
|
+
ESP_LOGCONFIG(TAG,
|
79
|
+
"Config for ESP32 Touch Hub:\n"
|
80
|
+
" Meas cycle: %.2fms\n"
|
81
|
+
" Sleep cycle: %.2fms",
|
82
|
+
this->meas_cycle_ / (8000000.0f / 1000.0f), this->sleep_cycle_ / (150000.0f / 1000.0f));
|
81
83
|
|
82
84
|
const char *lv_s;
|
83
85
|
switch (this->low_voltage_reference_) {
|
@@ -171,10 +173,12 @@ void ESP32TouchComponent::dump_config() {
|
|
171
173
|
filter_mode_s = "UNKNOWN";
|
172
174
|
break;
|
173
175
|
}
|
174
|
-
ESP_LOGCONFIG(TAG,
|
175
|
-
|
176
|
-
|
177
|
-
|
176
|
+
ESP_LOGCONFIG(TAG,
|
177
|
+
" Filter mode: %s\n"
|
178
|
+
" Debounce count: %" PRIu32 "\n"
|
179
|
+
" Noise threshold coefficient: %" PRIu32 "\n"
|
180
|
+
" Jitter filter step size: %" PRIu32,
|
181
|
+
filter_mode_s, this->debounce_count_, this->noise_threshold_, this->jitter_step_);
|
178
182
|
const char *smooth_level_s;
|
179
183
|
switch (this->smooth_level_) {
|
180
184
|
case TOUCH_PAD_SMOOTH_OFF:
|