esphome 2025.6.2__py3-none-any.whl → 2025.7.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 +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 +42 -20
- esphome/components/api/api_connection.cpp +318 -391
- esphome/components/api/api_connection.h +206 -126
- esphome/components/api/api_frame_helper.cpp +89 -124
- esphome/components/api/api_frame_helper.h +57 -45
- esphome/components/api/api_pb2.cpp +414 -4350
- esphome/components/api/api_pb2.h +287 -198
- esphome/components/api/api_pb2_dump.cpp +4333 -0
- esphome/components/api/api_pb2_service.cpp +180 -425
- esphome/components/api/api_pb2_service.h +7 -6
- esphome/components/api/api_pb2_size.h +2 -4
- esphome/components/api/api_server.cpp +138 -167
- esphome/components/api/api_server.h +66 -12
- esphome/components/api/client.py +10 -4
- esphome/components/api/list_entities.cpp +36 -105
- esphome/components/api/list_entities.h +31 -23
- esphome/components/api/proto.h +26 -3
- esphome/components/api/subscribe_state.cpp +23 -29
- esphome/components/api/subscribe_state.h +26 -19
- 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/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 +102 -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 +111 -97
- 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 +238 -0
- esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
- esphome/components/esp8266/__init__.py +1 -0
- esphome/components/esp8266/gpio.cpp +10 -10
- esphome/components/esp8266/helpers.cpp +31 -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/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 +17 -0
- 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 +2 -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 +28 -9
- 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/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/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 +430 -261
- 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/ld2420.cpp +196 -100
- esphome/components/ld2420/ld2420.h +46 -118
- esphome/components/ld2420/number/__init__.py +2 -2
- esphome/components/ld2420/sensor/__init__.py +6 -2
- esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
- 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 +4 -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_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/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_backend.h +2 -1
- esphome/components/mqtt/mqtt_backend_esp32.cpp +126 -45
- esphome/components/mqtt/mqtt_backend_esp32.h +106 -4
- esphome/components/mqtt/mqtt_client.cpp +15 -9
- esphome/components/mqtt/mqtt_client.h +8 -3
- 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 +5 -0
- esphome/components/online_image/online_image.cpp +6 -2
- esphome/components/online_image/online_image.h +4 -1
- esphome/components/opentherm/opentherm.cpp +7 -12
- 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 +31 -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 +1 -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.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 +76 -19
- 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/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 +311 -430
- 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 +162 -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 +163 -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 +151 -18
- esphome/core/component.h +98 -4
- esphome/core/component_iterator.cpp +7 -7
- esphome/core/component_iterator.h +9 -7
- 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 +162 -1
- esphome/core/event_pool.h +81 -0
- esphome/core/helpers.cpp +75 -230
- esphome/core/helpers.h +164 -104
- 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 +278 -103
- esphome/core/scheduler.h +157 -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/wizard.py +16 -3
- esphome/writer.py +21 -3
- esphome/yaml_util.py +0 -2
- {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/METADATA +10 -9
- {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/RECORD +593 -533
- 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.0b1.dist-info}/WHEEL +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/entry_points.txt +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/top_level.txt +0 -0
|
@@ -14,11 +14,11 @@ class BinarySensor;
|
|
|
14
14
|
|
|
15
15
|
class Filter {
|
|
16
16
|
public:
|
|
17
|
-
virtual optional<bool> new_value(bool value
|
|
17
|
+
virtual optional<bool> new_value(bool value) = 0;
|
|
18
18
|
|
|
19
|
-
void input(bool value
|
|
19
|
+
virtual void input(bool value);
|
|
20
20
|
|
|
21
|
-
void output(bool value
|
|
21
|
+
void output(bool value);
|
|
22
22
|
|
|
23
23
|
protected:
|
|
24
24
|
friend BinarySensor;
|
|
@@ -28,9 +28,19 @@ class Filter {
|
|
|
28
28
|
Deduplicator<bool> dedup_;
|
|
29
29
|
};
|
|
30
30
|
|
|
31
|
+
class TimeoutFilter : public Filter, public Component {
|
|
32
|
+
public:
|
|
33
|
+
optional<bool> new_value(bool value) override { return value; }
|
|
34
|
+
void input(bool value) override;
|
|
35
|
+
template<typename T> void set_timeout_value(T timeout) { this->timeout_delay_ = timeout; }
|
|
36
|
+
|
|
37
|
+
protected:
|
|
38
|
+
TemplatableValue<uint32_t> timeout_delay_{};
|
|
39
|
+
};
|
|
40
|
+
|
|
31
41
|
class DelayedOnOffFilter : public Filter, public Component {
|
|
32
42
|
public:
|
|
33
|
-
optional<bool> new_value(bool value
|
|
43
|
+
optional<bool> new_value(bool value) override;
|
|
34
44
|
|
|
35
45
|
float get_setup_priority() const override;
|
|
36
46
|
|
|
@@ -44,7 +54,7 @@ class DelayedOnOffFilter : public Filter, public Component {
|
|
|
44
54
|
|
|
45
55
|
class DelayedOnFilter : public Filter, public Component {
|
|
46
56
|
public:
|
|
47
|
-
optional<bool> new_value(bool value
|
|
57
|
+
optional<bool> new_value(bool value) override;
|
|
48
58
|
|
|
49
59
|
float get_setup_priority() const override;
|
|
50
60
|
|
|
@@ -56,7 +66,7 @@ class DelayedOnFilter : public Filter, public Component {
|
|
|
56
66
|
|
|
57
67
|
class DelayedOffFilter : public Filter, public Component {
|
|
58
68
|
public:
|
|
59
|
-
optional<bool> new_value(bool value
|
|
69
|
+
optional<bool> new_value(bool value) override;
|
|
60
70
|
|
|
61
71
|
float get_setup_priority() const override;
|
|
62
72
|
|
|
@@ -68,7 +78,7 @@ class DelayedOffFilter : public Filter, public Component {
|
|
|
68
78
|
|
|
69
79
|
class InvertFilter : public Filter {
|
|
70
80
|
public:
|
|
71
|
-
optional<bool> new_value(bool value
|
|
81
|
+
optional<bool> new_value(bool value) override;
|
|
72
82
|
};
|
|
73
83
|
|
|
74
84
|
struct AutorepeatFilterTiming {
|
|
@@ -86,7 +96,7 @@ class AutorepeatFilter : public Filter, public Component {
|
|
|
86
96
|
public:
|
|
87
97
|
explicit AutorepeatFilter(std::vector<AutorepeatFilterTiming> timings);
|
|
88
98
|
|
|
89
|
-
optional<bool> new_value(bool value
|
|
99
|
+
optional<bool> new_value(bool value) override;
|
|
90
100
|
|
|
91
101
|
float get_setup_priority() const override;
|
|
92
102
|
|
|
@@ -102,7 +112,7 @@ class LambdaFilter : public Filter {
|
|
|
102
112
|
public:
|
|
103
113
|
explicit LambdaFilter(std::function<optional<bool>(bool)> f);
|
|
104
114
|
|
|
105
|
-
optional<bool> new_value(bool value
|
|
115
|
+
optional<bool> new_value(bool value) override;
|
|
106
116
|
|
|
107
117
|
protected:
|
|
108
118
|
std::function<optional<bool>(bool)> f_;
|
|
@@ -110,7 +120,7 @@ class LambdaFilter : public Filter {
|
|
|
110
120
|
|
|
111
121
|
class SettleFilter : public Filter, public Component {
|
|
112
122
|
public:
|
|
113
|
-
optional<bool> new_value(bool value
|
|
123
|
+
optional<bool> new_value(bool value) override;
|
|
114
124
|
|
|
115
125
|
float get_setup_priority() const override;
|
|
116
126
|
|
|
@@ -16,7 +16,6 @@ class BLEBinaryOutput : public output::BinaryOutput, public BLEClientNode, publi
|
|
|
16
16
|
public:
|
|
17
17
|
void dump_config() override;
|
|
18
18
|
void loop() override {}
|
|
19
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
20
19
|
void set_service_uuid16(uint16_t uuid) { this->service_uuid_ = espbt::ESPBTUUID::from_uint16(uuid); }
|
|
21
20
|
void set_service_uuid32(uint32_t uuid) { this->service_uuid_ = espbt::ESPBTUUID::from_uint32(uuid); }
|
|
22
21
|
void set_service_uuid128(uint8_t *uuid) { this->service_uuid_ = espbt::ESPBTUUID::from_raw(uuid); }
|
|
@@ -11,7 +11,11 @@ namespace ble_client {
|
|
|
11
11
|
|
|
12
12
|
static const char *const TAG = "ble_rssi_sensor";
|
|
13
13
|
|
|
14
|
-
void BLEClientRSSISensor::loop() {
|
|
14
|
+
void BLEClientRSSISensor::loop() {
|
|
15
|
+
// Parent BLEClientNode has a loop() method, but this component uses
|
|
16
|
+
// polling via update() and BLE GAP callbacks so loop isn't needed
|
|
17
|
+
this->disable_loop();
|
|
18
|
+
}
|
|
15
19
|
|
|
16
20
|
void BLEClientRSSISensor::dump_config() {
|
|
17
21
|
LOG_SENSOR("", "BLE Client RSSI Sensor", this);
|
|
@@ -18,7 +18,6 @@ class BLEClientRSSISensor : public sensor::Sensor, public PollingComponent, publ
|
|
|
18
18
|
void loop() override;
|
|
19
19
|
void update() override;
|
|
20
20
|
void dump_config() override;
|
|
21
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
22
21
|
|
|
23
22
|
void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param) override;
|
|
24
23
|
|
|
@@ -11,7 +11,11 @@ namespace ble_client {
|
|
|
11
11
|
|
|
12
12
|
static const char *const TAG = "ble_sensor";
|
|
13
13
|
|
|
14
|
-
void BLESensor::loop() {
|
|
14
|
+
void BLESensor::loop() {
|
|
15
|
+
// Parent BLEClientNode has a loop() method, but this component uses
|
|
16
|
+
// polling via update() and BLE callbacks so loop isn't needed
|
|
17
|
+
this->disable_loop();
|
|
18
|
+
}
|
|
15
19
|
|
|
16
20
|
void BLESensor::dump_config() {
|
|
17
21
|
LOG_SENSOR("", "BLE Sensor", this);
|
|
@@ -24,7 +24,6 @@ class BLESensor : public sensor::Sensor, public PollingComponent, public BLEClie
|
|
|
24
24
|
void gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if,
|
|
25
25
|
esp_ble_gattc_cb_param_t *param) override;
|
|
26
26
|
void dump_config() override;
|
|
27
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
28
27
|
void set_service_uuid16(uint16_t uuid) { this->service_uuid_ = espbt::ESPBTUUID::from_uint16(uuid); }
|
|
29
28
|
void set_service_uuid32(uint32_t uuid) { this->service_uuid_ = espbt::ESPBTUUID::from_uint32(uuid); }
|
|
30
29
|
void set_service_uuid128(uint8_t *uuid) { this->service_uuid_ = espbt::ESPBTUUID::from_raw(uuid); }
|
|
@@ -19,7 +19,6 @@ class BLEClientSwitch : public switch_::Switch, public Component, public BLEClie
|
|
|
19
19
|
void loop() override {}
|
|
20
20
|
void gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if,
|
|
21
21
|
esp_ble_gattc_cb_param_t *param) override;
|
|
22
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
23
22
|
|
|
24
23
|
protected:
|
|
25
24
|
void write_state(bool state) override;
|
|
@@ -14,7 +14,11 @@ static const char *const TAG = "ble_text_sensor";
|
|
|
14
14
|
|
|
15
15
|
static const std::string EMPTY = "";
|
|
16
16
|
|
|
17
|
-
void BLETextSensor::loop() {
|
|
17
|
+
void BLETextSensor::loop() {
|
|
18
|
+
// Parent BLEClientNode has a loop() method, but this component uses
|
|
19
|
+
// polling via update() and BLE callbacks so loop isn't needed
|
|
20
|
+
this->disable_loop();
|
|
21
|
+
}
|
|
18
22
|
|
|
19
23
|
void BLETextSensor::dump_config() {
|
|
20
24
|
LOG_TEXT_SENSOR("", "BLE Text Sensor", this);
|
|
@@ -20,7 +20,6 @@ class BLETextSensor : public text_sensor::TextSensor, public PollingComponent, p
|
|
|
20
20
|
void gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if,
|
|
21
21
|
esp_ble_gattc_cb_param_t *param) override;
|
|
22
22
|
void dump_config() override;
|
|
23
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
24
23
|
void set_service_uuid16(uint16_t uuid) { this->service_uuid_ = espbt::ESPBTUUID::from_uint16(uuid); }
|
|
25
24
|
void set_service_uuid32(uint32_t uuid) { this->service_uuid_ = espbt::ESPBTUUID::from_uint32(uuid); }
|
|
26
25
|
void set_service_uuid128(uint8_t *uuid) { this->service_uuid_ = espbt::ESPBTUUID::from_raw(uuid); }
|
|
@@ -105,7 +105,6 @@ class BLEPresenceDevice : public binary_sensor::BinarySensorInitiallyOff,
|
|
|
105
105
|
this->set_found_(false);
|
|
106
106
|
}
|
|
107
107
|
void dump_config() override;
|
|
108
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
109
108
|
|
|
110
109
|
protected:
|
|
111
110
|
void set_found_(bool state) {
|
|
@@ -99,7 +99,6 @@ class BLERSSISensor : public sensor::Sensor, public esp32_ble_tracker::ESPBTDevi
|
|
|
99
99
|
return false;
|
|
100
100
|
}
|
|
101
101
|
void dump_config() override;
|
|
102
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
103
102
|
|
|
104
103
|
protected:
|
|
105
104
|
enum MatchType { MATCH_BY_MAC_ADDRESS, MATCH_BY_IRK, MATCH_BY_SERVICE_UUID, MATCH_BY_IBEACON_UUID };
|
|
@@ -26,10 +26,17 @@ class BluetoothConnection : public esp32_ble_client::BLEClientBase {
|
|
|
26
26
|
|
|
27
27
|
protected:
|
|
28
28
|
friend class BluetoothProxy;
|
|
29
|
-
bool seen_mtu_or_services_{false};
|
|
30
29
|
|
|
31
|
-
|
|
30
|
+
// Memory optimized layout for 32-bit systems
|
|
31
|
+
// Group 1: Pointers (4 bytes each, naturally aligned)
|
|
32
32
|
BluetoothProxy *proxy_;
|
|
33
|
+
|
|
34
|
+
// Group 2: 2-byte types
|
|
35
|
+
int16_t send_service_{-2}; // Needs to handle negative values and service count
|
|
36
|
+
|
|
37
|
+
// Group 3: 1-byte types
|
|
38
|
+
bool seen_mtu_or_services_{false};
|
|
39
|
+
// 1 byte used, 1 byte padding
|
|
33
40
|
};
|
|
34
41
|
|
|
35
42
|
} // namespace bluetooth_proxy
|
|
@@ -52,11 +52,21 @@ bool BluetoothProxy::parse_device(const esp32_ble_tracker::ESPBTDevice &device)
|
|
|
52
52
|
return true;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
55
|
+
// Batch size for BLE advertisements to maximize WiFi efficiency
|
|
56
|
+
// Each advertisement is up to 80 bytes when packaged (including protocol overhead)
|
|
57
|
+
// Most advertisements are 20-30 bytes, allowing even more to fit per packet
|
|
58
|
+
// 16 advertisements × 80 bytes (worst case) = 1280 bytes out of ~1320 bytes usable payload
|
|
59
|
+
// This achieves ~97% WiFi MTU utilization while staying under the limit
|
|
60
|
+
static constexpr size_t FLUSH_BATCH_SIZE = 16;
|
|
61
|
+
|
|
62
|
+
namespace {
|
|
63
|
+
// Batch buffer in anonymous namespace to avoid guard variable (saves 8 bytes)
|
|
64
|
+
// This is initialized at program startup before any threads
|
|
65
|
+
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
|
66
|
+
std::vector<api::BluetoothLERawAdvertisement> batch_buffer;
|
|
67
|
+
} // namespace
|
|
68
|
+
|
|
69
|
+
static std::vector<api::BluetoothLERawAdvertisement> &get_batch_buffer() { return batch_buffer; }
|
|
60
70
|
|
|
61
71
|
bool BluetoothProxy::parse_devices(const esp32_ble::BLEScanResult *scan_results, size_t count) {
|
|
62
72
|
if (!api::global_api_server->is_connected() || this->api_connection_ == nullptr || !this->raw_advertisements_)
|
|
@@ -170,7 +180,7 @@ int BluetoothProxy::get_bluetooth_connections_free() {
|
|
|
170
180
|
void BluetoothProxy::loop() {
|
|
171
181
|
if (!api::global_api_server->is_connected() || this->api_connection_ == nullptr) {
|
|
172
182
|
for (auto *connection : this->connections_) {
|
|
173
|
-
if (connection->get_address() != 0) {
|
|
183
|
+
if (connection->get_address() != 0 && !connection->disconnect_pending()) {
|
|
174
184
|
connection->disconnect();
|
|
175
185
|
}
|
|
176
186
|
}
|
|
@@ -134,11 +134,17 @@ class BluetoothProxy : public esp32_ble_tracker::ESPBTDeviceListener, public Com
|
|
|
134
134
|
|
|
135
135
|
BluetoothConnection *get_connection_(uint64_t address, bool reserve);
|
|
136
136
|
|
|
137
|
-
|
|
137
|
+
// Memory optimized layout for 32-bit systems
|
|
138
|
+
// Group 1: Pointers (4 bytes each, naturally aligned)
|
|
139
|
+
api::APIConnection *api_connection_{nullptr};
|
|
138
140
|
|
|
141
|
+
// Group 2: Container types (typically 12 bytes on 32-bit)
|
|
139
142
|
std::vector<BluetoothConnection *> connections_{};
|
|
140
|
-
|
|
143
|
+
|
|
144
|
+
// Group 3: 1-byte types grouped together
|
|
145
|
+
bool active_;
|
|
141
146
|
bool raw_advertisements_{false};
|
|
147
|
+
// 2 bytes used, 2 bytes padding
|
|
142
148
|
};
|
|
143
149
|
|
|
144
150
|
extern BluetoothProxy *global_bluetooth_proxy; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
|
|
@@ -12,8 +12,8 @@ from esphome.const import (
|
|
|
12
12
|
CONF_OVERSAMPLING,
|
|
13
13
|
CONF_PRESSURE,
|
|
14
14
|
CONF_TEMPERATURE,
|
|
15
|
-
DEVICE_CLASS_HUMIDITY,
|
|
16
15
|
DEVICE_CLASS_ATMOSPHERIC_PRESSURE,
|
|
16
|
+
DEVICE_CLASS_HUMIDITY,
|
|
17
17
|
DEVICE_CLASS_TEMPERATURE,
|
|
18
18
|
ICON_GAS_CYLINDER,
|
|
19
19
|
STATE_CLASS_MEASUREMENT,
|
|
@@ -18,8 +18,8 @@ from esphome.const import (
|
|
|
18
18
|
DEVICE_CLASS_UPDATE,
|
|
19
19
|
)
|
|
20
20
|
from esphome.core import CORE, coroutine_with_priority
|
|
21
|
+
from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
|
|
21
22
|
from esphome.cpp_generator import MockObjClass
|
|
22
|
-
from esphome.cpp_helpers import setup_entity
|
|
23
23
|
|
|
24
24
|
CODEOWNERS = ["@esphome/core"]
|
|
25
25
|
IS_PLATFORM_COMPONENT = True
|
|
@@ -61,6 +61,9 @@ _BUTTON_SCHEMA = (
|
|
|
61
61
|
)
|
|
62
62
|
|
|
63
63
|
|
|
64
|
+
_BUTTON_SCHEMA.add_extra(entity_duplicate_validator("button"))
|
|
65
|
+
|
|
66
|
+
|
|
64
67
|
def button_schema(
|
|
65
68
|
class_: MockObjClass,
|
|
66
69
|
*,
|
|
@@ -87,7 +90,7 @@ BUTTON_SCHEMA.add_extra(cv.deprecated_schema_constant("button"))
|
|
|
87
90
|
|
|
88
91
|
|
|
89
92
|
async def setup_button_core_(var, config):
|
|
90
|
-
await setup_entity(var, config)
|
|
93
|
+
await setup_entity(var, config, "button")
|
|
91
94
|
|
|
92
95
|
for conf in config.get(CONF_ON_PRESS, []):
|
|
93
96
|
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
CODEOWNERS = ["@DT-art1", "@bdraco"]
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#include "camera.h"
|
|
2
|
+
|
|
3
|
+
namespace esphome {
|
|
4
|
+
namespace camera {
|
|
5
|
+
|
|
6
|
+
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
|
7
|
+
Camera *Camera::global_camera = nullptr;
|
|
8
|
+
|
|
9
|
+
Camera::Camera() {
|
|
10
|
+
if (global_camera != nullptr) {
|
|
11
|
+
this->status_set_error("Multiple cameras are configured, but only one is supported.");
|
|
12
|
+
this->mark_failed();
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
global_camera = this;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
Camera *Camera::instance() { return global_camera; }
|
|
20
|
+
|
|
21
|
+
} // namespace camera
|
|
22
|
+
} // namespace esphome
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "esphome/core/automation.h"
|
|
4
|
+
#include "esphome/core/component.h"
|
|
5
|
+
#include "esphome/core/entity_base.h"
|
|
6
|
+
#include "esphome/core/helpers.h"
|
|
7
|
+
|
|
8
|
+
namespace esphome {
|
|
9
|
+
namespace camera {
|
|
10
|
+
|
|
11
|
+
/** Different sources for filtering.
|
|
12
|
+
* IDLE: Camera requests to send an image to the API.
|
|
13
|
+
* API_REQUESTER: API requests a new image.
|
|
14
|
+
* WEB_REQUESTER: ESP32 web server request an image. Ignored by API.
|
|
15
|
+
*/
|
|
16
|
+
enum CameraRequester : uint8_t { IDLE, API_REQUESTER, WEB_REQUESTER };
|
|
17
|
+
|
|
18
|
+
/** Abstract camera image base class.
|
|
19
|
+
* Encapsulates the JPEG encoded data and it is shared among
|
|
20
|
+
* all connected clients.
|
|
21
|
+
*/
|
|
22
|
+
class CameraImage {
|
|
23
|
+
public:
|
|
24
|
+
virtual uint8_t *get_data_buffer() = 0;
|
|
25
|
+
virtual size_t get_data_length() = 0;
|
|
26
|
+
virtual bool was_requested_by(CameraRequester requester) const = 0;
|
|
27
|
+
virtual ~CameraImage() {}
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/** Abstract image reader base class.
|
|
31
|
+
* Keeps track of the data offset of the camera image and
|
|
32
|
+
* how many bytes are remaining to read. When the image
|
|
33
|
+
* is returned, the shared_ptr is reset and the camera can
|
|
34
|
+
* reuse the memory of the camera image.
|
|
35
|
+
*/
|
|
36
|
+
class CameraImageReader {
|
|
37
|
+
public:
|
|
38
|
+
virtual void set_image(std::shared_ptr<CameraImage> image) = 0;
|
|
39
|
+
virtual size_t available() const = 0;
|
|
40
|
+
virtual uint8_t *peek_data_buffer() = 0;
|
|
41
|
+
virtual void consume_data(size_t consumed) = 0;
|
|
42
|
+
virtual void return_image() = 0;
|
|
43
|
+
virtual ~CameraImageReader() {}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/** Abstract camera base class. Collaborates with API.
|
|
47
|
+
* 1) API server starts and installs callback (add_image_callback)
|
|
48
|
+
* which is called by the camera when a new image is available.
|
|
49
|
+
* 2) New API client connects and creates a new image reader (create_image_reader).
|
|
50
|
+
* 3) API connection receives protobuf CameraImageRequest and calls request_image.
|
|
51
|
+
* 3.a) API connection receives protobuf CameraImageRequest and calls start_stream.
|
|
52
|
+
* 4) Camera implementation provides JPEG data in the CameraImage and calls callback.
|
|
53
|
+
* 5) API connection sets the image in the image reader.
|
|
54
|
+
* 6) API connection consumes data from the image reader and returns the image when finished.
|
|
55
|
+
* 7.a) Camera captures a new image and continues with 4) until start_stream is called.
|
|
56
|
+
*/
|
|
57
|
+
class Camera : public EntityBase, public Component {
|
|
58
|
+
public:
|
|
59
|
+
Camera();
|
|
60
|
+
// Camera implementation invokes callback to publish a new image.
|
|
61
|
+
virtual void add_image_callback(std::function<void(std::shared_ptr<CameraImage>)> &&callback) = 0;
|
|
62
|
+
/// Returns a new camera image reader that keeps track of the JPEG data in the camera image.
|
|
63
|
+
virtual CameraImageReader *create_image_reader() = 0;
|
|
64
|
+
// Connection, camera or web server requests one new JPEG image.
|
|
65
|
+
virtual void request_image(CameraRequester requester) = 0;
|
|
66
|
+
// Connection, camera or web server requests a stream of images.
|
|
67
|
+
virtual void start_stream(CameraRequester requester) = 0;
|
|
68
|
+
// Connection or web server stops the previously started stream.
|
|
69
|
+
virtual void stop_stream(CameraRequester requester) = 0;
|
|
70
|
+
virtual ~Camera() {}
|
|
71
|
+
/// The singleton instance of the camera implementation.
|
|
72
|
+
static Camera *instance();
|
|
73
|
+
|
|
74
|
+
protected:
|
|
75
|
+
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
|
76
|
+
static Camera *global_camera;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
} // namespace camera
|
|
80
|
+
} // namespace esphome
|
|
@@ -46,7 +46,6 @@ class CAP1188Component : public Component, public i2c::I2CDevice {
|
|
|
46
46
|
void set_reset_pin(GPIOPin *reset_pin) { this->reset_pin_ = reset_pin; }
|
|
47
47
|
void setup() override;
|
|
48
48
|
void dump_config() override;
|
|
49
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
50
49
|
void loop() override;
|
|
51
50
|
|
|
52
51
|
protected:
|
|
@@ -7,11 +7,12 @@ from esphome.const import (
|
|
|
7
7
|
PLATFORM_BK72XX,
|
|
8
8
|
PLATFORM_ESP32,
|
|
9
9
|
PLATFORM_ESP8266,
|
|
10
|
+
PLATFORM_LN882X,
|
|
10
11
|
PLATFORM_RTL87XX,
|
|
11
12
|
)
|
|
12
13
|
from esphome.core import CORE, coroutine_with_priority
|
|
13
14
|
|
|
14
|
-
AUTO_LOAD = ["web_server_base"]
|
|
15
|
+
AUTO_LOAD = ["web_server_base", "ota.web_server"]
|
|
15
16
|
DEPENDENCIES = ["wifi"]
|
|
16
17
|
CODEOWNERS = ["@OttoWinter"]
|
|
17
18
|
|
|
@@ -27,7 +28,15 @@ CONFIG_SCHEMA = cv.All(
|
|
|
27
28
|
),
|
|
28
29
|
}
|
|
29
30
|
).extend(cv.COMPONENT_SCHEMA),
|
|
30
|
-
cv.only_on(
|
|
31
|
+
cv.only_on(
|
|
32
|
+
[
|
|
33
|
+
PLATFORM_ESP32,
|
|
34
|
+
PLATFORM_ESP8266,
|
|
35
|
+
PLATFORM_BK72XX,
|
|
36
|
+
PLATFORM_LN882X,
|
|
37
|
+
PLATFORM_RTL87XX,
|
|
38
|
+
]
|
|
39
|
+
),
|
|
31
40
|
)
|
|
32
41
|
|
|
33
42
|
|
|
@@ -41,6 +50,7 @@ async def to_code(config):
|
|
|
41
50
|
|
|
42
51
|
if CORE.using_arduino:
|
|
43
52
|
if CORE.is_esp32:
|
|
53
|
+
cg.add_library("ESP32 Async UDP", None)
|
|
44
54
|
cg.add_library("DNSServer", None)
|
|
45
55
|
cg.add_library("WiFi", None)
|
|
46
56
|
if CORE.is_esp8266:
|
|
@@ -37,12 +37,16 @@ void CaptivePortal::handle_wifisave(AsyncWebServerRequest *request) {
|
|
|
37
37
|
request->redirect("/?save");
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
void CaptivePortal::setup() {
|
|
40
|
+
void CaptivePortal::setup() {
|
|
41
|
+
#ifndef USE_ARDUINO
|
|
42
|
+
// No DNS server needed for non-Arduino frameworks
|
|
43
|
+
this->disable_loop();
|
|
44
|
+
#endif
|
|
45
|
+
}
|
|
41
46
|
void CaptivePortal::start() {
|
|
42
47
|
this->base_->init();
|
|
43
48
|
if (!this->initialized_) {
|
|
44
49
|
this->base_->add_handler(this);
|
|
45
|
-
this->base_->add_ota_handler();
|
|
46
50
|
}
|
|
47
51
|
|
|
48
52
|
#ifdef USE_ARDUINO
|
|
@@ -50,6 +54,8 @@ void CaptivePortal::start() {
|
|
|
50
54
|
this->dns_server_->setErrorReplyCode(DNSReplyCode::NoError);
|
|
51
55
|
network::IPAddress ip = wifi::global_wifi_component->wifi_soft_ap_ip();
|
|
52
56
|
this->dns_server_->start(53, "*", ip);
|
|
57
|
+
// Re-enable loop() when DNS server is started
|
|
58
|
+
this->enable_loop();
|
|
53
59
|
#endif
|
|
54
60
|
|
|
55
61
|
this->base_->get_server()->onNotFound([this](AsyncWebServerRequest *req) {
|
|
@@ -68,7 +74,11 @@ void CaptivePortal::start() {
|
|
|
68
74
|
|
|
69
75
|
void CaptivePortal::handleRequest(AsyncWebServerRequest *req) {
|
|
70
76
|
if (req->url() == "/") {
|
|
77
|
+
#ifndef USE_ESP8266
|
|
78
|
+
auto *response = req->beginResponse(200, "text/html", INDEX_GZ, sizeof(INDEX_GZ));
|
|
79
|
+
#else
|
|
71
80
|
auto *response = req->beginResponse_P(200, "text/html", INDEX_GZ, sizeof(INDEX_GZ));
|
|
81
|
+
#endif
|
|
72
82
|
response->addHeader("Content-Encoding", "gzip");
|
|
73
83
|
req->send(response);
|
|
74
84
|
return;
|
|
@@ -21,8 +21,11 @@ class CaptivePortal : public AsyncWebHandler, public Component {
|
|
|
21
21
|
void dump_config() override;
|
|
22
22
|
#ifdef USE_ARDUINO
|
|
23
23
|
void loop() override {
|
|
24
|
-
if (this->dns_server_ != nullptr)
|
|
24
|
+
if (this->dns_server_ != nullptr) {
|
|
25
25
|
this->dns_server_->processNextRequest();
|
|
26
|
+
} else {
|
|
27
|
+
this->disable_loop();
|
|
28
|
+
}
|
|
26
29
|
}
|
|
27
30
|
#endif
|
|
28
31
|
float get_setup_priority() const override;
|
|
@@ -37,7 +40,7 @@ class CaptivePortal : public AsyncWebHandler, public Component {
|
|
|
37
40
|
#endif
|
|
38
41
|
}
|
|
39
42
|
|
|
40
|
-
bool canHandle(AsyncWebServerRequest *request) override {
|
|
43
|
+
bool canHandle(AsyncWebServerRequest *request) const override {
|
|
41
44
|
if (!this->active_)
|
|
42
45
|
return false;
|
|
43
46
|
|
|
@@ -25,8 +25,6 @@ class CCS811Component : public PollingComponent, public i2c::I2CDevice {
|
|
|
25
25
|
|
|
26
26
|
void dump_config() override;
|
|
27
27
|
|
|
28
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
29
|
-
|
|
30
28
|
protected:
|
|
31
29
|
optional<uint8_t> read_status_() { return this->read_byte(0x00); }
|
|
32
30
|
bool status_has_error_() { return this->read_status_().value_or(1) & 1; }
|
|
@@ -48,8 +48,8 @@ from esphome.const import (
|
|
|
48
48
|
CONF_WEB_SERVER,
|
|
49
49
|
)
|
|
50
50
|
from esphome.core import CORE, coroutine_with_priority
|
|
51
|
+
from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
|
|
51
52
|
from esphome.cpp_generator import MockObjClass
|
|
52
|
-
from esphome.cpp_helpers import setup_entity
|
|
53
53
|
|
|
54
54
|
IS_PLATFORM_COMPONENT = True
|
|
55
55
|
|
|
@@ -247,6 +247,9 @@ _CLIMATE_SCHEMA = (
|
|
|
247
247
|
)
|
|
248
248
|
|
|
249
249
|
|
|
250
|
+
_CLIMATE_SCHEMA.add_extra(entity_duplicate_validator("climate"))
|
|
251
|
+
|
|
252
|
+
|
|
250
253
|
def climate_schema(
|
|
251
254
|
class_: MockObjClass,
|
|
252
255
|
*,
|
|
@@ -273,7 +276,7 @@ CLIMATE_SCHEMA.add_extra(cv.deprecated_schema_constant("climate"))
|
|
|
273
276
|
|
|
274
277
|
|
|
275
278
|
async def setup_climate_core_(var, config):
|
|
276
|
-
await setup_entity(var, config)
|
|
279
|
+
await setup_entity(var, config, "climate")
|
|
277
280
|
|
|
278
281
|
visual = config[CONF_VISUAL]
|
|
279
282
|
if (min_temp := visual.get(CONF_MIN_TEMPERATURE)) is not None:
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"""CM1106 Sensor component for ESPHome."""
|
|
2
2
|
|
|
3
|
-
import esphome.codegen as cg
|
|
4
|
-
import esphome.config_validation as cv
|
|
5
3
|
from esphome import automation
|
|
6
4
|
from esphome.automation import maybe_simple_id
|
|
5
|
+
import esphome.codegen as cg
|
|
7
6
|
from esphome.components import sensor, uart
|
|
7
|
+
import esphome.config_validation as cv
|
|
8
8
|
from esphome.const import (
|
|
9
9
|
CONF_CO2,
|
|
10
10
|
CONF_ID,
|
|
@@ -11,7 +11,6 @@ class CopyBinarySensor : public binary_sensor::BinarySensor, public Component {
|
|
|
11
11
|
void set_source(binary_sensor::BinarySensor *source) { source_ = source; }
|
|
12
12
|
void setup() override;
|
|
13
13
|
void dump_config() override;
|
|
14
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
15
14
|
|
|
16
15
|
protected:
|
|
17
16
|
binary_sensor::BinarySensor *source_;
|
|
@@ -10,7 +10,6 @@ class CopyButton : public button::Button, public Component {
|
|
|
10
10
|
public:
|
|
11
11
|
void set_source(button::Button *source) { source_ = source; }
|
|
12
12
|
void dump_config() override;
|
|
13
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
14
13
|
|
|
15
14
|
protected:
|
|
16
15
|
void press_action() override;
|
|
@@ -11,7 +11,6 @@ class CopyCover : public cover::Cover, public Component {
|
|
|
11
11
|
void set_source(cover::Cover *source) { source_ = source; }
|
|
12
12
|
void setup() override;
|
|
13
13
|
void dump_config() override;
|
|
14
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
15
14
|
|
|
16
15
|
cover::CoverTraits get_traits() override;
|
|
17
16
|
|
|
@@ -11,7 +11,6 @@ class CopyFan : public fan::Fan, public Component {
|
|
|
11
11
|
void set_source(fan::Fan *source) { source_ = source; }
|
|
12
12
|
void setup() override;
|
|
13
13
|
void dump_config() override;
|
|
14
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
15
14
|
|
|
16
15
|
fan::FanTraits get_traits() override;
|
|
17
16
|
|