esphome 2025.6.2__py3-none-any.whl → 2025.7.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 +1 -3
- esphome/codegen.py +2 -0
- esphome/components/ac_dimmer/ac_dimmer.cpp +6 -6
- esphome/components/adc/__init__.py +25 -1
- esphome/components/adc/adc_sensor.h +11 -11
- esphome/components/adc/adc_sensor_common.cpp +1 -1
- esphome/components/adc/adc_sensor_esp32.cpp +16 -8
- esphome/components/ade7880/ade7880.h +0 -2
- esphome/components/ads1115/ads1115.h +0 -1
- esphome/components/ads1118/ads1118.h +0 -1
- esphome/components/ags10/ags10.h +0 -2
- esphome/components/aic3204/aic3204.h +0 -1
- esphome/components/alarm_control_panel/__init__.py +5 -2
- esphome/components/alpha3/alpha3.h +0 -1
- esphome/components/am43/cover/am43_cover.h +0 -1
- esphome/components/am43/sensor/am43_sensor.h +0 -1
- esphome/components/analog_threshold/analog_threshold_binary_sensor.h +0 -2
- esphome/components/anova/anova.cpp +5 -1
- esphome/components/anova/anova.h +0 -1
- esphome/components/apds9960/apds9960.cpp +1 -1
- esphome/components/api/__init__.py +57 -21
- esphome/components/api/api_connection.cpp +344 -539
- esphome/components/api/api_connection.h +224 -141
- esphome/components/api/api_frame_helper.cpp +91 -127
- esphome/components/api/api_frame_helper.h +64 -54
- esphome/components/api/api_pb2.cpp +1837 -9044
- esphome/components/api/api_pb2.h +532 -685
- esphome/components/api/api_pb2_dump.cpp +4432 -0
- esphome/components/api/api_pb2_service.cpp +184 -425
- esphome/components/api/api_pb2_service.h +13 -6
- esphome/components/api/api_server.cpp +131 -167
- esphome/components/api/api_server.h +38 -10
- esphome/components/api/client.py +10 -4
- esphome/components/api/custom_api_device.h +8 -0
- esphome/components/api/list_entities.cpp +37 -104
- esphome/components/api/list_entities.h +33 -23
- esphome/components/api/proto.h +532 -26
- esphome/components/api/subscribe_state.cpp +23 -29
- esphome/components/api/subscribe_state.h +26 -19
- esphome/components/api/user_services.h +2 -0
- esphome/components/as3935_spi/as3935_spi.h +0 -2
- esphome/components/as5600/as5600.h +0 -1
- esphome/components/async_tcp/__init__.py +14 -5
- esphome/components/atc_mithermometer/atc_mithermometer.h +0 -1
- esphome/components/atm90e32/atm90e32.cpp +2 -1
- esphome/components/audio/audio_decoder.cpp +1 -1
- esphome/components/audio/audio_transfer_buffer.cpp +2 -2
- esphome/components/b_parasite/b_parasite.h +0 -1
- esphome/components/bedjet/bedjet_hub.cpp +5 -1
- esphome/components/bedjet/climate/bedjet_climate.cpp +5 -1
- esphome/components/beken_spi_led_strip/led_strip.cpp +4 -2
- esphome/components/bh1750/bh1750.cpp +5 -5
- esphome/components/binary_sensor/__init__.py +82 -5
- esphome/components/binary_sensor/automation.h +19 -1
- esphome/components/binary_sensor/binary_sensor.cpp +12 -30
- esphome/components/binary_sensor/binary_sensor.h +11 -25
- esphome/components/binary_sensor/filter.cpp +29 -24
- esphome/components/binary_sensor/filter.h +20 -10
- esphome/components/ble_client/output/ble_binary_output.h +0 -1
- esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +5 -1
- esphome/components/ble_client/sensor/ble_rssi_sensor.h +0 -1
- esphome/components/ble_client/sensor/ble_sensor.cpp +5 -1
- esphome/components/ble_client/sensor/ble_sensor.h +0 -1
- esphome/components/ble_client/switch/ble_switch.h +0 -1
- esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +5 -1
- esphome/components/ble_client/text_sensor/ble_text_sensor.h +0 -1
- esphome/components/ble_presence/ble_presence_device.h +0 -1
- esphome/components/ble_rssi/ble_rssi_sensor.h +0 -1
- esphome/components/ble_scanner/ble_scanner.h +0 -1
- esphome/components/bluetooth_proxy/bluetooth_connection.h +9 -2
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -6
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +8 -2
- esphome/components/bme680/sensor.py +1 -1
- esphome/components/bmp581/bmp581.h +0 -2
- esphome/components/button/__init__.py +5 -2
- esphome/components/camera/__init__.py +1 -0
- esphome/components/camera/camera.cpp +22 -0
- esphome/components/camera/camera.h +80 -0
- esphome/components/canbus/__init__.py +1 -0
- esphome/components/cap1188/cap1188.h +0 -1
- esphome/components/captive_portal/__init__.py +12 -2
- esphome/components/captive_portal/captive_portal.cpp +12 -2
- esphome/components/captive_portal/captive_portal.h +5 -2
- esphome/components/ccs811/ccs811.h +0 -2
- esphome/components/climate/__init__.py +5 -2
- esphome/components/cm1106/sensor.py +2 -2
- esphome/components/const/__init__.py +2 -0
- esphome/components/copy/binary_sensor/copy_binary_sensor.h +0 -1
- esphome/components/copy/button/copy_button.h +0 -1
- esphome/components/copy/cover/copy_cover.h +0 -1
- esphome/components/copy/fan/copy_fan.h +0 -1
- esphome/components/copy/lock/copy_lock.h +0 -1
- esphome/components/copy/number/copy_number.h +0 -1
- esphome/components/copy/select/copy_select.h +0 -1
- esphome/components/copy/sensor/copy_sensor.h +0 -1
- esphome/components/copy/switch/copy_switch.h +0 -1
- esphome/components/copy/text/copy_text.h +0 -1
- esphome/components/copy/text_sensor/copy_text_sensor.h +0 -1
- esphome/components/cover/__init__.py +5 -2
- esphome/components/cs5460a/cs5460a.h +0 -1
- esphome/components/datetime/__init__.py +4 -2
- esphome/components/debug/__init__.py +20 -0
- esphome/components/debug/debug_esp32.cpp +2 -0
- esphome/components/deep_sleep/__init__.py +43 -9
- esphome/components/demo/__init__.py +2 -2
- esphome/components/display/display.cpp +4 -3
- esphome/components/display/display.h +0 -2
- esphome/components/display/display_buffer.cpp +1 -1
- esphome/components/ds2484/__init__.py +1 -0
- esphome/components/ds2484/ds2484.cpp +209 -0
- esphome/components/ds2484/ds2484.h +43 -0
- esphome/components/ds2484/one_wire.py +37 -0
- esphome/components/duty_time/duty_time_sensor.h +0 -1
- esphome/components/ens160_base/ens160_base.h +0 -1
- esphome/components/es7210/es7210.h +0 -1
- esphome/components/es7243e/es7243e.h +0 -1
- esphome/components/es8156/es8156.h +0 -1
- esphome/components/es8311/es8311.h +0 -1
- esphome/components/es8388/es8388.h +0 -1
- esphome/components/esp32/__init__.py +103 -135
- esphome/components/esp32/core.cpp +0 -4
- esphome/components/esp32/gpio.h +1 -1
- esphome/components/esp32/helpers.cpp +69 -0
- esphome/components/esp32_ble/ble.cpp +5 -6
- esphome/components/esp32_ble/ble.h +29 -14
- esphome/components/esp32_ble/ble_event.h +6 -6
- esphome/components/esp32_ble_client/ble_client_base.cpp +21 -6
- esphome/components/esp32_ble_client/ble_client_base.h +24 -9
- esphome/components/esp32_ble_tracker/__init__.py +2 -8
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +5 -5
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +11 -7
- esphome/components/esp32_camera/__init__.py +112 -98
- esphome/components/esp32_camera/esp32_camera.cpp +41 -31
- esphome/components/esp32_camera/esp32_camera.h +35 -30
- esphome/components/esp32_camera_web_server/__init__.py +2 -1
- esphome/components/esp32_camera_web_server/camera_web_server.cpp +8 -8
- esphome/components/esp32_camera_web_server/camera_web_server.h +3 -3
- esphome/components/esp32_hall/sensor.py +2 -21
- esphome/components/esp32_hosted/__init__.py +101 -0
- esphome/components/esp32_hosted/esp32_hosted.py.script +12 -0
- esphome/components/esp32_improv/esp32_improv_component.cpp +3 -0
- esphome/components/esp32_rmt/__init__.py +0 -58
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +77 -63
- esphome/components/esp32_rmt_led_strip/led_strip.h +11 -17
- esphome/components/esp32_rmt_led_strip/light.py +14 -76
- esphome/components/esp32_touch/esp32_touch.h +174 -28
- esphome/components/esp32_touch/esp32_touch_common.cpp +162 -0
- esphome/components/esp32_touch/esp32_touch_v1.cpp +240 -0
- esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
- esphome/components/esp8266/__init__.py +2 -0
- esphome/components/esp8266/gpio.cpp +10 -10
- esphome/components/esp8266/helpers.cpp +31 -0
- esphome/components/esp_ldo/__init__.py +10 -8
- esphome/components/esp_ldo/esp_ldo.h +3 -0
- esphome/components/esphome/ota/__init__.py +1 -0
- esphome/components/esphome/ota/ota_esphome.cpp +24 -19
- esphome/components/ethernet/__init__.py +42 -23
- esphome/components/ethernet/esp_eth_phy_jl1101.c +0 -16
- esphome/components/ethernet/ethernet_component.cpp +69 -29
- esphome/components/ethernet/ethernet_component.h +18 -10
- esphome/components/event/__init__.py +5 -2
- esphome/components/ezo/ezo.h +0 -1
- esphome/components/ezo_pmp/ezo_pmp.h +0 -1
- esphome/components/fan/__init__.py +5 -2
- esphome/components/fan/fan.cpp +4 -0
- esphome/components/feedback/feedback_cover.h +0 -1
- esphome/components/font/__init__.py +92 -82
- esphome/components/font/font.cpp +9 -2
- esphome/components/font/font.h +20 -5
- esphome/components/fs3000/fs3000.h +0 -1
- esphome/components/gcja5/gcja5.h +0 -1
- esphome/components/gl_r01_i2c/__init__.py +0 -0
- esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +68 -0
- esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
- esphome/components/gl_r01_i2c/sensor.py +36 -0
- esphome/components/gp8403/gp8403.h +0 -1
- esphome/components/gpio/binary_sensor/__init__.py +39 -1
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +77 -3
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +40 -0
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +0 -2
- esphome/components/he60r/he60r.h +0 -1
- esphome/components/heatpumpir/climate.py +2 -1
- esphome/components/heatpumpir/heatpumpir.cpp +1 -0
- esphome/components/heatpumpir/heatpumpir.h +1 -0
- esphome/components/honeywellabp2_i2c/honeywellabp2.h +0 -1
- esphome/components/host/__init__.py +3 -1
- esphome/components/host/helpers.cpp +57 -0
- esphome/components/http_request/__init__.py +19 -1
- esphome/components/http_request/http_request.h +1 -1
- esphome/components/http_request/http_request_arduino.cpp +0 -1
- esphome/components/http_request/http_request_arduino.h +1 -0
- esphome/components/http_request/http_request_idf.cpp +0 -1
- esphome/components/http_request/ota/ota_http_request.cpp +1 -1
- esphome/components/http_request/update/http_request_update.cpp +35 -16
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +3 -9
- esphome/components/hydreon_rgxx/sensor.py +1 -1
- esphome/components/i2c/__init__.py +23 -11
- esphome/components/i2c/i2c_bus.h +8 -1
- esphome/components/i2c/i2c_bus_arduino.cpp +4 -3
- esphome/components/i2c/i2c_bus_arduino.h +6 -3
- esphome/components/i2c/i2c_bus_esp_idf.h +5 -3
- esphome/components/i2c_device/i2c_device.h +0 -1
- esphome/components/i2s_audio/__init__.py +2 -10
- esphome/components/i2s_audio/i2s_audio.cpp +1 -5
- esphome/components/i2s_audio/media_player/__init__.py +2 -2
- esphome/components/i2s_audio/speaker/__init__.py +1 -1
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +2 -2
- esphome/components/iaqcore/iaqcore.h +0 -2
- esphome/components/image/__init__.py +123 -24
- esphome/components/improv_serial/improv_serial_component.cpp +0 -4
- esphome/components/ina219/ina219.cpp +7 -0
- esphome/components/ina219/ina219.h +1 -0
- esphome/components/ina260/ina260.h +0 -2
- esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.h +0 -1
- esphome/components/inkplate6/display.py +15 -0
- esphome/components/inkplate6/inkplate.cpp +2 -2
- esphome/components/integration/integration_sensor.h +0 -1
- esphome/components/internal_temperature/internal_temperature.cpp +8 -27
- esphome/components/internal_temperature/sensor.py +0 -26
- esphome/components/interval/interval.h +0 -2
- esphome/components/json/__init__.py +1 -1
- esphome/components/json/json_util.cpp +56 -63
- esphome/components/ld2410/button/__init__.py +3 -3
- esphome/components/ld2410/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2410/button/{reset_button.h → factory_reset_button.h} +2 -2
- esphome/components/ld2410/ld2410.cpp +421 -268
- esphome/components/ld2410/ld2410.h +44 -146
- esphome/components/ld2410/number/__init__.py +2 -2
- esphome/components/ld2410/sensor.py +1 -1
- esphome/components/ld2410/switch/__init__.py +1 -1
- esphome/components/ld2420/binary_sensor/ld2420_binary_sensor.cpp +2 -2
- esphome/components/ld2420/button/reconfig_buttons.cpp +1 -1
- esphome/components/ld2420/ld2420.cpp +252 -147
- esphome/components/ld2420/ld2420.h +52 -126
- esphome/components/ld2420/number/__init__.py +2 -2
- esphome/components/ld2420/number/gate_config_number.cpp +1 -1
- esphome/components/ld2420/select/operating_mode_select.cpp +1 -1
- esphome/components/ld2420/sensor/__init__.py +6 -2
- esphome/components/ld2420/sensor/ld2420_sensor.cpp +2 -2
- esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
- esphome/components/ld2420/text_sensor/text_sensor.cpp +2 -2
- esphome/components/ld2450/button/__init__.py +3 -3
- esphome/components/ld2450/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2450/button/{reset_button.h → factory_reset_button.h} +2 -2
- esphome/components/ld2450/ld2450.cpp +384 -232
- esphome/components/ld2450/ld2450.h +60 -69
- esphome/components/ld2450/switch/__init__.py +1 -1
- esphome/components/ledc/ledc_output.cpp +1 -63
- esphome/components/libretiny/__init__.py +5 -3
- esphome/components/libretiny/const.py +5 -0
- esphome/components/libretiny/generate_components.py +1 -0
- esphome/components/libretiny/helpers.cpp +35 -0
- esphome/components/libretiny/lt_component.cpp +5 -3
- esphome/components/light/__init__.py +4 -2
- esphome/components/light/addressable_light.h +3 -3
- esphome/components/light/light_call.cpp +180 -243
- esphome/components/light/light_call.h +72 -20
- esphome/components/light/light_color_values.h +14 -14
- esphome/components/light/light_json_schema.cpp +17 -16
- esphome/components/light/light_state.h +15 -13
- esphome/components/light/transformers.h +2 -2
- esphome/components/ln882x/__init__.py +52 -0
- esphome/components/ln882x/boards.py +285 -0
- esphome/components/lock/__init__.py +5 -2
- esphome/components/logger/__init__.py +40 -3
- esphome/components/logger/logger.cpp +47 -12
- esphome/components/logger/logger.h +80 -49
- esphome/components/logger/logger_esp32.cpp +3 -3
- esphome/components/lps22/__init__.py +0 -0
- esphome/components/lps22/lps22.cpp +75 -0
- esphome/components/lps22/lps22.h +27 -0
- esphome/components/lps22/sensor.py +58 -0
- esphome/components/ltr390/ltr390.h +0 -1
- esphome/components/ltr501/ltr501.h +0 -1
- esphome/components/ltr_als_ps/ltr_als_ps.h +0 -1
- esphome/components/lvgl/__init__.py +1 -1
- esphome/components/lvgl/schemas.py +66 -6
- esphome/components/lvgl/styles.py +24 -16
- esphome/components/lvgl/widgets/__init__.py +12 -2
- esphome/components/lvgl/widgets/lv_bar.py +40 -19
- esphome/components/lvgl/widgets/meter.py +20 -13
- esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +1 -1
- esphome/components/max9611/max9611.h +0 -1
- esphome/components/mcp23016/__init__.py +1 -1
- esphome/components/mcp23xxx_base/__init__.py +1 -1
- esphome/components/mcp4461/__init__.py +1 -1
- esphome/components/mcp4461/output/__init__.py +3 -2
- esphome/components/mcp9600/mcp9600.h +0 -2
- esphome/components/md5/md5.cpp +3 -3
- esphome/components/md5/md5.h +1 -6
- esphome/components/mdns/__init__.py +22 -11
- esphome/components/media_player/__init__.py +4 -3
- esphome/components/micro_wake_word/__init__.py +1 -5
- esphome/components/micro_wake_word/streaming_model.cpp +2 -2
- esphome/components/microphone/microphone.cpp +7 -9
- esphome/components/microphone/microphone.h +0 -2
- esphome/components/mipi_spi/display.py +1 -0
- esphome/components/mmc5603/mmc5603.cpp +1 -1
- esphome/components/modbus/modbus.cpp +33 -15
- esphome/components/modbus/modbus.h +9 -0
- esphome/components/modbus_controller/__init__.py +42 -10
- esphome/components/modbus_controller/modbus_controller.cpp +92 -11
- esphome/components/modbus_controller/modbus_controller.h +61 -7
- esphome/components/mopeka_pro_check/mopeka_pro_check.h +0 -1
- esphome/components/mopeka_std_check/mopeka_std_check.h +0 -1
- esphome/components/mpl3115a2/mpl3115a2.h +0 -2
- esphome/components/mqtt/__init__.py +16 -0
- esphome/components/mqtt/mqtt_alarm_control_panel.cpp +2 -1
- esphome/components/mqtt/mqtt_backend.h +2 -1
- esphome/components/mqtt/mqtt_backend_esp32.cpp +132 -47
- esphome/components/mqtt/mqtt_backend_esp32.h +106 -4
- esphome/components/mqtt/mqtt_binary_sensor.cpp +1 -0
- esphome/components/mqtt/mqtt_button.cpp +4 -1
- esphome/components/mqtt/mqtt_client.cpp +17 -9
- esphome/components/mqtt/mqtt_client.h +8 -3
- esphome/components/mqtt/mqtt_climate.cpp +6 -4
- esphome/components/mqtt/mqtt_component.cpp +3 -1
- esphome/components/mqtt/mqtt_cover.cpp +1 -0
- esphome/components/mqtt/mqtt_date.cpp +4 -3
- esphome/components/mqtt/mqtt_datetime.cpp +7 -6
- esphome/components/mqtt/mqtt_event.cpp +6 -3
- esphome/components/mqtt/mqtt_fan.cpp +1 -0
- esphome/components/mqtt/mqtt_light.cpp +8 -4
- esphome/components/mqtt/mqtt_lock.cpp +3 -1
- esphome/components/mqtt/mqtt_number.cpp +1 -0
- esphome/components/mqtt/mqtt_select.cpp +2 -1
- esphome/components/mqtt/mqtt_sensor.cpp +3 -1
- esphome/components/mqtt/mqtt_switch.cpp +3 -1
- esphome/components/mqtt/mqtt_text.cpp +1 -0
- esphome/components/mqtt/mqtt_text_sensor.cpp +3 -1
- esphome/components/mqtt/mqtt_time.cpp +4 -3
- esphome/components/mqtt/mqtt_update.cpp +1 -0
- esphome/components/mqtt/mqtt_valve.cpp +3 -1
- esphome/components/ms8607/ms8607.cpp +1 -1
- esphome/components/ms8607/ms8607.h +0 -1
- esphome/components/neopixelbus/light.py +4 -1
- esphome/components/neopixelbus/neopixelbus_light.h +1 -1
- esphome/components/network/__init__.py +4 -1
- esphome/components/network/ip_address.h +1 -0
- esphome/components/nextion/__init__.py +16 -0
- esphome/components/nextion/base_component.py +1 -0
- esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +1 -1
- esphome/components/nextion/display.py +14 -4
- esphome/components/nextion/nextion.cpp +166 -101
- esphome/components/nextion/nextion.h +84 -53
- esphome/components/nextion/nextion_commands.cpp +11 -10
- esphome/components/nextion/nextion_component.cpp +28 -28
- esphome/components/nextion/nextion_component.h +53 -18
- esphome/components/nextion/nextion_component_base.h +3 -0
- esphome/components/nextion/nextion_upload.cpp +36 -0
- esphome/components/nextion/nextion_upload_arduino.cpp +10 -35
- esphome/components/nextion/nextion_upload_idf.cpp +9 -33
- esphome/components/nextion/sensor/nextion_sensor.cpp +1 -1
- esphome/components/nextion/switch/nextion_switch.cpp +1 -1
- esphome/components/nextion/text_sensor/nextion_textsensor.cpp +1 -1
- esphome/components/nfc/nfc.cpp +3 -22
- esphome/components/nfc/nfc.h +3 -3
- esphome/components/number/__init__.py +5 -2
- esphome/components/online_image/__init__.py +9 -1
- esphome/components/online_image/online_image.cpp +17 -7
- esphome/components/online_image/online_image.h +10 -2
- esphome/components/opentherm/opentherm.cpp +7 -12
- esphome/components/opentherm/output/output.cpp +1 -1
- esphome/components/openthread/__init__.py +47 -40
- esphome/components/openthread/const.py +1 -0
- esphome/components/openthread/openthread_esp.cpp +27 -5
- esphome/components/opt3001/__init__.py +0 -0
- esphome/components/opt3001/opt3001.cpp +122 -0
- esphome/components/opt3001/opt3001.h +27 -0
- esphome/components/opt3001/sensor.py +35 -0
- esphome/components/ota/__init__.py +17 -0
- esphome/components/ota/ota_backend.h +27 -1
- esphome/components/ota/ota_backend_arduino_esp32.cpp +12 -2
- esphome/components/ota/ota_backend_arduino_esp32.h +3 -0
- esphome/components/ota/ota_backend_arduino_esp8266.cpp +18 -4
- esphome/components/ota/ota_backend_arduino_esp8266.h +3 -0
- esphome/components/ota/ota_backend_arduino_libretiny.cpp +12 -2
- esphome/components/ota/ota_backend_arduino_libretiny.h +3 -0
- esphome/components/ota/ota_backend_arduino_rp2040.cpp +9 -2
- esphome/components/ota/ota_backend_arduino_rp2040.h +3 -0
- esphome/components/ota/ota_backend_esp_idf.cpp +10 -16
- esphome/components/ota/ota_backend_esp_idf.h +1 -0
- esphome/components/packages/__init__.py +5 -2
- esphome/components/packet_transport/binary_sensor.py +61 -4
- esphome/components/packet_transport/packet_transport.cpp +34 -1
- esphome/components/packet_transport/packet_transport.h +11 -5
- esphome/components/pcf8574/__init__.py +1 -1
- esphome/components/pi4ioe5v6408/__init__.py +84 -0
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +171 -0
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.h +70 -0
- esphome/components/pmsa003i/pmsa003i.h +0 -1
- esphome/components/pmsx003/pmsx003.h +0 -1
- esphome/components/pn7150/pn7150.cpp +7 -7
- esphome/components/pn7150/pn7150.h +0 -1
- esphome/components/pn7160/pn7160.cpp +7 -7
- esphome/components/pn7160/pn7160.h +0 -1
- esphome/components/preferences/syncer.h +2 -0
- esphome/components/prometheus/prometheus_handler.h +1 -1
- esphome/components/psram/psram.cpp +0 -20
- esphome/components/pulse_counter/pulse_counter_sensor.h +0 -1
- esphome/components/pulse_meter/pulse_meter_sensor.cpp +8 -4
- esphome/components/pulse_width/pulse_width.h +0 -1
- esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +0 -4
- esphome/components/pvvx_mithermometer/display/pvvx_display.h +0 -2
- esphome/components/pvvx_mithermometer/pvvx_mithermometer.h +0 -1
- esphome/components/qr_code/__init__.py +13 -10
- esphome/components/qwiic_pir/qwiic_pir.h +0 -1
- esphome/components/radon_eye_ble/radon_eye_listener.cpp +1 -1
- esphome/components/rc522/rc522.h +0 -1
- esphome/components/rdm6300/rdm6300.h +0 -2
- esphome/components/remote_base/__init__.py +7 -5
- esphome/components/remote_base/remote_base.cpp +24 -21
- esphome/components/remote_base/remote_base.h +3 -26
- esphome/components/remote_receiver/__init__.py +40 -46
- esphome/components/remote_receiver/remote_receiver.h +4 -18
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -87
- esphome/components/remote_receiver/remote_receiver_esp8266.cpp +1 -1
- esphome/components/remote_transmitter/__init__.py +42 -43
- esphome/components/remote_transmitter/remote_transmitter.h +2 -14
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -77
- esphome/components/resistance/resistance_sensor.h +0 -1
- esphome/components/rp2040/__init__.py +2 -0
- esphome/components/rp2040/helpers.cpp +55 -0
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +2 -2
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -4
- esphome/components/rtttl/__init__.py +4 -4
- esphome/components/rtttl/rtttl.cpp +10 -1
- esphome/components/ruuvitag/ruuvitag.h +0 -1
- esphome/components/safe_mode/safe_mode.cpp +2 -0
- esphome/components/safe_mode/safe_mode.h +4 -1
- esphome/components/scd30/scd30.h +0 -1
- esphome/components/scd30/sensor.py +2 -2
- esphome/components/scd4x/scd4x.cpp +61 -54
- esphome/components/scd4x/scd4x.h +17 -15
- esphome/components/scd4x/sensor.py +4 -4
- esphome/components/script/script.h +0 -2
- esphome/components/sdp3x/sensor.py +1 -1
- esphome/components/select/__init__.py +5 -2
- esphome/components/sen5x/sen5x.h +0 -1
- esphome/components/senseair/senseair.h +0 -1
- esphome/components/sensor/__init__.py +4 -2
- esphome/components/sensor/filter.cpp +1 -1
- esphome/components/sensor/sensor.cpp +12 -6
- esphome/components/sensor/sensor.h +13 -5
- esphome/components/servo/servo.cpp +2 -2
- esphome/components/servo/servo.h +0 -1
- esphome/components/sfa30/sfa30.h +0 -1
- esphome/components/sgp30/sgp30.h +0 -1
- esphome/components/sgp4x/sgp4x.h +0 -1
- esphome/components/shelly_dimmer/stm32flash.cpp +1 -2
- esphome/components/sht4x/sht4x.h +0 -1
- esphome/components/sm300d2/sm300d2.h +0 -2
- esphome/components/smt100/sensor.py +8 -4
- esphome/components/smt100/smt100.cpp +5 -5
- esphome/components/smt100/smt100.h +3 -3
- esphome/components/sn74hc595/__init__.py +1 -1
- esphome/components/sn74hc595/sn74hc595.cpp +5 -4
- esphome/components/sntp/sntp_component.cpp +9 -3
- esphome/components/sntp/time.py +2 -0
- esphome/components/socket/__init__.py +17 -0
- esphome/components/spi/__init__.py +27 -6
- esphome/components/spi/spi.cpp +3 -2
- esphome/components/spi/spi.h +9 -3
- esphome/components/spi/spi_arduino.cpp +3 -5
- esphome/components/spi/spi_esp_idf.cpp +40 -21
- esphome/components/spi_led_strip/spi_led_strip.cpp +1 -1
- esphome/components/sps30/sps30.h +0 -1
- esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
- esphome/components/st7701s/st7701s.cpp +0 -4
- esphome/components/status/status_binary_sensor.h +0 -2
- esphome/components/substitutions/__init__.py +81 -21
- esphome/components/substitutions/jinja.py +99 -0
- esphome/components/sun/sun.cpp +3 -4
- esphome/components/switch/__init__.py +5 -2
- esphome/components/switch/binary_sensor/switch_binary_sensor.h +0 -1
- esphome/components/sx126x/__init__.py +317 -0
- esphome/components/sx126x/automation.h +62 -0
- esphome/components/sx126x/packet_transport/__init__.py +26 -0
- esphome/components/sx126x/packet_transport/sx126x_transport.cpp +26 -0
- esphome/components/sx126x/packet_transport/sx126x_transport.h +25 -0
- esphome/components/sx126x/sx126x.cpp +523 -0
- esphome/components/sx126x/sx126x.h +140 -0
- esphome/components/sx126x/sx126x_reg.h +163 -0
- esphome/components/sx127x/__init__.py +325 -0
- esphome/components/sx127x/automation.h +62 -0
- esphome/components/sx127x/packet_transport/__init__.py +26 -0
- esphome/components/sx127x/packet_transport/sx127x_transport.cpp +26 -0
- esphome/components/sx127x/packet_transport/sx127x_transport.h +25 -0
- esphome/components/sx127x/sx127x.cpp +498 -0
- esphome/components/sx127x/sx127x.h +128 -0
- esphome/components/sx127x/sx127x_reg.h +295 -0
- esphome/components/syslog/esphome_syslog.cpp +5 -3
- esphome/components/syslog/esphome_syslog.h +1 -1
- esphome/components/tca9555/__init__.py +1 -1
- esphome/components/template/binary_sensor/template_binary_sensor.cpp +1 -9
- esphome/components/text/__init__.py +5 -2
- esphome/components/text_sensor/__init__.py +5 -2
- esphome/components/thermostat/thermostat_climate.cpp +34 -31
- esphome/components/thermostat/thermostat_climate.h +43 -39
- esphome/components/time/__init__.py +16 -2
- esphome/components/time/real_time_clock.cpp +4 -0
- esphome/components/time/real_time_clock.h +5 -1
- esphome/components/tlc5971/tlc5971.cpp +4 -1
- esphome/components/tmp1075/tmp1075.h +0 -2
- esphome/components/tof10120/tof10120_sensor.h +0 -1
- esphome/components/tormatic/tormatic_cover.h +0 -1
- esphome/components/total_daily_energy/total_daily_energy.h +0 -1
- esphome/components/tsl2591/tsl2591.cpp +1 -1
- esphome/components/ttp229_bsf/ttp229_bsf.h +0 -1
- esphome/components/ttp229_lsf/ttp229_lsf.h +0 -1
- esphome/components/tx20/tx20.cpp +2 -2
- esphome/components/uart/__init__.py +18 -0
- esphome/components/uart/uart_component_esp_idf.cpp +1 -5
- esphome/components/update/__init__.py +5 -2
- esphome/components/update/update_entity.h +8 -0
- esphome/components/usb_host/__init__.py +5 -2
- esphome/components/usb_host/usb_host_client.cpp +10 -10
- esphome/components/usb_uart/cp210x.cpp +1 -1
- esphome/components/usb_uart/usb_uart.cpp +41 -44
- esphome/components/usb_uart/usb_uart.h +4 -3
- esphome/components/valve/__init__.py +5 -2
- esphome/components/vbus/vbus.h +0 -1
- esphome/components/veml3235/veml3235.h +0 -1
- esphome/components/veml7700/veml7700.h +0 -1
- esphome/components/vl53l0x/vl53l0x_sensor.h +0 -1
- esphome/components/voice_assistant/voice_assistant.cpp +4 -4
- esphome/components/watchdog/watchdog.cpp +0 -4
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +6 -6
- esphome/components/web_server/__init__.py +34 -19
- esphome/components/web_server/ota/__init__.py +32 -0
- esphome/components/web_server/ota/ota_web_server.cpp +210 -0
- esphome/components/web_server/ota/ota_web_server.h +26 -0
- esphome/components/web_server/web_server.cpp +324 -439
- esphome/components/web_server/web_server.h +33 -23
- esphome/components/web_server/web_server_v1.cpp +4 -5
- esphome/components/web_server_base/__init__.py +5 -2
- esphome/components/web_server_base/web_server_base.cpp +2 -94
- esphome/components/web_server_base/web_server_base.h +5 -25
- esphome/components/web_server_idf/multipart.cpp +254 -0
- esphome/components/web_server_idf/multipart.h +86 -0
- esphome/components/web_server_idf/utils.cpp +32 -0
- esphome/components/web_server_idf/utils.h +10 -0
- esphome/components/web_server_idf/web_server_idf.cpp +164 -16
- esphome/components/web_server_idf/web_server_idf.h +11 -10
- esphome/components/wiegand/wiegand.cpp +2 -2
- esphome/components/wifi/__init__.py +18 -0
- esphome/components/wifi/wifi_component.cpp +17 -22
- esphome/components/wifi/wifi_component.h +27 -23
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +52 -59
- esphome/components/wifi/wifi_component_esp8266.cpp +46 -46
- esphome/components/wifi/wifi_component_esp_idf.cpp +35 -36
- esphome/components/wifi/wifi_component_libretiny.cpp +26 -27
- esphome/components/wifi/wifi_component_pico_w.cpp +3 -3
- esphome/components/wifi_info/wifi_info_text_sensor.cpp +6 -6
- esphome/components/wireguard/__init__.py +2 -11
- esphome/components/xiaomi_ble/xiaomi_ble.cpp +13 -1
- esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
- esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +0 -1
- esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +0 -1
- esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +0 -1
- esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +0 -1
- esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +0 -1
- esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +0 -1
- esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +0 -1
- esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +0 -1
- esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +0 -1
- esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +0 -1
- esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +0 -1
- esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +0 -1
- esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +0 -1
- esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +0 -1
- esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +0 -1
- esphome/components/xiaomi_miscale/xiaomi_miscale.h +0 -1
- esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +0 -1
- esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +0 -1
- esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +0 -1
- esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +0 -1
- esphome/components/xiaomi_xmwsdj04mmc/__init__.py +0 -0
- esphome/components/xiaomi_xmwsdj04mmc/sensor.py +77 -0
- esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.cpp +77 -0
- esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.h +36 -0
- esphome/components/zio_ultrasonic/zio_ultrasonic.h +0 -2
- esphome/components/zyaura/zyaura.h +0 -1
- esphome/config.py +88 -22
- esphome/config_helpers.py +74 -1
- esphome/config_validation.py +12 -1
- esphome/const.py +65 -10
- esphome/core/__init__.py +18 -2
- esphome/core/application.cpp +169 -10
- esphome/core/application.h +145 -165
- esphome/core/area.h +19 -0
- esphome/core/automation.h +58 -9
- esphome/core/color.cpp +3 -5
- esphome/core/color.h +16 -16
- esphome/core/component.cpp +156 -22
- esphome/core/component.h +98 -4
- esphome/core/component_iterator.cpp +11 -9
- esphome/core/component_iterator.h +12 -10
- esphome/core/config.py +155 -6
- esphome/core/controller.cpp +4 -2
- esphome/core/controller.h +1 -1
- esphome/core/datatypes.h +2 -2
- esphome/core/defines.h +17 -2
- esphome/core/device.h +20 -0
- esphome/core/entity_base.cpp +20 -15
- esphome/core/entity_base.h +76 -0
- esphome/core/entity_helpers.py +168 -1
- esphome/core/event_pool.h +81 -0
- esphome/core/helpers.cpp +75 -230
- esphome/core/helpers.h +165 -105
- esphome/core/lock_free_queue.h +151 -0
- esphome/core/log.cpp +2 -2
- esphome/core/log.h +2 -0
- esphome/core/optional.h +5 -0
- esphome/core/ring_buffer.cpp +2 -2
- esphome/core/scheduler.cpp +275 -103
- esphome/core/scheduler.h +154 -17
- esphome/core/time.cpp +5 -5
- esphome/core/time.h +5 -5
- esphome/cpp_generator.py +17 -0
- esphome/cpp_helpers.py +0 -22
- esphome/cpp_types.py +3 -1
- esphome/dashboard/entries.py +1 -1
- esphome/dashboard/util/text.py +5 -21
- esphome/dashboard/web_server.py +9 -1
- esphome/helpers.py +47 -0
- esphome/loader.py +15 -1
- esphome/pins.py +14 -8
- esphome/platformio_api.py +2 -0
- esphome/wizard.py +17 -4
- esphome/writer.py +44 -3
- esphome/yaml_util.py +0 -2
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/METADATA +10 -9
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/RECORD +639 -580
- esphome/components/api/api_pb2_size.h +0 -361
- esphome/components/esp32_ble/ble_event_pool.h +0 -72
- esphome/components/esp32_ble/queue.h +0 -85
- esphome/components/esp32_hall/esp32_hall.cpp +0 -25
- esphome/components/esp32_hall/esp32_hall.h +0 -23
- esphome/components/esp32_touch/esp32_touch.cpp +0 -355
- esphome/components/ld2410/button/reset_button.cpp +0 -9
- esphome/components/ld2450/button/reset_button.cpp +0 -9
- esphome/components/openthread/tlv.py +0 -65
- /esphome/{dashboard/enum.py → enum.py} +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/WHEEL +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/entry_points.txt +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/top_level.txt +0 -0
|
@@ -18,52 +18,48 @@ namespace usb_uart {
|
|
|
18
18
|
*/
|
|
19
19
|
static optional<CdcEps> get_cdc(const usb_config_desc_t *config_desc, uint8_t intf_idx) {
|
|
20
20
|
int conf_offset, ep_offset;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
// look for an interface with an interrupt endpoint (notify), and one with two bulk endpoints (data in/out)
|
|
22
|
+
CdcEps eps{};
|
|
23
|
+
eps.bulk_interface_number = 0xFF;
|
|
24
24
|
for (;;) {
|
|
25
|
-
auto intf_desc = usb_parse_interface_descriptor(config_desc, intf_idx++, 0, &conf_offset);
|
|
25
|
+
const auto *intf_desc = usb_parse_interface_descriptor(config_desc, intf_idx++, 0, &conf_offset);
|
|
26
26
|
if (!intf_desc) {
|
|
27
27
|
ESP_LOGE(TAG, "usb_parse_interface_descriptor failed");
|
|
28
28
|
return nullopt;
|
|
29
29
|
}
|
|
30
|
-
|
|
30
|
+
ESP_LOGD(TAG, "intf_desc: bInterfaceClass=%02X, bInterfaceSubClass=%02X, bInterfaceProtocol=%02X, bNumEndpoints=%d",
|
|
31
|
+
intf_desc->bInterfaceClass, intf_desc->bInterfaceSubClass, intf_desc->bInterfaceProtocol,
|
|
32
|
+
intf_desc->bNumEndpoints);
|
|
33
|
+
for (uint8_t i = 0; i != intf_desc->bNumEndpoints; i++) {
|
|
31
34
|
ep_offset = conf_offset;
|
|
32
|
-
|
|
33
|
-
if (!
|
|
34
|
-
ESP_LOGE(TAG, "
|
|
35
|
+
const auto *ep = usb_parse_endpoint_descriptor_by_index(intf_desc, i, config_desc->wTotalLength, &ep_offset);
|
|
36
|
+
if (!ep) {
|
|
37
|
+
ESP_LOGE(TAG, "Ran out of interfaces at %d before finding all endpoints", i);
|
|
35
38
|
return nullopt;
|
|
36
39
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
ESP_LOGE(TAG, "in_ep: usb_parse_endpoint_descriptor_by_index failed");
|
|
53
|
-
return nullopt;
|
|
40
|
+
ESP_LOGD(TAG, "ep: bEndpointAddress=%02X, bmAttributes=%02X", ep->bEndpointAddress, ep->bmAttributes);
|
|
41
|
+
if (ep->bmAttributes == USB_BM_ATTRIBUTES_XFER_INT) {
|
|
42
|
+
eps.notify_ep = ep;
|
|
43
|
+
eps.interrupt_interface_number = intf_desc->bInterfaceNumber;
|
|
44
|
+
} else if (ep->bmAttributes == USB_BM_ATTRIBUTES_XFER_BULK && ep->bEndpointAddress & usb_host::USB_DIR_IN &&
|
|
45
|
+
(eps.bulk_interface_number == 0xFF || eps.bulk_interface_number == intf_desc->bInterfaceNumber)) {
|
|
46
|
+
eps.in_ep = ep;
|
|
47
|
+
eps.bulk_interface_number = intf_desc->bInterfaceNumber;
|
|
48
|
+
} else if (ep->bmAttributes == USB_BM_ATTRIBUTES_XFER_BULK && !(ep->bEndpointAddress & usb_host::USB_DIR_IN) &&
|
|
49
|
+
(eps.bulk_interface_number == 0xFF || eps.bulk_interface_number == intf_desc->bInterfaceNumber)) {
|
|
50
|
+
eps.out_ep = ep;
|
|
51
|
+
eps.bulk_interface_number = intf_desc->bInterfaceNumber;
|
|
52
|
+
} else {
|
|
53
|
+
ESP_LOGE(TAG, "Unexpected endpoint attributes: %02X", ep->bmAttributes);
|
|
54
|
+
continue;
|
|
54
55
|
}
|
|
55
|
-
if (in_ep->bmAttributes != USB_BM_ATTRIBUTES_XFER_BULK)
|
|
56
|
-
in_ep = nullptr;
|
|
57
56
|
}
|
|
58
|
-
if (in_ep != nullptr && out_ep != nullptr && notify_ep != nullptr)
|
|
59
|
-
|
|
57
|
+
if (eps.in_ep != nullptr && eps.out_ep != nullptr && eps.notify_ep != nullptr)
|
|
58
|
+
return eps;
|
|
60
59
|
}
|
|
61
|
-
if (in_ep->bEndpointAddress & usb_host::USB_DIR_IN)
|
|
62
|
-
return CdcEps{notify_ep, in_ep, out_ep, interface_number};
|
|
63
|
-
return CdcEps{notify_ep, out_ep, in_ep, interface_number};
|
|
64
60
|
}
|
|
65
61
|
|
|
66
|
-
std::vector<CdcEps> USBUartTypeCdcAcm::
|
|
62
|
+
std::vector<CdcEps> USBUartTypeCdcAcm::parse_descriptors(usb_device_handle_t dev_hdl) {
|
|
67
63
|
const usb_config_desc_t *config_desc;
|
|
68
64
|
const usb_device_desc_t *device_desc;
|
|
69
65
|
int desc_offset = 0;
|
|
@@ -78,7 +74,7 @@ std::vector<CdcEps> USBUartTypeCdcAcm::parse_descriptors_(usb_device_handle_t de
|
|
|
78
74
|
ESP_LOGE(TAG, "get_active_config_descriptor failed");
|
|
79
75
|
return {};
|
|
80
76
|
}
|
|
81
|
-
if (device_desc->bDeviceClass == USB_CLASS_COMM) {
|
|
77
|
+
if (device_desc->bDeviceClass == USB_CLASS_COMM || device_desc->bDeviceClass == USB_CLASS_VENDOR_SPEC) {
|
|
82
78
|
// single CDC-ACM device
|
|
83
79
|
if (auto eps = get_cdc(config_desc, 0)) {
|
|
84
80
|
ESP_LOGV(TAG, "Found CDC-ACM device");
|
|
@@ -194,7 +190,7 @@ void USBUartComponent::start_input(USBUartChannel *channel) {
|
|
|
194
190
|
if (!channel->initialised_ || channel->input_started_ ||
|
|
195
191
|
channel->input_buffer_.get_free_space() < channel->cdc_dev_.in_ep->wMaxPacketSize)
|
|
196
192
|
return;
|
|
197
|
-
auto ep = channel->cdc_dev_.in_ep;
|
|
193
|
+
const auto *ep = channel->cdc_dev_.in_ep;
|
|
198
194
|
auto callback = [this, channel](const usb_host::TransferStatus &status) {
|
|
199
195
|
ESP_LOGV(TAG, "Transfer result: length: %u; status %X", status.data_len, status.error_code);
|
|
200
196
|
if (!status.success) {
|
|
@@ -227,7 +223,7 @@ void USBUartComponent::start_output(USBUartChannel *channel) {
|
|
|
227
223
|
if (channel->output_buffer_.is_empty()) {
|
|
228
224
|
return;
|
|
229
225
|
}
|
|
230
|
-
auto ep = channel->cdc_dev_.out_ep;
|
|
226
|
+
const auto *ep = channel->cdc_dev_.out_ep;
|
|
231
227
|
auto callback = [this, channel](const usb_host::TransferStatus &status) {
|
|
232
228
|
ESP_LOGV(TAG, "Output Transfer result: length: %u; status %X", status.data_len, status.error_code);
|
|
233
229
|
channel->output_started_ = false;
|
|
@@ -259,15 +255,15 @@ static void fix_mps(const usb_ep_desc_t *ep) {
|
|
|
259
255
|
}
|
|
260
256
|
}
|
|
261
257
|
void USBUartTypeCdcAcm::on_connected() {
|
|
262
|
-
auto cdc_devs = this->
|
|
258
|
+
auto cdc_devs = this->parse_descriptors(this->device_handle_);
|
|
263
259
|
if (cdc_devs.empty()) {
|
|
264
260
|
this->status_set_error("No CDC-ACM device found");
|
|
265
261
|
this->disconnect();
|
|
266
262
|
return;
|
|
267
263
|
}
|
|
268
264
|
ESP_LOGD(TAG, "Found %zu CDC-ACM devices", cdc_devs.size());
|
|
269
|
-
|
|
270
|
-
for (auto channel : this->channels_) {
|
|
265
|
+
size_t i = 0;
|
|
266
|
+
for (auto *channel : this->channels_) {
|
|
271
267
|
if (i == cdc_devs.size()) {
|
|
272
268
|
ESP_LOGE(TAG, "No configuration found for channel %d", channel->index_);
|
|
273
269
|
this->status_set_warning("No configuration found for channel");
|
|
@@ -277,10 +273,11 @@ void USBUartTypeCdcAcm::on_connected() {
|
|
|
277
273
|
fix_mps(channel->cdc_dev_.in_ep);
|
|
278
274
|
fix_mps(channel->cdc_dev_.out_ep);
|
|
279
275
|
channel->initialised_ = true;
|
|
280
|
-
auto err =
|
|
276
|
+
auto err =
|
|
277
|
+
usb_host_interface_claim(this->handle_, this->device_handle_, channel->cdc_dev_.bulk_interface_number, 0);
|
|
281
278
|
if (err != ESP_OK) {
|
|
282
279
|
ESP_LOGE(TAG, "usb_host_interface_claim failed: %s, channel=%d, intf=%d", esp_err_to_name(err), channel->index_,
|
|
283
|
-
channel->cdc_dev_.
|
|
280
|
+
channel->cdc_dev_.bulk_interface_number);
|
|
284
281
|
this->status_set_error("usb_host_interface_claim failed");
|
|
285
282
|
this->disconnect();
|
|
286
283
|
return;
|
|
@@ -290,7 +287,7 @@ void USBUartTypeCdcAcm::on_connected() {
|
|
|
290
287
|
}
|
|
291
288
|
|
|
292
289
|
void USBUartTypeCdcAcm::on_disconnected() {
|
|
293
|
-
for (auto channel : this->channels_) {
|
|
290
|
+
for (auto *channel : this->channels_) {
|
|
294
291
|
if (channel->cdc_dev_.in_ep != nullptr) {
|
|
295
292
|
usb_host_endpoint_halt(this->device_handle_, channel->cdc_dev_.in_ep->bEndpointAddress);
|
|
296
293
|
usb_host_endpoint_flush(this->device_handle_, channel->cdc_dev_.in_ep->bEndpointAddress);
|
|
@@ -303,7 +300,7 @@ void USBUartTypeCdcAcm::on_disconnected() {
|
|
|
303
300
|
usb_host_endpoint_halt(this->device_handle_, channel->cdc_dev_.notify_ep->bEndpointAddress);
|
|
304
301
|
usb_host_endpoint_flush(this->device_handle_, channel->cdc_dev_.notify_ep->bEndpointAddress);
|
|
305
302
|
}
|
|
306
|
-
usb_host_interface_release(this->handle_, this->device_handle_, channel->cdc_dev_.
|
|
303
|
+
usb_host_interface_release(this->handle_, this->device_handle_, channel->cdc_dev_.bulk_interface_number);
|
|
307
304
|
channel->initialised_ = false;
|
|
308
305
|
channel->input_started_ = false;
|
|
309
306
|
channel->output_started_ = false;
|
|
@@ -314,7 +311,7 @@ void USBUartTypeCdcAcm::on_disconnected() {
|
|
|
314
311
|
}
|
|
315
312
|
|
|
316
313
|
void USBUartTypeCdcAcm::enable_channels() {
|
|
317
|
-
for (auto channel : this->channels_) {
|
|
314
|
+
for (auto *channel : this->channels_) {
|
|
318
315
|
if (!channel->initialised_)
|
|
319
316
|
continue;
|
|
320
317
|
channel->input_started_ = false;
|
|
@@ -25,7 +25,8 @@ struct CdcEps {
|
|
|
25
25
|
const usb_ep_desc_t *notify_ep;
|
|
26
26
|
const usb_ep_desc_t *in_ep;
|
|
27
27
|
const usb_ep_desc_t *out_ep;
|
|
28
|
-
uint8_t
|
|
28
|
+
uint8_t bulk_interface_number;
|
|
29
|
+
uint8_t interrupt_interface_number;
|
|
29
30
|
};
|
|
30
31
|
|
|
31
32
|
enum UARTParityOptions {
|
|
@@ -123,7 +124,7 @@ class USBUartTypeCdcAcm : public USBUartComponent {
|
|
|
123
124
|
USBUartTypeCdcAcm(uint16_t vid, uint16_t pid) : USBUartComponent(vid, pid) {}
|
|
124
125
|
|
|
125
126
|
protected:
|
|
126
|
-
virtual std::vector<CdcEps>
|
|
127
|
+
virtual std::vector<CdcEps> parse_descriptors(usb_device_handle_t dev_hdl);
|
|
127
128
|
void on_connected() override;
|
|
128
129
|
virtual void enable_channels();
|
|
129
130
|
void on_disconnected() override;
|
|
@@ -134,7 +135,7 @@ class USBUartTypeCP210X : public USBUartTypeCdcAcm {
|
|
|
134
135
|
USBUartTypeCP210X(uint16_t vid, uint16_t pid) : USBUartTypeCdcAcm(vid, pid) {}
|
|
135
136
|
|
|
136
137
|
protected:
|
|
137
|
-
std::vector<CdcEps>
|
|
138
|
+
std::vector<CdcEps> parse_descriptors(usb_device_handle_t dev_hdl) override;
|
|
138
139
|
void enable_channels() override;
|
|
139
140
|
};
|
|
140
141
|
class USBUartTypeCH34X : public USBUartTypeCdcAcm {
|
|
@@ -22,8 +22,8 @@ from esphome.const import (
|
|
|
22
22
|
DEVICE_CLASS_WATER,
|
|
23
23
|
)
|
|
24
24
|
from esphome.core import CORE, coroutine_with_priority
|
|
25
|
+
from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
|
|
25
26
|
from esphome.cpp_generator import MockObjClass
|
|
26
|
-
from esphome.cpp_helpers import setup_entity
|
|
27
27
|
|
|
28
28
|
IS_PLATFORM_COMPONENT = True
|
|
29
29
|
|
|
@@ -103,6 +103,9 @@ _VALVE_SCHEMA = (
|
|
|
103
103
|
)
|
|
104
104
|
|
|
105
105
|
|
|
106
|
+
_VALVE_SCHEMA.add_extra(entity_duplicate_validator("valve"))
|
|
107
|
+
|
|
108
|
+
|
|
106
109
|
def valve_schema(
|
|
107
110
|
class_: MockObjClass = cv.UNDEFINED,
|
|
108
111
|
*,
|
|
@@ -132,7 +135,7 @@ VALVE_SCHEMA.add_extra(cv.deprecated_schema_constant("valve"))
|
|
|
132
135
|
|
|
133
136
|
|
|
134
137
|
async def _setup_valve_core(var, config):
|
|
135
|
-
await setup_entity(var, config)
|
|
138
|
+
await setup_entity(var, config, "valve")
|
|
136
139
|
|
|
137
140
|
if device_class_config := config.get(CONF_DEVICE_CLASS):
|
|
138
141
|
cg.add(var.set_device_class(device_class_config))
|
esphome/components/vbus/vbus.h
CHANGED
|
@@ -30,7 +30,6 @@ class VBus : public uart::UARTDevice, public Component {
|
|
|
30
30
|
public:
|
|
31
31
|
void dump_config() override;
|
|
32
32
|
void loop() override;
|
|
33
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
34
33
|
|
|
35
34
|
void register_listener(VBusListener *listener) { this->listeners_.push_back(listener); }
|
|
36
35
|
|
|
@@ -65,7 +65,6 @@ class VEML3235Sensor : public sensor::Sensor, public PollingComponent, public i2
|
|
|
65
65
|
void setup() override;
|
|
66
66
|
void dump_config() override;
|
|
67
67
|
void update() override { this->publish_state(this->read_lx_()); }
|
|
68
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
69
68
|
|
|
70
69
|
// Used by ESPHome framework. Does NOT actually set the value on the device.
|
|
71
70
|
void set_auto_gain(bool auto_gain) { this->auto_gain_ = auto_gain; }
|
|
@@ -102,7 +102,6 @@ class VEML7700Component : public PollingComponent, public i2c::I2CDevice {
|
|
|
102
102
|
//
|
|
103
103
|
// EspHome framework functions
|
|
104
104
|
//
|
|
105
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
106
105
|
void setup() override;
|
|
107
106
|
void dump_config() override;
|
|
108
107
|
void update() override;
|
|
@@ -30,7 +30,6 @@ class VL53L0XSensor : public sensor::Sensor, public PollingComponent, public i2c
|
|
|
30
30
|
void setup() override;
|
|
31
31
|
|
|
32
32
|
void dump_config() override;
|
|
33
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
34
33
|
void update() override;
|
|
35
34
|
|
|
36
35
|
void loop() override;
|
|
@@ -85,7 +85,7 @@ bool VoiceAssistant::start_udp_socket_() {
|
|
|
85
85
|
bool VoiceAssistant::allocate_buffers_() {
|
|
86
86
|
#ifdef USE_SPEAKER
|
|
87
87
|
if ((this->speaker_ != nullptr) && (this->speaker_buffer_ == nullptr)) {
|
|
88
|
-
|
|
88
|
+
RAMAllocator<uint8_t> speaker_allocator;
|
|
89
89
|
this->speaker_buffer_ = speaker_allocator.allocate(SPEAKER_BUFFER_SIZE);
|
|
90
90
|
if (this->speaker_buffer_ == nullptr) {
|
|
91
91
|
ESP_LOGW(TAG, "Could not allocate speaker buffer");
|
|
@@ -103,7 +103,7 @@ bool VoiceAssistant::allocate_buffers_() {
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
if (this->send_buffer_ == nullptr) {
|
|
106
|
-
|
|
106
|
+
RAMAllocator<uint8_t> send_allocator;
|
|
107
107
|
this->send_buffer_ = send_allocator.allocate(SEND_BUFFER_SIZE);
|
|
108
108
|
if (send_buffer_ == nullptr) {
|
|
109
109
|
ESP_LOGW(TAG, "Could not allocate send buffer");
|
|
@@ -136,7 +136,7 @@ void VoiceAssistant::clear_buffers_() {
|
|
|
136
136
|
|
|
137
137
|
void VoiceAssistant::deallocate_buffers_() {
|
|
138
138
|
if (this->send_buffer_ != nullptr) {
|
|
139
|
-
|
|
139
|
+
RAMAllocator<uint8_t> send_deallocator;
|
|
140
140
|
send_deallocator.deallocate(this->send_buffer_, SEND_BUFFER_SIZE);
|
|
141
141
|
this->send_buffer_ = nullptr;
|
|
142
142
|
}
|
|
@@ -147,7 +147,7 @@ void VoiceAssistant::deallocate_buffers_() {
|
|
|
147
147
|
|
|
148
148
|
#ifdef USE_SPEAKER
|
|
149
149
|
if ((this->speaker_ != nullptr) && (this->speaker_buffer_ != nullptr)) {
|
|
150
|
-
|
|
150
|
+
RAMAllocator<uint8_t> speaker_deallocator;
|
|
151
151
|
speaker_deallocator.deallocate(this->speaker_buffer_, SPEAKER_BUFFER_SIZE);
|
|
152
152
|
this->speaker_buffer_ = nullptr;
|
|
153
153
|
}
|
|
@@ -38,16 +38,12 @@ WatchdogManager::~WatchdogManager() {
|
|
|
38
38
|
void WatchdogManager::set_timeout_(uint32_t timeout_ms) {
|
|
39
39
|
ESP_LOGV(TAG, "Adjusting WDT to %" PRIu32 "ms", timeout_ms);
|
|
40
40
|
#ifdef USE_ESP32
|
|
41
|
-
#if ESP_IDF_VERSION_MAJOR >= 5
|
|
42
41
|
esp_task_wdt_config_t wdt_config = {
|
|
43
42
|
.timeout_ms = timeout_ms,
|
|
44
43
|
.idle_core_mask = (1 << SOC_CPU_CORES_NUM) - 1,
|
|
45
44
|
.trigger_panic = true,
|
|
46
45
|
};
|
|
47
46
|
esp_task_wdt_reconfigure(&wdt_config);
|
|
48
|
-
#else
|
|
49
|
-
esp_task_wdt_init(timeout_ms / 1000, true);
|
|
50
|
-
#endif // ESP_IDF_VERSION_MAJOR
|
|
51
47
|
#endif // USE_ESP32
|
|
52
48
|
|
|
53
49
|
#ifdef USE_RP2040
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#include "waveshare_epaper.h"
|
|
2
|
+
#include <bitset>
|
|
3
|
+
#include <cinttypes>
|
|
2
4
|
#include "esphome/core/application.h"
|
|
3
5
|
#include "esphome/core/helpers.h"
|
|
4
6
|
#include "esphome/core/log.h"
|
|
5
|
-
#include <cinttypes>
|
|
6
|
-
#include <bitset>
|
|
7
7
|
|
|
8
8
|
namespace esphome {
|
|
9
9
|
namespace waveshare_epaper {
|
|
@@ -185,7 +185,7 @@ void WaveshareEPaper7C::setup() {
|
|
|
185
185
|
this->initialize();
|
|
186
186
|
}
|
|
187
187
|
void WaveshareEPaper7C::init_internal_7c_(uint32_t buffer_length) {
|
|
188
|
-
|
|
188
|
+
RAMAllocator<uint8_t> allocator;
|
|
189
189
|
uint32_t small_buffer_length = buffer_length / NUM_BUFFERS;
|
|
190
190
|
|
|
191
191
|
for (int i = 0; i < NUM_BUFFERS; i++) {
|
|
@@ -2054,7 +2054,7 @@ void GDEW029T5::initialize() {
|
|
|
2054
2054
|
this->deep_sleep_between_updates_ = true;
|
|
2055
2055
|
|
|
2056
2056
|
// old buffer for partial update
|
|
2057
|
-
|
|
2057
|
+
RAMAllocator<uint8_t> allocator;
|
|
2058
2058
|
this->old_buffer_ = allocator.allocate(this->get_buffer_length_());
|
|
2059
2059
|
if (this->old_buffer_ == nullptr) {
|
|
2060
2060
|
ESP_LOGE(TAG, "Could not allocate old buffer for display!");
|
|
@@ -2199,7 +2199,7 @@ void GDEW029T5::dump_config() {
|
|
|
2199
2199
|
|
|
2200
2200
|
void GDEW0154M09::initialize() {
|
|
2201
2201
|
this->init_internal_();
|
|
2202
|
-
|
|
2202
|
+
RAMAllocator<uint8_t> allocator;
|
|
2203
2203
|
this->lastbuff_ = allocator.allocate(this->get_buffer_length_());
|
|
2204
2204
|
if (this->lastbuff_ != nullptr) {
|
|
2205
2205
|
memset(this->lastbuff_, 0xff, sizeof(uint8_t) * this->get_buffer_length_());
|
|
@@ -3132,7 +3132,7 @@ void HOT GDEY0583T81::display() {
|
|
|
3132
3132
|
} else {
|
|
3133
3133
|
// Partial out (PTOUT), makes the display exit partial mode
|
|
3134
3134
|
this->command(0x92);
|
|
3135
|
-
ESP_LOGD(TAG, "Partial update done, next full update after %
|
|
3135
|
+
ESP_LOGD(TAG, "Partial update done, next full update after %" PRIu32 " cycles",
|
|
3136
3136
|
this->full_update_every_ - this->at_update_ - 1);
|
|
3137
3137
|
}
|
|
3138
3138
|
|
|
@@ -28,10 +28,12 @@ from esphome.const import (
|
|
|
28
28
|
PLATFORM_BK72XX,
|
|
29
29
|
PLATFORM_ESP32,
|
|
30
30
|
PLATFORM_ESP8266,
|
|
31
|
+
PLATFORM_LN882X,
|
|
31
32
|
PLATFORM_RTL87XX,
|
|
32
33
|
)
|
|
33
34
|
from esphome.core import CORE, coroutine_with_priority
|
|
34
35
|
import esphome.final_validate as fv
|
|
36
|
+
from esphome.types import ConfigType
|
|
35
37
|
|
|
36
38
|
AUTO_LOAD = ["json", "web_server_base"]
|
|
37
39
|
|
|
@@ -39,13 +41,14 @@ CONF_SORTING_GROUP_ID = "sorting_group_id"
|
|
|
39
41
|
CONF_SORTING_GROUPS = "sorting_groups"
|
|
40
42
|
CONF_SORTING_WEIGHT = "sorting_weight"
|
|
41
43
|
|
|
44
|
+
|
|
42
45
|
web_server_ns = cg.esphome_ns.namespace("web_server")
|
|
43
46
|
WebServer = web_server_ns.class_("WebServer", cg.Component, cg.Controller)
|
|
44
47
|
|
|
45
48
|
sorting_groups = {}
|
|
46
49
|
|
|
47
50
|
|
|
48
|
-
def default_url(config):
|
|
51
|
+
def default_url(config: ConfigType) -> ConfigType:
|
|
49
52
|
config = config.copy()
|
|
50
53
|
if config[CONF_VERSION] == 1:
|
|
51
54
|
if CONF_CSS_URL not in config:
|
|
@@ -65,19 +68,27 @@ def default_url(config):
|
|
|
65
68
|
return config
|
|
66
69
|
|
|
67
70
|
|
|
68
|
-
def validate_local(config):
|
|
71
|
+
def validate_local(config: ConfigType) -> ConfigType:
|
|
69
72
|
if CONF_LOCAL in config and config[CONF_VERSION] == 1:
|
|
70
73
|
raise cv.Invalid("'local' is not supported in version 1")
|
|
71
74
|
return config
|
|
72
75
|
|
|
73
76
|
|
|
74
|
-
def
|
|
75
|
-
if
|
|
76
|
-
|
|
77
|
+
def validate_ota_removed(config: ConfigType) -> ConfigType:
|
|
78
|
+
# Only raise error if OTA is explicitly enabled (True)
|
|
79
|
+
# If it's False or not specified, we can safely ignore it
|
|
80
|
+
if config.get(CONF_OTA):
|
|
81
|
+
raise cv.Invalid(
|
|
82
|
+
f"The '{CONF_OTA}' option has been removed from 'web_server'. "
|
|
83
|
+
f"Please use the new OTA platform structure instead:\n\n"
|
|
84
|
+
f"ota:\n"
|
|
85
|
+
f" - platform: web_server\n\n"
|
|
86
|
+
f"See https://esphome.io/components/ota for more information."
|
|
87
|
+
)
|
|
77
88
|
return config
|
|
78
89
|
|
|
79
90
|
|
|
80
|
-
def validate_sorting_groups(config):
|
|
91
|
+
def validate_sorting_groups(config: ConfigType) -> ConfigType:
|
|
81
92
|
if CONF_SORTING_GROUPS in config and config[CONF_VERSION] != 3:
|
|
82
93
|
raise cv.Invalid(
|
|
83
94
|
f"'{CONF_SORTING_GROUPS}' is only supported in 'web_server' version 3"
|
|
@@ -88,7 +99,7 @@ def validate_sorting_groups(config):
|
|
|
88
99
|
def _validate_no_sorting_component(
|
|
89
100
|
sorting_component: str,
|
|
90
101
|
webserver_version: int,
|
|
91
|
-
config:
|
|
102
|
+
config: ConfigType,
|
|
92
103
|
path: list[str] | None = None,
|
|
93
104
|
) -> None:
|
|
94
105
|
if path is None:
|
|
@@ -111,7 +122,7 @@ def _validate_no_sorting_component(
|
|
|
111
122
|
)
|
|
112
123
|
|
|
113
124
|
|
|
114
|
-
def _final_validate_sorting(config):
|
|
125
|
+
def _final_validate_sorting(config: ConfigType) -> ConfigType:
|
|
115
126
|
if (webserver_version := config.get(CONF_VERSION)) != 3:
|
|
116
127
|
_validate_no_sorting_component(
|
|
117
128
|
CONF_SORTING_WEIGHT, webserver_version, fv.full_config.get()
|
|
@@ -174,24 +185,25 @@ CONFIG_SCHEMA = cv.All(
|
|
|
174
185
|
web_server_base.WebServerBase
|
|
175
186
|
),
|
|
176
187
|
cv.Optional(CONF_INCLUDE_INTERNAL, default=False): cv.boolean,
|
|
177
|
-
cv.
|
|
178
|
-
CONF_OTA,
|
|
179
|
-
esp8266=True,
|
|
180
|
-
esp32_arduino=True,
|
|
181
|
-
esp32_idf=False,
|
|
182
|
-
bk72xx=True,
|
|
183
|
-
rtl87xx=True,
|
|
184
|
-
): cv.boolean,
|
|
188
|
+
cv.Optional(CONF_OTA, default=False): cv.boolean,
|
|
185
189
|
cv.Optional(CONF_LOG, default=True): cv.boolean,
|
|
186
190
|
cv.Optional(CONF_LOCAL): cv.boolean,
|
|
187
191
|
cv.Optional(CONF_SORTING_GROUPS): cv.ensure_list(sorting_group),
|
|
188
192
|
}
|
|
189
193
|
).extend(cv.COMPONENT_SCHEMA),
|
|
190
|
-
cv.only_on(
|
|
194
|
+
cv.only_on(
|
|
195
|
+
[
|
|
196
|
+
PLATFORM_ESP32,
|
|
197
|
+
PLATFORM_ESP8266,
|
|
198
|
+
PLATFORM_BK72XX,
|
|
199
|
+
PLATFORM_LN882X,
|
|
200
|
+
PLATFORM_RTL87XX,
|
|
201
|
+
]
|
|
202
|
+
),
|
|
191
203
|
default_url,
|
|
192
204
|
validate_local,
|
|
193
|
-
validate_ota,
|
|
194
205
|
validate_sorting_groups,
|
|
206
|
+
validate_ota_removed,
|
|
195
207
|
)
|
|
196
208
|
|
|
197
209
|
|
|
@@ -211,6 +223,7 @@ async def add_entity_config(entity, config):
|
|
|
211
223
|
sorting_weight = config.get(CONF_SORTING_WEIGHT, 50)
|
|
212
224
|
sorting_group_hash = hash(config.get(CONF_SORTING_GROUP_ID))
|
|
213
225
|
|
|
226
|
+
cg.add_define("USE_WEBSERVER_SORTING")
|
|
214
227
|
cg.add(
|
|
215
228
|
web_server.add_entity_config(
|
|
216
229
|
entity,
|
|
@@ -274,7 +287,8 @@ async def to_code(config):
|
|
|
274
287
|
else:
|
|
275
288
|
cg.add(var.set_css_url(config[CONF_CSS_URL]))
|
|
276
289
|
cg.add(var.set_js_url(config[CONF_JS_URL]))
|
|
277
|
-
|
|
290
|
+
# OTA is now handled by the web_server OTA platform
|
|
291
|
+
# The CONF_OTA option is kept only for backwards compatibility validation
|
|
278
292
|
cg.add(var.set_expose_log(config[CONF_LOG]))
|
|
279
293
|
if config[CONF_ENABLE_PRIVATE_NETWORK_ACCESS]:
|
|
280
294
|
cg.add_define("USE_WEBSERVER_PRIVATE_NETWORK_ACCESS")
|
|
@@ -296,4 +310,5 @@ async def to_code(config):
|
|
|
296
310
|
cg.add_define("USE_WEBSERVER_LOCAL")
|
|
297
311
|
|
|
298
312
|
if (sorting_group_config := config.get(CONF_SORTING_GROUPS)) is not None:
|
|
313
|
+
cg.add_define("USE_WEBSERVER_SORTING")
|
|
299
314
|
add_sorting_groups(var, sorting_group_config)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import esphome.codegen as cg
|
|
2
|
+
from esphome.components.esp32 import add_idf_component
|
|
3
|
+
from esphome.components.ota import BASE_OTA_SCHEMA, OTAComponent, ota_to_code
|
|
4
|
+
import esphome.config_validation as cv
|
|
5
|
+
from esphome.const import CONF_ID
|
|
6
|
+
from esphome.core import CORE, coroutine_with_priority
|
|
7
|
+
|
|
8
|
+
CODEOWNERS = ["@esphome/core"]
|
|
9
|
+
DEPENDENCIES = ["network", "web_server_base"]
|
|
10
|
+
|
|
11
|
+
web_server_ns = cg.esphome_ns.namespace("web_server")
|
|
12
|
+
WebServerOTAComponent = web_server_ns.class_("WebServerOTAComponent", OTAComponent)
|
|
13
|
+
|
|
14
|
+
CONFIG_SCHEMA = (
|
|
15
|
+
cv.Schema(
|
|
16
|
+
{
|
|
17
|
+
cv.GenerateID(): cv.declare_id(WebServerOTAComponent),
|
|
18
|
+
}
|
|
19
|
+
)
|
|
20
|
+
.extend(BASE_OTA_SCHEMA)
|
|
21
|
+
.extend(cv.COMPONENT_SCHEMA)
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@coroutine_with_priority(52.0)
|
|
26
|
+
async def to_code(config):
|
|
27
|
+
var = cg.new_Pvariable(config[CONF_ID])
|
|
28
|
+
await ota_to_code(var, config)
|
|
29
|
+
await cg.register_component(var, config)
|
|
30
|
+
cg.add_define("USE_WEBSERVER_OTA")
|
|
31
|
+
if CORE.using_esp_idf:
|
|
32
|
+
add_idf_component(name="zorxx/multipart-parser", ref="1.0.1")
|