esphome 2025.5.2__py3-none-any.whl → 2025.6.0b1__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 +712 -358
- esphome/components/api/api_connection.h +343 -284
- esphome/components/api/api_frame_helper.cpp +349 -344
- esphome/components/api/api_frame_helper.h +121 -94
- esphome/components/api/api_pb2.cpp +2 -0
- esphome/components/api/api_pb2.h +637 -1
- 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 -2
- 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 +4 -3
- 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 +16 -14
- esphome/components/bme280_base/bme280_base.cpp +3 -3
- 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/debug/debug_component.cpp +1 -1
- 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 +88 -20
- 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 +11 -9
- esphome/components/esp32_ble/ble_uuid.h +1 -1
- 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 +6 -2
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +12 -9
- 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/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 +4 -2
- 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 +1 -1
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +1 -1
- 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 +2 -1
- 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_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 +9 -5
- 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 +2 -2
- 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 +2 -3
- 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 +58 -61
- esphome/components/nextion/nextion_upload_idf.cpp +69 -72
- esphome/components/nextion/sensor/nextion_sensor.cpp +4 -4
- esphome/components/nextion/switch/nextion_switch.cpp +2 -2
- esphome/components/nextion/text_sensor/nextion_textsensor.cpp +2 -2
- 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/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/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/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/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.h +9 -5
- 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_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 +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 +1 -1
- 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 +38 -12
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +3 -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_sensor/__init__.py +1 -0
- 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/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/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/utils.cpp +1 -1
- esphome/components/web_server_idf/web_server_idf.cpp +1 -1
- esphome/components/weikai/__init__.py +2 -0
- esphome/components/weikai/weikai.cpp +23 -21
- 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 +188 -5
- esphome/core/application.h +110 -0
- esphome/core/component.h +13 -0
- esphome/core/config.py +12 -0
- esphome/core/defines.h +10 -2
- esphome/core/helpers.cpp +1 -1
- esphome/core/helpers.h +4 -4
- 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/writer.py +5 -3
- esphome/yaml_util.py +6 -1
- esphome/zeroconf.py +1 -1
- {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/METADATA +12 -11
- {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/RECORD +715 -662
- {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/WHEEL +1 -1
- {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/entry_points.txt +0 -0
- {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/top_level.txt +0 -0
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
|
|
esphome/dashboard/web_server.py
CHANGED
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
2
2
|
|
3
3
|
import asyncio
|
4
4
|
import base64
|
5
|
-
from collections.abc import Iterable
|
5
|
+
from collections.abc import Callable, Iterable
|
6
6
|
import datetime
|
7
7
|
import functools
|
8
8
|
import gzip
|
@@ -17,7 +17,7 @@ import shutil
|
|
17
17
|
import subprocess
|
18
18
|
import threading
|
19
19
|
import time
|
20
|
-
from typing import TYPE_CHECKING, Any,
|
20
|
+
from typing import TYPE_CHECKING, Any, TypeVar
|
21
21
|
from urllib.parse import urlparse
|
22
22
|
|
23
23
|
import tornado
|
esphome/git.py
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
from collections.abc import Callable
|
1
2
|
from dataclasses import dataclass
|
2
3
|
from datetime import datetime
|
3
4
|
import hashlib
|
@@ -5,7 +6,6 @@ import logging
|
|
5
6
|
from pathlib import Path
|
6
7
|
import re
|
7
8
|
import subprocess
|
8
|
-
from typing import Callable, Optional
|
9
9
|
import urllib.parse
|
10
10
|
|
11
11
|
import esphome.config_validation as cv
|
@@ -45,12 +45,12 @@ def clone_or_update(
|
|
45
45
|
*,
|
46
46
|
url: str,
|
47
47
|
ref: str = None,
|
48
|
-
refresh:
|
48
|
+
refresh: TimePeriodSeconds | None,
|
49
49
|
domain: str,
|
50
50
|
username: str = None,
|
51
51
|
password: str = None,
|
52
|
-
submodules:
|
53
|
-
) -> tuple[Path,
|
52
|
+
submodules: list[str] | None = None,
|
53
|
+
) -> tuple[Path, Callable[[], None] | None]:
|
54
54
|
key = f"{url}@{ref}"
|
55
55
|
|
56
56
|
if username is not None and password is not None:
|
esphome/helpers.py
CHANGED
@@ -7,7 +7,6 @@ from pathlib import Path
|
|
7
7
|
import platform
|
8
8
|
import re
|
9
9
|
import tempfile
|
10
|
-
from typing import Union
|
11
10
|
from urllib.parse import urlparse
|
12
11
|
|
13
12
|
_LOGGER = logging.getLogger(__name__)
|
@@ -219,8 +218,8 @@ def sort_ip_addresses(address_list: list[str]) -> list[str]:
|
|
219
218
|
int,
|
220
219
|
int,
|
221
220
|
int,
|
222
|
-
|
223
|
-
|
221
|
+
str | None,
|
222
|
+
tuple[str, int] | tuple[str, int, int, int],
|
224
223
|
]
|
225
224
|
] = []
|
226
225
|
for addr in address_list:
|
@@ -282,7 +281,7 @@ def read_file(path):
|
|
282
281
|
raise EsphomeError(f"Error reading file {path}: {err}") from err
|
283
282
|
|
284
283
|
|
285
|
-
def _write_file(path:
|
284
|
+
def _write_file(path: Path | str, text: str | bytes):
|
286
285
|
"""Atomically writes `text` to the given path.
|
287
286
|
|
288
287
|
Automatically creates all parent directories.
|
@@ -315,7 +314,7 @@ def _write_file(path: Union[Path, str], text: Union[str, bytes]):
|
|
315
314
|
_LOGGER.error("Write file cleanup failed: %s", err)
|
316
315
|
|
317
316
|
|
318
|
-
def write_file(path:
|
317
|
+
def write_file(path: Path | str, text: str):
|
319
318
|
try:
|
320
319
|
_write_file(path, text)
|
321
320
|
except OSError as err:
|
@@ -324,7 +323,7 @@ def write_file(path: Union[Path, str], text: str):
|
|
324
323
|
raise EsphomeError(f"Could not write file at {path}") from err
|
325
324
|
|
326
325
|
|
327
|
-
def write_file_if_changed(path:
|
326
|
+
def write_file_if_changed(path: Path | str, text: str) -> bool:
|
328
327
|
"""Write text to the given path, but not if the contents match already.
|
329
328
|
|
330
329
|
Returns true if the file was changed.
|
esphome/loader.py
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
from collections.abc import Callable
|
1
2
|
from contextlib import AbstractContextManager
|
2
3
|
from dataclasses import dataclass
|
3
4
|
import importlib
|
@@ -8,7 +9,7 @@ import logging
|
|
8
9
|
from pathlib import Path
|
9
10
|
import sys
|
10
11
|
from types import ModuleType
|
11
|
-
from typing import Any
|
12
|
+
from typing import Any
|
12
13
|
|
13
14
|
from esphome.const import SOURCE_FILE_EXTENSIONS
|
14
15
|
from esphome.core import CORE
|
@@ -57,7 +58,7 @@ class ComponentManifest:
|
|
57
58
|
return getattr(self.module, "IS_TARGET_PLATFORM", False)
|
58
59
|
|
59
60
|
@property
|
60
|
-
def config_schema(self) ->
|
61
|
+
def config_schema(self) -> Any | None:
|
61
62
|
return getattr(self.module, "CONFIG_SCHEMA", None)
|
62
63
|
|
63
64
|
@property
|
@@ -69,7 +70,7 @@ class ComponentManifest:
|
|
69
70
|
return getattr(self.module, "MULTI_CONF_NO_DEFAULT", False)
|
70
71
|
|
71
72
|
@property
|
72
|
-
def to_code(self) ->
|
73
|
+
def to_code(self) -> Callable[[Any], None] | None:
|
73
74
|
return getattr(self.module, "to_code", None)
|
74
75
|
|
75
76
|
@property
|
@@ -96,7 +97,7 @@ class ComponentManifest:
|
|
96
97
|
return getattr(self.module, "INSTANCE_TYPE", None)
|
97
98
|
|
98
99
|
@property
|
99
|
-
def final_validate_schema(self) ->
|
100
|
+
def final_validate_schema(self) -> Callable[[ConfigType], None] | None:
|
100
101
|
"""Components can declare a `FINAL_VALIDATE_SCHEMA` cv.Schema that gets called
|
101
102
|
after the main validation. In that function checks across components can be made.
|
102
103
|
|
@@ -129,7 +130,7 @@ class ComponentManifest:
|
|
129
130
|
|
130
131
|
class ComponentMetaFinder(importlib.abc.MetaPathFinder):
|
131
132
|
def __init__(
|
132
|
-
self, components_path: Path, allowed_components:
|
133
|
+
self, components_path: Path, allowed_components: list[str] | None = None
|
133
134
|
) -> None:
|
134
135
|
self._allowed_components = allowed_components
|
135
136
|
self._finders = []
|
@@ -140,7 +141,7 @@ class ComponentMetaFinder(importlib.abc.MetaPathFinder):
|
|
140
141
|
continue
|
141
142
|
self._finders.append(finder)
|
142
143
|
|
143
|
-
def find_spec(self, fullname: str, path:
|
144
|
+
def find_spec(self, fullname: str, path: list[str] | None, target=None):
|
144
145
|
if not fullname.startswith("esphome.components."):
|
145
146
|
return None
|
146
147
|
parts = fullname.split(".")
|
@@ -167,7 +168,7 @@ def clear_component_meta_finders():
|
|
167
168
|
|
168
169
|
|
169
170
|
def install_meta_finder(
|
170
|
-
components_path: Path, allowed_components:
|
171
|
+
components_path: Path, allowed_components: list[str] | None = None
|
171
172
|
):
|
172
173
|
sys.meta_path.insert(0, ComponentMetaFinder(components_path, allowed_components))
|
173
174
|
|
esphome/log.py
CHANGED
@@ -59,7 +59,13 @@ class ESPHomeLogFormatter(logging.Formatter):
|
|
59
59
|
"ERROR": AnsiFore.RED.value,
|
60
60
|
"CRITICAL": AnsiFore.RED.value,
|
61
61
|
}.get(record.levelname, "")
|
62
|
-
|
62
|
+
message = f"{prefix}{formatted}{AnsiStyle.RESET_ALL.value}"
|
63
|
+
if CORE.dashboard:
|
64
|
+
try:
|
65
|
+
message = message.replace("\033", "\\033")
|
66
|
+
except UnicodeEncodeError:
|
67
|
+
pass
|
68
|
+
return message
|
63
69
|
|
64
70
|
|
65
71
|
def setup_log(
|
esphome/platformio_api.py
CHANGED
@@ -5,7 +5,6 @@ import os
|
|
5
5
|
from pathlib import Path
|
6
6
|
import re
|
7
7
|
import subprocess
|
8
|
-
from typing import Union
|
9
8
|
|
10
9
|
from esphome.const import CONF_COMPILE_PROCESS_LIMIT, CONF_ESPHOME, KEY_CORE
|
11
10
|
from esphome.core import CORE, EsphomeError
|
@@ -73,7 +72,7 @@ FILTER_PLATFORMIO_LINES = [
|
|
73
72
|
]
|
74
73
|
|
75
74
|
|
76
|
-
def run_platformio_cli(*args, **kwargs) ->
|
75
|
+
def run_platformio_cli(*args, **kwargs) -> str | int:
|
77
76
|
os.environ["PLATFORMIO_FORCE_COLOR"] = "true"
|
78
77
|
os.environ["PLATFORMIO_BUILD_DIR"] = os.path.abspath(CORE.relative_pioenvs_path())
|
79
78
|
os.environ.setdefault(
|
@@ -93,7 +92,7 @@ def run_platformio_cli(*args, **kwargs) -> Union[str, int]:
|
|
93
92
|
return run_external_command(platformio.__main__.main, *cmd, **kwargs)
|
94
93
|
|
95
94
|
|
96
|
-
def run_platformio_cli_run(config, verbose, *args, **kwargs) ->
|
95
|
+
def run_platformio_cli_run(config, verbose, *args, **kwargs) -> str | int:
|
97
96
|
command = ["run", "-d", CORE.build_path]
|
98
97
|
if verbose:
|
99
98
|
command += ["-v"]
|
esphome/storage_json.py
CHANGED
@@ -46,15 +46,16 @@ class StorageJSON:
|
|
46
46
|
storage_version: int,
|
47
47
|
name: str,
|
48
48
|
friendly_name: str,
|
49
|
-
comment: str,
|
50
|
-
esphome_version: str,
|
49
|
+
comment: str | None,
|
50
|
+
esphome_version: str | None,
|
51
51
|
src_version: int | None,
|
52
52
|
address: str,
|
53
53
|
web_port: int | None,
|
54
54
|
target_platform: str,
|
55
|
-
build_path: str,
|
56
|
-
firmware_bin_path: str,
|
55
|
+
build_path: str | None,
|
56
|
+
firmware_bin_path: str | None,
|
57
57
|
loaded_integrations: set[str],
|
58
|
+
loaded_platforms: set[str],
|
58
59
|
no_mdns: bool,
|
59
60
|
framework: str | None = None,
|
60
61
|
core_platform: str | None = None,
|
@@ -86,6 +87,8 @@ class StorageJSON:
|
|
86
87
|
self.firmware_bin_path = firmware_bin_path
|
87
88
|
# A set of strings of names of loaded integrations
|
88
89
|
self.loaded_integrations = loaded_integrations
|
90
|
+
# A set of strings for platform/integration combos
|
91
|
+
self.loaded_platforms = loaded_platforms
|
89
92
|
# Is mDNS disabled
|
90
93
|
self.no_mdns = no_mdns
|
91
94
|
# The framework used to compile the firmware
|
@@ -107,6 +110,7 @@ class StorageJSON:
|
|
107
110
|
"build_path": self.build_path,
|
108
111
|
"firmware_bin_path": self.firmware_bin_path,
|
109
112
|
"loaded_integrations": sorted(self.loaded_integrations),
|
113
|
+
"loaded_platforms": sorted(self.loaded_platforms),
|
110
114
|
"no_mdns": self.no_mdns,
|
111
115
|
"framework": self.framework,
|
112
116
|
"core_platform": self.core_platform,
|
@@ -138,6 +142,7 @@ class StorageJSON:
|
|
138
142
|
build_path=esph.build_path,
|
139
143
|
firmware_bin_path=esph.firmware_bin,
|
140
144
|
loaded_integrations=esph.loaded_integrations,
|
145
|
+
loaded_platforms=esph.loaded_platforms,
|
141
146
|
no_mdns=(
|
142
147
|
CONF_MDNS in esph.config
|
143
148
|
and CONF_DISABLED in esph.config[CONF_MDNS]
|
@@ -164,6 +169,7 @@ class StorageJSON:
|
|
164
169
|
build_path=None,
|
165
170
|
firmware_bin_path=None,
|
166
171
|
loaded_integrations=set(),
|
172
|
+
loaded_platforms=set(),
|
167
173
|
no_mdns=False,
|
168
174
|
framework=None,
|
169
175
|
core_platform=platform.lower(),
|
@@ -187,6 +193,7 @@ class StorageJSON:
|
|
187
193
|
build_path = storage.get("build_path")
|
188
194
|
firmware_bin_path = storage.get("firmware_bin_path")
|
189
195
|
loaded_integrations = set(storage.get("loaded_integrations", []))
|
196
|
+
loaded_platforms = set(storage.get("loaded_platforms", []))
|
190
197
|
no_mdns = storage.get("no_mdns", False)
|
191
198
|
framework = storage.get("framework")
|
192
199
|
core_platform = storage.get("core_platform")
|
@@ -203,6 +210,7 @@ class StorageJSON:
|
|
203
210
|
build_path,
|
204
211
|
firmware_bin_path,
|
205
212
|
loaded_integrations,
|
213
|
+
loaded_platforms,
|
206
214
|
no_mdns,
|
207
215
|
framework,
|
208
216
|
core_platform,
|
@@ -252,7 +260,7 @@ class EsphomeStorageJSON:
|
|
252
260
|
def last_update_check(self, new: datetime) -> None:
|
253
261
|
self.last_update_check_str = new.strftime("%Y-%m-%dT%H:%M:%S")
|
254
262
|
|
255
|
-
def to_json(self) ->
|
263
|
+
def to_json(self) -> str:
|
256
264
|
return f"{json.dumps(self.as_dict(), indent=2)}\n"
|
257
265
|
|
258
266
|
def save(self, path: str) -> None:
|
esphome/types.py
CHANGED
@@ -1,19 +1,18 @@
|
|
1
1
|
"""This helper module tracks commonly used types in the esphome python codebase."""
|
2
2
|
|
3
|
-
from typing import Union
|
4
|
-
|
5
3
|
from esphome.core import ID, EsphomeCore, Lambda
|
6
4
|
|
7
|
-
ConfigFragmentType =
|
8
|
-
str
|
9
|
-
int
|
10
|
-
float
|
11
|
-
None
|
12
|
-
dict[
|
13
|
-
list["ConfigFragmentType"]
|
14
|
-
ID
|
15
|
-
Lambda
|
16
|
-
|
5
|
+
ConfigFragmentType = (
|
6
|
+
str
|
7
|
+
| int
|
8
|
+
| float
|
9
|
+
| None
|
10
|
+
| dict[str | int, "ConfigFragmentType"]
|
11
|
+
| list["ConfigFragmentType"]
|
12
|
+
| ID
|
13
|
+
| Lambda
|
14
|
+
)
|
15
|
+
|
17
16
|
ConfigType = dict[str, ConfigFragmentType]
|
18
17
|
CoreType = EsphomeCore
|
19
|
-
ConfigPathType =
|
18
|
+
ConfigPathType = str | int
|
esphome/util.py
CHANGED
@@ -6,7 +6,6 @@ from pathlib import Path
|
|
6
6
|
import re
|
7
7
|
import subprocess
|
8
8
|
import sys
|
9
|
-
from typing import Union
|
10
9
|
|
11
10
|
from esphome import const
|
12
11
|
|
@@ -162,7 +161,7 @@ class RedirectText:
|
|
162
161
|
|
163
162
|
def run_external_command(
|
164
163
|
func, *cmd, capture_stdout: bool = False, filter_lines: str = None
|
165
|
-
) ->
|
164
|
+
) -> int | str:
|
166
165
|
"""
|
167
166
|
Run a function from an external package that acts like a main method.
|
168
167
|
|
esphome/writer.py
CHANGED
@@ -3,7 +3,6 @@ import logging
|
|
3
3
|
import os
|
4
4
|
from pathlib import Path
|
5
5
|
import re
|
6
|
-
from typing import Union
|
7
6
|
|
8
7
|
from esphome import loader
|
9
8
|
from esphome.config import iter_component_configs, iter_components
|
@@ -108,7 +107,10 @@ def storage_should_clean(old: StorageJSON, new: StorageJSON) -> bool:
|
|
108
107
|
return True
|
109
108
|
if old.build_path != new.build_path:
|
110
109
|
return True
|
111
|
-
if
|
110
|
+
if (
|
111
|
+
old.loaded_integrations != new.loaded_integrations
|
112
|
+
or old.loaded_platforms != new.loaded_platforms
|
113
|
+
):
|
112
114
|
if new.core_platform == PLATFORM_ESP32:
|
113
115
|
from esphome.components.esp32 import FRAMEWORK_ESP_IDF
|
114
116
|
|
@@ -132,7 +134,7 @@ def update_storage_json():
|
|
132
134
|
new.save(path)
|
133
135
|
|
134
136
|
|
135
|
-
def format_ini(data: dict[str,
|
137
|
+
def format_ini(data: dict[str, str | list[str]]) -> str:
|
136
138
|
content = ""
|
137
139
|
for key, value in sorted(data.items()):
|
138
140
|
if isinstance(value, list):
|
esphome/yaml_util.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
+
from collections.abc import Callable
|
3
4
|
import fnmatch
|
4
5
|
import functools
|
5
6
|
import inspect
|
@@ -8,7 +9,7 @@ from ipaddress import _BaseAddress
|
|
8
9
|
import logging
|
9
10
|
import math
|
10
11
|
import os
|
11
|
-
from typing import Any
|
12
|
+
from typing import Any
|
12
13
|
import uuid
|
13
14
|
|
14
15
|
import yaml
|
@@ -603,6 +604,10 @@ class ESPHomeDumper(yaml.SafeDumper):
|
|
603
604
|
return self.represent_secret(value.id)
|
604
605
|
return self.represent_stringify(value.id)
|
605
606
|
|
607
|
+
# The below override configures this dumper to indent output YAML properly:
|
608
|
+
def increase_indent(self, flow=False, indentless=False):
|
609
|
+
return super().increase_indent(flow, False)
|
610
|
+
|
606
611
|
|
607
612
|
ESPHomeDumper.add_multi_representer(
|
608
613
|
dict, lambda dumper, value: dumper.represent_mapping("tag:yaml.org,2002:map", value)
|