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
esphome/core/component.cpp
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#include "esphome/core/component.h"
|
2
2
|
|
3
3
|
#include <cinttypes>
|
4
|
+
#include <limits>
|
4
5
|
#include <utility>
|
5
6
|
#include "esphome/core/application.h"
|
6
7
|
#include "esphome/core/hal.h"
|
@@ -29,18 +30,20 @@ const float LATE = -100.0f;
|
|
29
30
|
|
30
31
|
} // namespace setup_priority
|
31
32
|
|
32
|
-
|
33
|
-
const
|
34
|
-
const
|
35
|
-
const
|
36
|
-
const
|
37
|
-
const
|
38
|
-
|
39
|
-
const
|
40
|
-
const
|
41
|
-
|
42
|
-
const
|
43
|
-
|
33
|
+
// Component state uses bits 0-1 (4 states)
|
34
|
+
const uint8_t COMPONENT_STATE_MASK = 0x03;
|
35
|
+
const uint8_t COMPONENT_STATE_CONSTRUCTION = 0x00;
|
36
|
+
const uint8_t COMPONENT_STATE_SETUP = 0x01;
|
37
|
+
const uint8_t COMPONENT_STATE_LOOP = 0x02;
|
38
|
+
const uint8_t COMPONENT_STATE_FAILED = 0x03;
|
39
|
+
// Status LED uses bits 2-3
|
40
|
+
const uint8_t STATUS_LED_MASK = 0x0C;
|
41
|
+
const uint8_t STATUS_LED_OK = 0x00;
|
42
|
+
const uint8_t STATUS_LED_WARNING = 0x04; // Bit 2
|
43
|
+
const uint8_t STATUS_LED_ERROR = 0x08; // Bit 3
|
44
|
+
|
45
|
+
const uint16_t WARN_IF_BLOCKING_OVER_MS = 50U; ///< Initial blocking time allowed without warning
|
46
|
+
const uint16_t WARN_IF_BLOCKING_INCREMENT_MS = 10U; ///< How long the blocking time must be larger to warn again
|
44
47
|
|
45
48
|
uint32_t global_state = 0; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
|
46
49
|
|
@@ -86,9 +89,9 @@ void Component::call_dump_config() {
|
|
86
89
|
}
|
87
90
|
}
|
88
91
|
|
89
|
-
|
92
|
+
uint8_t Component::get_component_state() const { return this->component_state_; }
|
90
93
|
void Component::call() {
|
91
|
-
|
94
|
+
uint8_t state = this->component_state_ & COMPONENT_STATE_MASK;
|
92
95
|
switch (state) {
|
93
96
|
case COMPONENT_STATE_CONSTRUCTION:
|
94
97
|
// State Construction: Call setup and set state to setup
|
@@ -120,7 +123,13 @@ const char *Component::get_component_source() const {
|
|
120
123
|
}
|
121
124
|
bool Component::should_warn_of_blocking(uint32_t blocking_time) {
|
122
125
|
if (blocking_time > this->warn_if_blocking_over_) {
|
123
|
-
|
126
|
+
// Prevent overflow when adding increment - if we're about to overflow, just max out
|
127
|
+
if (blocking_time + WARN_IF_BLOCKING_INCREMENT_MS < blocking_time ||
|
128
|
+
blocking_time + WARN_IF_BLOCKING_INCREMENT_MS > std::numeric_limits<uint16_t>::max()) {
|
129
|
+
this->warn_if_blocking_over_ = std::numeric_limits<uint16_t>::max();
|
130
|
+
} else {
|
131
|
+
this->warn_if_blocking_over_ = static_cast<uint16_t>(blocking_time + WARN_IF_BLOCKING_INCREMENT_MS);
|
132
|
+
}
|
124
133
|
return true;
|
125
134
|
}
|
126
135
|
return false;
|
@@ -131,6 +140,18 @@ void Component::mark_failed() {
|
|
131
140
|
this->component_state_ |= COMPONENT_STATE_FAILED;
|
132
141
|
this->status_set_error();
|
133
142
|
}
|
143
|
+
void Component::reset_to_construction_state() {
|
144
|
+
if ((this->component_state_ & COMPONENT_STATE_MASK) == COMPONENT_STATE_FAILED) {
|
145
|
+
ESP_LOGI(TAG, "Component %s is being reset to construction state.", this->get_component_source());
|
146
|
+
this->component_state_ &= ~COMPONENT_STATE_MASK;
|
147
|
+
this->component_state_ |= COMPONENT_STATE_CONSTRUCTION;
|
148
|
+
// Clear error status when resetting
|
149
|
+
this->status_clear_error();
|
150
|
+
}
|
151
|
+
}
|
152
|
+
bool Component::is_in_loop_state() const {
|
153
|
+
return (this->component_state_ & COMPONENT_STATE_MASK) == COMPONENT_STATE_LOOP;
|
154
|
+
}
|
134
155
|
void Component::defer(std::function<void()> &&f) { // NOLINT
|
135
156
|
App.scheduler.set_timeout(this, "", 0, std::move(f));
|
136
157
|
}
|
esphome/core/component.h
CHANGED
@@ -53,19 +53,19 @@ static const uint32_t SCHEDULER_DONT_RUN = 4294967295UL;
|
|
53
53
|
ESP_LOGCONFIG(TAG, " Update Interval: %.1fs", this->get_update_interval() / 1000.0f); \
|
54
54
|
}
|
55
55
|
|
56
|
-
extern const
|
57
|
-
extern const
|
58
|
-
extern const
|
59
|
-
extern const
|
60
|
-
extern const
|
61
|
-
extern const
|
62
|
-
extern const
|
63
|
-
extern const
|
64
|
-
extern const
|
56
|
+
extern const uint8_t COMPONENT_STATE_MASK;
|
57
|
+
extern const uint8_t COMPONENT_STATE_CONSTRUCTION;
|
58
|
+
extern const uint8_t COMPONENT_STATE_SETUP;
|
59
|
+
extern const uint8_t COMPONENT_STATE_LOOP;
|
60
|
+
extern const uint8_t COMPONENT_STATE_FAILED;
|
61
|
+
extern const uint8_t STATUS_LED_MASK;
|
62
|
+
extern const uint8_t STATUS_LED_OK;
|
63
|
+
extern const uint8_t STATUS_LED_WARNING;
|
64
|
+
extern const uint8_t STATUS_LED_ERROR;
|
65
65
|
|
66
66
|
enum class RetryResult { DONE, RETRY };
|
67
67
|
|
68
|
-
extern const
|
68
|
+
extern const uint16_t WARN_IF_BLOCKING_OVER_MS;
|
69
69
|
|
70
70
|
class Component {
|
71
71
|
public:
|
@@ -110,7 +110,32 @@ class Component {
|
|
110
110
|
virtual void on_shutdown() {}
|
111
111
|
virtual void on_safe_shutdown() {}
|
112
112
|
|
113
|
-
|
113
|
+
/** Called during teardown to allow component to gracefully finish operations.
|
114
|
+
*
|
115
|
+
* @return true if teardown is complete, false if more time is needed
|
116
|
+
*/
|
117
|
+
virtual bool teardown() { return true; }
|
118
|
+
|
119
|
+
/** Called after teardown is complete to power down hardware.
|
120
|
+
*
|
121
|
+
* This is called after all components have finished their teardown process,
|
122
|
+
* making it safe to power down hardware like ethernet PHY.
|
123
|
+
*/
|
124
|
+
virtual void on_powerdown() {}
|
125
|
+
|
126
|
+
uint8_t get_component_state() const;
|
127
|
+
|
128
|
+
/** Reset this component back to the construction state to allow setup to run again.
|
129
|
+
*
|
130
|
+
* This can be used by components that have recoverable failures to attempt setup again.
|
131
|
+
*/
|
132
|
+
void reset_to_construction_state();
|
133
|
+
|
134
|
+
/** Check if this component has completed setup and is in the loop state.
|
135
|
+
*
|
136
|
+
* @return True if in loop state, false otherwise.
|
137
|
+
*/
|
138
|
+
bool is_in_loop_state() const;
|
114
139
|
|
115
140
|
/** Mark this component as failed. Any future timeouts/intervals/setup/loop will no longer be called.
|
116
141
|
*
|
@@ -285,10 +310,15 @@ class Component {
|
|
285
310
|
/// Cancel a defer callback using the specified name, name must not be empty.
|
286
311
|
bool cancel_defer(const std::string &name); // NOLINT
|
287
312
|
|
288
|
-
|
313
|
+
/// State of this component - each bit has a purpose:
|
314
|
+
/// Bits 0-1: Component state (0x00=CONSTRUCTION, 0x01=SETUP, 0x02=LOOP, 0x03=FAILED)
|
315
|
+
/// Bit 2: STATUS_LED_WARNING
|
316
|
+
/// Bit 3: STATUS_LED_ERROR
|
317
|
+
/// Bits 4-7: Unused - reserved for future expansion (50% of the bits are free)
|
318
|
+
uint8_t component_state_{0x00};
|
289
319
|
float setup_priority_override_{NAN};
|
290
320
|
const char *component_source_{nullptr};
|
291
|
-
|
321
|
+
uint16_t warn_if_blocking_over_{WARN_IF_BLOCKING_OVER_MS}; ///< Warn if blocked for this many ms (max 65.5s)
|
292
322
|
std::string error_message_{};
|
293
323
|
};
|
294
324
|
|
esphome/core/config.py
CHANGED
@@ -329,6 +329,12 @@ async def _add_automations(config):
|
|
329
329
|
await automation.build_automation(trigger, [], conf)
|
330
330
|
|
331
331
|
|
332
|
+
@coroutine_with_priority(-100.0)
|
333
|
+
async def _add_platform_reserves() -> None:
|
334
|
+
for platform_name, count in sorted(CORE.platform_counts.items()):
|
335
|
+
cg.add(cg.RawStatement(f"App.reserve_{platform_name}({count});"), prepend=True)
|
336
|
+
|
337
|
+
|
332
338
|
@coroutine_with_priority(100.0)
|
333
339
|
async def to_code(config):
|
334
340
|
cg.add_global(cg.global_ns.namespace("esphome").using)
|
@@ -347,6 +353,12 @@ async def to_code(config):
|
|
347
353
|
config[CONF_NAME_ADD_MAC_SUFFIX],
|
348
354
|
)
|
349
355
|
)
|
356
|
+
# Reserve space for components to avoid reallocation during registration
|
357
|
+
cg.add(
|
358
|
+
cg.RawStatement(f"App.reserve_components({len(CORE.component_ids)});"),
|
359
|
+
)
|
360
|
+
|
361
|
+
CORE.add_job(_add_platform_reserves)
|
350
362
|
|
351
363
|
CORE.add_job(_add_automations, config)
|
352
364
|
|
esphome/core/defines.h
CHANGED
@@ -95,6 +95,7 @@
|
|
95
95
|
|
96
96
|
// Feature flags which do not work for zephyr
|
97
97
|
#ifndef USE_ZEPHYR
|
98
|
+
#define USE_AUDIO_DAC
|
98
99
|
#define USE_AUDIO_FLAC_SUPPORT
|
99
100
|
#define USE_AUDIO_MP3_SUPPORT
|
100
101
|
#define USE_API
|
@@ -139,6 +140,7 @@
|
|
139
140
|
#define USE_MICROPHONE
|
140
141
|
#define USE_PSRAM
|
141
142
|
#define USE_SOCKET_IMPL_BSD_SOCKETS
|
143
|
+
#define USE_SOCKET_SELECT_SUPPORT
|
142
144
|
#define USE_SPEAKER
|
143
145
|
#define USE_SPI
|
144
146
|
#define USE_VOICE_ASSISTANT
|
@@ -152,15 +154,19 @@
|
|
152
154
|
#endif
|
153
155
|
|
154
156
|
#ifdef USE_ESP_IDF
|
155
|
-
#define USE_ESP_IDF_VERSION_CODE VERSION_CODE(5,
|
157
|
+
#define USE_ESP_IDF_VERSION_CODE VERSION_CODE(5, 3, 2)
|
156
158
|
#define USE_MICRO_WAKE_WORD
|
157
159
|
#define USE_MICRO_WAKE_WORD_VAD
|
160
|
+
#if defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32H2)
|
161
|
+
#define USE_OPENTHREAD
|
162
|
+
#endif
|
158
163
|
#endif
|
159
164
|
|
160
165
|
#if defined(USE_ESP32_VARIANT_ESP32S2)
|
161
166
|
#define USE_LOGGER_USB_CDC
|
162
167
|
#elif defined(USE_ESP32_VARIANT_ESP32S3) || defined(USE_ESP32_VARIANT_ESP32C3) || \
|
163
|
-
defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32H2)
|
168
|
+
defined(USE_ESP32_VARIANT_ESP32C5) || defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32H2) || \
|
169
|
+
defined(USE_ESP32_VARIANT_ESP32P4)
|
164
170
|
#define USE_LOGGER_USB_CDC
|
165
171
|
#define USE_LOGGER_USB_SERIAL_JTAG
|
166
172
|
#endif
|
@@ -197,12 +203,14 @@
|
|
197
203
|
#ifdef USE_LIBRETINY
|
198
204
|
#define USE_CAPTIVE_PORTAL
|
199
205
|
#define USE_SOCKET_IMPL_LWIP_SOCKETS
|
206
|
+
#define USE_SOCKET_SELECT_SUPPORT
|
200
207
|
#define USE_WEBSERVER
|
201
208
|
#define USE_WEBSERVER_PORT 80 // NOLINT
|
202
209
|
#endif
|
203
210
|
|
204
211
|
#ifdef USE_HOST
|
205
212
|
#define USE_SOCKET_IMPL_BSD_SOCKETS
|
213
|
+
#define USE_SOCKET_SELECT_SUPPORT
|
206
214
|
#endif
|
207
215
|
|
208
216
|
// Disabled feature flags
|
esphome/core/entity_base.cpp
CHANGED
@@ -12,20 +12,12 @@ void EntityBase::set_name(const char *name) {
|
|
12
12
|
this->name_ = StringRef(name);
|
13
13
|
if (this->name_.empty()) {
|
14
14
|
this->name_ = StringRef(App.get_friendly_name());
|
15
|
-
this->
|
15
|
+
this->flags_.has_own_name = false;
|
16
16
|
} else {
|
17
|
-
this->
|
17
|
+
this->flags_.has_own_name = true;
|
18
18
|
}
|
19
19
|
}
|
20
20
|
|
21
|
-
// Entity Internal
|
22
|
-
bool EntityBase::is_internal() const { return this->internal_; }
|
23
|
-
void EntityBase::set_internal(bool internal) { this->internal_ = internal; }
|
24
|
-
|
25
|
-
// Entity Disabled by Default
|
26
|
-
bool EntityBase::is_disabled_by_default() const { return this->disabled_by_default_; }
|
27
|
-
void EntityBase::set_disabled_by_default(bool disabled_by_default) { this->disabled_by_default_ = disabled_by_default; }
|
28
|
-
|
29
21
|
// Entity Icon
|
30
22
|
std::string EntityBase::get_icon() const {
|
31
23
|
if (this->icon_c_str_ == nullptr) {
|
@@ -35,14 +27,10 @@ std::string EntityBase::get_icon() const {
|
|
35
27
|
}
|
36
28
|
void EntityBase::set_icon(const char *icon) { this->icon_c_str_ = icon; }
|
37
29
|
|
38
|
-
// Entity Category
|
39
|
-
EntityCategory EntityBase::get_entity_category() const { return this->entity_category_; }
|
40
|
-
void EntityBase::set_entity_category(EntityCategory entity_category) { this->entity_category_ = entity_category; }
|
41
|
-
|
42
30
|
// Entity Object ID
|
43
31
|
std::string EntityBase::get_object_id() const {
|
44
32
|
// Check if `App.get_friendly_name()` is constant or dynamic.
|
45
|
-
if (!this->
|
33
|
+
if (!this->flags_.has_own_name && App.is_name_add_mac_suffix_enabled()) {
|
46
34
|
// `App.get_friendly_name()` is dynamic.
|
47
35
|
return str_sanitize(str_snake_case(App.get_friendly_name()));
|
48
36
|
} else {
|
@@ -61,7 +49,7 @@ void EntityBase::set_object_id(const char *object_id) {
|
|
61
49
|
// Calculate Object ID Hash from Entity Name
|
62
50
|
void EntityBase::calc_object_id_() {
|
63
51
|
// Check if `App.get_friendly_name()` is constant or dynamic.
|
64
|
-
if (!this->
|
52
|
+
if (!this->flags_.has_own_name && App.is_name_add_mac_suffix_enabled()) {
|
65
53
|
// `App.get_friendly_name()` is dynamic.
|
66
54
|
const auto object_id = str_sanitize(str_snake_case(App.get_friendly_name()));
|
67
55
|
// FNV-1 hash
|
esphome/core/entity_base.h
CHANGED
@@ -20,7 +20,7 @@ class EntityBase {
|
|
20
20
|
void set_name(const char *name);
|
21
21
|
|
22
22
|
// Get whether this Entity has its own name or it should use the device friendly_name.
|
23
|
-
bool has_own_name() const { return this->
|
23
|
+
bool has_own_name() const { return this->flags_.has_own_name; }
|
24
24
|
|
25
25
|
// Get the sanitized name of this Entity as an ID.
|
26
26
|
std::string get_object_id() const;
|
@@ -29,24 +29,32 @@ class EntityBase {
|
|
29
29
|
// Get the unique Object ID of this Entity
|
30
30
|
uint32_t get_object_id_hash();
|
31
31
|
|
32
|
-
// Get/set whether this Entity should be hidden
|
33
|
-
bool is_internal() const;
|
34
|
-
void set_internal(bool internal);
|
32
|
+
// Get/set whether this Entity should be hidden outside ESPHome
|
33
|
+
bool is_internal() const { return this->flags_.internal; }
|
34
|
+
void set_internal(bool internal) { this->flags_.internal = internal; }
|
35
35
|
|
36
36
|
// Check if this object is declared to be disabled by default.
|
37
37
|
// That means that when the device gets added to Home Assistant (or other clients) it should
|
38
38
|
// not be added to the default view by default, and a user action is necessary to manually add it.
|
39
|
-
bool is_disabled_by_default() const;
|
40
|
-
void set_disabled_by_default(bool disabled_by_default);
|
39
|
+
bool is_disabled_by_default() const { return this->flags_.disabled_by_default; }
|
40
|
+
void set_disabled_by_default(bool disabled_by_default) { this->flags_.disabled_by_default = disabled_by_default; }
|
41
41
|
|
42
42
|
// Get/set the entity category.
|
43
|
-
EntityCategory get_entity_category() const;
|
44
|
-
void set_entity_category(EntityCategory entity_category)
|
43
|
+
EntityCategory get_entity_category() const { return static_cast<EntityCategory>(this->flags_.entity_category); }
|
44
|
+
void set_entity_category(EntityCategory entity_category) {
|
45
|
+
this->flags_.entity_category = static_cast<uint8_t>(entity_category);
|
46
|
+
}
|
45
47
|
|
46
48
|
// Get/set this entity's icon
|
47
49
|
std::string get_icon() const;
|
48
50
|
void set_icon(const char *icon);
|
49
51
|
|
52
|
+
// Check if this entity has state
|
53
|
+
bool has_state() const { return this->flags_.has_state; }
|
54
|
+
|
55
|
+
// Set has_state - for components that need to manually set this
|
56
|
+
void set_has_state(bool state) { this->flags_.has_state = state; }
|
57
|
+
|
50
58
|
protected:
|
51
59
|
/// The hash_base() function has been deprecated. It is kept in this
|
52
60
|
/// class for now, to prevent external components from not compiling.
|
@@ -56,11 +64,17 @@ class EntityBase {
|
|
56
64
|
StringRef name_;
|
57
65
|
const char *object_id_c_str_{nullptr};
|
58
66
|
const char *icon_c_str_{nullptr};
|
59
|
-
uint32_t object_id_hash_;
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
67
|
+
uint32_t object_id_hash_{};
|
68
|
+
|
69
|
+
// Bit-packed flags to save memory (1 byte instead of 5)
|
70
|
+
struct EntityFlags {
|
71
|
+
uint8_t has_own_name : 1;
|
72
|
+
uint8_t internal : 1;
|
73
|
+
uint8_t disabled_by_default : 1;
|
74
|
+
uint8_t has_state : 1;
|
75
|
+
uint8_t entity_category : 2; // Supports up to 4 categories
|
76
|
+
uint8_t reserved : 2; // Reserved for future use
|
77
|
+
} flags_{};
|
64
78
|
};
|
65
79
|
|
66
80
|
class EntityBase_DeviceClass { // NOLINT(readability-identifier-naming)
|
esphome/core/hal.h
CHANGED
esphome/core/helpers.cpp
CHANGED
@@ -30,7 +30,6 @@
|
|
30
30
|
#elif defined(USE_ESP_IDF)
|
31
31
|
#include <freertos/FreeRTOS.h>
|
32
32
|
#include <freertos/portmacro.h>
|
33
|
-
#include "esp_mac.h"
|
34
33
|
#include "esp_random.h"
|
35
34
|
#include "esp_system.h"
|
36
35
|
#elif defined(USE_RP2040)
|
@@ -45,6 +44,7 @@
|
|
45
44
|
#endif
|
46
45
|
#ifdef USE_ESP32
|
47
46
|
#include "rom/crc.h"
|
47
|
+
#include "esp_mac.h"
|
48
48
|
#include "esp_efuse.h"
|
49
49
|
#include "esp_efuse_table.h"
|
50
50
|
#endif
|
esphome/core/helpers.h
CHANGED
@@ -192,15 +192,15 @@ bool random_bytes(uint8_t *data, size_t len);
|
|
192
192
|
constexpr uint16_t encode_uint16(uint8_t msb, uint8_t lsb) {
|
193
193
|
return (static_cast<uint16_t>(msb) << 8) | (static_cast<uint16_t>(lsb));
|
194
194
|
}
|
195
|
+
/// Encode a 24-bit value given three bytes in most to least significant byte order.
|
196
|
+
constexpr uint32_t encode_uint24(uint8_t byte1, uint8_t byte2, uint8_t byte3) {
|
197
|
+
return (static_cast<uint32_t>(byte1) << 16) | (static_cast<uint32_t>(byte2) << 8) | (static_cast<uint32_t>(byte3));
|
198
|
+
}
|
195
199
|
/// Encode a 32-bit value given four bytes in most to least significant byte order.
|
196
200
|
constexpr uint32_t encode_uint32(uint8_t byte1, uint8_t byte2, uint8_t byte3, uint8_t byte4) {
|
197
201
|
return (static_cast<uint32_t>(byte1) << 24) | (static_cast<uint32_t>(byte2) << 16) |
|
198
202
|
(static_cast<uint32_t>(byte3) << 8) | (static_cast<uint32_t>(byte4));
|
199
203
|
}
|
200
|
-
/// Encode a 24-bit value given three bytes in most to least significant byte order.
|
201
|
-
constexpr uint32_t encode_uint24(uint8_t byte1, uint8_t byte2, uint8_t byte3) {
|
202
|
-
return ((static_cast<uint32_t>(byte1) << 16) | (static_cast<uint32_t>(byte2) << 8) | (static_cast<uint32_t>(byte3)));
|
203
|
-
}
|
204
204
|
|
205
205
|
/// Encode a value from its constituent bytes (from most to least significant) in an array with length sizeof(T).
|
206
206
|
template<typename T, enable_if_t<std::is_unsigned<T>::value, int> = 0>
|
@@ -438,7 +438,7 @@ template<typename T, enable_if_t<std::is_unsigned<T>::value, int> = 0> std::stri
|
|
438
438
|
}
|
439
439
|
|
440
440
|
/// Return values for parse_on_off().
|
441
|
-
enum ParseOnOffState {
|
441
|
+
enum ParseOnOffState : uint8_t {
|
442
442
|
PARSE_NONE = 0,
|
443
443
|
PARSE_ON,
|
444
444
|
PARSE_OFF,
|
esphome/core/log.h
CHANGED
esphome/core/scheduler.cpp
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
#include "application.h"
|
4
4
|
#include "esphome/core/defines.h"
|
5
|
-
#include "esphome/core/log.h"
|
6
|
-
#include "esphome/core/helpers.h"
|
7
5
|
#include "esphome/core/hal.h"
|
6
|
+
#include "esphome/core/helpers.h"
|
7
|
+
#include "esphome/core/log.h"
|
8
8
|
#include <algorithm>
|
9
9
|
#include <cinttypes>
|
10
10
|
|
esphome/coroutine.py
CHANGED
@@ -42,14 +42,13 @@ Here everything is combined in `yield` expressions. You await other coroutines u
|
|
42
42
|
the last `yield` expression defines what is returned.
|
43
43
|
"""
|
44
44
|
|
45
|
-
import
|
46
|
-
from collections.abc import Awaitable, Generator, Iterator
|
45
|
+
from collections.abc import Awaitable, Callable, Generator, Iterator
|
47
46
|
import functools
|
48
47
|
import heapq
|
49
48
|
import inspect
|
50
49
|
import logging
|
51
50
|
import types
|
52
|
-
from typing import Any
|
51
|
+
from typing import Any
|
53
52
|
|
54
53
|
_LOGGER = logging.getLogger(__name__)
|
55
54
|
|
@@ -126,7 +125,7 @@ def _flatten_generator(gen: Generator[Any, Any, Any]):
|
|
126
125
|
ret = to_send if e.value is None else e.value
|
127
126
|
return ret
|
128
127
|
|
129
|
-
if isinstance(val,
|
128
|
+
if isinstance(val, Awaitable):
|
130
129
|
# yielded object that is awaitable (like `yield some_new_style_method()`)
|
131
130
|
# yield from __await__() like actual coroutines would.
|
132
131
|
to_send = yield from val.__await__()
|
esphome/cpp_generator.py
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
import abc
|
2
|
-
from collections.abc import Sequence
|
2
|
+
from collections.abc import Callable, Sequence
|
3
3
|
import inspect
|
4
4
|
import math
|
5
5
|
import re
|
6
|
-
from typing import Any
|
6
|
+
from typing import Any
|
7
7
|
|
8
8
|
from esphome.core import (
|
9
9
|
CORE,
|
@@ -35,19 +35,19 @@ class Expression(abc.ABC):
|
|
35
35
|
"""
|
36
36
|
|
37
37
|
|
38
|
-
SafeExpType =
|
39
|
-
Expression
|
40
|
-
bool
|
41
|
-
str
|
42
|
-
str
|
43
|
-
int
|
44
|
-
float
|
45
|
-
TimePeriod
|
46
|
-
type[bool]
|
47
|
-
type[int]
|
48
|
-
type[float]
|
49
|
-
Sequence[Any]
|
50
|
-
|
38
|
+
SafeExpType = (
|
39
|
+
Expression
|
40
|
+
| bool
|
41
|
+
| str
|
42
|
+
| str
|
43
|
+
| int
|
44
|
+
| float
|
45
|
+
| TimePeriod
|
46
|
+
| type[bool]
|
47
|
+
| type[int]
|
48
|
+
| type[float]
|
49
|
+
| Sequence[Any]
|
50
|
+
)
|
51
51
|
|
52
52
|
|
53
53
|
class RawExpression(Expression):
|
@@ -90,7 +90,7 @@ class VariableDeclarationExpression(Expression):
|
|
90
90
|
class ExpressionList(Expression):
|
91
91
|
__slots__ = ("args",)
|
92
92
|
|
93
|
-
def __init__(self, *args:
|
93
|
+
def __init__(self, *args: SafeExpType | None):
|
94
94
|
# Remove every None on end
|
95
95
|
args = list(args)
|
96
96
|
while args and args[-1] is None:
|
@@ -139,7 +139,7 @@ class CallExpression(Expression):
|
|
139
139
|
class StructInitializer(Expression):
|
140
140
|
__slots__ = ("base", "args")
|
141
141
|
|
142
|
-
def __init__(self, base: Expression, *args: tuple[str,
|
142
|
+
def __init__(self, base: Expression, *args: tuple[str, SafeExpType | None]):
|
143
143
|
self.base = base
|
144
144
|
# TODO: args is always a Tuple, is this check required?
|
145
145
|
if not isinstance(args, OrderedDict):
|
@@ -197,9 +197,7 @@ class ParameterExpression(Expression):
|
|
197
197
|
class ParameterListExpression(Expression):
|
198
198
|
__slots__ = ("parameters",)
|
199
199
|
|
200
|
-
def __init__(
|
201
|
-
self, *parameters: Union[ParameterExpression, tuple[SafeExpType, str]]
|
202
|
-
):
|
200
|
+
def __init__(self, *parameters: ParameterExpression | tuple[SafeExpType, str]):
|
203
201
|
self.parameters = []
|
204
202
|
for parameter in parameters:
|
205
203
|
if not isinstance(parameter, ParameterExpression):
|
@@ -362,7 +360,7 @@ def safe_exp(obj: SafeExpType) -> Expression:
|
|
362
360
|
return IntLiteral(int(obj.total_seconds))
|
363
361
|
if isinstance(obj, TimePeriodMinutes):
|
364
362
|
return IntLiteral(int(obj.total_minutes))
|
365
|
-
if isinstance(obj,
|
363
|
+
if isinstance(obj, tuple | list):
|
366
364
|
return ArrayInitializer(*[safe_exp(o) for o in obj])
|
367
365
|
if obj is bool:
|
368
366
|
return bool_
|
@@ -418,7 +416,9 @@ class LineComment(Statement):
|
|
418
416
|
self.value = value
|
419
417
|
|
420
418
|
def __str__(self):
|
421
|
-
parts = re.sub(r"\\\s*\n", r"<cont>\n", self.value, re.MULTILINE).split(
|
419
|
+
parts = re.sub(r"\\\s*\n", r"<cont>\n", self.value, flags=re.MULTILINE).split(
|
420
|
+
"\n"
|
421
|
+
)
|
422
422
|
parts = [f"// {x}" for x in parts]
|
423
423
|
return "\n".join(parts)
|
424
424
|
|
@@ -461,7 +461,7 @@ def static_const_array(id_, rhs) -> "MockObj":
|
|
461
461
|
return obj
|
462
462
|
|
463
463
|
|
464
|
-
def statement(expression:
|
464
|
+
def statement(expression: Expression | Statement) -> Statement:
|
465
465
|
"""Convert expression into a statement unless is already a statement."""
|
466
466
|
if isinstance(expression, Statement):
|
467
467
|
return expression
|
@@ -579,21 +579,21 @@ def new_Pvariable(id_: ID, *args: SafeExpType) -> Pvariable:
|
|
579
579
|
return Pvariable(id_, rhs)
|
580
580
|
|
581
581
|
|
582
|
-
def add(expression:
|
582
|
+
def add(expression: Expression | Statement, prepend: bool = False):
|
583
583
|
"""Add an expression to the codegen section.
|
584
584
|
|
585
585
|
After this is called, the given given expression will
|
586
586
|
show up in the setup() function after this has been called.
|
587
587
|
"""
|
588
|
-
CORE.add(expression)
|
588
|
+
CORE.add(expression, prepend)
|
589
589
|
|
590
590
|
|
591
|
-
def add_global(expression:
|
591
|
+
def add_global(expression: SafeExpType | Statement, prepend: bool = False):
|
592
592
|
"""Add an expression to the codegen global storage (above setup())."""
|
593
593
|
CORE.add_global(expression, prepend)
|
594
594
|
|
595
595
|
|
596
|
-
def add_library(name: str, version:
|
596
|
+
def add_library(name: str, version: str | None, repository: str | None = None):
|
597
597
|
"""Add a library to the codegen library storage.
|
598
598
|
|
599
599
|
:param name: The name of the library (for example 'AsyncTCP')
|
@@ -619,7 +619,7 @@ def add_define(name: str, value: SafeExpType = None):
|
|
619
619
|
CORE.add_define(Define(name, safe_exp(value)))
|
620
620
|
|
621
621
|
|
622
|
-
def add_platformio_option(key: str, value:
|
622
|
+
def add_platformio_option(key: str, value: str | list[str]):
|
623
623
|
CORE.add_platformio_option(key, value)
|
624
624
|
|
625
625
|
|
@@ -654,7 +654,7 @@ async def process_lambda(
|
|
654
654
|
parameters: list[tuple[SafeExpType, str]],
|
655
655
|
capture: str = "=",
|
656
656
|
return_type: SafeExpType = None,
|
657
|
-
) ->
|
657
|
+
) -> LambdaExpression | None:
|
658
658
|
"""Process the given lambda value into a LambdaExpression.
|
659
659
|
|
660
660
|
This is a coroutine because lambdas can depend on other IDs,
|
@@ -711,8 +711,8 @@ def is_template(value):
|
|
711
711
|
async def templatable(
|
712
712
|
value: Any,
|
713
713
|
args: list[tuple[SafeExpType, str]],
|
714
|
-
output_type:
|
715
|
-
to_exp:
|
714
|
+
output_type: SafeExpType | None,
|
715
|
+
to_exp: Callable | dict = None,
|
716
716
|
):
|
717
717
|
"""Generate code for a templatable config option.
|
718
718
|
|
@@ -821,7 +821,7 @@ class MockObj(Expression):
|
|
821
821
|
assert self.op == "::"
|
822
822
|
return MockObj(f"using namespace {self.base}")
|
823
823
|
|
824
|
-
def __getitem__(self, item:
|
824
|
+
def __getitem__(self, item: str | Expression) -> "MockObj":
|
825
825
|
next_op = "."
|
826
826
|
if isinstance(item, str) and item.startswith("P"):
|
827
827
|
item = item[1:]
|
esphome/dashboard/core.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
import asyncio
|
4
|
-
from collections.abc import Coroutine
|
4
|
+
from collections.abc import Callable, Coroutine
|
5
5
|
import contextlib
|
6
6
|
from dataclasses import dataclass
|
7
7
|
from functools import partial
|
@@ -9,7 +9,7 @@ import json
|
|
9
9
|
import logging
|
10
10
|
from pathlib import Path
|
11
11
|
import threading
|
12
|
-
from typing import Any
|
12
|
+
from typing import Any
|
13
13
|
|
14
14
|
from esphome.storage_json import ignored_devices_storage_path
|
15
15
|
|