esphome 2025.7.4__py3-none-any.whl → 2025.8.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 +189 -82
- esphome/automation.py +2 -4
- esphome/build_gen/__init__.py +0 -0
- esphome/build_gen/platformio.py +102 -0
- esphome/components/a4988/a4988.cpp +0 -1
- esphome/components/absolute_humidity/absolute_humidity.cpp +0 -2
- esphome/components/absolute_humidity/sensor.py +2 -2
- esphome/components/adc/__init__.py +123 -85
- esphome/components/adc/adc_sensor.h +98 -35
- esphome/components/adc/adc_sensor_common.cpp +10 -4
- esphome/components/adc/adc_sensor_esp32.cpp +291 -123
- esphome/components/adc/adc_sensor_esp8266.cpp +1 -4
- esphome/components/adc/adc_sensor_libretiny.cpp +1 -2
- esphome/components/adc/adc_sensor_rp2040.cpp +1 -2
- esphome/components/adc/adc_sensor_zephyr.cpp +207 -0
- esphome/components/adc/sensor.py +61 -27
- esphome/components/adc128s102/adc128s102.cpp +1 -4
- esphome/components/ade7880/sensor.py +75 -49
- esphome/components/ads1115/ads1115.cpp +0 -1
- esphome/components/ads1118/ads1118.cpp +0 -1
- esphome/components/ags10/ags10.cpp +0 -4
- esphome/components/aht10/aht10.cpp +0 -4
- esphome/components/aic3204/aic3204.cpp +0 -2
- esphome/components/airthings_wave_plus/__init__.py +1 -1
- esphome/components/airthings_wave_plus/airthings_wave_plus.cpp +22 -4
- esphome/components/airthings_wave_plus/airthings_wave_plus.h +10 -1
- esphome/components/airthings_wave_plus/sensor.py +55 -28
- esphome/components/alarm_control_panel/__init__.py +4 -9
- esphome/components/am2315c/am2315c.cpp +0 -2
- esphome/components/am2320/am2320.cpp +0 -1
- esphome/components/animation/__init__.py +14 -11
- esphome/components/apds9306/apds9306.cpp +0 -4
- esphome/components/apds9960/apds9960.cpp +0 -1
- esphome/components/api/__init__.py +29 -4
- esphome/components/api/api_connection.cpp +378 -401
- esphome/components/api/api_connection.h +112 -56
- esphome/components/api/api_frame_helper.cpp +69 -896
- esphome/components/api/api_frame_helper.h +31 -126
- esphome/components/api/api_frame_helper_noise.cpp +583 -0
- esphome/components/api/api_frame_helper_noise.h +68 -0
- esphome/components/api/api_frame_helper_plaintext.cpp +290 -0
- esphome/components/api/api_frame_helper_plaintext.h +53 -0
- esphome/components/api/api_noise_context.h +2 -4
- esphome/components/api/api_pb2.cpp +1601 -1808
- esphome/components/api/api_pb2.h +367 -323
- esphome/components/api/api_pb2_dump.cpp +1137 -3466
- esphome/components/api/api_pb2_includes.h +34 -0
- esphome/components/api/api_pb2_service.cpp +94 -105
- esphome/components/api/api_pb2_service.h +27 -16
- esphome/components/api/api_server.cpp +18 -17
- esphome/components/api/api_server.h +8 -5
- esphome/components/api/client.py +16 -8
- esphome/components/api/custom_api_device.h +68 -14
- esphome/components/api/homeassistant_service.h +24 -19
- esphome/components/api/list_entities.cpp +3 -5
- esphome/components/api/list_entities.h +2 -4
- esphome/components/api/proto.cpp +3 -5
- esphome/components/api/proto.h +239 -274
- esphome/components/api/subscribe_state.cpp +2 -4
- esphome/components/api/subscribe_state.h +2 -4
- esphome/components/api/user_services.cpp +2 -4
- esphome/components/api/user_services.h +8 -8
- esphome/components/as3935/as3935.cpp +0 -2
- esphome/components/as3935_spi/as3935_spi.cpp +0 -2
- esphome/components/as5600/__init__.py +1 -1
- esphome/components/as5600/as5600.cpp +0 -2
- esphome/components/as5600/sensor/__init__.py +0 -1
- esphome/components/as7341/as7341.cpp +0 -1
- esphome/components/async_tcp/__init__.py +1 -1
- esphome/components/at581x/at581x.cpp +1 -1
- esphome/components/atm90e26/atm90e26.cpp +0 -1
- esphome/components/atm90e32/atm90e32.cpp +488 -118
- esphome/components/atm90e32/atm90e32.h +44 -5
- esphome/components/audio/audio.h +2 -2
- esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +0 -2
- esphome/components/beken_spi_led_strip/led_strip.cpp +0 -2
- esphome/components/bh1750/bh1750.cpp +0 -1
- esphome/components/binary_sensor/__init__.py +14 -12
- esphome/components/ble_client/__init__.py +4 -7
- esphome/components/bluetooth_proxy/__init__.py +40 -3
- esphome/components/bluetooth_proxy/bluetooth_connection.cpp +387 -82
- esphome/components/bluetooth_proxy/bluetooth_connection.h +16 -5
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +102 -311
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +30 -14
- esphome/components/bme280_base/bme280_base.cpp +15 -16
- esphome/components/bme680/bme680.cpp +2 -3
- esphome/components/bme680_bsec/bme680_bsec.cpp +0 -2
- esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +0 -2
- esphome/components/bmi160/bmi160.cpp +0 -1
- esphome/components/bmp085/bmp085.cpp +0 -1
- esphome/components/bmp280_base/bmp280_base.cpp +13 -14
- esphome/components/bmp3xx_base/bmp3xx_base.cpp +0 -1
- esphome/components/bmp581/bmp581.cpp +0 -2
- esphome/components/bp1658cj/bp1658cj.cpp +0 -1
- esphome/components/bp5758d/bp5758d.cpp +0 -1
- esphome/components/button/__init__.py +0 -1
- esphome/components/canbus/__init__.py +2 -3
- esphome/components/canbus/canbus.cpp +0 -1
- esphome/components/cap1188/cap1188.cpp +0 -2
- esphome/components/captive_portal/__init__.py +1 -1
- esphome/components/cd74hc4067/cd74hc4067.cpp +0 -2
- esphome/components/ch422g/ch422g.cpp +0 -1
- esphome/components/chsc6x/chsc6x_touchscreen.cpp +0 -3
- esphome/components/climate/__init__.py +0 -1
- esphome/components/climate/climate_traits.h +24 -0
- esphome/components/cm1106/cm1106.cpp +0 -1
- esphome/components/const/__init__.py +6 -0
- esphome/components/cover/__init__.py +0 -1
- esphome/components/cover/cover.cpp +9 -13
- esphome/components/cs5460a/cs5460a.cpp +0 -2
- esphome/components/cse7761/cse7761.cpp +0 -1
- esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +0 -2
- esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +0 -2
- esphome/components/dac7678/dac7678_output.cpp +0 -2
- esphome/components/dallas_temp/dallas_temp.cpp +0 -1
- esphome/components/datetime/__init__.py +0 -2
- esphome/components/debug/__init__.py +15 -1
- esphome/components/debug/debug_zephyr.cpp +281 -0
- esphome/components/debug/sensor.py +2 -1
- esphome/components/deep_sleep/deep_sleep_component.cpp +0 -1
- esphome/components/deep_sleep/deep_sleep_esp32.cpp +20 -1
- esphome/components/dfrobot_sen0395/__init__.py +1 -2
- esphome/components/dht/dht.cpp +0 -1
- esphome/components/dht12/dht12.cpp +0 -1
- esphome/components/display/__init__.py +16 -3
- esphome/components/display_menu_base/__init__.py +1 -1
- esphome/components/dps310/dps310.cpp +0 -2
- esphome/components/ds1307/ds1307.cpp +0 -1
- esphome/components/ds2484/ds2484.cpp +0 -1
- esphome/components/duty_cycle/duty_cycle_sensor.cpp +0 -1
- esphome/components/ee895/ee895.cpp +0 -1
- esphome/components/ektf2232/touchscreen/ektf2232.cpp +0 -1
- esphome/components/emc2101/emc2101.cpp +0 -2
- esphome/components/ens160_base/ens160_base.cpp +0 -2
- esphome/components/ens210/ens210.cpp +0 -1
- esphome/components/es7210/es7210.cpp +0 -2
- esphome/components/es7243e/es7243e.cpp +0 -2
- esphome/components/es8156/es8156.cpp +0 -2
- esphome/components/es8311/es8311.cpp +0 -2
- esphome/components/es8388/es8388.cpp +0 -2
- esphome/components/esp32/__init__.py +199 -58
- esphome/components/esp32/boards.py +17 -0
- esphome/components/esp32/gpio.cpp +0 -1
- esphome/components/esp32/gpio.py +1 -2
- esphome/components/esp32/gpio_esp32_h2.py +2 -7
- esphome/components/esp32/gpio_esp32_p4.py +2 -7
- esphome/components/esp32/post_build.py.script +112 -61
- esphome/components/esp32_ble/__init__.py +40 -2
- esphome/components/esp32_ble/ble.cpp +12 -8
- esphome/components/esp32_ble/ble.h +18 -18
- esphome/components/esp32_ble/ble_advertising.cpp +5 -5
- esphome/components/esp32_ble/ble_advertising.h +7 -5
- esphome/components/esp32_ble/ble_event.h +2 -4
- esphome/components/esp32_ble/ble_scan_result.h +2 -4
- esphome/components/esp32_ble/ble_uuid.cpp +5 -5
- esphome/components/esp32_ble/ble_uuid.h +6 -5
- esphome/components/esp32_ble_beacon/__init__.py +4 -0
- esphome/components/esp32_ble_client/__init__.py +1 -1
- esphome/components/esp32_ble_client/ble_characteristic.cpp +4 -4
- esphome/components/esp32_ble_client/ble_characteristic.h +6 -4
- esphome/components/esp32_ble_client/ble_client_base.cpp +155 -104
- esphome/components/esp32_ble_client/ble_client_base.h +17 -6
- esphome/components/esp32_ble_client/ble_descriptor.h +6 -4
- esphome/components/esp32_ble_client/ble_service.cpp +4 -4
- esphome/components/esp32_ble_client/ble_service.h +6 -4
- esphome/components/esp32_ble_server/__init__.py +15 -12
- esphome/components/esp32_ble_tracker/__init__.py +79 -11
- esphome/components/esp32_ble_tracker/automation.h +4 -4
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +264 -261
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +103 -37
- esphome/components/esp32_camera/__init__.py +13 -1
- esphome/components/esp32_camera/esp32_camera.cpp +7 -2
- esphome/components/esp32_camera/esp32_camera.h +1 -0
- esphome/components/esp32_dac/esp32_dac.cpp +3 -19
- esphome/components/esp32_dac/esp32_dac.h +4 -8
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +1 -6
- esphome/components/esp32_rmt_led_strip/light.py +1 -1
- esphome/components/esp32_touch/__init__.py +2 -3
- esphome/components/esp32_touch/esp32_touch.h +9 -6
- esphome/components/esp32_touch/esp32_touch_common.cpp +2 -0
- esphome/components/esp32_touch/esp32_touch_v1.cpp +7 -9
- esphome/components/esp32_touch/esp32_touch_v2.cpp +10 -6
- esphome/components/esp8266/__init__.py +3 -1
- esphome/components/esp8266_pwm/esp8266_pwm.cpp +0 -1
- esphome/components/esphome/ota/__init__.py +1 -2
- esphome/components/esphome/ota/ota_esphome.cpp +150 -77
- esphome/components/esphome/ota/ota_esphome.h +8 -1
- esphome/components/espnow/__init__.py +309 -0
- esphome/components/espnow/automation.h +175 -0
- esphome/components/espnow/espnow_component.cpp +468 -0
- esphome/components/espnow/espnow_component.h +183 -0
- esphome/components/espnow/espnow_err.h +19 -0
- esphome/components/espnow/espnow_packet.h +166 -0
- esphome/components/ethernet/__init__.py +7 -1
- esphome/components/ethernet/esp_eth_phy_jl1101.c +5 -0
- esphome/components/ethernet/ethernet_component.cpp +0 -1
- esphome/components/ethernet/ethernet_component.h +4 -0
- esphome/components/ethernet_info/ethernet_info_text_sensor.h +0 -3
- esphome/components/event/__init__.py +0 -1
- esphome/components/factory_reset/__init__.py +92 -0
- esphome/components/factory_reset/factory_reset.cpp +76 -0
- esphome/components/factory_reset/factory_reset.h +43 -0
- esphome/components/fan/__init__.py +0 -1
- esphome/components/fan/fan_traits.h +16 -0
- esphome/components/fastled_base/fastled_light.cpp +0 -1
- esphome/components/fastled_spi/light.py +1 -3
- esphome/components/fingerprint_grow/fingerprint_grow.cpp +0 -2
- esphome/components/font/__init__.py +9 -1
- esphome/components/fs3000/fs3000.cpp +0 -2
- esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +0 -2
- esphome/components/ft63x6/ft63x6.cpp +0 -1
- esphome/components/gdk101/gdk101.cpp +0 -1
- esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +0 -1
- esphome/components/gl_r01_i2c/sensor.py +1 -1
- esphome/components/gpio/one_wire/gpio_one_wire.cpp +0 -1
- esphome/components/gpio/switch/gpio_switch.cpp +0 -2
- esphome/components/gpio_expander/cached_gpio.h +24 -15
- esphome/components/gps/__init__.py +6 -2
- esphome/components/gps/gps.cpp +50 -49
- esphome/components/gps/gps.h +4 -8
- esphome/components/gps/time/gps_time.cpp +3 -9
- esphome/components/gps/time/gps_time.h +4 -7
- esphome/components/graph/__init__.py +1 -1
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +0 -1
- esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +0 -1
- esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +21 -12
- esphome/components/gt911/touchscreen/gt911_touchscreen.h +26 -2
- esphome/components/haier/climate.py +5 -10
- esphome/components/haier/haier_base.cpp +0 -1
- esphome/components/hbridge/switch/hbridge_switch.cpp +0 -2
- esphome/components/hdc1080/hdc1080.cpp +0 -2
- esphome/components/heatpumpir/climate.py +2 -2
- esphome/components/hlw8012/hlw8012.cpp +0 -1
- esphome/components/hm3301/hm3301.cpp +0 -1
- esphome/components/hmc5883l/hmc5883l.cpp +0 -1
- esphome/components/homeassistant/__init__.py +1 -0
- esphome/components/homeassistant/number/__init__.py +1 -0
- esphome/components/homeassistant/number/homeassistant_number.cpp +11 -7
- esphome/components/homeassistant/switch/__init__.py +1 -0
- esphome/components/homeassistant/switch/homeassistant_switch.cpp +9 -5
- esphome/components/honeywellabp/honeywellabp.cpp +1 -4
- esphome/components/host/__init__.py +2 -0
- esphome/components/hte501/hte501.cpp +0 -1
- esphome/components/http_request/__init__.py +2 -3
- esphome/components/http_request/http_request_idf.cpp +2 -2
- esphome/components/htu21d/htu21d.cpp +0 -2
- esphome/components/htu31d/htu31d.cpp +0 -2
- esphome/components/hx711/hx711.cpp +0 -1
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +0 -1
- esphome/components/hydreon_rgxx/sensor.py +4 -5
- esphome/components/i2c/i2c_bus.h +1 -1
- esphome/components/i2c/i2c_bus_arduino.cpp +1 -2
- esphome/components/i2c/i2c_bus_esp_idf.cpp +192 -17
- esphome/components/i2c/i2c_bus_esp_idf.h +11 -1
- esphome/components/i2s_audio/__init__.py +6 -5
- esphome/components/i2s_audio/i2s_audio.cpp +0 -2
- esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +1 -4
- esphome/components/i2s_audio/microphone/__init__.py +4 -6
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +46 -19
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +4 -3
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +273 -269
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +19 -34
- esphome/components/ili9xxx/display.py +4 -3
- esphome/components/ili9xxx/ili9xxx_display.cpp +0 -2
- esphome/components/image/__init__.py +123 -92
- esphome/components/improv_serial/__init__.py +7 -8
- esphome/components/ina219/ina219.cpp +0 -1
- esphome/components/ina226/ina226.cpp +0 -2
- esphome/components/ina260/ina260.cpp +0 -2
- esphome/components/ina2xx_base/__init__.py +2 -5
- esphome/components/ina2xx_base/ina2xx_base.cpp +0 -2
- esphome/components/ina3221/ina3221.cpp +0 -1
- esphome/components/internal_temperature/internal_temperature.cpp +0 -2
- esphome/components/interval/interval.h +5 -9
- esphome/components/json/__init__.py +1 -1
- esphome/components/kmeteriso/kmeteriso.cpp +0 -2
- esphome/components/lc709203f/lc709203f.cpp +0 -2
- esphome/components/lcd_gpio/display.py +1 -3
- esphome/components/lcd_gpio/gpio_lcd_display.cpp +0 -1
- esphome/components/lcd_pcf8574/pcf8574_display.cpp +0 -1
- esphome/components/ld2410/__init__.py +4 -6
- esphome/components/ld2410/binary_sensor.py +4 -0
- esphome/components/ld2410/ld2410.cpp +56 -100
- esphome/components/ld2410/ld2410.h +17 -15
- esphome/components/ld2410/sensor.py +24 -10
- esphome/components/ld2412/__init__.py +46 -0
- esphome/components/ld2412/binary_sensor.py +70 -0
- esphome/components/ld2412/button/__init__.py +74 -0
- esphome/components/ld2412/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2412/button/factory_reset_button.h +18 -0
- esphome/components/ld2412/button/query_button.cpp +9 -0
- esphome/components/ld2412/button/query_button.h +18 -0
- esphome/components/ld2412/button/restart_button.cpp +9 -0
- esphome/components/ld2412/button/restart_button.h +18 -0
- esphome/components/ld2412/button/start_dynamic_background_correction_button.cpp +11 -0
- esphome/components/ld2412/button/start_dynamic_background_correction_button.h +18 -0
- esphome/components/ld2412/ld2412.cpp +861 -0
- esphome/components/ld2412/ld2412.h +141 -0
- esphome/components/ld2412/number/__init__.py +126 -0
- esphome/components/ld2412/number/gate_threshold_number.cpp +14 -0
- esphome/components/ld2412/number/gate_threshold_number.h +19 -0
- esphome/components/ld2412/number/light_threshold_number.cpp +12 -0
- esphome/components/ld2412/number/light_threshold_number.h +18 -0
- esphome/components/ld2412/number/max_distance_timeout_number.cpp +12 -0
- esphome/components/ld2412/number/max_distance_timeout_number.h +18 -0
- esphome/components/ld2412/select/__init__.py +82 -0
- esphome/components/ld2412/select/baud_rate_select.cpp +12 -0
- esphome/components/ld2412/select/baud_rate_select.h +18 -0
- esphome/components/ld2412/select/distance_resolution_select.cpp +12 -0
- esphome/components/ld2412/select/distance_resolution_select.h +18 -0
- esphome/components/ld2412/select/light_out_control_select.cpp +12 -0
- esphome/components/ld2412/select/light_out_control_select.h +18 -0
- esphome/components/ld2412/sensor.py +124 -0
- esphome/components/ld2412/switch/__init__.py +45 -0
- esphome/components/ld2412/switch/bluetooth_switch.cpp +12 -0
- esphome/components/ld2412/switch/bluetooth_switch.h +18 -0
- esphome/components/ld2412/switch/engineering_mode_switch.cpp +12 -0
- esphome/components/ld2412/switch/engineering_mode_switch.h +18 -0
- esphome/components/ld2412/text_sensor.py +34 -0
- esphome/components/ld2420/ld2420.cpp +0 -1
- esphome/components/ld2450/__init__.py +3 -4
- esphome/components/ld2450/binary_sensor.py +3 -0
- esphome/components/ld2450/ld2450.cpp +77 -165
- esphome/components/ld2450/ld2450.h +26 -54
- esphome/components/ld2450/sensor.py +120 -6
- esphome/components/ld2450/text_sensor.py +5 -4
- esphome/components/ld24xx/__init__.py +1 -0
- esphome/components/ld24xx/ld24xx.h +65 -0
- esphome/components/ledc/ledc_output.cpp +0 -1
- esphome/components/libretiny/__init__.py +2 -0
- esphome/components/light/__init__.py +0 -1
- esphome/components/light/effects.py +70 -45
- esphome/components/light/light_call.cpp +101 -66
- esphome/components/light/light_color_values.h +16 -11
- esphome/components/light/light_json_schema.cpp +46 -44
- esphome/components/light/light_state.cpp +8 -11
- esphome/components/light/light_traits.h +17 -0
- esphome/components/lightwaverf/lightwaverf.cpp +0 -2
- esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +0 -1
- esphome/components/lock/__init__.py +0 -1
- esphome/components/logger/__init__.py +31 -9
- esphome/components/logger/logger.cpp +12 -7
- esphome/components/logger/logger.h +25 -14
- esphome/components/logger/logger_esp32.cpp +2 -7
- esphome/components/logger/logger_esp8266.cpp +2 -4
- esphome/components/logger/logger_host.cpp +2 -4
- esphome/components/logger/logger_libretiny.cpp +2 -4
- esphome/components/logger/logger_rp2040.cpp +2 -4
- esphome/components/logger/logger_zephyr.cpp +86 -0
- esphome/components/logger/select/logger_level_select.cpp +2 -4
- esphome/components/logger/select/logger_level_select.h +2 -4
- esphome/components/logger/task_log_buffer.cpp +2 -4
- esphome/components/logger/task_log_buffer.h +2 -4
- esphome/components/lps22/sensor.py +5 -5
- esphome/components/ltr390/ltr390.cpp +0 -2
- esphome/components/ltr501/ltr501.cpp +0 -1
- esphome/components/ltr_als_ps/ltr_als_ps.cpp +0 -1
- esphome/components/lvgl/__init__.py +14 -13
- esphome/components/lvgl/automation.py +2 -4
- esphome/components/lvgl/defines.py +0 -2
- esphome/components/lvgl/helpers.py +1 -1
- esphome/components/lvgl/lv_validation.py +7 -4
- esphome/components/lvgl/lvgl_esphome.cpp +2 -3
- esphome/components/lvgl/styles.py +2 -2
- esphome/components/lvgl/types.py +1 -1
- esphome/components/lvgl/widgets/__init__.py +2 -2
- esphome/components/lvgl/widgets/arc.py +14 -11
- esphome/components/lvgl/widgets/buttonmatrix.py +1 -1
- esphome/components/lvgl/widgets/qrcode.py +7 -7
- esphome/components/lvgl/widgets/spinner.py +6 -6
- esphome/components/lvgl/widgets/switch.py +2 -2
- esphome/components/lvgl/widgets/tabview.py +3 -3
- esphome/components/lvgl/widgets/tileview.py +15 -7
- esphome/components/m5stack_8angle/m5stack_8angle.cpp +0 -1
- esphome/components/matrix_keypad/__init__.py +4 -3
- esphome/components/max17043/max17043.cpp +0 -2
- esphome/components/max31855/max31855.cpp +1 -4
- esphome/components/max31856/max31856.cpp +0 -4
- esphome/components/max31865/max31865.cpp +0 -1
- esphome/components/max44009/max44009.cpp +0 -1
- esphome/components/max6675/max6675.cpp +1 -4
- esphome/components/max6956/max6956.cpp +0 -1
- esphome/components/max7219/max7219.cpp +0 -1
- esphome/components/max7219digit/display.py +1 -1
- esphome/components/max7219digit/max7219digit.cpp +0 -1
- esphome/components/max9611/max9611.cpp +0 -1
- esphome/components/mcp23008/__init__.py +1 -1
- esphome/components/mcp23008/mcp23008.cpp +0 -1
- esphome/components/mcp23016/mcp23016.cpp +0 -1
- esphome/components/mcp23017/__init__.py +1 -1
- esphome/components/mcp23017/mcp23017.cpp +0 -1
- esphome/components/mcp23s08/__init__.py +1 -1
- esphome/components/mcp23s08/mcp23s08.cpp +0 -1
- esphome/components/mcp23s17/__init__.py +1 -1
- esphome/components/mcp23s17/mcp23s17.cpp +0 -1
- esphome/components/mcp23x08_base/__init__.py +2 -0
- esphome/components/mcp23x08_base/mcp23x08_base.cpp +9 -7
- esphome/components/mcp23x08_base/mcp23x08_base.h +9 -4
- esphome/components/mcp23x17_base/__init__.py +2 -0
- esphome/components/mcp23x17_base/mcp23x17_base.cpp +20 -7
- esphome/components/mcp23x17_base/mcp23x17_base.h +9 -4
- esphome/components/mcp23xxx_base/__init__.py +11 -5
- esphome/components/mcp23xxx_base/mcp23xxx_base.cpp +15 -12
- esphome/components/mcp23xxx_base/mcp23xxx_base.h +8 -7
- esphome/components/mcp3008/mcp3008.cpp +1 -4
- esphome/components/mcp3204/mcp3204.cpp +1 -4
- esphome/components/mcp4461/mcp4461.cpp +0 -1
- esphome/components/mcp4725/mcp4725.cpp +0 -1
- esphome/components/mcp4728/mcp4728.cpp +0 -1
- esphome/components/mcp9600/mcp9600.cpp +0 -2
- esphome/components/mcp9808/mcp9808.cpp +0 -2
- esphome/components/mdns/__init__.py +3 -0
- esphome/components/mdns/mdns_component.cpp +2 -0
- esphome/components/mdns/mdns_component.h +4 -0
- esphome/components/media_player/__init__.py +40 -0
- esphome/components/media_player/automation.h +16 -0
- esphome/components/media_player/media_player.cpp +13 -0
- esphome/components/media_player/media_player.h +50 -3
- esphome/components/micro_wake_word/micro_wake_word.cpp +0 -3
- esphome/components/mics_4514/mics_4514.cpp +1 -6
- esphome/components/midea/ir_transmitter.h +4 -4
- esphome/components/mipi/__init__.py +416 -0
- esphome/components/mipi_dsi/__init__.py +5 -0
- esphome/components/mipi_dsi/display.py +233 -0
- esphome/components/mipi_dsi/mipi_dsi.cpp +379 -0
- esphome/components/mipi_dsi/mipi_dsi.h +123 -0
- esphome/components/mipi_dsi/models/__init__.py +0 -0
- esphome/components/mipi_dsi/models/guition.py +38 -0
- esphome/components/mipi_dsi/models/m5stack.py +57 -0
- esphome/components/mipi_dsi/models/waveshare.py +105 -0
- esphome/components/mipi_rgb/models/lilygo.py +0 -0
- esphome/components/mipi_spi/__init__.py +0 -9
- esphome/components/mipi_spi/display.py +220 -256
- esphome/components/mipi_spi/mipi_spi.cpp +1 -485
- esphome/components/mipi_spi/mipi_spi.h +556 -108
- esphome/components/mipi_spi/models/__init__.py +0 -65
- esphome/components/mipi_spi/models/adafruit.py +30 -0
- esphome/components/mipi_spi/models/amoled.py +41 -5
- esphome/components/mipi_spi/models/ili.py +5 -5
- esphome/components/mipi_spi/models/jc.py +1 -3
- esphome/components/mipi_spi/models/lilygo.py +1 -1
- esphome/components/mipi_spi/models/waveshare.py +16 -1
- esphome/components/mixer/speaker/__init__.py +4 -5
- esphome/components/mlx90393/sensor.py +7 -5
- esphome/components/mlx90393/sensor_mlx90393.cpp +0 -1
- esphome/components/mlx90614/mlx90614.cpp +0 -1
- esphome/components/mmc5603/mmc5603.cpp +0 -1
- esphome/components/mmc5983/mmc5983.cpp +0 -2
- esphome/components/mpl3115a2/mpl3115a2.cpp +0 -2
- esphome/components/mpr121/__init__.py +7 -6
- esphome/components/mpr121/mpr121.cpp +0 -1
- esphome/components/mpu6050/mpu6050.cpp +0 -1
- esphome/components/mpu6886/mpu6886.cpp +0 -1
- esphome/components/mqtt/__init__.py +1 -2
- esphome/components/mqtt/mqtt_button.cpp +1 -1
- esphome/components/mqtt/mqtt_client.cpp +0 -1
- esphome/components/mqtt/mqtt_component.cpp +8 -14
- esphome/components/mqtt/mqtt_component.h +0 -7
- esphome/components/mqtt/mqtt_sensor.cpp +0 -1
- esphome/components/mqtt/mqtt_sensor.h +0 -1
- esphome/components/mqtt/mqtt_text_sensor.cpp +0 -1
- esphome/components/mqtt/mqtt_text_sensor.h +0 -1
- esphome/components/ms5611/ms5611.cpp +0 -1
- esphome/components/ms8607/ms8607.cpp +0 -1
- esphome/components/msa3xx/msa3xx.cpp +0 -2
- esphome/components/my9231/my9231.cpp +0 -2
- esphome/components/nau7802/nau7802.cpp +0 -1
- esphome/components/neopixelbus/light.py +3 -0
- esphome/components/network/util.cpp +29 -0
- esphome/components/nextion/nextion.cpp +0 -1
- esphome/components/nfc/binary_sensor/{binary_sensor.cpp → nfc_binary_sensor.cpp} +1 -1
- esphome/components/npi19/npi19.cpp +0 -2
- esphome/components/nrf52/__init__.py +223 -0
- esphome/components/nrf52/boards.py +34 -0
- esphome/components/nrf52/const.py +18 -0
- esphome/components/nrf52/gpio.py +79 -0
- esphome/components/number/__init__.py +2 -1
- esphome/components/one_wire/__init__.py +1 -2
- esphome/components/one_wire/one_wire.cpp +0 -2
- esphome/components/one_wire/one_wire.h +0 -2
- esphome/components/opentherm/hub.cpp +0 -1
- esphome/components/opentherm/number/__init__.py +2 -2
- esphome/components/openthread/__init__.py +2 -3
- esphome/components/openthread/openthread.cpp +30 -13
- esphome/components/openthread/openthread.h +3 -0
- esphome/components/openthread/openthread_esp.cpp +3 -1
- esphome/components/opt3001/sensor.py +2 -6
- esphome/components/output/__init__.py +38 -0
- esphome/components/output/automation.h +24 -0
- esphome/components/output/switch/output_switch.cpp +0 -2
- esphome/components/packages/__init__.py +1 -2
- esphome/components/packet_transport/__init__.py +4 -3
- esphome/components/pca6416a/pca6416a.cpp +0 -1
- esphome/components/pca9554/pca9554.cpp +0 -1
- esphome/components/pca9685/pca9685_output.cpp +0 -2
- esphome/components/pcf85063/pcf85063.cpp +0 -1
- esphome/components/pcf8563/pcf8563.cpp +0 -1
- esphome/components/pcf8574/pcf8574.cpp +0 -1
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +0 -1
- esphome/components/pipsolar/sensor/__init__.py +1 -1
- esphome/components/pm2005/pm2005.cpp +0 -1
- esphome/components/pmsa003i/pmsa003i.cpp +0 -2
- esphome/components/pmwcs3/sensor.py +1 -2
- esphome/components/pn532/pn532.cpp +0 -2
- esphome/components/pn532_spi/pn532_spi.cpp +0 -2
- esphome/components/power_supply/power_supply.cpp +7 -10
- esphome/components/power_supply/power_supply.h +1 -1
- esphome/components/psram/__init__.py +2 -1
- esphome/components/pulse_counter/pulse_counter_sensor.cpp +0 -1
- esphome/components/pulse_counter/sensor.py +9 -6
- esphome/components/pylontech/pylontech.cpp +0 -1
- esphome/components/qmc5883l/qmc5883l.cpp +0 -1
- esphome/components/qmp6988/qmp6988.cpp +0 -2
- esphome/components/qspi_dbi/display.py +2 -3
- esphome/components/qspi_dbi/qspi_dbi.cpp +0 -2
- esphome/components/qwiic_pir/binary_sensor.py +2 -3
- esphome/components/qwiic_pir/qwiic_pir.cpp +0 -2
- esphome/components/rc522/rc522.cpp +9 -31
- esphome/components/rc522_spi/rc522_spi.cpp +0 -1
- esphome/components/remote_base/__init__.py +5 -6
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -1
- esphome/components/remote_receiver/remote_receiver_esp8266.cpp +0 -1
- esphome/components/remote_receiver/remote_receiver_libretiny.cpp +0 -1
- esphome/components/remote_transmitter/__init__.py +26 -0
- esphome/components/remote_transmitter/automation.h +18 -0
- esphome/components/remote_transmitter/remote_transmitter.h +2 -1
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -1
- esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +2 -0
- esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +2 -0
- esphome/components/resampler/speaker/__init__.py +4 -5
- esphome/components/rf_bridge/__init__.py +4 -8
- esphome/components/rotary_encoder/rotary_encoder.cpp +0 -2
- esphome/components/rp2040/__init__.py +3 -1
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +0 -2
- esphome/components/rp2040_pio_led_strip/light.py +1 -2
- esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -5
- esphome/components/rpi_dpi_rgb/display.py +13 -15
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -3
- esphome/components/runtime_stats/__init__.py +34 -0
- esphome/components/runtime_stats/runtime_stats.cpp +102 -0
- esphome/components/runtime_stats/runtime_stats.h +132 -0
- esphome/components/scd30/scd30.cpp +0 -2
- esphome/components/scd30/sensor.py +1 -2
- esphome/components/scd4x/scd4x.cpp +0 -1
- esphome/components/scd4x/sensor.py +1 -3
- esphome/components/sdl/display.py +3 -1
- esphome/components/sdl/sdl_esphome.cpp +0 -2
- esphome/components/sdp3x/sdp3x.cpp +0 -2
- esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +0 -2
- esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +0 -3
- esphome/components/select/__init__.py +2 -3
- esphome/components/select/select_traits.cpp +1 -1
- esphome/components/select/select_traits.h +1 -1
- esphome/components/sen0321/sen0321.cpp +0 -1
- esphome/components/sen5x/sen5x.cpp +0 -2
- esphome/components/sensor/__init__.py +36 -4
- esphome/components/sensor/filter.cpp +49 -10
- esphome/components/sensor/filter.h +22 -7
- esphome/components/sensor/sensor.cpp +0 -1
- esphome/components/sensor/sensor.h +0 -9
- esphome/components/sfa30/sfa30.cpp +0 -4
- esphome/components/sgp30/sgp30.cpp +0 -2
- esphome/components/sgp4x/sensor.py +1 -1
- esphome/components/sgp4x/sgp4x.cpp +0 -2
- esphome/components/shelly_dimmer/shelly_dimmer.cpp +0 -2
- esphome/components/sht3xd/sht3xd.cpp +0 -2
- esphome/components/sht4x/sht4x.cpp +0 -2
- esphome/components/shtcx/shtcx.cpp +0 -1
- esphome/components/sim800l/__init__.py +2 -4
- esphome/components/sm16716/sm16716.cpp +0 -1
- esphome/components/sm2135/sm2135.cpp +0 -1
- esphome/components/sm2235/sm2235.cpp +0 -1
- esphome/components/sm2335/sm2335.cpp +0 -1
- esphome/components/sn74hc165/sn74hc165.cpp +0 -1
- esphome/components/sn74hc595/sn74hc595.cpp +0 -1
- esphome/components/sntp/sntp_component.cpp +0 -1
- esphome/components/sound_level/sensor.py +1 -1
- esphome/components/speaker/media_player/__init__.py +21 -33
- esphome/components/speaker/media_player/audio_pipeline.cpp +4 -7
- esphome/components/spi/__init__.py +29 -13
- esphome/components/spi/spi.cpp +0 -2
- esphome/components/spi_device/spi_device.cpp +1 -4
- esphome/components/sprinkler/__init__.py +4 -4
- esphome/components/sps30/sps30.cpp +0 -1
- esphome/components/ssd1306_base/__init__.py +11 -11
- esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
- esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +0 -1
- esphome/components/ssd1306_spi/ssd1306_spi.cpp +0 -1
- esphome/components/ssd1322_spi/ssd1322_spi.cpp +0 -1
- esphome/components/ssd1325_spi/ssd1325_spi.cpp +0 -1
- esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +0 -1
- esphome/components/ssd1327_spi/ssd1327_spi.cpp +0 -1
- esphome/components/ssd1331_spi/ssd1331_spi.cpp +0 -1
- esphome/components/ssd1351_spi/ssd1351_spi.cpp +0 -1
- esphome/components/st7567_i2c/st7567_i2c.cpp +0 -1
- esphome/components/st7567_spi/st7567_spi.cpp +0 -1
- esphome/components/st7701s/display.py +10 -14
- esphome/components/st7701s/st7701s.cpp +0 -3
- esphome/components/st7735/st7735.cpp +0 -1
- esphome/components/st7789v/st7789v.cpp +0 -1
- esphome/components/st7920/st7920.cpp +0 -1
- esphome/components/status_led/light/status_led_light.cpp +0 -2
- esphome/components/status_led/status_led.cpp +0 -1
- esphome/components/stepper/__init__.py +2 -4
- esphome/components/sts3x/sts3x.cpp +0 -1
- esphome/components/substitutions/__init__.py +10 -16
- esphome/components/substitutions/jinja.py +24 -1
- esphome/components/sun/__init__.py +2 -3
- esphome/components/switch/__init__.py +31 -1
- esphome/components/switch/automation.h +24 -0
- esphome/components/switch/switch.cpp +8 -0
- esphome/components/switch/switch.h +8 -0
- esphome/components/sx126x/sx126x.cpp +0 -2
- esphome/components/sx127x/sx127x.cpp +0 -2
- esphome/components/sx1509/__init__.py +7 -5
- esphome/components/sx1509/output/sx1509_float_output.cpp +1 -1
- esphome/components/sx1509/sx1509.cpp +0 -2
- esphome/components/syslog/esphome_syslog.cpp +1 -1
- esphome/components/tc74/tc74.cpp +0 -1
- esphome/components/tca9548a/tca9548a.cpp +0 -1
- esphome/components/tca9555/tca9555.cpp +0 -1
- esphome/components/tcs34725/tcs34725.cpp +0 -1
- esphome/components/tee501/tee501.cpp +0 -1
- esphome/components/tem3200/tem3200.cpp +0 -2
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +0 -1
- esphome/components/template/cover/template_cover.cpp +0 -1
- esphome/components/template/select/template_select.cpp +0 -1
- esphome/components/template/text/template_text.cpp +0 -2
- esphome/components/template/valve/template_valve.cpp +0 -1
- esphome/components/text/__init__.py +0 -1
- esphome/components/text/text_traits.h +2 -0
- esphome/components/text_sensor/__init__.py +2 -1
- esphome/components/text_sensor/text_sensor.cpp +0 -2
- esphome/components/text_sensor/text_sensor.h +0 -8
- esphome/components/thermostat/climate.py +4 -4
- esphome/components/time/__init__.py +7 -4
- esphome/components/time/real_time_clock.cpp +16 -3
- esphome/components/tlc59208f/tlc59208f_output.cpp +0 -2
- esphome/components/tlc5947/tlc5947.cpp +0 -2
- esphome/components/tlc5971/tlc5971.cpp +0 -2
- esphome/components/tm1621/tm1621.cpp +0 -2
- esphome/components/tm1637/tm1637.cpp +0 -2
- esphome/components/tm1638/tm1638.cpp +0 -2
- esphome/components/tm1651/__init__.py +45 -48
- esphome/components/tm1651/tm1651.cpp +213 -47
- esphome/components/tm1651/tm1651.h +37 -32
- esphome/components/tmp117/tmp117.cpp +0 -2
- esphome/components/tsl2561/tsl2561.cpp +0 -1
- esphome/components/tsl2591/tsl2591.cpp +0 -1
- esphome/components/tt21100/touchscreen/tt21100.cpp +0 -2
- esphome/components/ttp229_bsf/ttp229_bsf.cpp +0 -1
- esphome/components/ttp229_lsf/ttp229_lsf.cpp +0 -1
- esphome/components/tuya/climate/__init__.py +9 -10
- esphome/components/tuya/number/__init__.py +8 -6
- esphome/components/tx20/tx20.cpp +0 -1
- esphome/components/uart/uart_component_esp32_arduino.cpp +0 -1
- esphome/components/uart/uart_component_esp8266.cpp +0 -1
- esphome/components/uart/uart_component_esp_idf.cpp +0 -2
- esphome/components/uart/uart_component_libretiny.cpp +0 -2
- esphome/components/uart/uart_component_rp2040.cpp +0 -2
- esphome/components/udp/__init__.py +1 -1
- esphome/components/ufire_ec/sensor.py +1 -2
- esphome/components/ufire_ec/ufire_ec.cpp +0 -2
- esphome/components/ufire_ise/sensor.py +1 -2
- esphome/components/ufire_ise/ufire_ise.cpp +0 -2
- esphome/components/ultrasonic/ultrasonic_sensor.cpp +0 -1
- esphome/components/update/__init__.py +0 -1
- esphome/components/uptime/sensor/uptime_seconds_sensor.cpp +0 -1
- esphome/components/uptime/sensor/uptime_seconds_sensor.h +0 -2
- esphome/components/usb_host/usb_host_client.cpp +0 -1
- esphome/components/usb_host/usb_host_component.cpp +0 -1
- esphome/components/valve/__init__.py +0 -1
- esphome/components/veml3235/veml3235.cpp +0 -3
- esphome/components/veml7700/veml7700.cpp +0 -2
- esphome/components/version/version_text_sensor.cpp +0 -1
- esphome/components/version/version_text_sensor.h +0 -1
- esphome/components/vl53l0x/vl53l0x_sensor.cpp +0 -4
- esphome/components/voice_assistant/voice_assistant.cpp +9 -8
- esphome/components/web_server/__init__.py +13 -0
- esphome/components/web_server/web_server.cpp +187 -352
- esphome/components/web_server/web_server.h +61 -1
- esphome/components/web_server_base/__init__.py +1 -1
- esphome/components/web_server_base/web_server_base.cpp +2 -0
- esphome/components/web_server_base/web_server_base.h +6 -0
- esphome/components/web_server_idf/web_server_idf.cpp +10 -8
- esphome/components/web_server_idf/web_server_idf.h +2 -0
- esphome/components/weikai_i2c/weikai_i2c.cpp +1 -2
- esphome/components/weikai_spi/weikai_spi.cpp +1 -1
- esphome/components/wifi/__init__.py +8 -43
- esphome/components/wifi/wifi_component.cpp +100 -36
- esphome/components/wifi/wifi_component.h +5 -1
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +30 -0
- esphome/components/wifi/wifi_component_esp_idf.cpp +30 -0
- esphome/components/wifi_info/wifi_info_text_sensor.h +0 -6
- esphome/components/wifi_signal/wifi_signal_sensor.h +0 -1
- esphome/components/wireguard/wireguard.cpp +0 -2
- esphome/components/x9c/x9c.cpp +0 -2
- esphome/components/xgzp68xx/xgzp68xx.cpp +0 -1
- esphome/components/xl9535/xl9535.cpp +0 -2
- esphome/components/zephyr/__init__.py +252 -0
- esphome/components/zephyr/const.py +16 -0
- esphome/components/zephyr/core.cpp +90 -0
- esphome/components/zephyr/gpio.cpp +120 -0
- esphome/components/zephyr/gpio.h +38 -0
- esphome/components/zephyr/pre_build.py.script +4 -0
- esphome/components/zephyr/preferences.cpp +156 -0
- esphome/components/zephyr/preferences.h +13 -0
- esphome/config.py +38 -16
- esphome/config_helpers.py +1 -2
- esphome/config_validation.py +8 -15
- esphome/const.py +26 -1
- esphome/core/__init__.py +88 -51
- esphome/core/application.cpp +75 -21
- esphome/core/application.h +106 -171
- esphome/core/color.h +10 -0
- esphome/core/component.cpp +41 -25
- esphome/core/component.h +9 -6
- esphome/core/component_iterator.cpp +61 -261
- esphome/core/component_iterator.h +15 -0
- esphome/core/config.py +26 -11
- esphome/core/defines.h +40 -2
- esphome/core/entity_base.h +18 -0
- esphome/core/entity_helpers.py +41 -6
- esphome/core/helpers.cpp +8 -15
- esphome/core/helpers.h +60 -6
- esphome/core/lock_free_queue.h +1 -1
- esphome/core/scheduler.cpp +277 -74
- esphome/core/scheduler.h +89 -27
- esphome/cpp_generator.py +2 -6
- esphome/cpp_helpers.py +1 -1
- esphome/dashboard/dashboard.py +2 -3
- esphome/dashboard/dns.py +2 -8
- esphome/dashboard/web_server.py +34 -19
- esphome/espota2.py +1 -4
- esphome/git.py +3 -1
- esphome/helpers.py +23 -4
- esphome/log.py +3 -1
- esphome/mqtt.py +3 -5
- esphome/platformio_api.py +7 -4
- esphome/types.py +12 -0
- esphome/util.py +20 -8
- esphome/voluptuous_schema.py +4 -3
- esphome/vscode.py +1 -2
- esphome/wizard.py +1 -4
- esphome/writer.py +5 -107
- esphome/yaml_util.py +7 -5
- {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/METADATA +12 -13
- {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/RECORD +753 -673
- esphome/components/mipi_spi/models/commands.py +0 -82
- /esphome/components/nfc/binary_sensor/{binary_sensor.h → nfc_binary_sensor.h} +0 -0
- {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/WHEEL +0 -0
- {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/entry_points.txt +0 -0
- {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/top_level.txt +0 -0
|
@@ -41,6 +41,7 @@ from esphome.const import (
|
|
|
41
41
|
CONF_VALUE,
|
|
42
42
|
CONF_WEB_SERVER,
|
|
43
43
|
CONF_WINDOW_SIZE,
|
|
44
|
+
DEVICE_CLASS_ABSOLUTE_HUMIDITY,
|
|
44
45
|
DEVICE_CLASS_APPARENT_POWER,
|
|
45
46
|
DEVICE_CLASS_AQI,
|
|
46
47
|
DEVICE_CLASS_AREA,
|
|
@@ -107,6 +108,7 @@ from esphome.util import Registry
|
|
|
107
108
|
|
|
108
109
|
CODEOWNERS = ["@esphome/core"]
|
|
109
110
|
DEVICE_CLASSES = [
|
|
111
|
+
DEVICE_CLASS_ABSOLUTE_HUMIDITY,
|
|
110
112
|
DEVICE_CLASS_APPARENT_POWER,
|
|
111
113
|
DEVICE_CLASS_AQI,
|
|
112
114
|
DEVICE_CLASS_AREA,
|
|
@@ -254,6 +256,7 @@ OffsetFilter = sensor_ns.class_("OffsetFilter", Filter)
|
|
|
254
256
|
MultiplyFilter = sensor_ns.class_("MultiplyFilter", Filter)
|
|
255
257
|
FilterOutValueFilter = sensor_ns.class_("FilterOutValueFilter", Filter)
|
|
256
258
|
ThrottleFilter = sensor_ns.class_("ThrottleFilter", Filter)
|
|
259
|
+
ThrottleWithPriorityFilter = sensor_ns.class_("ThrottleWithPriorityFilter", Filter)
|
|
257
260
|
TimeoutFilter = sensor_ns.class_("TimeoutFilter", Filter, cg.Component)
|
|
258
261
|
DebounceFilter = sensor_ns.class_("DebounceFilter", Filter, cg.Component)
|
|
259
262
|
HeartbeatFilter = sensor_ns.class_("HeartbeatFilter", Filter, cg.Component)
|
|
@@ -330,6 +333,7 @@ def sensor_schema(
|
|
|
330
333
|
device_class: str = cv.UNDEFINED,
|
|
331
334
|
state_class: str = cv.UNDEFINED,
|
|
332
335
|
entity_category: str = cv.UNDEFINED,
|
|
336
|
+
filters: list = cv.UNDEFINED,
|
|
333
337
|
) -> cv.Schema:
|
|
334
338
|
schema = {}
|
|
335
339
|
|
|
@@ -344,6 +348,7 @@ def sensor_schema(
|
|
|
344
348
|
(CONF_DEVICE_CLASS, device_class, validate_device_class),
|
|
345
349
|
(CONF_STATE_CLASS, state_class, validate_state_class),
|
|
346
350
|
(CONF_ENTITY_CATEGORY, entity_category, sensor_entity_category),
|
|
351
|
+
(CONF_FILTERS, filters, validate_filters),
|
|
347
352
|
]:
|
|
348
353
|
if default is not cv.UNDEFINED:
|
|
349
354
|
schema[cv.Optional(key, default=default)] = validator
|
|
@@ -591,6 +596,29 @@ async def throttle_filter_to_code(config, filter_id):
|
|
|
591
596
|
return cg.new_Pvariable(filter_id, config)
|
|
592
597
|
|
|
593
598
|
|
|
599
|
+
THROTTLE_WITH_PRIORITY_SCHEMA = cv.maybe_simple_value(
|
|
600
|
+
{
|
|
601
|
+
cv.Required(CONF_TIMEOUT): cv.positive_time_period_milliseconds,
|
|
602
|
+
cv.Optional(CONF_VALUE, default="nan"): cv.Any(
|
|
603
|
+
cv.templatable(cv.float_), [cv.templatable(cv.float_)]
|
|
604
|
+
),
|
|
605
|
+
},
|
|
606
|
+
key=CONF_TIMEOUT,
|
|
607
|
+
)
|
|
608
|
+
|
|
609
|
+
|
|
610
|
+
@FILTER_REGISTRY.register(
|
|
611
|
+
"throttle_with_priority",
|
|
612
|
+
ThrottleWithPriorityFilter,
|
|
613
|
+
THROTTLE_WITH_PRIORITY_SCHEMA,
|
|
614
|
+
)
|
|
615
|
+
async def throttle_with_priority_filter_to_code(config, filter_id):
|
|
616
|
+
if not isinstance(config[CONF_VALUE], list):
|
|
617
|
+
config[CONF_VALUE] = [config[CONF_VALUE]]
|
|
618
|
+
template_ = [await cg.templatable(x, [], float) for x in config[CONF_VALUE]]
|
|
619
|
+
return cg.new_Pvariable(filter_id, config[CONF_TIMEOUT], template_)
|
|
620
|
+
|
|
621
|
+
|
|
594
622
|
@FILTER_REGISTRY.register(
|
|
595
623
|
"heartbeat", HeartbeatFilter, cv.positive_time_period_milliseconds
|
|
596
624
|
)
|
|
@@ -603,7 +631,9 @@ async def heartbeat_filter_to_code(config, filter_id):
|
|
|
603
631
|
TIMEOUT_SCHEMA = cv.maybe_simple_value(
|
|
604
632
|
{
|
|
605
633
|
cv.Required(CONF_TIMEOUT): cv.positive_time_period_milliseconds,
|
|
606
|
-
cv.Optional(CONF_VALUE, default="nan"): cv.
|
|
634
|
+
cv.Optional(CONF_VALUE, default="nan"): cv.Any(
|
|
635
|
+
"last", cv.templatable(cv.float_)
|
|
636
|
+
),
|
|
607
637
|
},
|
|
608
638
|
key=CONF_TIMEOUT,
|
|
609
639
|
)
|
|
@@ -611,8 +641,11 @@ TIMEOUT_SCHEMA = cv.maybe_simple_value(
|
|
|
611
641
|
|
|
612
642
|
@FILTER_REGISTRY.register("timeout", TimeoutFilter, TIMEOUT_SCHEMA)
|
|
613
643
|
async def timeout_filter_to_code(config, filter_id):
|
|
614
|
-
|
|
615
|
-
|
|
644
|
+
if config[CONF_VALUE] == "last":
|
|
645
|
+
var = cg.new_Pvariable(filter_id, config[CONF_TIMEOUT])
|
|
646
|
+
else:
|
|
647
|
+
template_ = await cg.templatable(config[CONF_VALUE], [], float)
|
|
648
|
+
var = cg.new_Pvariable(filter_id, config[CONF_TIMEOUT], template_)
|
|
616
649
|
await cg.register_component(var, {})
|
|
617
650
|
return var
|
|
618
651
|
|
|
@@ -1111,5 +1144,4 @@ def _lstsq(a, b):
|
|
|
1111
1144
|
|
|
1112
1145
|
@coroutine_with_priority(100.0)
|
|
1113
1146
|
async def to_code(config):
|
|
1114
|
-
cg.add_define("USE_SENSOR")
|
|
1115
1147
|
cg.add_global(sensor_ns.using)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#include "filter.h"
|
|
2
2
|
#include <cmath>
|
|
3
|
+
#include "esphome/core/application.h"
|
|
3
4
|
#include "esphome/core/hal.h"
|
|
4
5
|
#include "esphome/core/log.h"
|
|
5
6
|
#include "sensor.h"
|
|
@@ -50,6 +51,7 @@ optional<float> MedianFilter::new_value(float value) {
|
|
|
50
51
|
if (!this->queue_.empty()) {
|
|
51
52
|
// Copy queue without NaN values
|
|
52
53
|
std::vector<float> median_queue;
|
|
54
|
+
median_queue.reserve(this->queue_.size());
|
|
53
55
|
for (auto v : this->queue_) {
|
|
54
56
|
if (!std::isnan(v)) {
|
|
55
57
|
median_queue.push_back(v);
|
|
@@ -223,7 +225,7 @@ optional<float> SlidingWindowMovingAverageFilter::new_value(float value) {
|
|
|
223
225
|
|
|
224
226
|
// ExponentialMovingAverageFilter
|
|
225
227
|
ExponentialMovingAverageFilter::ExponentialMovingAverageFilter(float alpha, size_t send_every, size_t send_first_at)
|
|
226
|
-
: send_every_(send_every), send_at_(send_every - send_first_at)
|
|
228
|
+
: alpha_(alpha), send_every_(send_every), send_at_(send_every - send_first_at) {}
|
|
227
229
|
optional<float> ExponentialMovingAverageFilter::new_value(float value) {
|
|
228
230
|
if (!std::isnan(value)) {
|
|
229
231
|
if (this->first_value_) {
|
|
@@ -323,7 +325,7 @@ optional<float> FilterOutValueFilter::new_value(float value) {
|
|
|
323
325
|
// ThrottleFilter
|
|
324
326
|
ThrottleFilter::ThrottleFilter(uint32_t min_time_between_inputs) : min_time_between_inputs_(min_time_between_inputs) {}
|
|
325
327
|
optional<float> ThrottleFilter::new_value(float value) {
|
|
326
|
-
const uint32_t now =
|
|
328
|
+
const uint32_t now = App.get_loop_component_start_time();
|
|
327
329
|
if (this->last_input_ == 0 || now - this->last_input_ >= min_time_between_inputs_) {
|
|
328
330
|
this->last_input_ = now;
|
|
329
331
|
return value;
|
|
@@ -331,21 +333,53 @@ optional<float> ThrottleFilter::new_value(float value) {
|
|
|
331
333
|
return {};
|
|
332
334
|
}
|
|
333
335
|
|
|
336
|
+
// ThrottleWithPriorityFilter
|
|
337
|
+
ThrottleWithPriorityFilter::ThrottleWithPriorityFilter(uint32_t min_time_between_inputs,
|
|
338
|
+
std::vector<TemplatableValue<float>> prioritized_values)
|
|
339
|
+
: min_time_between_inputs_(min_time_between_inputs), prioritized_values_(std::move(prioritized_values)) {}
|
|
340
|
+
|
|
341
|
+
optional<float> ThrottleWithPriorityFilter::new_value(float value) {
|
|
342
|
+
bool is_prioritized_value = false;
|
|
343
|
+
int8_t accuracy = this->parent_->get_accuracy_decimals();
|
|
344
|
+
float accuracy_mult = powf(10.0f, accuracy);
|
|
345
|
+
const uint32_t now = App.get_loop_component_start_time();
|
|
346
|
+
// First, determine if the new value is one of the prioritized values
|
|
347
|
+
for (auto prioritized_value : this->prioritized_values_) {
|
|
348
|
+
if (std::isnan(prioritized_value.value())) {
|
|
349
|
+
if (std::isnan(value)) {
|
|
350
|
+
is_prioritized_value = true;
|
|
351
|
+
break;
|
|
352
|
+
}
|
|
353
|
+
continue;
|
|
354
|
+
}
|
|
355
|
+
float rounded_prioritized_value = roundf(accuracy_mult * prioritized_value.value());
|
|
356
|
+
float rounded_value = roundf(accuracy_mult * value);
|
|
357
|
+
if (rounded_prioritized_value == rounded_value) {
|
|
358
|
+
is_prioritized_value = true;
|
|
359
|
+
break;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
// Finally, determine if the new value should be throttled and pass it through if not
|
|
363
|
+
if (this->last_input_ == 0 || now - this->last_input_ >= min_time_between_inputs_ || is_prioritized_value) {
|
|
364
|
+
this->last_input_ = now;
|
|
365
|
+
return value;
|
|
366
|
+
}
|
|
367
|
+
return {};
|
|
368
|
+
}
|
|
369
|
+
|
|
334
370
|
// DeltaFilter
|
|
335
371
|
DeltaFilter::DeltaFilter(float delta, bool percentage_mode)
|
|
336
|
-
: delta_(delta), current_delta_(delta),
|
|
372
|
+
: delta_(delta), current_delta_(delta), last_value_(NAN), percentage_mode_(percentage_mode) {}
|
|
337
373
|
optional<float> DeltaFilter::new_value(float value) {
|
|
338
374
|
if (std::isnan(value)) {
|
|
339
375
|
if (std::isnan(this->last_value_)) {
|
|
340
376
|
return {};
|
|
341
377
|
} else {
|
|
342
|
-
if (this->percentage_mode_) {
|
|
343
|
-
this->current_delta_ = fabsf(value * this->delta_);
|
|
344
|
-
}
|
|
345
378
|
return this->last_value_ = value;
|
|
346
379
|
}
|
|
347
380
|
}
|
|
348
|
-
|
|
381
|
+
float diff = fabsf(value - this->last_value_);
|
|
382
|
+
if (std::isnan(this->last_value_) || (diff > 0.0f && diff >= this->current_delta_)) {
|
|
349
383
|
if (this->percentage_mode_) {
|
|
350
384
|
this->current_delta_ = fabsf(value * this->delta_);
|
|
351
385
|
}
|
|
@@ -383,12 +417,17 @@ void OrFilter::initialize(Sensor *parent, Filter *next) {
|
|
|
383
417
|
|
|
384
418
|
// TimeoutFilter
|
|
385
419
|
optional<float> TimeoutFilter::new_value(float value) {
|
|
386
|
-
|
|
420
|
+
if (this->value_.has_value()) {
|
|
421
|
+
this->set_timeout("timeout", this->time_period_, [this]() { this->output(this->value_.value().value()); });
|
|
422
|
+
} else {
|
|
423
|
+
this->set_timeout("timeout", this->time_period_, [this, value]() { this->output(value); });
|
|
424
|
+
}
|
|
387
425
|
return value;
|
|
388
426
|
}
|
|
389
427
|
|
|
390
|
-
TimeoutFilter::TimeoutFilter(uint32_t time_period
|
|
391
|
-
|
|
428
|
+
TimeoutFilter::TimeoutFilter(uint32_t time_period) : time_period_(time_period) {}
|
|
429
|
+
TimeoutFilter::TimeoutFilter(uint32_t time_period, const TemplatableValue<float> &new_value)
|
|
430
|
+
: time_period_(time_period), value_(new_value) {}
|
|
392
431
|
float TimeoutFilter::get_setup_priority() const { return setup_priority::HARDWARE; }
|
|
393
432
|
|
|
394
433
|
// DebounceFilter
|
|
@@ -221,11 +221,11 @@ class ExponentialMovingAverageFilter : public Filter {
|
|
|
221
221
|
void set_alpha(float alpha);
|
|
222
222
|
|
|
223
223
|
protected:
|
|
224
|
-
bool first_value_{true};
|
|
225
224
|
float accumulator_{NAN};
|
|
225
|
+
float alpha_;
|
|
226
226
|
size_t send_every_;
|
|
227
227
|
size_t send_at_;
|
|
228
|
-
|
|
228
|
+
bool first_value_{true};
|
|
229
229
|
};
|
|
230
230
|
|
|
231
231
|
/** Simple throttle average filter.
|
|
@@ -243,9 +243,9 @@ class ThrottleAverageFilter : public Filter, public Component {
|
|
|
243
243
|
float get_setup_priority() const override;
|
|
244
244
|
|
|
245
245
|
protected:
|
|
246
|
-
uint32_t time_period_;
|
|
247
246
|
float sum_{0.0f};
|
|
248
247
|
unsigned int n_{0};
|
|
248
|
+
uint32_t time_period_;
|
|
249
249
|
bool have_nan_{false};
|
|
250
250
|
};
|
|
251
251
|
|
|
@@ -314,9 +314,24 @@ class ThrottleFilter : public Filter {
|
|
|
314
314
|
uint32_t min_time_between_inputs_;
|
|
315
315
|
};
|
|
316
316
|
|
|
317
|
+
/// Same as 'throttle' but will immediately publish values contained in `value_to_prioritize`.
|
|
318
|
+
class ThrottleWithPriorityFilter : public Filter {
|
|
319
|
+
public:
|
|
320
|
+
explicit ThrottleWithPriorityFilter(uint32_t min_time_between_inputs,
|
|
321
|
+
std::vector<TemplatableValue<float>> prioritized_values);
|
|
322
|
+
|
|
323
|
+
optional<float> new_value(float value) override;
|
|
324
|
+
|
|
325
|
+
protected:
|
|
326
|
+
uint32_t last_input_{0};
|
|
327
|
+
uint32_t min_time_between_inputs_;
|
|
328
|
+
std::vector<TemplatableValue<float>> prioritized_values_;
|
|
329
|
+
};
|
|
330
|
+
|
|
317
331
|
class TimeoutFilter : public Filter, public Component {
|
|
318
332
|
public:
|
|
319
|
-
explicit TimeoutFilter(uint32_t time_period
|
|
333
|
+
explicit TimeoutFilter(uint32_t time_period);
|
|
334
|
+
explicit TimeoutFilter(uint32_t time_period, const TemplatableValue<float> &new_value);
|
|
320
335
|
|
|
321
336
|
optional<float> new_value(float value) override;
|
|
322
337
|
|
|
@@ -324,7 +339,7 @@ class TimeoutFilter : public Filter, public Component {
|
|
|
324
339
|
|
|
325
340
|
protected:
|
|
326
341
|
uint32_t time_period_;
|
|
327
|
-
TemplatableValue<float
|
|
342
|
+
optional<TemplatableValue<float>> value_;
|
|
328
343
|
};
|
|
329
344
|
|
|
330
345
|
class DebounceFilter : public Filter, public Component {
|
|
@@ -364,8 +379,8 @@ class DeltaFilter : public Filter {
|
|
|
364
379
|
protected:
|
|
365
380
|
float delta_;
|
|
366
381
|
float current_delta_;
|
|
367
|
-
bool percentage_mode_;
|
|
368
382
|
float last_value_{NAN};
|
|
383
|
+
bool percentage_mode_;
|
|
369
384
|
};
|
|
370
385
|
|
|
371
386
|
class OrFilter : public Filter {
|
|
@@ -387,8 +402,8 @@ class OrFilter : public Filter {
|
|
|
387
402
|
};
|
|
388
403
|
|
|
389
404
|
std::vector<Filter *> filters_;
|
|
390
|
-
bool has_value_{false};
|
|
391
405
|
PhiNode phi_;
|
|
406
|
+
bool has_value_{false};
|
|
392
407
|
};
|
|
393
408
|
|
|
394
409
|
class CalibrateLinearFilter : public Filter {
|
|
@@ -96,7 +96,6 @@ void Sensor::clear_filters() {
|
|
|
96
96
|
}
|
|
97
97
|
float Sensor::get_state() const { return this->state; }
|
|
98
98
|
float Sensor::get_raw_state() const { return this->raw_state; }
|
|
99
|
-
std::string Sensor::unique_id() { return ""; }
|
|
100
99
|
|
|
101
100
|
void Sensor::internal_send_state_to_frontend(float state) {
|
|
102
101
|
this->set_has_state(true);
|
|
@@ -28,9 +28,6 @@ namespace sensor {
|
|
|
28
28
|
if (!(obj)->get_icon().empty()) { \
|
|
29
29
|
ESP_LOGCONFIG(TAG, "%s Icon: '%s'", prefix, (obj)->get_icon().c_str()); \
|
|
30
30
|
} \
|
|
31
|
-
if (!(obj)->unique_id().empty()) { \
|
|
32
|
-
ESP_LOGV(TAG, "%s Unique ID: '%s'", prefix, (obj)->unique_id().c_str()); \
|
|
33
|
-
} \
|
|
34
31
|
if ((obj)->get_force_update()) { \
|
|
35
32
|
ESP_LOGV(TAG, "%s Force Update: YES", prefix); \
|
|
36
33
|
} \
|
|
@@ -141,12 +138,6 @@ class Sensor : public EntityBase, public EntityBase_DeviceClass, public EntityBa
|
|
|
141
138
|
*/
|
|
142
139
|
float raw_state;
|
|
143
140
|
|
|
144
|
-
/** Override this method to set the unique ID of this sensor.
|
|
145
|
-
*
|
|
146
|
-
* @deprecated Do not use for new sensors, a suitable unique ID is automatically generated (2023.4).
|
|
147
|
-
*/
|
|
148
|
-
virtual std::string unique_id();
|
|
149
|
-
|
|
150
141
|
void internal_send_state_to_frontend(float state);
|
|
151
142
|
|
|
152
143
|
protected:
|
|
@@ -11,8 +11,6 @@ static const uint16_t SFA30_CMD_START_CONTINUOUS_MEASUREMENTS = 0x0006;
|
|
|
11
11
|
static const uint16_t SFA30_CMD_READ_MEASUREMENT = 0x0327;
|
|
12
12
|
|
|
13
13
|
void SFA30Component::setup() {
|
|
14
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
15
|
-
|
|
16
14
|
// Serial Number identification
|
|
17
15
|
uint16_t raw_device_marking[16];
|
|
18
16
|
if (!this->get_register(SFA30_CMD_GET_DEVICE_MARKING, raw_device_marking, 16, 5)) {
|
|
@@ -34,8 +32,6 @@ void SFA30Component::setup() {
|
|
|
34
32
|
this->mark_failed();
|
|
35
33
|
return;
|
|
36
34
|
}
|
|
37
|
-
|
|
38
|
-
ESP_LOGD(TAG, "Sensor initialized");
|
|
39
35
|
}
|
|
40
36
|
|
|
41
37
|
void SFA30Component::dump_config() {
|
|
@@ -33,8 +33,6 @@ const uint32_t SHORTEST_BASELINE_STORE_INTERVAL = 3600;
|
|
|
33
33
|
const uint32_t MAXIMUM_STORAGE_DIFF = 50;
|
|
34
34
|
|
|
35
35
|
void SGP30Component::setup() {
|
|
36
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
37
|
-
|
|
38
36
|
// Serial Number identification
|
|
39
37
|
uint16_t raw_serial_number[3];
|
|
40
38
|
if (!this->get_register(SGP30_CMD_GET_SERIAL_ID, raw_serial_number, 3)) {
|
|
@@ -9,8 +9,6 @@ namespace sgp4x {
|
|
|
9
9
|
static const char *const TAG = "sgp4x";
|
|
10
10
|
|
|
11
11
|
void SGP4xComponent::setup() {
|
|
12
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
13
|
-
|
|
14
12
|
// Serial Number identification
|
|
15
13
|
uint16_t raw_serial_number[3];
|
|
16
14
|
if (!this->get_register(SGP4X_CMD_GET_SERIAL_ID, raw_serial_number, 3, 1)) {
|
|
@@ -25,7 +25,6 @@ static const uint16_t SHT3XD_COMMAND_POLLING_H = 0x2400;
|
|
|
25
25
|
static const uint16_t SHT3XD_COMMAND_FETCH_DATA = 0xE000;
|
|
26
26
|
|
|
27
27
|
void SHT3XDComponent::setup() {
|
|
28
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
29
28
|
uint16_t raw_serial_number[2];
|
|
30
29
|
if (!this->get_register(SHT3XD_COMMAND_READ_SERIAL_NUMBER_CLOCK_STRETCHING, raw_serial_number, 2)) {
|
|
31
30
|
this->error_code_ = READ_SERIAL_STRETCHED_FAILED;
|
|
@@ -61,7 +60,6 @@ void SHT3XDComponent::dump_config() {
|
|
|
61
60
|
ESP_LOGE(TAG, " Communication with SHT3xD failed!");
|
|
62
61
|
return;
|
|
63
62
|
}
|
|
64
|
-
ESP_LOGD(TAG, " Setup successful");
|
|
65
63
|
ESP_LOGD(TAG, " Serial Number: 0x%08" PRIX32, this->serial_number_);
|
|
66
64
|
ESP_LOGD(TAG, " Heater Enabled: %s", this->heater_enabled_ ? "true" : "false");
|
|
67
65
|
|
|
@@ -171,8 +171,7 @@ async def sim800l_dial_to_code(config, action_id, template_arg, args):
|
|
|
171
171
|
)
|
|
172
172
|
async def sim800l_connect_to_code(config, action_id, template_arg, args):
|
|
173
173
|
paren = await cg.get_variable(config[CONF_ID])
|
|
174
|
-
|
|
175
|
-
return var
|
|
174
|
+
return cg.new_Pvariable(action_id, template_arg, paren)
|
|
176
175
|
|
|
177
176
|
|
|
178
177
|
SIM800L_SEND_USSD_SCHEMA = cv.Schema(
|
|
@@ -201,5 +200,4 @@ async def sim800l_send_ussd_to_code(config, action_id, template_arg, args):
|
|
|
201
200
|
)
|
|
202
201
|
async def sim800l_disconnect_to_code(config, action_id, template_arg, args):
|
|
203
202
|
paren = await cg.get_variable(config[CONF_ID])
|
|
204
|
-
|
|
205
|
-
return var
|
|
203
|
+
return cg.new_Pvariable(action_id, template_arg, paren)
|
|
@@ -20,7 +20,6 @@ static const uint8_t SM2135_RGB = 0x00; // RGB channel
|
|
|
20
20
|
static const uint8_t SM2135_CW = 0x80; // CW channel (Chip default)
|
|
21
21
|
|
|
22
22
|
void SM2135::setup() {
|
|
23
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
24
23
|
this->data_pin_->setup();
|
|
25
24
|
this->data_pin_->digital_write(false);
|
|
26
25
|
this->data_pin_->pin_mode(gpio::FLAG_OUTPUT);
|
|
@@ -155,8 +155,7 @@ def _read_audio_file_and_type(file_config):
|
|
|
155
155
|
import puremagic
|
|
156
156
|
|
|
157
157
|
file_type: str = puremagic.from_string(data)
|
|
158
|
-
|
|
159
|
-
file_type = file_type[1:]
|
|
158
|
+
file_type = file_type.removeprefix(".")
|
|
160
159
|
|
|
161
160
|
media_file_type = audio.AUDIO_FILE_TYPE_ENUM["NONE"]
|
|
162
161
|
if file_type in ("wav"):
|
|
@@ -204,13 +203,14 @@ def _validate_pipeline(config):
|
|
|
204
203
|
|
|
205
204
|
|
|
206
205
|
def _validate_repeated_speaker(config):
|
|
207
|
-
if (
|
|
208
|
-
|
|
206
|
+
if (
|
|
207
|
+
(announcement_config := config.get(CONF_ANNOUNCEMENT_PIPELINE))
|
|
208
|
+
and (media_config := config.get(CONF_MEDIA_PIPELINE))
|
|
209
|
+
and announcement_config[CONF_SPEAKER] == media_config[CONF_SPEAKER]
|
|
209
210
|
):
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
)
|
|
211
|
+
raise cv.Invalid(
|
|
212
|
+
"The announcement and media pipelines cannot use the same speaker. Use the `mixer` speaker component to create two source speakers."
|
|
213
|
+
)
|
|
214
214
|
|
|
215
215
|
return config
|
|
216
216
|
|
|
@@ -315,31 +315,19 @@ async def to_code(config):
|
|
|
315
315
|
cg.add_define("USE_AUDIO_FLAC_SUPPORT", True)
|
|
316
316
|
cg.add_define("USE_AUDIO_MP3_SUPPORT", True)
|
|
317
317
|
|
|
318
|
-
#
|
|
319
|
-
esp32.add_idf_sdkconfig_option("
|
|
320
|
-
esp32.add_idf_sdkconfig_option("
|
|
321
|
-
esp32.add_idf_sdkconfig_option("
|
|
322
|
-
esp32.add_idf_sdkconfig_option("
|
|
323
|
-
esp32.add_idf_sdkconfig_option("
|
|
324
|
-
esp32.add_idf_sdkconfig_option("
|
|
325
|
-
esp32.add_idf_sdkconfig_option("
|
|
326
|
-
|
|
327
|
-
esp32.add_idf_sdkconfig_option("
|
|
328
|
-
esp32.add_idf_sdkconfig_option("
|
|
329
|
-
esp32.add_idf_sdkconfig_option("
|
|
330
|
-
esp32.add_idf_sdkconfig_option("
|
|
331
|
-
esp32.add_idf_sdkconfig_option("CONFIG_TCP_MAXRTX", 12)
|
|
332
|
-
esp32.add_idf_sdkconfig_option("CONFIG_TCP_SYNMAXRTX", 6)
|
|
333
|
-
esp32.add_idf_sdkconfig_option("CONFIG_TCP_MSS", 1436)
|
|
334
|
-
esp32.add_idf_sdkconfig_option("CONFIG_TCP_MSL", 60000)
|
|
335
|
-
esp32.add_idf_sdkconfig_option("CONFIG_TCP_SND_BUF_DEFAULT", 65535)
|
|
336
|
-
esp32.add_idf_sdkconfig_option("CONFIG_TCP_WND_DEFAULT", 512000)
|
|
337
|
-
esp32.add_idf_sdkconfig_option("CONFIG_TCP_RECVMBOX_SIZE", 512)
|
|
338
|
-
esp32.add_idf_sdkconfig_option("CONFIG_TCP_QUEUE_OOSEQ", True)
|
|
339
|
-
esp32.add_idf_sdkconfig_option("CONFIG_TCP_OVERSIZE_MSS", True)
|
|
340
|
-
esp32.add_idf_sdkconfig_option("CONFIG_LWIP_WND_SCALE", True)
|
|
341
|
-
esp32.add_idf_sdkconfig_option("CONFIG_LWIP_TCP_RCV_SCALE", 3)
|
|
342
|
-
esp32.add_idf_sdkconfig_option("CONFIG_LWIP_TCPIP_RECVMBOX_SIZE", 512)
|
|
318
|
+
# Based on https://github.com/espressif/esp-idf/blob/release/v5.4/examples/wifi/iperf/sdkconfig.defaults.esp32
|
|
319
|
+
esp32.add_idf_sdkconfig_option("CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM", 16)
|
|
320
|
+
esp32.add_idf_sdkconfig_option("CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM", 64)
|
|
321
|
+
esp32.add_idf_sdkconfig_option("CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM", 64)
|
|
322
|
+
esp32.add_idf_sdkconfig_option("CONFIG_ESP_WIFI_AMPDU_TX_ENABLED", True)
|
|
323
|
+
esp32.add_idf_sdkconfig_option("CONFIG_ESP_WIFI_TX_BA_WIN", 32)
|
|
324
|
+
esp32.add_idf_sdkconfig_option("CONFIG_ESP_WIFI_AMPDU_RX_ENABLED", True)
|
|
325
|
+
esp32.add_idf_sdkconfig_option("CONFIG_ESP_WIFI_RX_BA_WIN", 32)
|
|
326
|
+
|
|
327
|
+
esp32.add_idf_sdkconfig_option("CONFIG_LWIP_TCP_SND_BUF_DEFAULT", 65534)
|
|
328
|
+
esp32.add_idf_sdkconfig_option("CONFIG_LWIP_TCP_WND_DEFAULT", 65534)
|
|
329
|
+
esp32.add_idf_sdkconfig_option("CONFIG_LWIP_TCP_RECVMBOX_SIZE", 64)
|
|
330
|
+
esp32.add_idf_sdkconfig_option("CONFIG_LWIP_TCPIP_RECVMBOX_SIZE", 64)
|
|
343
331
|
|
|
344
332
|
# Allocate wifi buffers in PSRAM
|
|
345
333
|
esp32.add_idf_sdkconfig_option("CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP", True)
|
|
@@ -259,13 +259,10 @@ esp_err_t AudioPipeline::allocate_communications_() {
|
|
|
259
259
|
esp_err_t AudioPipeline::start_tasks_() {
|
|
260
260
|
if (this->read_task_handle_ == nullptr) {
|
|
261
261
|
if (this->read_task_stack_buffer_ == nullptr) {
|
|
262
|
-
if
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
RAMAllocator<StackType_t> stack_allocator(RAMAllocator<StackType_t>::ALLOC_INTERNAL);
|
|
267
|
-
this->read_task_stack_buffer_ = stack_allocator.allocate(READ_TASK_STACK_SIZE);
|
|
268
|
-
}
|
|
262
|
+
// Reader task uses the AudioReader class which uses esp_http_client. This crashes on IDF 5.4 if the task stack is
|
|
263
|
+
// in PSRAM. As a workaround, always allocate the read task in internal memory.
|
|
264
|
+
RAMAllocator<StackType_t> stack_allocator(RAMAllocator<StackType_t>::ALLOC_INTERNAL);
|
|
265
|
+
this->read_task_stack_buffer_ = stack_allocator.allocate(READ_TASK_STACK_SIZE);
|
|
269
266
|
}
|
|
270
267
|
|
|
271
268
|
if (this->read_task_stack_buffer_ == nullptr) {
|