esphome 2025.5.1__py3-none-any.whl → 2025.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- esphome/__main__.py +20 -14
- esphome/components/a4988/a4988.cpp +1 -1
- esphome/components/absolute_humidity/absolute_humidity.cpp +6 -4
- esphome/components/ac_dimmer/ac_dimmer.cpp +4 -2
- esphome/components/adc/adc_sensor_esp32.cpp +5 -3
- esphome/components/adc/adc_sensor_esp8266.cpp +5 -3
- esphome/components/adc/adc_sensor_libretiny.cpp +5 -3
- esphome/components/adc/adc_sensor_rp2040.cpp +5 -3
- esphome/components/adc128s102/adc128s102.cpp +1 -1
- esphome/components/ade7880/ade7880.cpp +28 -17
- esphome/components/ade7953_base/ade7953_base.cpp +12 -9
- esphome/components/ade7953_i2c/ade7953_i2c.cpp +1 -1
- esphome/components/ade7953_spi/ade7953_spi.cpp +1 -1
- esphome/components/ads1115/ads1115.cpp +3 -5
- esphome/components/ads1118/ads1118.cpp +2 -1
- esphome/components/ags10/ags10.cpp +3 -2
- esphome/components/aht10/aht10.cpp +27 -29
- esphome/components/aic3204/aic3204.cpp +2 -2
- esphome/components/alarm_control_panel/__init__.py +1 -0
- esphome/components/am2315c/am2315c.cpp +2 -2
- esphome/components/am2320/am2320.cpp +2 -2
- esphome/components/am43/am43_base.h +1 -1
- esphome/components/am43/cover/am43_cover.cpp +4 -2
- esphome/components/analog_threshold/analog_threshold_binary_sensor.cpp +4 -2
- esphome/components/apds9306/apds9306.cpp +8 -5
- esphome/components/apds9960/apds9960.cpp +2 -2
- esphome/components/api/__init__.py +5 -0
- esphome/components/api/api_connection.cpp +753 -379
- esphome/components/api/api_connection.h +341 -283
- esphome/components/api/api_frame_helper.cpp +349 -344
- esphome/components/api/api_frame_helper.h +121 -94
- esphome/components/api/api_pb2.cpp +5 -0
- esphome/components/api/api_pb2.h +703 -227
- esphome/components/api/api_pb2_service.cpp +12 -688
- esphome/components/api/api_pb2_service.h +53 -207
- esphome/components/api/api_server.cpp +71 -29
- esphome/components/api/api_server.h +9 -0
- esphome/components/api/client.py +5 -4
- esphome/components/api/homeassistant_service.h +1 -1
- esphome/components/api/list_entities.cpp +1 -1
- esphome/components/api/proto.cpp +1 -0
- esphome/components/api/proto.h +5 -4
- esphome/components/api/subscribe_state.cpp +8 -16
- esphome/components/as3935/as3935.cpp +3 -3
- esphome/components/as5600/as5600.cpp +9 -7
- esphome/components/as7341/as7341.cpp +7 -5
- esphome/components/at581x/at581x.cpp +13 -10
- esphome/components/atm90e26/atm90e26.cpp +2 -2
- esphome/components/atm90e32/atm90e32.cpp +3 -3
- esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +5 -3
- esphome/components/bang_bang/bang_bang_climate.cpp +8 -5
- esphome/components/bedjet/bedjet_hub.cpp +6 -4
- esphome/components/beken_spi_led_strip/led_strip.cpp +11 -7
- esphome/components/bh1750/bh1750.cpp +2 -2
- esphome/components/binary_sensor/__init__.py +1 -0
- esphome/components/binary_sensor/automation.cpp +1 -2
- esphome/components/bl0906/bl0906.cpp +1 -1
- esphome/components/bl0942/bl0942.cpp +11 -8
- esphome/components/bl0942/sensor.py +1 -1
- esphome/components/ble_client/__init__.py +5 -1
- esphome/components/ble_client/output/ble_binary_output.cpp +6 -3
- esphome/components/ble_client/sensor/ble_sensor.cpp +9 -6
- esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +8 -5
- esphome/components/bluetooth_proxy/__init__.py +5 -1
- esphome/components/bluetooth_proxy/bluetooth_connection.cpp +5 -5
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +18 -16
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +1 -1
- esphome/components/bme280_base/bme280_base.cpp +5 -6
- esphome/components/bme680/bme680.cpp +3 -3
- esphome/components/bme680/sensor.py +2 -2
- esphome/components/bme680_bsec/bme680_bsec.cpp +11 -7
- esphome/components/bme680_bsec/sensor.py +7 -3
- esphome/components/bme68x_bsec2/__init__.py +6 -5
- esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +17 -13
- esphome/components/bme68x_bsec2/sensor.py +4 -4
- esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +1 -0
- esphome/components/bmi160/bmi160.cpp +11 -11
- esphome/components/bmp085/bmp085.cpp +2 -2
- esphome/components/bmp280_base/bmp280_base.cpp +3 -3
- esphome/components/bmp3xx_base/bmp3xx_base.cpp +13 -13
- esphome/components/bmp581/bmp581.cpp +33 -27
- esphome/components/bp1658cj/bp1658cj.cpp +5 -3
- esphome/components/bp5758d/bp5758d.cpp +1 -1
- esphome/components/button/__init__.py +1 -0
- esphome/components/canbus/canbus.cpp +1 -1
- esphome/components/cap1188/cap1188.cpp +6 -4
- esphome/components/captive_portal/captive_portal.cpp +1 -1
- esphome/components/ccs811/ccs811.cpp +3 -2
- esphome/components/cd74hc4067/cd74hc4067.cpp +1 -1
- esphome/components/ch422g/ch422g.cpp +2 -2
- esphome/components/chsc6x/chsc6x_touchscreen.cpp +6 -4
- esphome/components/climate/__init__.py +1 -0
- esphome/components/climate/climate.cpp +12 -7
- esphome/components/climate/climate.h +1 -1
- esphome/components/climate_ir/climate_ir.cpp +7 -4
- esphome/components/cm1106/__init__.py +1 -0
- esphome/components/cm1106/cm1106.cpp +112 -0
- esphome/components/cm1106/cm1106.h +40 -0
- esphome/components/cm1106/sensor.py +72 -0
- esphome/components/const/__init__.py +1 -0
- esphome/components/cover/__init__.py +1 -0
- esphome/components/cs5460a/cs5460a.cpp +16 -11
- esphome/components/cse7761/cse7761.cpp +2 -2
- esphome/components/cse7766/cse7766.cpp +0 -5
- esphome/components/cse7766/cse7766.h +5 -1
- esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +1 -1
- esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +6 -3
- esphome/components/current_based/current_based_cover.cpp +4 -2
- esphome/components/dac7678/dac7678_output.cpp +4 -4
- esphome/components/dallas_temp/dallas_temp.cpp +2 -3
- esphome/components/daly_bms/daly_bms.cpp +2 -1
- esphome/components/dashboard_import/__init__.py +1 -2
- esphome/components/datetime/__init__.py +3 -1
- esphome/components/datetime/date_entity.cpp +5 -5
- esphome/components/datetime/datetime_base.h +0 -5
- esphome/components/datetime/datetime_entity.cpp +8 -8
- esphome/components/datetime/time_entity.cpp +4 -4
- esphome/components/debug/debug_component.cpp +1 -5
- esphome/components/debug/debug_component.h +1 -1
- esphome/components/debug/debug_esp32.cpp +4 -2
- esphome/components/deep_sleep/deep_sleep_component.cpp +11 -5
- esphome/components/deep_sleep/deep_sleep_esp32.cpp +7 -5
- esphome/components/demo/__init__.py +206 -0
- esphome/components/demo/demo_alarm_control_panel.h +65 -0
- esphome/components/demo/demo_button.h +15 -0
- esphome/components/demo/demo_date.h +34 -0
- esphome/components/demo/demo_datetime.h +40 -0
- esphome/components/demo/demo_lock.h +17 -0
- esphome/components/demo/demo_select.h +15 -0
- esphome/components/demo/demo_text.h +18 -0
- esphome/components/demo/demo_time.h +34 -0
- esphome/components/demo/demo_valve.h +54 -0
- esphome/components/dfrobot_sen0395/commands.cpp +3 -3
- esphome/components/dht/dht.cpp +29 -50
- esphome/components/dht12/dht12.cpp +2 -2
- esphome/components/display/display.h +5 -3
- esphome/components/dps310/dps310.cpp +7 -5
- esphome/components/ds1307/ds1307.cpp +2 -2
- esphome/components/dsmr/dsmr.cpp +5 -3
- esphome/components/duty_cycle/duty_cycle_sensor.cpp +2 -2
- esphome/components/duty_time/duty_time_sensor.cpp +5 -3
- esphome/components/ee895/ee895.cpp +3 -3
- esphome/components/ektf2232/touchscreen/ektf2232.cpp +1 -1
- esphome/components/emc2101/emc2101.cpp +11 -9
- esphome/components/ens160_base/ens160_base.cpp +2 -2
- esphome/components/ens210/ens210.cpp +2 -2
- esphome/components/es7210/es7210.cpp +6 -4
- esphome/components/es7243e/es7243e.cpp +1 -1
- esphome/components/es8156/es8156.cpp +1 -1
- esphome/components/es8311/es8311.cpp +8 -6
- esphome/components/es8388/__init__.py +0 -0
- esphome/components/es8388/audio_dac.py +26 -0
- esphome/components/es8388/es8388.cpp +289 -0
- esphome/components/es8388/es8388.h +81 -0
- esphome/components/es8388/es8388_const.h +83 -0
- esphome/components/es8388/select/__init__.py +47 -0
- esphome/components/es8388/select/adc_input_mic_select.cpp +12 -0
- esphome/components/es8388/select/adc_input_mic_select.h +15 -0
- esphome/components/es8388/select/dac_output_select.cpp +12 -0
- esphome/components/es8388/select/dac_output_select.h +15 -0
- esphome/components/esp32/__init__.py +118 -23
- esphome/components/esp32/boards.py +208 -125
- esphome/components/esp32/const.py +6 -0
- esphome/components/esp32/gpio.py +14 -1
- esphome/components/esp32/gpio_esp32_c5.py +45 -0
- esphome/components/esp32/gpio_esp32_p4.py +43 -0
- esphome/components/esp32/preferences.cpp +7 -7
- esphome/components/esp32_ble/__init__.py +115 -0
- esphome/components/esp32_ble/ble.cpp +101 -54
- esphome/components/esp32_ble/ble.h +24 -5
- esphome/components/esp32_ble/ble_event.h +172 -32
- esphome/components/esp32_ble/ble_scan_result.h +24 -0
- esphome/components/esp32_ble/ble_uuid.h +1 -1
- esphome/components/esp32_ble/queue.h +53 -27
- esphome/components/esp32_ble_client/ble_client_base.cpp +4 -2
- esphome/components/esp32_ble_server/__init__.py +4 -1
- esphome/components/esp32_ble_server/ble_characteristic.cpp +1 -0
- esphome/components/esp32_ble_server/ble_server.h +0 -1
- esphome/components/esp32_ble_tracker/__init__.py +7 -2
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +107 -75
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +16 -16
- esphome/components/esp32_camera/esp32_camera.cpp +35 -27
- esphome/components/esp32_camera_web_server/camera_web_server.cpp +4 -2
- esphome/components/esp32_dac/esp32_dac.cpp +2 -2
- esphome/components/esp32_improv/__init__.py +5 -1
- esphome/components/esp32_improv/esp32_improv_component.cpp +2 -2
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +11 -7
- esphome/components/esp32_rmt_led_strip/light.py +5 -1
- esphome/components/esp32_touch/esp32_touch.cpp +12 -8
- esphome/components/esp8266/gpio.cpp +10 -1
- esphome/components/esp8266/preferences.cpp +6 -6
- esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
- esphome/components/esp_ldo/__init__.py +91 -0
- esphome/components/esp_ldo/esp_ldo.cpp +43 -0
- esphome/components/esp_ldo/esp_ldo.h +43 -0
- esphome/components/esphome/ota/ota_esphome.cpp +15 -8
- esphome/components/ethernet/ethernet_component.cpp +38 -26
- esphome/components/ethernet/ethernet_component.h +1 -1
- esphome/components/event/__init__.py +1 -0
- esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
- esphome/components/ezo/ezo.cpp +1 -1
- esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
- esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
- esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
- esphome/components/fan/__init__.py +1 -0
- esphome/components/fan/fan.cpp +30 -19
- esphome/components/fastled_base/fastled_light.cpp +7 -5
- esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
- esphome/components/fs3000/fs3000.cpp +1 -1
- esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
- esphome/components/ft63x6/ft63x6.cpp +5 -3
- esphome/components/gcja5/gcja5.cpp +0 -12
- esphome/components/gcja5/gcja5.h +8 -3
- esphome/components/gdk101/gdk101.cpp +2 -2
- esphome/components/globals/globals_component.h +13 -10
- esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
- esphome/components/gp8403/gp8403.cpp +4 -2
- esphome/components/gp8403/output/gp8403_output.cpp +4 -2
- esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
- esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
- esphome/components/gpio/switch/gpio_switch.cpp +1 -1
- esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
- esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
- esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
- esphome/components/growatt_solar/growatt_solar.cpp +6 -3
- esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
- esphome/components/haier/haier_base.cpp +2 -2
- esphome/components/haier/hon_climate.cpp +13 -6
- esphome/components/havells_solar/havells_solar.cpp +5 -2
- esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
- esphome/components/hdc1080/hdc1080.cpp +2 -2
- esphome/components/he60r/he60r.cpp +4 -2
- esphome/components/hlw8012/hlw8012.cpp +6 -4
- esphome/components/hm3301/hm3301.cpp +2 -2
- esphome/components/hmc5883l/hmc5883l.cpp +2 -2
- esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
- esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
- esphome/components/honeywellabp/honeywellabp.cpp +4 -2
- esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
- esphome/components/hte501/hte501.cpp +3 -2
- esphome/components/http_request/__init__.py +2 -2
- esphome/components/http_request/http_request.cpp +7 -5
- esphome/components/http_request/http_request_idf.cpp +4 -2
- esphome/components/http_request/ota/ota_http_request.cpp +1 -1
- esphome/components/htu21d/htu21d.cpp +2 -2
- esphome/components/htu31d/htu31d.cpp +2 -2
- esphome/components/hx711/hx711.cpp +2 -2
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
- esphome/components/hyt271/hyt271.cpp +2 -2
- esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
- esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
- esphome/components/i2s_audio/__init__.py +2 -0
- esphome/components/i2s_audio/i2s_audio.cpp +3 -4
- esphome/components/i2s_audio/i2s_audio.h +1 -1
- esphome/components/i2s_audio/media_player/__init__.py +1 -1
- esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +85 -77
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +6 -0
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +29 -11
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +1 -0
- esphome/components/iaqcore/iaqcore.cpp +3 -3
- esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
- esphome/components/ili9xxx/ili9xxx_display.h +1 -1
- esphome/components/image/image.cpp +1 -0
- esphome/components/ina219/ina219.cpp +2 -2
- esphome/components/ina226/ina226.cpp +8 -5
- esphome/components/ina260/ina260.cpp +1 -1
- esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
- esphome/components/ina3221/ina3221.cpp +2 -2
- esphome/components/inkplate6/display.py +12 -2
- esphome/components/inkplate6/inkplate.cpp +13 -9
- esphome/components/inkplate6/inkplate.h +7 -6
- esphome/components/integration/integration_sensor.cpp +1 -1
- esphome/components/internal_temperature/internal_temperature.cpp +4 -4
- esphome/components/json/json_util.cpp +4 -5
- esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
- esphome/components/key_collector/key_collector.cpp +4 -2
- esphome/components/kmeteriso/kmeteriso.cpp +4 -4
- esphome/components/kuntze/kuntze.cpp +4 -2
- esphome/components/lc709203f/__init__.py +1 -0
- esphome/components/lc709203f/lc709203f.cpp +299 -0
- esphome/components/lc709203f/lc709203f.h +55 -0
- esphome/components/lc709203f/sensor.py +93 -0
- esphome/components/lcd_base/lcd_display.cpp +2 -2
- esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
- esphome/components/lcd_menu/lcd_menu.cpp +6 -4
- esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
- esphome/components/ld2410/ld2410.cpp +6 -7
- esphome/components/ld2420/ld2420.cpp +9 -7
- esphome/components/ld2450/ld2450.cpp +6 -4
- esphome/components/ld2450/sensor.py +2 -2
- esphome/components/ledc/ledc_output.cpp +32 -28
- esphome/components/libretiny/const.py +1 -1
- esphome/components/libretiny/preferences.cpp +6 -7
- esphome/components/light/__init__.py +2 -1
- esphome/components/light/esp_hsv_color.h +1 -1
- esphome/components/light/light_state.cpp +9 -5
- esphome/components/light/light_state.h +15 -15
- esphome/components/light/light_transformer.h +1 -1
- esphome/components/lightwaverf/LwTx.cpp +1 -1
- esphome/components/lightwaverf/lightwaverf.cpp +1 -1
- esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
- esphome/components/lock/__init__.py +1 -0
- esphome/components/lock/lock.h +1 -1
- esphome/components/logger/__init__.py +6 -0
- esphome/components/logger/logger.cpp +11 -20
- esphome/components/logger/logger.h +5 -6
- esphome/components/logger/logger_esp32.cpp +5 -5
- esphome/components/ltr390/ltr390.cpp +8 -5
- esphome/components/ltr501/ltr501.cpp +19 -14
- esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
- esphome/components/lvgl/__init__.py +2 -2
- esphome/components/lvgl/automation.py +5 -4
- esphome/components/lvgl/defines.py +0 -2
- esphome/components/lvgl/lv_validation.py +1 -3
- esphome/components/lvgl/lvcode.py +7 -8
- esphome/components/lvgl/lvgl_esphome.cpp +26 -10
- esphome/components/lvgl/schemas.py +22 -23
- esphome/components/lvgl/trigger.py +8 -3
- esphome/components/lvgl/widgets/__init__.py +2 -2
- esphome/components/lvgl/widgets/canvas.py +9 -3
- esphome/components/lvgl/widgets/line.py +2 -1
- esphome/components/lvgl/widgets/tabview.py +7 -0
- esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
- esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
- esphome/components/max17043/max17043.cpp +2 -2
- esphome/components/max31855/max31855.cpp +2 -1
- esphome/components/max31856/max31856.cpp +9 -11
- esphome/components/max31865/max31865.cpp +6 -4
- esphome/components/max44009/max44009.cpp +2 -2
- esphome/components/max6675/max6675.cpp +1 -1
- esphome/components/max6956/max6956.cpp +5 -3
- esphome/components/max7219/max7219.cpp +8 -6
- esphome/components/max7219digit/automation.h +52 -0
- esphome/components/max7219digit/display.py +93 -1
- esphome/components/max7219digit/max7219digit.cpp +16 -13
- esphome/components/max9611/max9611.cpp +9 -6
- esphome/components/mcp23008/mcp23008.cpp +1 -1
- esphome/components/mcp23016/mcp23016.cpp +1 -1
- esphome/components/mcp23017/mcp23017.cpp +1 -1
- esphome/components/mcp23s08/mcp23s08.cpp +1 -1
- esphome/components/mcp23s17/mcp23s17.cpp +1 -1
- esphome/components/mcp3008/mcp3008.cpp +1 -1
- esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
- esphome/components/mcp3204/mcp3204.cpp +1 -1
- esphome/components/mcp4461/mcp4461.cpp +2 -2
- esphome/components/mcp4725/mcp4725.cpp +2 -2
- esphome/components/mcp4728/mcp4728.cpp +2 -2
- esphome/components/mcp9600/mcp9600.cpp +1 -1
- esphome/components/mcp9808/mcp9808.cpp +4 -4
- esphome/components/mdns/mdns_component.cpp +8 -2
- esphome/components/mdns/mdns_component.h +3 -1
- esphome/components/mdns/mdns_esp32.cpp +2 -2
- esphome/components/media_player/__init__.py +1 -0
- esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
- esphome/components/micro_wake_word/streaming_model.cpp +10 -6
- esphome/components/micronova/micronova.h +2 -2
- esphome/components/mics_4514/mics_4514.cpp +2 -2
- esphome/components/midea/air_conditioner.cpp +7 -5
- esphome/components/midea_ir/midea_ir.cpp +1 -1
- esphome/components/mipi_spi/mipi_spi.cpp +24 -15
- esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
- esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
- esphome/components/mlx90614/mlx90614.cpp +4 -3
- esphome/components/mmc5603/mmc5603.cpp +2 -2
- esphome/components/mmc5983/mmc5983.cpp +1 -1
- esphome/components/modbus/modbus.cpp +7 -5
- esphome/components/modbus_controller/modbus_controller.cpp +6 -4
- esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
- esphome/components/modbus_controller/switch/__init__.py +6 -2
- esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
- esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
- esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
- esphome/components/mpr121/mpr121.cpp +2 -2
- esphome/components/mpu6050/mpu6050.cpp +6 -6
- esphome/components/mpu6886/mpu6886.cpp +6 -6
- esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
- esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
- esphome/components/mqtt/mqtt_client.cpp +31 -24
- esphome/components/mqtt/mqtt_component.cpp +3 -3
- esphome/components/mqtt/mqtt_cover.cpp +8 -4
- esphome/components/mqtt/mqtt_fan.cpp +12 -6
- esphome/components/mqtt/mqtt_valve.cpp +4 -2
- esphome/components/ms5611/ms5611.cpp +2 -2
- esphome/components/ms8607/ms8607.cpp +2 -2
- esphome/components/msa3xx/msa3xx.cpp +16 -12
- esphome/components/my9231/my9231.cpp +7 -5
- esphome/components/nau7802/nau7802.cpp +6 -4
- esphome/components/neopixelbus/neopixelbus_light.h +2 -2
- esphome/components/network/ip_address.h +1 -1
- esphome/components/network/util.cpp +13 -0
- esphome/components/nextion/base_component.py +2 -0
- esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +3 -4
- esphome/components/nextion/display.py +34 -22
- esphome/components/nextion/nextion.cpp +182 -143
- esphome/components/nextion/nextion.h +36 -0
- esphome/components/nextion/nextion_commands.cpp +3 -3
- esphome/components/nextion/nextion_upload_arduino.cpp +69 -69
- esphome/components/nextion/nextion_upload_idf.cpp +79 -80
- esphome/components/nextion/sensor/nextion_sensor.cpp +5 -5
- esphome/components/nextion/switch/nextion_switch.cpp +2 -2
- esphome/components/nextion/text_sensor/nextion_textsensor.cpp +3 -3
- esphome/components/nfc/nci_message.h +1 -1
- esphome/components/nfc/ndef_record.h +1 -1
- esphome/components/nfc/ndef_record_text.h +1 -1
- esphome/components/nfc/ndef_record_uri.h +1 -1
- esphome/components/nfc/nfc.h +1 -1
- esphome/components/nfc/nfc_tag.h +1 -1
- esphome/components/noblex/noblex.cpp +1 -1
- esphome/components/npi19/npi19.cpp +5 -7
- esphome/components/number/__init__.py +11 -0
- esphome/components/number/number.cpp +1 -1
- esphome/components/number/number.h +0 -4
- esphome/components/online_image/__init__.py +13 -1
- esphome/components/online_image/online_image.cpp +26 -4
- esphome/components/online_image/online_image.h +21 -4
- esphome/components/opentherm/generate.py +3 -3
- esphome/components/opentherm/hub.cpp +11 -7
- esphome/components/opentherm/number/number.cpp +5 -3
- esphome/components/opentherm/opentherm.h +1 -1
- esphome/components/opentherm/schema.py +13 -13
- esphome/components/opentherm/validate.py +1 -1
- esphome/components/openthread/__init__.py +146 -0
- esphome/components/openthread/const.py +10 -0
- esphome/components/openthread/openthread.cpp +206 -0
- esphome/components/openthread/openthread.h +68 -0
- esphome/components/openthread/openthread_esp.cpp +164 -0
- esphome/components/openthread/tlv.py +58 -0
- esphome/components/openthread_info/__init__.py +0 -0
- esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
- esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
- esphome/components/openthread_info/text_sensor.py +105 -0
- esphome/components/output/float_output.cpp +1 -1
- esphome/components/output/switch/output_switch.cpp +1 -1
- esphome/components/packet_transport/packet_transport.cpp +6 -4
- esphome/components/pca6416a/pca6416a.cpp +2 -2
- esphome/components/pca9554/pca9554.cpp +6 -4
- esphome/components/pca9685/pca9685_output.cpp +12 -8
- esphome/components/pcd8544/pcd_8544.cpp +1 -1
- esphome/components/pcf85063/pcf85063.cpp +2 -2
- esphome/components/pcf8563/pcf8563.cpp +2 -2
- esphome/components/pcf8574/pcf8574.cpp +2 -2
- esphome/components/pid/pid_climate.cpp +8 -5
- esphome/components/pid/pid_climate.h +1 -1
- esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
- esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
- esphome/components/pipsolar/pipsolar.cpp +3 -3
- esphome/components/pm1006/pm1006.cpp +3 -7
- esphome/components/pm1006/pm1006.h +4 -1
- esphome/components/pm2005/pm2005.cpp +12 -13
- esphome/components/pm2005/sensor.py +1 -1
- esphome/components/pmsa003i/pmsa003i.cpp +2 -2
- esphome/components/pmsx003/pmsx003.cpp +0 -4
- esphome/components/pmsx003/pmsx003.h +5 -2
- esphome/components/pmwcs3/pmwcs3.cpp +9 -13
- esphome/components/pmwcs3/pmwcs3.h +0 -1
- esphome/components/pn532/pn532.cpp +7 -7
- esphome/components/pn532/pn532.h +1 -1
- esphome/components/pn532_spi/pn532_spi.cpp +1 -1
- esphome/components/pn7150/pn7150.cpp +4 -4
- esphome/components/pn7160/pn7160.cpp +4 -4
- esphome/components/power_supply/power_supply.cpp +6 -4
- esphome/components/power_supply/power_supply.h +1 -1
- esphome/components/prometheus/__init__.py +0 -1
- esphome/components/psram/__init__.py +59 -35
- esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
- esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
- esphome/components/pylontech/pylontech.cpp +2 -2
- esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
- esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
- esphome/components/pzemac/pzemac.cpp +4 -2
- esphome/components/pzemdc/pzemdc.cpp +4 -2
- esphome/components/qmc5883l/qmc5883l.cpp +2 -2
- esphome/components/qmp6988/qmp6988.cpp +2 -2
- esphome/components/qmp6988/qmp6988.h +1 -1
- esphome/components/qr_code/qr_code.cpp +5 -3
- esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
- esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
- esphome/components/rc522/rc522.cpp +5 -5
- esphome/components/rdm6300/rdm6300.cpp +1 -0
- esphome/components/remote_receiver/__init__.py +10 -2
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
- esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
- esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
- esphome/components/remote_transmitter/__init__.py +10 -2
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
- esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
- esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
- esphome/components/resistance/resistance_sensor.cpp +6 -3
- esphome/components/restart/button/restart_button.cpp +1 -1
- esphome/components/restart/switch/restart_switch.cpp +1 -1
- esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
- esphome/components/rp2040/__init__.py +7 -0
- esphome/components/rp2040/core.cpp +8 -1
- esphome/components/rp2040/gpio.cpp +26 -9
- esphome/components/rp2040/preferences.cpp +3 -3
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
- esphome/components/rp2040_pio_led_strip/light.py +1 -1
- esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
- esphome/components/rtttl/rtttl.cpp +11 -9
- esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
- esphome/components/safe_mode/safe_mode.cpp +9 -8
- esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
- esphome/components/scd30/scd30.cpp +11 -8
- esphome/components/scd4x/scd4x.cpp +12 -8
- esphome/components/sdl/display.py +40 -0
- esphome/components/sdl/sdl_esphome.cpp +2 -2
- esphome/components/sdl/sdl_esphome.h +8 -0
- esphome/components/sdm_meter/sdm_meter.cpp +5 -2
- esphome/components/sdp3x/sdp3x.cpp +11 -11
- esphome/components/sds011/sds011.cpp +5 -6
- esphome/components/sds011/sds011.h +4 -1
- esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
- esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
- esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
- esphome/components/selec_meter/selec_meter.cpp +5 -2
- esphome/components/select/__init__.py +1 -0
- esphome/components/select/select.cpp +1 -1
- esphome/components/select/select.h +0 -4
- esphome/components/sen0321/sen0321.cpp +2 -2
- esphome/components/sen21231/sen21231.cpp +1 -1
- esphome/components/sen5x/sen5x.cpp +10 -7
- esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
- esphome/components/sensirion_common/i2c_sensirion.h +1 -0
- esphome/components/sensor/__init__.py +11 -1
- esphome/components/sensor/filter.h +1 -1
- esphome/components/sensor/sensor.cpp +8 -4
- esphome/components/sensor/sensor.h +12 -11
- esphome/components/servo/servo.cpp +12 -9
- esphome/components/servo/servo.h +1 -1
- esphome/components/sfa30/sfa30.cpp +1 -1
- esphome/components/sgp30/sgp30.cpp +10 -8
- esphome/components/sgp4x/sgp4x.cpp +49 -61
- esphome/components/sgp4x/sgp4x.h +0 -1
- esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
- esphome/components/sht3xd/sht3xd.cpp +1 -1
- esphome/components/sht4x/sht4x.cpp +2 -2
- esphome/components/shtcx/shtcx.cpp +13 -16
- esphome/components/shutdown/button/shutdown_button.cpp +1 -1
- esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
- esphome/components/sim800l/sim800l.cpp +2 -2
- esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
- esphome/components/sm16716/sm16716.cpp +1 -1
- esphome/components/sm2135/sm2135.cpp +1 -1
- esphome/components/sm2235/sm2235.cpp +5 -3
- esphome/components/sm2335/sm2335.cpp +5 -3
- esphome/components/sml/sml.cpp +1 -1
- esphome/components/sn74hc165/sn74hc165.cpp +1 -2
- esphome/components/sn74hc595/sn74hc595.cpp +1 -2
- esphome/components/sntp/sntp_component.cpp +1 -1
- esphome/components/socket/__init__.py +2 -0
- esphome/components/socket/bsd_sockets_impl.cpp +51 -7
- esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
- esphome/components/socket/lwip_sockets_impl.cpp +51 -7
- esphome/components/socket/socket.cpp +31 -0
- esphome/components/socket/socket.h +27 -1
- esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
- esphome/components/sonoff_d1/sonoff_d1.h +2 -2
- esphome/components/sound_level/sound_level.cpp +4 -2
- esphome/components/speaker/media_player/__init__.py +3 -0
- esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
- esphome/components/speaker/media_player/speaker_media_player.h +6 -0
- esphome/components/spi/__init__.py +10 -2
- esphome/components/spi/spi.cpp +4 -4
- esphome/components/spi/spi_arduino.cpp +22 -9
- esphome/components/spi_device/spi_device.cpp +1 -2
- esphome/components/sprinkler/sprinkler.cpp +9 -6
- esphome/components/sps30/sps30.cpp +16 -15
- esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
- esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
- esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
- esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
- esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
- esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
- esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
- esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
- esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
- esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
- esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
- esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
- esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
- esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
- esphome/components/st7567_base/st7567_base.cpp +3 -3
- esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
- esphome/components/st7567_spi/st7567_spi.cpp +1 -1
- esphome/components/st7701s/st7701s.cpp +4 -2
- esphome/components/st7735/st7735.cpp +3 -3
- esphome/components/st7789v/st7789v.cpp +10 -7
- esphome/components/st7920/st7920.cpp +6 -4
- esphome/components/statsd/statsd.cpp +9 -5
- esphome/components/status_led/light/status_led_light.cpp +3 -3
- esphome/components/status_led/light/status_led_light.h +1 -1
- esphome/components/status_led/status_led.cpp +1 -1
- esphome/components/stepper/stepper.h +5 -3
- esphome/components/sts3x/sts3x.cpp +2 -2
- esphome/components/switch/__init__.py +1 -0
- esphome/components/switch/switch.cpp +18 -12
- esphome/components/switch/switch.h +14 -8
- esphome/components/sx1509/__init__.py +53 -20
- esphome/components/sx1509/sx1509.cpp +29 -5
- esphome/components/sx1509/sx1509.h +9 -1
- esphome/components/t6615/t6615.cpp +1 -0
- esphome/components/tc74/tc74.cpp +1 -1
- esphome/components/tca9548a/tca9548a.cpp +1 -1
- esphome/components/tca9555/tca9555.cpp +2 -2
- esphome/components/tcs34725/tcs34725.cpp +4 -4
- esphome/components/tee501/tee501.cpp +3 -2
- esphome/components/tem3200/tem3200.cpp +5 -6
- esphome/components/template/alarm_control_panel/__init__.py +6 -0
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +43 -12
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +4 -1
- esphome/components/template/cover/template_cover.cpp +1 -1
- esphome/components/template/select/template_select.cpp +6 -4
- esphome/components/template/text/template_text.cpp +2 -3
- esphome/components/template/valve/template_valve.cpp +5 -3
- esphome/components/text/__init__.py +10 -11
- esphome/components/text/text.cpp +1 -1
- esphome/components/text/text.h +0 -4
- esphome/components/text_sensor/__init__.py +1 -0
- esphome/components/text_sensor/text_sensor.cpp +8 -4
- esphome/components/text_sensor/text_sensor.h +6 -6
- esphome/components/thermostat/thermostat_climate.cpp +67 -43
- esphome/components/time/__init__.py +1 -2
- esphome/components/time_based/time_based_cover.cpp +4 -2
- esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
- esphome/components/tm1621/tm1621.cpp +3 -3
- esphome/components/tm1637/tm1637.cpp +9 -7
- esphome/components/tm1638/tm1638.cpp +7 -5
- esphome/components/tm1651/tm1651.cpp +2 -2
- esphome/components/tmp102/tmp102.cpp +1 -3
- esphome/components/tmp102/tmp102.h +0 -3
- esphome/components/tmp1075/tmp1075.cpp +12 -9
- esphome/components/tmp117/tmp117.cpp +2 -2
- esphome/components/tof10120/tof10120_sensor.cpp +2 -2
- esphome/components/tormatic/tormatic_cover.cpp +4 -2
- esphome/components/tsl2561/tsl2561.cpp +7 -5
- esphome/components/tsl2591/tsl2591.cpp +25 -27
- esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
- esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
- esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
- esphome/components/tuya/select/tuya_select.cpp +5 -3
- esphome/components/tx20/tx20.cpp +3 -3
- esphome/components/uart/__init__.py +4 -5
- esphome/components/uart/button/uart_button.cpp +1 -1
- esphome/components/uart/switch/uart_switch.cpp +2 -2
- esphome/components/uart/uart.cpp +2 -2
- esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
- esphome/components/uart/uart_component_esp8266.cpp +9 -7
- esphome/components/uart/uart_component_esp_idf.cpp +9 -7
- esphome/components/uart/uart_component_host.cpp +11 -8
- esphome/components/uart/uart_component_libretiny.cpp +8 -6
- esphome/components/uart/uart_component_rp2040.cpp +8 -6
- esphome/components/udp/udp_component.cpp +9 -5
- esphome/components/ufire_ec/ufire_ec.cpp +5 -3
- esphome/components/ufire_ise/ufire_ise.cpp +1 -1
- esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
- esphome/components/update/__init__.py +1 -0
- esphome/components/update/update_entity.cpp +1 -1
- esphome/components/update/update_entity.h +0 -3
- esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
- esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
- esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
- esphome/components/uptime/sensor/uptime_timestamp_sensor.cpp +1 -1
- esphome/components/usb_host/__init__.py +64 -0
- esphome/components/usb_host/usb_host.h +116 -0
- esphome/components/usb_host/usb_host_client.cpp +394 -0
- esphome/components/usb_host/usb_host_component.cpp +35 -0
- esphome/components/usb_uart/__init__.py +134 -0
- esphome/components/usb_uart/ch34x.cpp +80 -0
- esphome/components/usb_uart/cp210x.cpp +126 -0
- esphome/components/usb_uart/usb_uart.cpp +328 -0
- esphome/components/usb_uart/usb_uart.h +151 -0
- esphome/components/valve/__init__.py +1 -0
- esphome/components/veml3235/veml3235.cpp +13 -9
- esphome/components/veml7700/veml7700.cpp +10 -6
- esphome/components/voice_assistant/voice_assistant.cpp +7 -7
- esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
- esphome/components/web_server/server_index_v2.h +632 -630
- esphome/components/web_server/server_index_v3.h +411 -409
- esphome/components/web_server/web_server.cpp +5 -3
- esphome/components/web_server_base/web_server_base.cpp +1 -1
- esphome/components/web_server_idf/__init__.py +0 -2
- esphome/components/web_server_idf/utils.cpp +1 -1
- esphome/components/web_server_idf/web_server_idf.cpp +7 -3
- esphome/components/web_server_idf/web_server_idf.h +7 -0
- esphome/components/weikai/__init__.py +2 -0
- esphome/components/weikai/weikai.cpp +24 -22
- esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
- esphome/components/weikai_spi/weikai_spi.cpp +11 -6
- esphome/components/wiegand/wiegand.cpp +1 -1
- esphome/components/wifi/wifi_component.cpp +50 -37
- esphome/components/wifi/wifi_component.h +7 -4
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
- esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
- esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
- esphome/components/wireguard/wireguard.cpp +21 -21
- esphome/components/wl_134/text_sensor.py +1 -2
- esphome/components/wled/wled_light_effect.cpp +1 -1
- esphome/components/x9c/x9c.cpp +5 -3
- esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
- esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
- esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
- esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
- esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
- esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
- esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
- esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
- esphome/components/xl9535/xl9535.cpp +2 -2
- esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
- esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
- esphome/config.py +3 -2
- esphome/config_validation.py +46 -17
- esphome/const.py +10 -1
- esphome/core/__init__.py +37 -18
- esphome/core/application.cpp +197 -8
- esphome/core/application.h +116 -6
- esphome/core/component.cpp +36 -15
- esphome/core/component.h +43 -13
- esphome/core/config.py +12 -0
- esphome/core/defines.h +10 -2
- esphome/core/entity_base.cpp +4 -16
- esphome/core/entity_base.h +27 -13
- esphome/core/hal.h +5 -0
- esphome/core/helpers.cpp +1 -1
- esphome/core/helpers.h +5 -5
- esphome/core/log.h +2 -0
- esphome/core/log_const_en.h +4 -0
- esphome/core/scheduler.cpp +2 -2
- esphome/coroutine.py +3 -4
- esphome/cpp_generator.py +32 -32
- esphome/dashboard/core.py +2 -2
- esphome/dashboard/web_server.py +2 -2
- esphome/git.py +4 -4
- esphome/helpers.py +5 -6
- esphome/loader.py +8 -7
- esphome/log.py +7 -1
- esphome/platformio_api.py +2 -3
- esphome/storage_json.py +13 -5
- esphome/types.py +12 -13
- esphome/util.py +1 -2
- esphome/wizard.py +0 -16
- esphome/writer.py +5 -3
- esphome/yaml_util.py +6 -1
- esphome/zeroconf.py +1 -1
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/METADATA +12 -11
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/RECORD +753 -699
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/WHEEL +1 -1
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/entry_points.txt +0 -0
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/top_level.txt +0 -0
@@ -10,162 +10,94 @@ namespace api {
|
|
10
10
|
|
11
11
|
class APIServerConnectionBase : public ProtoService {
|
12
12
|
public:
|
13
|
+
#ifdef HAS_PROTO_MESSAGE_DUMP
|
14
|
+
protected:
|
15
|
+
void log_send_message_(const char *name, const std::string &dump);
|
16
|
+
|
17
|
+
public:
|
18
|
+
#endif
|
19
|
+
|
20
|
+
template<typename T> bool send_message(const T &msg) {
|
21
|
+
#ifdef HAS_PROTO_MESSAGE_DUMP
|
22
|
+
this->log_send_message_(T::message_name(), msg.dump());
|
23
|
+
#endif
|
24
|
+
return this->send_message_(msg, T::MESSAGE_TYPE);
|
25
|
+
}
|
26
|
+
|
13
27
|
virtual void on_hello_request(const HelloRequest &value){};
|
14
|
-
|
28
|
+
|
15
29
|
virtual void on_connect_request(const ConnectRequest &value){};
|
16
|
-
|
17
|
-
bool send_disconnect_request(const DisconnectRequest &msg);
|
30
|
+
|
18
31
|
virtual void on_disconnect_request(const DisconnectRequest &value){};
|
19
|
-
bool send_disconnect_response(const DisconnectResponse &msg);
|
20
32
|
virtual void on_disconnect_response(const DisconnectResponse &value){};
|
21
|
-
bool send_ping_request(const PingRequest &msg);
|
22
33
|
virtual void on_ping_request(const PingRequest &value){};
|
23
|
-
bool send_ping_response(const PingResponse &msg);
|
24
34
|
virtual void on_ping_response(const PingResponse &value){};
|
25
35
|
virtual void on_device_info_request(const DeviceInfoRequest &value){};
|
26
|
-
|
36
|
+
|
27
37
|
virtual void on_list_entities_request(const ListEntitiesRequest &value){};
|
28
|
-
|
38
|
+
|
29
39
|
virtual void on_subscribe_states_request(const SubscribeStatesRequest &value){};
|
30
|
-
|
31
|
-
bool send_list_entities_binary_sensor_response(const ListEntitiesBinarySensorResponse &msg);
|
32
|
-
#endif
|
33
|
-
#ifdef USE_BINARY_SENSOR
|
34
|
-
bool send_binary_sensor_state_response(const BinarySensorStateResponse &msg);
|
35
|
-
#endif
|
36
|
-
#ifdef USE_COVER
|
37
|
-
bool send_list_entities_cover_response(const ListEntitiesCoverResponse &msg);
|
38
|
-
#endif
|
39
|
-
#ifdef USE_COVER
|
40
|
-
bool send_cover_state_response(const CoverStateResponse &msg);
|
41
|
-
#endif
|
40
|
+
|
42
41
|
#ifdef USE_COVER
|
43
42
|
virtual void on_cover_command_request(const CoverCommandRequest &value){};
|
44
43
|
#endif
|
45
|
-
|
46
|
-
bool send_list_entities_fan_response(const ListEntitiesFanResponse &msg);
|
47
|
-
#endif
|
48
|
-
#ifdef USE_FAN
|
49
|
-
bool send_fan_state_response(const FanStateResponse &msg);
|
50
|
-
#endif
|
44
|
+
|
51
45
|
#ifdef USE_FAN
|
52
46
|
virtual void on_fan_command_request(const FanCommandRequest &value){};
|
53
47
|
#endif
|
54
|
-
|
55
|
-
bool send_list_entities_light_response(const ListEntitiesLightResponse &msg);
|
56
|
-
#endif
|
57
|
-
#ifdef USE_LIGHT
|
58
|
-
bool send_light_state_response(const LightStateResponse &msg);
|
59
|
-
#endif
|
48
|
+
|
60
49
|
#ifdef USE_LIGHT
|
61
50
|
virtual void on_light_command_request(const LightCommandRequest &value){};
|
62
51
|
#endif
|
63
|
-
|
64
|
-
bool send_list_entities_sensor_response(const ListEntitiesSensorResponse &msg);
|
65
|
-
#endif
|
66
|
-
#ifdef USE_SENSOR
|
67
|
-
bool send_sensor_state_response(const SensorStateResponse &msg);
|
68
|
-
#endif
|
69
|
-
#ifdef USE_SWITCH
|
70
|
-
bool send_list_entities_switch_response(const ListEntitiesSwitchResponse &msg);
|
71
|
-
#endif
|
72
|
-
#ifdef USE_SWITCH
|
73
|
-
bool send_switch_state_response(const SwitchStateResponse &msg);
|
74
|
-
#endif
|
52
|
+
|
75
53
|
#ifdef USE_SWITCH
|
76
54
|
virtual void on_switch_command_request(const SwitchCommandRequest &value){};
|
77
55
|
#endif
|
78
|
-
|
79
|
-
bool send_list_entities_text_sensor_response(const ListEntitiesTextSensorResponse &msg);
|
80
|
-
#endif
|
81
|
-
#ifdef USE_TEXT_SENSOR
|
82
|
-
bool send_text_sensor_state_response(const TextSensorStateResponse &msg);
|
83
|
-
#endif
|
56
|
+
|
84
57
|
virtual void on_subscribe_logs_request(const SubscribeLogsRequest &value){};
|
85
|
-
|
58
|
+
|
86
59
|
#ifdef USE_API_NOISE
|
87
60
|
virtual void on_noise_encryption_set_key_request(const NoiseEncryptionSetKeyRequest &value){};
|
88
61
|
#endif
|
89
|
-
|
90
|
-
bool send_noise_encryption_set_key_response(const NoiseEncryptionSetKeyResponse &msg);
|
91
|
-
#endif
|
62
|
+
|
92
63
|
virtual void on_subscribe_homeassistant_services_request(const SubscribeHomeassistantServicesRequest &value){};
|
93
|
-
|
64
|
+
|
94
65
|
virtual void on_subscribe_home_assistant_states_request(const SubscribeHomeAssistantStatesRequest &value){};
|
95
|
-
|
66
|
+
|
96
67
|
virtual void on_home_assistant_state_response(const HomeAssistantStateResponse &value){};
|
97
|
-
bool send_get_time_request(const GetTimeRequest &msg);
|
98
68
|
virtual void on_get_time_request(const GetTimeRequest &value){};
|
99
|
-
bool send_get_time_response(const GetTimeResponse &msg);
|
100
69
|
virtual void on_get_time_response(const GetTimeResponse &value){};
|
101
|
-
|
70
|
+
|
102
71
|
virtual void on_execute_service_request(const ExecuteServiceRequest &value){};
|
103
|
-
|
104
|
-
bool send_list_entities_camera_response(const ListEntitiesCameraResponse &msg);
|
105
|
-
#endif
|
106
|
-
#ifdef USE_ESP32_CAMERA
|
107
|
-
bool send_camera_image_response(const CameraImageResponse &msg);
|
108
|
-
#endif
|
72
|
+
|
109
73
|
#ifdef USE_ESP32_CAMERA
|
110
74
|
virtual void on_camera_image_request(const CameraImageRequest &value){};
|
111
75
|
#endif
|
112
|
-
|
113
|
-
bool send_list_entities_climate_response(const ListEntitiesClimateResponse &msg);
|
114
|
-
#endif
|
115
|
-
#ifdef USE_CLIMATE
|
116
|
-
bool send_climate_state_response(const ClimateStateResponse &msg);
|
117
|
-
#endif
|
76
|
+
|
118
77
|
#ifdef USE_CLIMATE
|
119
78
|
virtual void on_climate_command_request(const ClimateCommandRequest &value){};
|
120
79
|
#endif
|
121
|
-
|
122
|
-
bool send_list_entities_number_response(const ListEntitiesNumberResponse &msg);
|
123
|
-
#endif
|
124
|
-
#ifdef USE_NUMBER
|
125
|
-
bool send_number_state_response(const NumberStateResponse &msg);
|
126
|
-
#endif
|
80
|
+
|
127
81
|
#ifdef USE_NUMBER
|
128
82
|
virtual void on_number_command_request(const NumberCommandRequest &value){};
|
129
83
|
#endif
|
130
|
-
|
131
|
-
bool send_list_entities_select_response(const ListEntitiesSelectResponse &msg);
|
132
|
-
#endif
|
133
|
-
#ifdef USE_SELECT
|
134
|
-
bool send_select_state_response(const SelectStateResponse &msg);
|
135
|
-
#endif
|
84
|
+
|
136
85
|
#ifdef USE_SELECT
|
137
86
|
virtual void on_select_command_request(const SelectCommandRequest &value){};
|
138
87
|
#endif
|
139
|
-
|
140
|
-
bool send_list_entities_siren_response(const ListEntitiesSirenResponse &msg);
|
141
|
-
#endif
|
142
|
-
#ifdef USE_SIREN
|
143
|
-
bool send_siren_state_response(const SirenStateResponse &msg);
|
144
|
-
#endif
|
88
|
+
|
145
89
|
#ifdef USE_SIREN
|
146
90
|
virtual void on_siren_command_request(const SirenCommandRequest &value){};
|
147
91
|
#endif
|
148
|
-
|
149
|
-
bool send_list_entities_lock_response(const ListEntitiesLockResponse &msg);
|
150
|
-
#endif
|
151
|
-
#ifdef USE_LOCK
|
152
|
-
bool send_lock_state_response(const LockStateResponse &msg);
|
153
|
-
#endif
|
92
|
+
|
154
93
|
#ifdef USE_LOCK
|
155
94
|
virtual void on_lock_command_request(const LockCommandRequest &value){};
|
156
95
|
#endif
|
157
|
-
|
158
|
-
bool send_list_entities_button_response(const ListEntitiesButtonResponse &msg);
|
159
|
-
#endif
|
96
|
+
|
160
97
|
#ifdef USE_BUTTON
|
161
98
|
virtual void on_button_command_request(const ButtonCommandRequest &value){};
|
162
99
|
#endif
|
163
|
-
|
164
|
-
bool send_list_entities_media_player_response(const ListEntitiesMediaPlayerResponse &msg);
|
165
|
-
#endif
|
166
|
-
#ifdef USE_MEDIA_PLAYER
|
167
|
-
bool send_media_player_state_response(const MediaPlayerStateResponse &msg);
|
168
|
-
#endif
|
100
|
+
|
169
101
|
#ifdef USE_MEDIA_PLAYER
|
170
102
|
virtual void on_media_player_command_request(const MediaPlayerCommandRequest &value){};
|
171
103
|
#endif
|
@@ -173,33 +105,19 @@ class APIServerConnectionBase : public ProtoService {
|
|
173
105
|
virtual void on_subscribe_bluetooth_le_advertisements_request(
|
174
106
|
const SubscribeBluetoothLEAdvertisementsRequest &value){};
|
175
107
|
#endif
|
176
|
-
|
177
|
-
bool send_bluetooth_le_advertisement_response(const BluetoothLEAdvertisementResponse &msg);
|
178
|
-
#endif
|
179
|
-
#ifdef USE_BLUETOOTH_PROXY
|
180
|
-
bool send_bluetooth_le_raw_advertisements_response(const BluetoothLERawAdvertisementsResponse &msg);
|
181
|
-
#endif
|
108
|
+
|
182
109
|
#ifdef USE_BLUETOOTH_PROXY
|
183
110
|
virtual void on_bluetooth_device_request(const BluetoothDeviceRequest &value){};
|
184
111
|
#endif
|
185
|
-
|
186
|
-
bool send_bluetooth_device_connection_response(const BluetoothDeviceConnectionResponse &msg);
|
187
|
-
#endif
|
112
|
+
|
188
113
|
#ifdef USE_BLUETOOTH_PROXY
|
189
114
|
virtual void on_bluetooth_gatt_get_services_request(const BluetoothGATTGetServicesRequest &value){};
|
190
115
|
#endif
|
191
|
-
|
192
|
-
bool send_bluetooth_gatt_get_services_response(const BluetoothGATTGetServicesResponse &msg);
|
193
|
-
#endif
|
194
|
-
#ifdef USE_BLUETOOTH_PROXY
|
195
|
-
bool send_bluetooth_gatt_get_services_done_response(const BluetoothGATTGetServicesDoneResponse &msg);
|
196
|
-
#endif
|
116
|
+
|
197
117
|
#ifdef USE_BLUETOOTH_PROXY
|
198
118
|
virtual void on_bluetooth_gatt_read_request(const BluetoothGATTReadRequest &value){};
|
199
119
|
#endif
|
200
|
-
|
201
|
-
bool send_bluetooth_gatt_read_response(const BluetoothGATTReadResponse &msg);
|
202
|
-
#endif
|
120
|
+
|
203
121
|
#ifdef USE_BLUETOOTH_PROXY
|
204
122
|
virtual void on_bluetooth_gatt_write_request(const BluetoothGATTWriteRequest &value){};
|
205
123
|
#endif
|
@@ -212,49 +130,23 @@ class APIServerConnectionBase : public ProtoService {
|
|
212
130
|
#ifdef USE_BLUETOOTH_PROXY
|
213
131
|
virtual void on_bluetooth_gatt_notify_request(const BluetoothGATTNotifyRequest &value){};
|
214
132
|
#endif
|
215
|
-
|
216
|
-
bool send_bluetooth_gatt_notify_data_response(const BluetoothGATTNotifyDataResponse &msg);
|
217
|
-
#endif
|
133
|
+
|
218
134
|
#ifdef USE_BLUETOOTH_PROXY
|
219
135
|
virtual void on_subscribe_bluetooth_connections_free_request(const SubscribeBluetoothConnectionsFreeRequest &value){};
|
220
136
|
#endif
|
221
|
-
|
222
|
-
bool send_bluetooth_connections_free_response(const BluetoothConnectionsFreeResponse &msg);
|
223
|
-
#endif
|
224
|
-
#ifdef USE_BLUETOOTH_PROXY
|
225
|
-
bool send_bluetooth_gatt_error_response(const BluetoothGATTErrorResponse &msg);
|
226
|
-
#endif
|
227
|
-
#ifdef USE_BLUETOOTH_PROXY
|
228
|
-
bool send_bluetooth_gatt_write_response(const BluetoothGATTWriteResponse &msg);
|
229
|
-
#endif
|
230
|
-
#ifdef USE_BLUETOOTH_PROXY
|
231
|
-
bool send_bluetooth_gatt_notify_response(const BluetoothGATTNotifyResponse &msg);
|
232
|
-
#endif
|
233
|
-
#ifdef USE_BLUETOOTH_PROXY
|
234
|
-
bool send_bluetooth_device_pairing_response(const BluetoothDevicePairingResponse &msg);
|
235
|
-
#endif
|
236
|
-
#ifdef USE_BLUETOOTH_PROXY
|
237
|
-
bool send_bluetooth_device_unpairing_response(const BluetoothDeviceUnpairingResponse &msg);
|
238
|
-
#endif
|
137
|
+
|
239
138
|
#ifdef USE_BLUETOOTH_PROXY
|
240
139
|
virtual void on_unsubscribe_bluetooth_le_advertisements_request(
|
241
140
|
const UnsubscribeBluetoothLEAdvertisementsRequest &value){};
|
242
141
|
#endif
|
243
|
-
|
244
|
-
bool send_bluetooth_device_clear_cache_response(const BluetoothDeviceClearCacheResponse &msg);
|
245
|
-
#endif
|
246
|
-
#ifdef USE_BLUETOOTH_PROXY
|
247
|
-
bool send_bluetooth_scanner_state_response(const BluetoothScannerStateResponse &msg);
|
248
|
-
#endif
|
142
|
+
|
249
143
|
#ifdef USE_BLUETOOTH_PROXY
|
250
144
|
virtual void on_bluetooth_scanner_set_mode_request(const BluetoothScannerSetModeRequest &value){};
|
251
145
|
#endif
|
252
146
|
#ifdef USE_VOICE_ASSISTANT
|
253
147
|
virtual void on_subscribe_voice_assistant_request(const SubscribeVoiceAssistantRequest &value){};
|
254
148
|
#endif
|
255
|
-
|
256
|
-
bool send_voice_assistant_request(const VoiceAssistantRequest &msg);
|
257
|
-
#endif
|
149
|
+
|
258
150
|
#ifdef USE_VOICE_ASSISTANT
|
259
151
|
virtual void on_voice_assistant_response(const VoiceAssistantResponse &value){};
|
260
152
|
#endif
|
@@ -262,7 +154,6 @@ class APIServerConnectionBase : public ProtoService {
|
|
262
154
|
virtual void on_voice_assistant_event_response(const VoiceAssistantEventResponse &value){};
|
263
155
|
#endif
|
264
156
|
#ifdef USE_VOICE_ASSISTANT
|
265
|
-
bool send_voice_assistant_audio(const VoiceAssistantAudio &msg);
|
266
157
|
virtual void on_voice_assistant_audio(const VoiceAssistantAudio &value){};
|
267
158
|
#endif
|
268
159
|
#ifdef USE_VOICE_ASSISTANT
|
@@ -271,84 +162,39 @@ class APIServerConnectionBase : public ProtoService {
|
|
271
162
|
#ifdef USE_VOICE_ASSISTANT
|
272
163
|
virtual void on_voice_assistant_announce_request(const VoiceAssistantAnnounceRequest &value){};
|
273
164
|
#endif
|
274
|
-
|
275
|
-
bool send_voice_assistant_announce_finished(const VoiceAssistantAnnounceFinished &msg);
|
276
|
-
#endif
|
165
|
+
|
277
166
|
#ifdef USE_VOICE_ASSISTANT
|
278
167
|
virtual void on_voice_assistant_configuration_request(const VoiceAssistantConfigurationRequest &value){};
|
279
168
|
#endif
|
280
|
-
|
281
|
-
bool send_voice_assistant_configuration_response(const VoiceAssistantConfigurationResponse &msg);
|
282
|
-
#endif
|
169
|
+
|
283
170
|
#ifdef USE_VOICE_ASSISTANT
|
284
171
|
virtual void on_voice_assistant_set_configuration(const VoiceAssistantSetConfiguration &value){};
|
285
172
|
#endif
|
286
|
-
|
287
|
-
bool send_list_entities_alarm_control_panel_response(const ListEntitiesAlarmControlPanelResponse &msg);
|
288
|
-
#endif
|
289
|
-
#ifdef USE_ALARM_CONTROL_PANEL
|
290
|
-
bool send_alarm_control_panel_state_response(const AlarmControlPanelStateResponse &msg);
|
291
|
-
#endif
|
173
|
+
|
292
174
|
#ifdef USE_ALARM_CONTROL_PANEL
|
293
175
|
virtual void on_alarm_control_panel_command_request(const AlarmControlPanelCommandRequest &value){};
|
294
176
|
#endif
|
295
|
-
|
296
|
-
bool send_list_entities_text_response(const ListEntitiesTextResponse &msg);
|
297
|
-
#endif
|
298
|
-
#ifdef USE_TEXT
|
299
|
-
bool send_text_state_response(const TextStateResponse &msg);
|
300
|
-
#endif
|
177
|
+
|
301
178
|
#ifdef USE_TEXT
|
302
179
|
virtual void on_text_command_request(const TextCommandRequest &value){};
|
303
180
|
#endif
|
304
|
-
|
305
|
-
bool send_list_entities_date_response(const ListEntitiesDateResponse &msg);
|
306
|
-
#endif
|
307
|
-
#ifdef USE_DATETIME_DATE
|
308
|
-
bool send_date_state_response(const DateStateResponse &msg);
|
309
|
-
#endif
|
181
|
+
|
310
182
|
#ifdef USE_DATETIME_DATE
|
311
183
|
virtual void on_date_command_request(const DateCommandRequest &value){};
|
312
184
|
#endif
|
313
|
-
|
314
|
-
bool send_list_entities_time_response(const ListEntitiesTimeResponse &msg);
|
315
|
-
#endif
|
316
|
-
#ifdef USE_DATETIME_TIME
|
317
|
-
bool send_time_state_response(const TimeStateResponse &msg);
|
318
|
-
#endif
|
185
|
+
|
319
186
|
#ifdef USE_DATETIME_TIME
|
320
187
|
virtual void on_time_command_request(const TimeCommandRequest &value){};
|
321
188
|
#endif
|
322
|
-
|
323
|
-
bool send_list_entities_event_response(const ListEntitiesEventResponse &msg);
|
324
|
-
#endif
|
325
|
-
#ifdef USE_EVENT
|
326
|
-
bool send_event_response(const EventResponse &msg);
|
327
|
-
#endif
|
328
|
-
#ifdef USE_VALVE
|
329
|
-
bool send_list_entities_valve_response(const ListEntitiesValveResponse &msg);
|
330
|
-
#endif
|
331
|
-
#ifdef USE_VALVE
|
332
|
-
bool send_valve_state_response(const ValveStateResponse &msg);
|
333
|
-
#endif
|
189
|
+
|
334
190
|
#ifdef USE_VALVE
|
335
191
|
virtual void on_valve_command_request(const ValveCommandRequest &value){};
|
336
192
|
#endif
|
337
|
-
|
338
|
-
bool send_list_entities_date_time_response(const ListEntitiesDateTimeResponse &msg);
|
339
|
-
#endif
|
340
|
-
#ifdef USE_DATETIME_DATETIME
|
341
|
-
bool send_date_time_state_response(const DateTimeStateResponse &msg);
|
342
|
-
#endif
|
193
|
+
|
343
194
|
#ifdef USE_DATETIME_DATETIME
|
344
195
|
virtual void on_date_time_command_request(const DateTimeCommandRequest &value){};
|
345
196
|
#endif
|
346
|
-
|
347
|
-
bool send_list_entities_update_response(const ListEntitiesUpdateResponse &msg);
|
348
|
-
#endif
|
349
|
-
#ifdef USE_UPDATE
|
350
|
-
bool send_update_state_response(const UpdateStateResponse &msg);
|
351
|
-
#endif
|
197
|
+
|
352
198
|
#ifdef USE_UPDATE
|
353
199
|
virtual void on_update_command_request(const UpdateCommandRequest &value){};
|
354
200
|
#endif
|
@@ -24,10 +24,14 @@ static const char *const TAG = "api";
|
|
24
24
|
// APIServer
|
25
25
|
APIServer *global_api_server = nullptr; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
|
26
26
|
|
27
|
-
APIServer::APIServer() {
|
27
|
+
APIServer::APIServer() {
|
28
|
+
global_api_server = this;
|
29
|
+
// Pre-allocate shared write buffer
|
30
|
+
shared_write_buffer_.reserve(64);
|
31
|
+
}
|
28
32
|
|
29
33
|
void APIServer::setup() {
|
30
|
-
ESP_LOGCONFIG(TAG, "
|
34
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
31
35
|
this->setup_controller();
|
32
36
|
|
33
37
|
#ifdef USE_API_NOISE
|
@@ -43,7 +47,7 @@ void APIServer::setup() {
|
|
43
47
|
}
|
44
48
|
#endif
|
45
49
|
|
46
|
-
this->socket_ = socket::
|
50
|
+
this->socket_ = socket::socket_ip_loop_monitored(SOCK_STREAM, 0); // monitored for incoming connections
|
47
51
|
if (this->socket_ == nullptr) {
|
48
52
|
ESP_LOGW(TAG, "Could not create socket");
|
49
53
|
this->mark_failed();
|
@@ -88,6 +92,12 @@ void APIServer::setup() {
|
|
88
92
|
#ifdef USE_LOGGER
|
89
93
|
if (logger::global_logger != nullptr) {
|
90
94
|
logger::global_logger->add_on_log_callback([this](int level, const char *tag, const char *message) {
|
95
|
+
if (this->shutting_down_) {
|
96
|
+
// Don't try to send logs during shutdown
|
97
|
+
// as it could result in a recursion and
|
98
|
+
// we would be filling a buffer we are trying to clear
|
99
|
+
return;
|
100
|
+
}
|
91
101
|
for (auto &c : this->clients_) {
|
92
102
|
if (!c->remove_)
|
93
103
|
c->try_send_log_message(level, tag, message);
|
@@ -112,18 +122,20 @@ void APIServer::setup() {
|
|
112
122
|
}
|
113
123
|
|
114
124
|
void APIServer::loop() {
|
115
|
-
// Accept new clients
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
125
|
+
// Accept new clients only if the socket exists and has incoming connections
|
126
|
+
if (this->socket_ && this->socket_->ready()) {
|
127
|
+
while (true) {
|
128
|
+
struct sockaddr_storage source_addr;
|
129
|
+
socklen_t addr_len = sizeof(source_addr);
|
130
|
+
auto sock = this->socket_->accept_loop_monitored((struct sockaddr *) &source_addr, &addr_len);
|
131
|
+
if (!sock)
|
132
|
+
break;
|
133
|
+
ESP_LOGD(TAG, "Accepted %s", sock->getpeername().c_str());
|
134
|
+
|
135
|
+
auto *conn = new APIConnection(std::move(sock), this);
|
136
|
+
this->clients_.emplace_back(conn);
|
137
|
+
conn->start();
|
138
|
+
}
|
127
139
|
}
|
128
140
|
|
129
141
|
// Process clients and remove disconnected ones in a single pass
|
@@ -155,7 +167,7 @@ void APIServer::loop() {
|
|
155
167
|
const uint32_t now = millis();
|
156
168
|
if (!this->is_connected()) {
|
157
169
|
if (now - this->last_connected_ > this->reboot_timeout_) {
|
158
|
-
ESP_LOGE(TAG, "No client connected
|
170
|
+
ESP_LOGE(TAG, "No client connected; rebooting");
|
159
171
|
App.reboot();
|
160
172
|
}
|
161
173
|
this->status_set_warning();
|
@@ -167,8 +179,10 @@ void APIServer::loop() {
|
|
167
179
|
}
|
168
180
|
|
169
181
|
void APIServer::dump_config() {
|
170
|
-
ESP_LOGCONFIG(TAG,
|
171
|
-
|
182
|
+
ESP_LOGCONFIG(TAG,
|
183
|
+
"API Server:\n"
|
184
|
+
" Address: %s:%u",
|
185
|
+
network::get_use_address().c_str(), this->port_);
|
172
186
|
#ifdef USE_API_NOISE
|
173
187
|
ESP_LOGCONFIG(TAG, " Using noise encryption: %s", YESNO(this->noise_ctx_->has_psk()));
|
174
188
|
if (!this->noise_ctx_->has_psk()) {
|
@@ -217,7 +231,7 @@ void APIServer::on_binary_sensor_update(binary_sensor::BinarySensor *obj, bool s
|
|
217
231
|
if (obj->is_internal())
|
218
232
|
return;
|
219
233
|
for (auto &c : this->clients_)
|
220
|
-
c->send_binary_sensor_state(obj
|
234
|
+
c->send_binary_sensor_state(obj);
|
221
235
|
}
|
222
236
|
#endif
|
223
237
|
|
@@ -253,7 +267,7 @@ void APIServer::on_sensor_update(sensor::Sensor *obj, float state) {
|
|
253
267
|
if (obj->is_internal())
|
254
268
|
return;
|
255
269
|
for (auto &c : this->clients_)
|
256
|
-
c->send_sensor_state(obj
|
270
|
+
c->send_sensor_state(obj);
|
257
271
|
}
|
258
272
|
#endif
|
259
273
|
|
@@ -262,7 +276,7 @@ void APIServer::on_switch_update(switch_::Switch *obj, bool state) {
|
|
262
276
|
if (obj->is_internal())
|
263
277
|
return;
|
264
278
|
for (auto &c : this->clients_)
|
265
|
-
c->send_switch_state(obj
|
279
|
+
c->send_switch_state(obj);
|
266
280
|
}
|
267
281
|
#endif
|
268
282
|
|
@@ -271,7 +285,7 @@ void APIServer::on_text_sensor_update(text_sensor::TextSensor *obj, const std::s
|
|
271
285
|
if (obj->is_internal())
|
272
286
|
return;
|
273
287
|
for (auto &c : this->clients_)
|
274
|
-
c->send_text_sensor_state(obj
|
288
|
+
c->send_text_sensor_state(obj);
|
275
289
|
}
|
276
290
|
#endif
|
277
291
|
|
@@ -289,7 +303,7 @@ void APIServer::on_number_update(number::Number *obj, float state) {
|
|
289
303
|
if (obj->is_internal())
|
290
304
|
return;
|
291
305
|
for (auto &c : this->clients_)
|
292
|
-
c->send_number_state(obj
|
306
|
+
c->send_number_state(obj);
|
293
307
|
}
|
294
308
|
#endif
|
295
309
|
|
@@ -325,7 +339,7 @@ void APIServer::on_text_update(text::Text *obj, const std::string &state) {
|
|
325
339
|
if (obj->is_internal())
|
326
340
|
return;
|
327
341
|
for (auto &c : this->clients_)
|
328
|
-
c->send_text_state(obj
|
342
|
+
c->send_text_state(obj);
|
329
343
|
}
|
330
344
|
#endif
|
331
345
|
|
@@ -334,7 +348,7 @@ void APIServer::on_select_update(select::Select *obj, const std::string &state,
|
|
334
348
|
if (obj->is_internal())
|
335
349
|
return;
|
336
350
|
for (auto &c : this->clients_)
|
337
|
-
c->send_select_state(obj
|
351
|
+
c->send_select_state(obj);
|
338
352
|
}
|
339
353
|
#endif
|
340
354
|
|
@@ -343,7 +357,7 @@ void APIServer::on_lock_update(lock::Lock *obj) {
|
|
343
357
|
if (obj->is_internal())
|
344
358
|
return;
|
345
359
|
for (auto &c : this->clients_)
|
346
|
-
c->send_lock_state(obj
|
360
|
+
c->send_lock_state(obj);
|
347
361
|
}
|
348
362
|
#endif
|
349
363
|
|
@@ -394,6 +408,8 @@ void APIServer::set_port(uint16_t port) { this->port_ = port; }
|
|
394
408
|
|
395
409
|
void APIServer::set_password(const std::string &password) { this->password_ = password; }
|
396
410
|
|
411
|
+
void APIServer::set_batch_delay(uint32_t batch_delay) { this->batch_delay_ = batch_delay; }
|
412
|
+
|
397
413
|
void APIServer::send_homeassistant_service_call(const HomeassistantServiceResponse &call) {
|
398
414
|
for (auto &client : this->clients_) {
|
399
415
|
client->send_homeassistant_service_call(call);
|
@@ -452,7 +468,7 @@ bool APIServer::save_noise_psk(psk_t psk, bool make_active) {
|
|
452
468
|
ESP_LOGW(TAG, "Disconnecting all clients to reset connections");
|
453
469
|
this->set_noise_psk(psk);
|
454
470
|
for (auto &c : this->clients_) {
|
455
|
-
c->
|
471
|
+
c->send_message(DisconnectRequest());
|
456
472
|
}
|
457
473
|
});
|
458
474
|
}
|
@@ -472,10 +488,36 @@ void APIServer::request_time() {
|
|
472
488
|
bool APIServer::is_connected() const { return !this->clients_.empty(); }
|
473
489
|
|
474
490
|
void APIServer::on_shutdown() {
|
491
|
+
this->shutting_down_ = true;
|
492
|
+
|
493
|
+
// Close the listening socket to prevent new connections
|
494
|
+
if (this->socket_) {
|
495
|
+
this->socket_->close();
|
496
|
+
this->socket_ = nullptr;
|
497
|
+
}
|
498
|
+
|
499
|
+
// Change batch delay to 5ms for quick flushing during shutdown
|
500
|
+
this->batch_delay_ = 5;
|
501
|
+
|
502
|
+
// Send disconnect requests to all connected clients
|
475
503
|
for (auto &c : this->clients_) {
|
476
|
-
c->
|
504
|
+
if (!c->send_message(DisconnectRequest())) {
|
505
|
+
// If we can't send the disconnect request directly (tx_buffer full),
|
506
|
+
// schedule it in the batch so it will be sent with the 5ms timer
|
507
|
+
c->schedule_message_(nullptr, &APIConnection::try_send_disconnect_request, DisconnectRequest::MESSAGE_TYPE);
|
508
|
+
}
|
477
509
|
}
|
478
|
-
|
510
|
+
}
|
511
|
+
|
512
|
+
bool APIServer::teardown() {
|
513
|
+
// If network is disconnected, no point trying to flush buffers
|
514
|
+
if (!network::is_connected()) {
|
515
|
+
return true;
|
516
|
+
}
|
517
|
+
this->loop();
|
518
|
+
|
519
|
+
// Return true only when all clients have been torn down
|
520
|
+
return this->clients_.empty();
|
479
521
|
}
|
480
522
|
|
481
523
|
} // namespace api
|
@@ -34,11 +34,17 @@ class APIServer : public Component, public Controller {
|
|
34
34
|
void loop() override;
|
35
35
|
void dump_config() override;
|
36
36
|
void on_shutdown() override;
|
37
|
+
bool teardown() override;
|
37
38
|
bool check_password(const std::string &password) const;
|
38
39
|
bool uses_password() const;
|
39
40
|
void set_port(uint16_t port);
|
40
41
|
void set_password(const std::string &password);
|
41
42
|
void set_reboot_timeout(uint32_t reboot_timeout);
|
43
|
+
void set_batch_delay(uint32_t batch_delay);
|
44
|
+
uint32_t get_batch_delay() const { return batch_delay_; }
|
45
|
+
|
46
|
+
// Get reference to shared buffer for API connections
|
47
|
+
std::vector<uint8_t> &get_shared_buffer_ref() { return shared_write_buffer_; }
|
42
48
|
|
43
49
|
#ifdef USE_API_NOISE
|
44
50
|
bool save_noise_psk(psk_t psk, bool make_active = true);
|
@@ -136,12 +142,15 @@ class APIServer : public Component, public Controller {
|
|
136
142
|
}
|
137
143
|
|
138
144
|
protected:
|
145
|
+
bool shutting_down_ = false;
|
139
146
|
std::unique_ptr<socket::Socket> socket_ = nullptr;
|
140
147
|
uint16_t port_{6053};
|
141
148
|
uint32_t reboot_timeout_{300000};
|
149
|
+
uint32_t batch_delay_{100};
|
142
150
|
uint32_t last_connected_{0};
|
143
151
|
std::vector<std::unique_ptr<APIConnection>> clients_;
|
144
152
|
std::string password_;
|
153
|
+
std::vector<uint8_t> shared_write_buffer_; // Shared proto write buffer for all connections
|
145
154
|
std::vector<HomeAssistantStateSubscription> state_subs_;
|
146
155
|
std::vector<UserServiceDescriptor *> user_services_;
|
147
156
|
Trigger<std::string, std::string> *client_connected_trigger_ = new Trigger<std::string, std::string>();
|
esphome/components/api/client.py
CHANGED
@@ -5,7 +5,7 @@ from datetime import datetime
|
|
5
5
|
import logging
|
6
6
|
from typing import TYPE_CHECKING, Any
|
7
7
|
|
8
|
-
from aioesphomeapi import APIClient
|
8
|
+
from aioesphomeapi import APIClient, parse_log_message
|
9
9
|
from aioesphomeapi.log_runner import async_run
|
10
10
|
|
11
11
|
from esphome.const import CONF_KEY, CONF_PASSWORD, CONF_PORT, __version__
|
@@ -46,9 +46,10 @@ async def async_run_logs(config: dict[str, Any], address: str) -> None:
|
|
46
46
|
time_ = datetime.now()
|
47
47
|
message: bytes = msg.message
|
48
48
|
text = message.decode("utf8", "backslashreplace")
|
49
|
-
|
50
|
-
text
|
51
|
-
|
49
|
+
for parsed_msg in parse_log_message(
|
50
|
+
text, f"[{time_.hour:02}:{time_.minute:02}:{time_.second:02}]"
|
51
|
+
):
|
52
|
+
print(parsed_msg.replace("\033", "\\033") if dashboard else parsed_msg)
|
52
53
|
|
53
54
|
stop = await async_run(cli, on_log, name=name)
|
54
55
|
try:
|
@@ -73,7 +73,7 @@ bool ListEntitiesIterator::on_end() { return this->client_->send_list_info_done(
|
|
73
73
|
ListEntitiesIterator::ListEntitiesIterator(APIConnection *client) : client_(client) {}
|
74
74
|
bool ListEntitiesIterator::on_service(UserServiceDescriptor *service) {
|
75
75
|
auto resp = service->encode_list_service_response();
|
76
|
-
return this->client_->
|
76
|
+
return this->client_->send_message(resp);
|
77
77
|
}
|
78
78
|
|
79
79
|
#ifdef USE_ESP32_CAMERA
|