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.
Potentially problematic release.
This version of esphome might be problematic. Click here for more details.
- 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
esphome/core/application.h
CHANGED
|
@@ -101,12 +101,9 @@ class Application {
|
|
|
101
101
|
arch_init();
|
|
102
102
|
this->name_add_mac_suffix_ = name_add_mac_suffix;
|
|
103
103
|
if (name_add_mac_suffix) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
} else {
|
|
108
|
-
this->friendly_name_ = friendly_name + " " + get_mac_address().substr(6);
|
|
109
|
-
}
|
|
104
|
+
const std::string mac_suffix = get_mac_address().substr(6);
|
|
105
|
+
this->name_ = name + "-" + mac_suffix;
|
|
106
|
+
this->friendly_name_ = friendly_name.empty() ? "" : friendly_name + " " + mac_suffix;
|
|
110
107
|
} else {
|
|
111
108
|
this->name_ = name;
|
|
112
109
|
this->friendly_name_ = friendly_name;
|
|
@@ -214,77 +211,6 @@ class Application {
|
|
|
214
211
|
#endif
|
|
215
212
|
|
|
216
213
|
/// Reserve space for components to avoid memory fragmentation
|
|
217
|
-
void reserve_components(size_t count) { this->components_.reserve(count); }
|
|
218
|
-
|
|
219
|
-
#ifdef USE_BINARY_SENSOR
|
|
220
|
-
void reserve_binary_sensor(size_t count) { this->binary_sensors_.reserve(count); }
|
|
221
|
-
#endif
|
|
222
|
-
#ifdef USE_SWITCH
|
|
223
|
-
void reserve_switch(size_t count) { this->switches_.reserve(count); }
|
|
224
|
-
#endif
|
|
225
|
-
#ifdef USE_BUTTON
|
|
226
|
-
void reserve_button(size_t count) { this->buttons_.reserve(count); }
|
|
227
|
-
#endif
|
|
228
|
-
#ifdef USE_SENSOR
|
|
229
|
-
void reserve_sensor(size_t count) { this->sensors_.reserve(count); }
|
|
230
|
-
#endif
|
|
231
|
-
#ifdef USE_TEXT_SENSOR
|
|
232
|
-
void reserve_text_sensor(size_t count) { this->text_sensors_.reserve(count); }
|
|
233
|
-
#endif
|
|
234
|
-
#ifdef USE_FAN
|
|
235
|
-
void reserve_fan(size_t count) { this->fans_.reserve(count); }
|
|
236
|
-
#endif
|
|
237
|
-
#ifdef USE_COVER
|
|
238
|
-
void reserve_cover(size_t count) { this->covers_.reserve(count); }
|
|
239
|
-
#endif
|
|
240
|
-
#ifdef USE_CLIMATE
|
|
241
|
-
void reserve_climate(size_t count) { this->climates_.reserve(count); }
|
|
242
|
-
#endif
|
|
243
|
-
#ifdef USE_LIGHT
|
|
244
|
-
void reserve_light(size_t count) { this->lights_.reserve(count); }
|
|
245
|
-
#endif
|
|
246
|
-
#ifdef USE_NUMBER
|
|
247
|
-
void reserve_number(size_t count) { this->numbers_.reserve(count); }
|
|
248
|
-
#endif
|
|
249
|
-
#ifdef USE_DATETIME_DATE
|
|
250
|
-
void reserve_date(size_t count) { this->dates_.reserve(count); }
|
|
251
|
-
#endif
|
|
252
|
-
#ifdef USE_DATETIME_TIME
|
|
253
|
-
void reserve_time(size_t count) { this->times_.reserve(count); }
|
|
254
|
-
#endif
|
|
255
|
-
#ifdef USE_DATETIME_DATETIME
|
|
256
|
-
void reserve_datetime(size_t count) { this->datetimes_.reserve(count); }
|
|
257
|
-
#endif
|
|
258
|
-
#ifdef USE_SELECT
|
|
259
|
-
void reserve_select(size_t count) { this->selects_.reserve(count); }
|
|
260
|
-
#endif
|
|
261
|
-
#ifdef USE_TEXT
|
|
262
|
-
void reserve_text(size_t count) { this->texts_.reserve(count); }
|
|
263
|
-
#endif
|
|
264
|
-
#ifdef USE_LOCK
|
|
265
|
-
void reserve_lock(size_t count) { this->locks_.reserve(count); }
|
|
266
|
-
#endif
|
|
267
|
-
#ifdef USE_VALVE
|
|
268
|
-
void reserve_valve(size_t count) { this->valves_.reserve(count); }
|
|
269
|
-
#endif
|
|
270
|
-
#ifdef USE_MEDIA_PLAYER
|
|
271
|
-
void reserve_media_player(size_t count) { this->media_players_.reserve(count); }
|
|
272
|
-
#endif
|
|
273
|
-
#ifdef USE_ALARM_CONTROL_PANEL
|
|
274
|
-
void reserve_alarm_control_panel(size_t count) { this->alarm_control_panels_.reserve(count); }
|
|
275
|
-
#endif
|
|
276
|
-
#ifdef USE_EVENT
|
|
277
|
-
void reserve_event(size_t count) { this->events_.reserve(count); }
|
|
278
|
-
#endif
|
|
279
|
-
#ifdef USE_UPDATE
|
|
280
|
-
void reserve_update(size_t count) { this->updates_.reserve(count); }
|
|
281
|
-
#endif
|
|
282
|
-
#ifdef USE_AREAS
|
|
283
|
-
void reserve_area(size_t count) { this->areas_.reserve(count); }
|
|
284
|
-
#endif
|
|
285
|
-
#ifdef USE_DEVICES
|
|
286
|
-
void reserve_device(size_t count) { this->devices_.reserve(count); }
|
|
287
|
-
#endif
|
|
288
214
|
|
|
289
215
|
/// Register the component in this Application instance.
|
|
290
216
|
template<class C> C *register_component(C *c) {
|
|
@@ -368,8 +294,19 @@ class Application {
|
|
|
368
294
|
|
|
369
295
|
uint8_t get_app_state() const { return this->app_state_; }
|
|
370
296
|
|
|
371
|
-
// Helper macro for entity getter method declarations
|
|
372
|
-
|
|
297
|
+
// Helper macro for entity getter method declarations
|
|
298
|
+
#ifdef USE_DEVICES
|
|
299
|
+
#define GET_ENTITY_METHOD(entity_type, entity_name, entities_member) \
|
|
300
|
+
entity_type *get_##entity_name##_by_key(uint32_t key, uint32_t device_id, bool include_internal = false) { \
|
|
301
|
+
for (auto *obj : this->entities_member##_) { \
|
|
302
|
+
if (obj->get_object_id_hash() == key && obj->get_device_id() == device_id && \
|
|
303
|
+
(include_internal || !obj->is_internal())) \
|
|
304
|
+
return obj; \
|
|
305
|
+
} \
|
|
306
|
+
return nullptr; \
|
|
307
|
+
}
|
|
308
|
+
const auto &get_devices() { return this->devices_; }
|
|
309
|
+
#else
|
|
373
310
|
#define GET_ENTITY_METHOD(entity_type, entity_name, entities_member) \
|
|
374
311
|
entity_type *get_##entity_name##_by_key(uint32_t key, bool include_internal = false) { \
|
|
375
312
|
for (auto *obj : this->entities_member##_) { \
|
|
@@ -378,100 +315,95 @@ class Application {
|
|
|
378
315
|
} \
|
|
379
316
|
return nullptr; \
|
|
380
317
|
}
|
|
381
|
-
|
|
382
|
-
#ifdef USE_DEVICES
|
|
383
|
-
const std::vector<Device *> &get_devices() { return this->devices_; }
|
|
384
|
-
#endif
|
|
318
|
+
#endif // USE_DEVICES
|
|
385
319
|
#ifdef USE_AREAS
|
|
386
|
-
const
|
|
320
|
+
const auto &get_areas() { return this->areas_; }
|
|
387
321
|
#endif
|
|
388
322
|
#ifdef USE_BINARY_SENSOR
|
|
389
|
-
|
|
323
|
+
auto &get_binary_sensors() const { return this->binary_sensors_; }
|
|
390
324
|
GET_ENTITY_METHOD(binary_sensor::BinarySensor, binary_sensor, binary_sensors)
|
|
391
325
|
#endif
|
|
392
326
|
#ifdef USE_SWITCH
|
|
393
|
-
|
|
327
|
+
auto &get_switches() const { return this->switches_; }
|
|
394
328
|
GET_ENTITY_METHOD(switch_::Switch, switch, switches)
|
|
395
329
|
#endif
|
|
396
330
|
#ifdef USE_BUTTON
|
|
397
|
-
|
|
331
|
+
auto &get_buttons() const { return this->buttons_; }
|
|
398
332
|
GET_ENTITY_METHOD(button::Button, button, buttons)
|
|
399
333
|
#endif
|
|
400
334
|
#ifdef USE_SENSOR
|
|
401
|
-
|
|
335
|
+
auto &get_sensors() const { return this->sensors_; }
|
|
402
336
|
GET_ENTITY_METHOD(sensor::Sensor, sensor, sensors)
|
|
403
337
|
#endif
|
|
404
338
|
#ifdef USE_TEXT_SENSOR
|
|
405
|
-
|
|
339
|
+
auto &get_text_sensors() const { return this->text_sensors_; }
|
|
406
340
|
GET_ENTITY_METHOD(text_sensor::TextSensor, text_sensor, text_sensors)
|
|
407
341
|
#endif
|
|
408
342
|
#ifdef USE_FAN
|
|
409
|
-
|
|
343
|
+
auto &get_fans() const { return this->fans_; }
|
|
410
344
|
GET_ENTITY_METHOD(fan::Fan, fan, fans)
|
|
411
345
|
#endif
|
|
412
346
|
#ifdef USE_COVER
|
|
413
|
-
|
|
347
|
+
auto &get_covers() const { return this->covers_; }
|
|
414
348
|
GET_ENTITY_METHOD(cover::Cover, cover, covers)
|
|
415
349
|
#endif
|
|
416
350
|
#ifdef USE_LIGHT
|
|
417
|
-
|
|
351
|
+
auto &get_lights() const { return this->lights_; }
|
|
418
352
|
GET_ENTITY_METHOD(light::LightState, light, lights)
|
|
419
353
|
#endif
|
|
420
354
|
#ifdef USE_CLIMATE
|
|
421
|
-
|
|
355
|
+
auto &get_climates() const { return this->climates_; }
|
|
422
356
|
GET_ENTITY_METHOD(climate::Climate, climate, climates)
|
|
423
357
|
#endif
|
|
424
358
|
#ifdef USE_NUMBER
|
|
425
|
-
|
|
359
|
+
auto &get_numbers() const { return this->numbers_; }
|
|
426
360
|
GET_ENTITY_METHOD(number::Number, number, numbers)
|
|
427
361
|
#endif
|
|
428
362
|
#ifdef USE_DATETIME_DATE
|
|
429
|
-
|
|
363
|
+
auto &get_dates() const { return this->dates_; }
|
|
430
364
|
GET_ENTITY_METHOD(datetime::DateEntity, date, dates)
|
|
431
365
|
#endif
|
|
432
366
|
#ifdef USE_DATETIME_TIME
|
|
433
|
-
|
|
367
|
+
auto &get_times() const { return this->times_; }
|
|
434
368
|
GET_ENTITY_METHOD(datetime::TimeEntity, time, times)
|
|
435
369
|
#endif
|
|
436
370
|
#ifdef USE_DATETIME_DATETIME
|
|
437
|
-
|
|
371
|
+
auto &get_datetimes() const { return this->datetimes_; }
|
|
438
372
|
GET_ENTITY_METHOD(datetime::DateTimeEntity, datetime, datetimes)
|
|
439
373
|
#endif
|
|
440
374
|
#ifdef USE_TEXT
|
|
441
|
-
|
|
375
|
+
auto &get_texts() const { return this->texts_; }
|
|
442
376
|
GET_ENTITY_METHOD(text::Text, text, texts)
|
|
443
377
|
#endif
|
|
444
378
|
#ifdef USE_SELECT
|
|
445
|
-
|
|
379
|
+
auto &get_selects() const { return this->selects_; }
|
|
446
380
|
GET_ENTITY_METHOD(select::Select, select, selects)
|
|
447
381
|
#endif
|
|
448
382
|
#ifdef USE_LOCK
|
|
449
|
-
|
|
383
|
+
auto &get_locks() const { return this->locks_; }
|
|
450
384
|
GET_ENTITY_METHOD(lock::Lock, lock, locks)
|
|
451
385
|
#endif
|
|
452
386
|
#ifdef USE_VALVE
|
|
453
|
-
|
|
387
|
+
auto &get_valves() const { return this->valves_; }
|
|
454
388
|
GET_ENTITY_METHOD(valve::Valve, valve, valves)
|
|
455
389
|
#endif
|
|
456
390
|
#ifdef USE_MEDIA_PLAYER
|
|
457
|
-
|
|
391
|
+
auto &get_media_players() const { return this->media_players_; }
|
|
458
392
|
GET_ENTITY_METHOD(media_player::MediaPlayer, media_player, media_players)
|
|
459
393
|
#endif
|
|
460
394
|
|
|
461
395
|
#ifdef USE_ALARM_CONTROL_PANEL
|
|
462
|
-
|
|
463
|
-
return this->alarm_control_panels_;
|
|
464
|
-
}
|
|
396
|
+
auto &get_alarm_control_panels() const { return this->alarm_control_panels_; }
|
|
465
397
|
GET_ENTITY_METHOD(alarm_control_panel::AlarmControlPanel, alarm_control_panel, alarm_control_panels)
|
|
466
398
|
#endif
|
|
467
399
|
|
|
468
400
|
#ifdef USE_EVENT
|
|
469
|
-
|
|
401
|
+
auto &get_events() const { return this->events_; }
|
|
470
402
|
GET_ENTITY_METHOD(event::Event, event, events)
|
|
471
403
|
#endif
|
|
472
404
|
|
|
473
405
|
#ifdef USE_UPDATE
|
|
474
|
-
|
|
406
|
+
auto &get_updates() const { return this->updates_; }
|
|
475
407
|
GET_ENTITY_METHOD(update::UpdateEntity, update, updates)
|
|
476
408
|
#endif
|
|
477
409
|
|
|
@@ -519,12 +451,7 @@ class Application {
|
|
|
519
451
|
const char *comment_{nullptr};
|
|
520
452
|
const char *compilation_time_{nullptr};
|
|
521
453
|
|
|
522
|
-
//
|
|
523
|
-
size_t dump_config_at_{SIZE_MAX};
|
|
524
|
-
|
|
525
|
-
// Vectors (largest members)
|
|
526
|
-
std::vector<Component *> components_{};
|
|
527
|
-
|
|
454
|
+
// std::vector (3 pointers each: begin, end, capacity)
|
|
528
455
|
// Partitioned vector design for looping components
|
|
529
456
|
// =================================================
|
|
530
457
|
// Components are partitioned into [active | inactive] sections:
|
|
@@ -542,110 +469,118 @@ class Application {
|
|
|
542
469
|
// and active_end_ is incremented
|
|
543
470
|
// - This eliminates branch mispredictions from flag checking in the hot loop
|
|
544
471
|
std::vector<Component *> looping_components_{};
|
|
472
|
+
#ifdef USE_SOCKET_SELECT_SUPPORT
|
|
473
|
+
std::vector<int> socket_fds_; // Vector of all monitored socket file descriptors
|
|
474
|
+
#endif
|
|
475
|
+
|
|
476
|
+
// std::string members (typically 24-32 bytes each)
|
|
477
|
+
std::string name_;
|
|
478
|
+
std::string friendly_name_;
|
|
479
|
+
|
|
480
|
+
// size_t members
|
|
481
|
+
size_t dump_config_at_{SIZE_MAX};
|
|
482
|
+
|
|
483
|
+
// 4-byte members
|
|
484
|
+
uint32_t last_loop_{0};
|
|
485
|
+
uint32_t loop_component_start_time_{0};
|
|
486
|
+
|
|
487
|
+
#ifdef USE_SOCKET_SELECT_SUPPORT
|
|
488
|
+
int max_fd_{-1}; // Highest file descriptor number for select()
|
|
489
|
+
#endif
|
|
490
|
+
|
|
491
|
+
// 2-byte members (grouped together for alignment)
|
|
492
|
+
uint16_t loop_interval_{16}; // Loop interval in ms (max 65535ms = 65.5 seconds)
|
|
493
|
+
uint16_t looping_components_active_end_{0}; // Index marking end of active components in looping_components_
|
|
494
|
+
uint16_t current_loop_index_{0}; // For safe reentrant modifications during iteration
|
|
495
|
+
|
|
496
|
+
// 1-byte members (grouped together to minimize padding)
|
|
497
|
+
uint8_t app_state_{0};
|
|
498
|
+
bool name_add_mac_suffix_;
|
|
499
|
+
bool in_loop_{false};
|
|
500
|
+
volatile bool has_pending_enable_loop_requests_{false};
|
|
501
|
+
|
|
502
|
+
#ifdef USE_SOCKET_SELECT_SUPPORT
|
|
503
|
+
bool socket_fds_changed_{false}; // Flag to rebuild base_read_fds_ when socket_fds_ changes
|
|
504
|
+
#endif
|
|
505
|
+
|
|
506
|
+
#ifdef USE_SOCKET_SELECT_SUPPORT
|
|
507
|
+
// Variable-sized members
|
|
508
|
+
fd_set base_read_fds_{}; // Cached fd_set rebuilt only when socket_fds_ changes
|
|
509
|
+
fd_set read_fds_{}; // Working fd_set for select(), copied from base_read_fds_
|
|
510
|
+
#endif
|
|
511
|
+
|
|
512
|
+
// StaticVectors (largest members - contain actual array data inline)
|
|
513
|
+
StaticVector<Component *, ESPHOME_COMPONENT_COUNT> components_{};
|
|
545
514
|
|
|
546
515
|
#ifdef USE_DEVICES
|
|
547
|
-
|
|
516
|
+
StaticVector<Device *, ESPHOME_DEVICE_COUNT> devices_{};
|
|
548
517
|
#endif
|
|
549
518
|
#ifdef USE_AREAS
|
|
550
|
-
|
|
519
|
+
StaticVector<Area *, ESPHOME_AREA_COUNT> areas_{};
|
|
551
520
|
#endif
|
|
552
521
|
#ifdef USE_BINARY_SENSOR
|
|
553
|
-
|
|
522
|
+
StaticVector<binary_sensor::BinarySensor *, ESPHOME_ENTITY_BINARY_SENSOR_COUNT> binary_sensors_{};
|
|
554
523
|
#endif
|
|
555
524
|
#ifdef USE_SWITCH
|
|
556
|
-
|
|
525
|
+
StaticVector<switch_::Switch *, ESPHOME_ENTITY_SWITCH_COUNT> switches_{};
|
|
557
526
|
#endif
|
|
558
527
|
#ifdef USE_BUTTON
|
|
559
|
-
|
|
528
|
+
StaticVector<button::Button *, ESPHOME_ENTITY_BUTTON_COUNT> buttons_{};
|
|
560
529
|
#endif
|
|
561
530
|
#ifdef USE_EVENT
|
|
562
|
-
|
|
531
|
+
StaticVector<event::Event *, ESPHOME_ENTITY_EVENT_COUNT> events_{};
|
|
563
532
|
#endif
|
|
564
533
|
#ifdef USE_SENSOR
|
|
565
|
-
|
|
534
|
+
StaticVector<sensor::Sensor *, ESPHOME_ENTITY_SENSOR_COUNT> sensors_{};
|
|
566
535
|
#endif
|
|
567
536
|
#ifdef USE_TEXT_SENSOR
|
|
568
|
-
|
|
537
|
+
StaticVector<text_sensor::TextSensor *, ESPHOME_ENTITY_TEXT_SENSOR_COUNT> text_sensors_{};
|
|
569
538
|
#endif
|
|
570
539
|
#ifdef USE_FAN
|
|
571
|
-
|
|
540
|
+
StaticVector<fan::Fan *, ESPHOME_ENTITY_FAN_COUNT> fans_{};
|
|
572
541
|
#endif
|
|
573
542
|
#ifdef USE_COVER
|
|
574
|
-
|
|
543
|
+
StaticVector<cover::Cover *, ESPHOME_ENTITY_COVER_COUNT> covers_{};
|
|
575
544
|
#endif
|
|
576
545
|
#ifdef USE_CLIMATE
|
|
577
|
-
|
|
546
|
+
StaticVector<climate::Climate *, ESPHOME_ENTITY_CLIMATE_COUNT> climates_{};
|
|
578
547
|
#endif
|
|
579
548
|
#ifdef USE_LIGHT
|
|
580
|
-
|
|
549
|
+
StaticVector<light::LightState *, ESPHOME_ENTITY_LIGHT_COUNT> lights_{};
|
|
581
550
|
#endif
|
|
582
551
|
#ifdef USE_NUMBER
|
|
583
|
-
|
|
552
|
+
StaticVector<number::Number *, ESPHOME_ENTITY_NUMBER_COUNT> numbers_{};
|
|
584
553
|
#endif
|
|
585
554
|
#ifdef USE_DATETIME_DATE
|
|
586
|
-
|
|
555
|
+
StaticVector<datetime::DateEntity *, ESPHOME_ENTITY_DATE_COUNT> dates_{};
|
|
587
556
|
#endif
|
|
588
557
|
#ifdef USE_DATETIME_TIME
|
|
589
|
-
|
|
558
|
+
StaticVector<datetime::TimeEntity *, ESPHOME_ENTITY_TIME_COUNT> times_{};
|
|
590
559
|
#endif
|
|
591
560
|
#ifdef USE_DATETIME_DATETIME
|
|
592
|
-
|
|
561
|
+
StaticVector<datetime::DateTimeEntity *, ESPHOME_ENTITY_DATETIME_COUNT> datetimes_{};
|
|
593
562
|
#endif
|
|
594
563
|
#ifdef USE_SELECT
|
|
595
|
-
|
|
564
|
+
StaticVector<select::Select *, ESPHOME_ENTITY_SELECT_COUNT> selects_{};
|
|
596
565
|
#endif
|
|
597
566
|
#ifdef USE_TEXT
|
|
598
|
-
|
|
567
|
+
StaticVector<text::Text *, ESPHOME_ENTITY_TEXT_COUNT> texts_{};
|
|
599
568
|
#endif
|
|
600
569
|
#ifdef USE_LOCK
|
|
601
|
-
|
|
570
|
+
StaticVector<lock::Lock *, ESPHOME_ENTITY_LOCK_COUNT> locks_{};
|
|
602
571
|
#endif
|
|
603
572
|
#ifdef USE_VALVE
|
|
604
|
-
|
|
573
|
+
StaticVector<valve::Valve *, ESPHOME_ENTITY_VALVE_COUNT> valves_{};
|
|
605
574
|
#endif
|
|
606
575
|
#ifdef USE_MEDIA_PLAYER
|
|
607
|
-
|
|
576
|
+
StaticVector<media_player::MediaPlayer *, ESPHOME_ENTITY_MEDIA_PLAYER_COUNT> media_players_{};
|
|
608
577
|
#endif
|
|
609
578
|
#ifdef USE_ALARM_CONTROL_PANEL
|
|
610
|
-
|
|
579
|
+
StaticVector<alarm_control_panel::AlarmControlPanel *, ESPHOME_ENTITY_ALARM_CONTROL_PANEL_COUNT>
|
|
580
|
+
alarm_control_panels_{};
|
|
611
581
|
#endif
|
|
612
582
|
#ifdef USE_UPDATE
|
|
613
|
-
|
|
614
|
-
#endif
|
|
615
|
-
|
|
616
|
-
#ifdef USE_SOCKET_SELECT_SUPPORT
|
|
617
|
-
std::vector<int> socket_fds_; // Vector of all monitored socket file descriptors
|
|
618
|
-
#endif
|
|
619
|
-
|
|
620
|
-
// String members
|
|
621
|
-
std::string name_;
|
|
622
|
-
std::string friendly_name_;
|
|
623
|
-
|
|
624
|
-
// 4-byte members
|
|
625
|
-
uint32_t last_loop_{0};
|
|
626
|
-
uint32_t loop_component_start_time_{0};
|
|
627
|
-
|
|
628
|
-
#ifdef USE_SOCKET_SELECT_SUPPORT
|
|
629
|
-
int max_fd_{-1}; // Highest file descriptor number for select()
|
|
630
|
-
#endif
|
|
631
|
-
|
|
632
|
-
// 2-byte members (grouped together for alignment)
|
|
633
|
-
uint16_t loop_interval_{16}; // Loop interval in ms (max 65535ms = 65.5 seconds)
|
|
634
|
-
uint16_t looping_components_active_end_{0};
|
|
635
|
-
uint16_t current_loop_index_{0}; // For safe reentrant modifications during iteration
|
|
636
|
-
|
|
637
|
-
// 1-byte members (grouped together to minimize padding)
|
|
638
|
-
uint8_t app_state_{0};
|
|
639
|
-
bool name_add_mac_suffix_;
|
|
640
|
-
bool in_loop_{false};
|
|
641
|
-
volatile bool has_pending_enable_loop_requests_{false};
|
|
642
|
-
|
|
643
|
-
#ifdef USE_SOCKET_SELECT_SUPPORT
|
|
644
|
-
bool socket_fds_changed_{false}; // Flag to rebuild base_read_fds_ when socket_fds_ changes
|
|
645
|
-
|
|
646
|
-
// Variable-sized members at end
|
|
647
|
-
fd_set base_read_fds_{}; // Cached fd_set rebuilt only when socket_fds_ changes
|
|
648
|
-
fd_set read_fds_{}; // Working fd_set for select(), copied from base_read_fds_
|
|
583
|
+
StaticVector<update::UpdateEntity *, ESPHOME_ENTITY_UPDATE_COUNT> updates_{};
|
|
649
584
|
#endif
|
|
650
585
|
};
|
|
651
586
|
|
esphome/core/color.h
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
+
#include "defines.h"
|
|
3
4
|
#include "component.h"
|
|
4
5
|
#include "helpers.h"
|
|
5
6
|
|
|
7
|
+
#ifdef USE_LVGL
|
|
8
|
+
#include "esphome/components/lvgl/lvgl_proxy.h"
|
|
9
|
+
#endif // USE_LVGL
|
|
10
|
+
|
|
6
11
|
namespace esphome {
|
|
7
12
|
|
|
8
13
|
inline static constexpr uint8_t esp_scale8(uint8_t i, uint8_t scale) {
|
|
@@ -33,6 +38,11 @@ struct Color {
|
|
|
33
38
|
uint32_t raw_32;
|
|
34
39
|
};
|
|
35
40
|
|
|
41
|
+
#ifdef USE_LVGL
|
|
42
|
+
// convenience function for Color to get a lv_color_t representation
|
|
43
|
+
operator lv_color_t() const { return lv_color_make(this->r, this->g, this->b); }
|
|
44
|
+
#endif
|
|
45
|
+
|
|
36
46
|
inline constexpr Color() ESPHOME_ALWAYS_INLINE : raw_32(0) {} // NOLINT
|
|
37
47
|
inline constexpr Color(uint8_t red, uint8_t green, uint8_t blue) ESPHOME_ALWAYS_INLINE : r(red),
|
|
38
48
|
g(green),
|
esphome/core/component.cpp
CHANGED
|
@@ -9,10 +9,14 @@
|
|
|
9
9
|
#include "esphome/core/hal.h"
|
|
10
10
|
#include "esphome/core/helpers.h"
|
|
11
11
|
#include "esphome/core/log.h"
|
|
12
|
+
#ifdef USE_RUNTIME_STATS
|
|
13
|
+
#include "esphome/components/runtime_stats/runtime_stats.h"
|
|
14
|
+
#endif
|
|
12
15
|
|
|
13
16
|
namespace esphome {
|
|
14
17
|
|
|
15
18
|
static const char *const TAG = "component";
|
|
19
|
+
static const char *const UNSPECIFIED_MESSAGE = "unspecified";
|
|
16
20
|
|
|
17
21
|
// Global vectors for component data that doesn't belong in every instance.
|
|
18
22
|
// Using vector instead of unordered_map for both because:
|
|
@@ -129,7 +133,7 @@ void Component::call_dump_config() {
|
|
|
129
133
|
this->dump_config();
|
|
130
134
|
if (this->is_failed()) {
|
|
131
135
|
// Look up error message from global vector
|
|
132
|
-
const char *error_msg =
|
|
136
|
+
const char *error_msg = nullptr;
|
|
133
137
|
if (component_error_messages) {
|
|
134
138
|
for (const auto &pair : *component_error_messages) {
|
|
135
139
|
if (pair.first == this) {
|
|
@@ -138,7 +142,8 @@ void Component::call_dump_config() {
|
|
|
138
142
|
}
|
|
139
143
|
}
|
|
140
144
|
}
|
|
141
|
-
ESP_LOGE(TAG, " %s is marked FAILED: %s", this->get_component_source(),
|
|
145
|
+
ESP_LOGE(TAG, " %s is marked FAILED: %s", this->get_component_source(),
|
|
146
|
+
error_msg ? error_msg : UNSPECIFIED_MESSAGE);
|
|
142
147
|
}
|
|
143
148
|
}
|
|
144
149
|
|
|
@@ -146,28 +151,33 @@ uint8_t Component::get_component_state() const { return this->component_state_;
|
|
|
146
151
|
void Component::call() {
|
|
147
152
|
uint8_t state = this->component_state_ & COMPONENT_STATE_MASK;
|
|
148
153
|
switch (state) {
|
|
149
|
-
case COMPONENT_STATE_CONSTRUCTION:
|
|
154
|
+
case COMPONENT_STATE_CONSTRUCTION: {
|
|
150
155
|
// State Construction: Call setup and set state to setup
|
|
151
|
-
this->
|
|
152
|
-
this->
|
|
156
|
+
this->set_component_state_(COMPONENT_STATE_SETUP);
|
|
157
|
+
ESP_LOGV(TAG, "Setup %s", this->get_component_source());
|
|
158
|
+
#if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_DEBUG
|
|
159
|
+
uint32_t start_time = millis();
|
|
160
|
+
#endif
|
|
153
161
|
this->call_setup();
|
|
162
|
+
#if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_DEBUG
|
|
163
|
+
uint32_t setup_time = millis() - start_time;
|
|
164
|
+
ESP_LOGCONFIG(TAG, "Setup %s took %ums", this->get_component_source(), (unsigned) setup_time);
|
|
165
|
+
#endif
|
|
154
166
|
break;
|
|
167
|
+
}
|
|
155
168
|
case COMPONENT_STATE_SETUP:
|
|
156
169
|
// State setup: Call first loop and set state to loop
|
|
157
|
-
this->
|
|
158
|
-
this->component_state_ |= COMPONENT_STATE_LOOP;
|
|
170
|
+
this->set_component_state_(COMPONENT_STATE_LOOP);
|
|
159
171
|
this->call_loop();
|
|
160
172
|
break;
|
|
161
173
|
case COMPONENT_STATE_LOOP:
|
|
162
174
|
// State loop: Call loop
|
|
163
175
|
this->call_loop();
|
|
164
176
|
break;
|
|
165
|
-
case COMPONENT_STATE_FAILED:
|
|
177
|
+
case COMPONENT_STATE_FAILED:
|
|
166
178
|
// State failed: Do nothing
|
|
167
|
-
|
|
168
|
-
case COMPONENT_STATE_LOOP_DONE: // NOLINT(bugprone-branch-clone)
|
|
179
|
+
case COMPONENT_STATE_LOOP_DONE:
|
|
169
180
|
// State loop done: Do nothing, component has finished its work
|
|
170
|
-
break;
|
|
171
181
|
default:
|
|
172
182
|
break;
|
|
173
183
|
}
|
|
@@ -192,25 +202,26 @@ bool Component::should_warn_of_blocking(uint32_t blocking_time) {
|
|
|
192
202
|
}
|
|
193
203
|
void Component::mark_failed() {
|
|
194
204
|
ESP_LOGE(TAG, "%s was marked as failed", this->get_component_source());
|
|
195
|
-
this->
|
|
196
|
-
this->component_state_ |= COMPONENT_STATE_FAILED;
|
|
205
|
+
this->set_component_state_(COMPONENT_STATE_FAILED);
|
|
197
206
|
this->status_set_error();
|
|
198
207
|
// Also remove from loop since failed components shouldn't loop
|
|
199
208
|
App.disable_component_loop_(this);
|
|
200
209
|
}
|
|
210
|
+
void Component::set_component_state_(uint8_t state) {
|
|
211
|
+
this->component_state_ &= ~COMPONENT_STATE_MASK;
|
|
212
|
+
this->component_state_ |= state;
|
|
213
|
+
}
|
|
201
214
|
void Component::disable_loop() {
|
|
202
215
|
if ((this->component_state_ & COMPONENT_STATE_MASK) != COMPONENT_STATE_LOOP_DONE) {
|
|
203
216
|
ESP_LOGVV(TAG, "%s loop disabled", this->get_component_source());
|
|
204
|
-
this->
|
|
205
|
-
this->component_state_ |= COMPONENT_STATE_LOOP_DONE;
|
|
217
|
+
this->set_component_state_(COMPONENT_STATE_LOOP_DONE);
|
|
206
218
|
App.disable_component_loop_(this);
|
|
207
219
|
}
|
|
208
220
|
}
|
|
209
221
|
void Component::enable_loop() {
|
|
210
222
|
if ((this->component_state_ & COMPONENT_STATE_MASK) == COMPONENT_STATE_LOOP_DONE) {
|
|
211
223
|
ESP_LOGVV(TAG, "%s loop enabled", this->get_component_source());
|
|
212
|
-
this->
|
|
213
|
-
this->component_state_ |= COMPONENT_STATE_LOOP;
|
|
224
|
+
this->set_component_state_(COMPONENT_STATE_LOOP);
|
|
214
225
|
App.enable_component_loop_(this);
|
|
215
226
|
}
|
|
216
227
|
}
|
|
@@ -230,8 +241,7 @@ void IRAM_ATTR HOT Component::enable_loop_soon_any_context() {
|
|
|
230
241
|
void Component::reset_to_construction_state() {
|
|
231
242
|
if ((this->component_state_ & COMPONENT_STATE_MASK) == COMPONENT_STATE_FAILED) {
|
|
232
243
|
ESP_LOGI(TAG, "%s is being reset to construction state", this->get_component_source());
|
|
233
|
-
this->
|
|
234
|
-
this->component_state_ |= COMPONENT_STATE_CONSTRUCTION;
|
|
244
|
+
this->set_component_state_(COMPONENT_STATE_CONSTRUCTION);
|
|
235
245
|
// Clear error status when resetting
|
|
236
246
|
this->status_clear_error();
|
|
237
247
|
}
|
|
@@ -276,15 +286,15 @@ void Component::status_set_warning(const char *message) {
|
|
|
276
286
|
return;
|
|
277
287
|
this->component_state_ |= STATUS_LED_WARNING;
|
|
278
288
|
App.app_state_ |= STATUS_LED_WARNING;
|
|
279
|
-
ESP_LOGW(TAG, "%s set Warning flag: %s", this->get_component_source(), message);
|
|
289
|
+
ESP_LOGW(TAG, "%s set Warning flag: %s", this->get_component_source(), message ? message : UNSPECIFIED_MESSAGE);
|
|
280
290
|
}
|
|
281
291
|
void Component::status_set_error(const char *message) {
|
|
282
292
|
if ((this->component_state_ & STATUS_LED_ERROR) != 0)
|
|
283
293
|
return;
|
|
284
294
|
this->component_state_ |= STATUS_LED_ERROR;
|
|
285
295
|
App.app_state_ |= STATUS_LED_ERROR;
|
|
286
|
-
ESP_LOGE(TAG, "%s set Error flag: %s", this->get_component_source(), message);
|
|
287
|
-
if (
|
|
296
|
+
ESP_LOGE(TAG, "%s set Error flag: %s", this->get_component_source(), message ? message : UNSPECIFIED_MESSAGE);
|
|
297
|
+
if (message != nullptr) {
|
|
288
298
|
// Lazy allocate the error messages vector if needed
|
|
289
299
|
if (!component_error_messages) {
|
|
290
300
|
component_error_messages = std::make_unique<std::vector<std::pair<const Component *, const char *>>>();
|
|
@@ -370,11 +380,10 @@ bool Component::has_overridden_loop() const {
|
|
|
370
380
|
PollingComponent::PollingComponent(uint32_t update_interval) : update_interval_(update_interval) {}
|
|
371
381
|
|
|
372
382
|
void PollingComponent::call_setup() {
|
|
383
|
+
// init the poller before calling setup, allowing setup to cancel it if desired
|
|
384
|
+
this->start_poller();
|
|
373
385
|
// Let the polling component subclass setup their HW.
|
|
374
386
|
this->setup();
|
|
375
|
-
|
|
376
|
-
// init the poller
|
|
377
|
-
this->start_poller();
|
|
378
387
|
}
|
|
379
388
|
|
|
380
389
|
void PollingComponent::start_poller() {
|
|
@@ -396,6 +405,13 @@ uint32_t WarnIfComponentBlockingGuard::finish() {
|
|
|
396
405
|
uint32_t curr_time = millis();
|
|
397
406
|
|
|
398
407
|
uint32_t blocking_time = curr_time - this->started_;
|
|
408
|
+
|
|
409
|
+
#ifdef USE_RUNTIME_STATS
|
|
410
|
+
// Record component runtime stats
|
|
411
|
+
if (global_runtime_stats != nullptr) {
|
|
412
|
+
global_runtime_stats->record_component_time(this->component_, blocking_time, curr_time);
|
|
413
|
+
}
|
|
414
|
+
#endif
|
|
399
415
|
bool should_warn;
|
|
400
416
|
if (this->component_ != nullptr) {
|
|
401
417
|
should_warn = this->component_->should_warn_of_blocking(blocking_time);
|
esphome/core/component.h
CHANGED
|
@@ -202,9 +202,9 @@ class Component {
|
|
|
202
202
|
|
|
203
203
|
bool status_has_error() const;
|
|
204
204
|
|
|
205
|
-
void status_set_warning(const char *message =
|
|
205
|
+
void status_set_warning(const char *message = nullptr);
|
|
206
206
|
|
|
207
|
-
void status_set_error(const char *message =
|
|
207
|
+
void status_set_error(const char *message = nullptr);
|
|
208
208
|
|
|
209
209
|
void status_clear_warning();
|
|
210
210
|
|
|
@@ -236,6 +236,9 @@ class Component {
|
|
|
236
236
|
virtual void call_setup();
|
|
237
237
|
virtual void call_dump_config();
|
|
238
238
|
|
|
239
|
+
/// Helper to set component state (clears state bits and sets new state)
|
|
240
|
+
void set_component_state_(uint8_t state);
|
|
241
|
+
|
|
239
242
|
/** Set an interval function with a unique name. Empty name means no cancelling possible.
|
|
240
243
|
*
|
|
241
244
|
* This will call f every interval ms. Can be cancelled via CancelInterval().
|
|
@@ -405,10 +408,10 @@ class Component {
|
|
|
405
408
|
const char *component_source_{nullptr};
|
|
406
409
|
uint16_t warn_if_blocking_over_{WARN_IF_BLOCKING_OVER_MS}; ///< Warn if blocked for this many ms (max 65.5s)
|
|
407
410
|
/// State of this component - each bit has a purpose:
|
|
408
|
-
/// Bits 0-
|
|
409
|
-
/// Bit
|
|
410
|
-
/// Bit
|
|
411
|
-
/// Bits
|
|
411
|
+
/// Bits 0-2: Component state (0x00=CONSTRUCTION, 0x01=SETUP, 0x02=LOOP, 0x03=FAILED, 0x04=LOOP_DONE)
|
|
412
|
+
/// Bit 3: STATUS_LED_WARNING
|
|
413
|
+
/// Bit 4: STATUS_LED_ERROR
|
|
414
|
+
/// Bits 5-7: Unused - reserved for future expansion
|
|
412
415
|
uint8_t component_state_{0x00};
|
|
413
416
|
volatile bool pending_enable_loop_{false}; ///< ISR-safe flag for enable_loop_soon_any_context
|
|
414
417
|
};
|