esphome 2025.6.3__py3-none-any.whl → 2025.7.0b2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- esphome/__main__.py +1 -3
- esphome/codegen.py +2 -0
- esphome/components/ac_dimmer/ac_dimmer.cpp +6 -6
- esphome/components/adc/__init__.py +25 -1
- esphome/components/adc/adc_sensor.h +11 -11
- esphome/components/adc/adc_sensor_common.cpp +1 -1
- esphome/components/adc/adc_sensor_esp32.cpp +16 -8
- esphome/components/ade7880/ade7880.h +0 -2
- esphome/components/ads1115/ads1115.h +0 -1
- esphome/components/ads1118/ads1118.h +0 -1
- esphome/components/ags10/ags10.h +0 -2
- esphome/components/aic3204/aic3204.h +0 -1
- esphome/components/alarm_control_panel/__init__.py +5 -2
- esphome/components/alpha3/alpha3.h +0 -1
- esphome/components/am43/cover/am43_cover.h +0 -1
- esphome/components/am43/sensor/am43_sensor.h +0 -1
- esphome/components/analog_threshold/analog_threshold_binary_sensor.h +0 -2
- esphome/components/anova/anova.cpp +5 -1
- esphome/components/anova/anova.h +0 -1
- esphome/components/apds9960/apds9960.cpp +1 -1
- esphome/components/api/__init__.py +57 -21
- esphome/components/api/api_connection.cpp +344 -539
- esphome/components/api/api_connection.h +224 -141
- esphome/components/api/api_frame_helper.cpp +91 -127
- esphome/components/api/api_frame_helper.h +64 -54
- esphome/components/api/api_pb2.cpp +1837 -9044
- esphome/components/api/api_pb2.h +532 -685
- esphome/components/api/api_pb2_dump.cpp +4432 -0
- esphome/components/api/api_pb2_service.cpp +184 -425
- esphome/components/api/api_pb2_service.h +13 -6
- esphome/components/api/api_server.cpp +131 -167
- esphome/components/api/api_server.h +38 -10
- esphome/components/api/client.py +8 -2
- esphome/components/api/custom_api_device.h +8 -0
- esphome/components/api/list_entities.cpp +37 -104
- esphome/components/api/list_entities.h +33 -23
- esphome/components/api/proto.h +532 -26
- esphome/components/api/subscribe_state.cpp +23 -29
- esphome/components/api/subscribe_state.h +26 -19
- esphome/components/api/user_services.h +2 -0
- esphome/components/as5600/as5600.h +0 -1
- esphome/components/async_tcp/__init__.py +14 -5
- esphome/components/atc_mithermometer/atc_mithermometer.h +0 -1
- esphome/components/atm90e32/atm90e32.cpp +2 -1
- esphome/components/audio/audio_decoder.cpp +1 -1
- esphome/components/audio/audio_transfer_buffer.cpp +2 -2
- esphome/components/b_parasite/b_parasite.h +0 -1
- esphome/components/bedjet/bedjet_hub.cpp +5 -1
- esphome/components/bedjet/climate/bedjet_climate.cpp +5 -1
- esphome/components/beken_spi_led_strip/led_strip.cpp +4 -2
- esphome/components/bh1750/bh1750.cpp +5 -5
- esphome/components/binary_sensor/__init__.py +82 -5
- esphome/components/binary_sensor/automation.h +19 -1
- esphome/components/binary_sensor/binary_sensor.cpp +12 -30
- esphome/components/binary_sensor/binary_sensor.h +11 -25
- esphome/components/binary_sensor/filter.cpp +29 -24
- esphome/components/binary_sensor/filter.h +20 -10
- esphome/components/ble_client/output/ble_binary_output.h +0 -1
- esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +5 -1
- esphome/components/ble_client/sensor/ble_rssi_sensor.h +0 -1
- esphome/components/ble_client/sensor/ble_sensor.cpp +5 -1
- esphome/components/ble_client/sensor/ble_sensor.h +0 -1
- esphome/components/ble_client/switch/ble_switch.h +0 -1
- esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +5 -1
- esphome/components/ble_client/text_sensor/ble_text_sensor.h +0 -1
- esphome/components/ble_presence/ble_presence_device.h +0 -1
- esphome/components/ble_rssi/ble_rssi_sensor.h +0 -1
- esphome/components/ble_scanner/ble_scanner.h +0 -1
- esphome/components/bluetooth_proxy/bluetooth_connection.h +9 -2
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -6
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +8 -2
- esphome/components/bme680/sensor.py +1 -1
- esphome/components/bmp581/bmp581.h +0 -2
- esphome/components/button/__init__.py +5 -2
- esphome/components/camera/__init__.py +1 -0
- esphome/components/camera/camera.cpp +22 -0
- esphome/components/camera/camera.h +80 -0
- esphome/components/canbus/__init__.py +1 -0
- esphome/components/cap1188/cap1188.h +0 -1
- esphome/components/captive_portal/__init__.py +12 -2
- esphome/components/captive_portal/captive_portal.cpp +12 -2
- esphome/components/captive_portal/captive_portal.h +5 -2
- esphome/components/ccs811/ccs811.h +0 -2
- esphome/components/climate/__init__.py +5 -2
- esphome/components/cm1106/sensor.py +2 -2
- esphome/components/const/__init__.py +2 -0
- esphome/components/copy/binary_sensor/copy_binary_sensor.h +0 -1
- esphome/components/copy/button/copy_button.h +0 -1
- esphome/components/copy/cover/copy_cover.h +0 -1
- esphome/components/copy/fan/copy_fan.h +0 -1
- esphome/components/copy/lock/copy_lock.h +0 -1
- esphome/components/copy/number/copy_number.h +0 -1
- esphome/components/copy/select/copy_select.h +0 -1
- esphome/components/copy/sensor/copy_sensor.h +0 -1
- esphome/components/copy/switch/copy_switch.h +0 -1
- esphome/components/copy/text/copy_text.h +0 -1
- esphome/components/copy/text_sensor/copy_text_sensor.h +0 -1
- esphome/components/cover/__init__.py +5 -2
- esphome/components/cs5460a/cs5460a.h +0 -1
- esphome/components/datetime/__init__.py +4 -2
- esphome/components/debug/__init__.py +20 -0
- esphome/components/debug/debug_esp32.cpp +2 -0
- esphome/components/deep_sleep/__init__.py +43 -9
- esphome/components/demo/__init__.py +2 -2
- esphome/components/display/display.cpp +4 -3
- esphome/components/display/display.h +0 -2
- esphome/components/display/display_buffer.cpp +1 -1
- esphome/components/ds2484/__init__.py +1 -0
- esphome/components/ds2484/ds2484.cpp +209 -0
- esphome/components/ds2484/ds2484.h +43 -0
- esphome/components/ds2484/one_wire.py +37 -0
- esphome/components/duty_time/duty_time_sensor.h +0 -1
- esphome/components/ens160_base/ens160_base.h +0 -1
- esphome/components/es7210/es7210.h +0 -1
- esphome/components/es7243e/es7243e.h +0 -1
- esphome/components/es8156/es8156.h +0 -1
- esphome/components/es8311/es8311.h +0 -1
- esphome/components/es8388/es8388.h +0 -1
- esphome/components/esp32/__init__.py +103 -135
- esphome/components/esp32/core.cpp +0 -4
- esphome/components/esp32/gpio.h +1 -1
- esphome/components/esp32/helpers.cpp +69 -0
- esphome/components/esp32_ble/ble.cpp +5 -6
- esphome/components/esp32_ble/ble.h +29 -14
- esphome/components/esp32_ble/ble_event.h +6 -6
- esphome/components/esp32_ble_client/ble_client_base.cpp +21 -6
- esphome/components/esp32_ble_client/ble_client_base.h +24 -9
- esphome/components/esp32_ble_tracker/__init__.py +2 -8
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +5 -5
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +11 -7
- esphome/components/esp32_camera/__init__.py +112 -98
- esphome/components/esp32_camera/esp32_camera.cpp +41 -31
- esphome/components/esp32_camera/esp32_camera.h +35 -30
- esphome/components/esp32_camera_web_server/__init__.py +2 -1
- esphome/components/esp32_camera_web_server/camera_web_server.cpp +8 -8
- esphome/components/esp32_camera_web_server/camera_web_server.h +3 -3
- esphome/components/esp32_hall/sensor.py +2 -21
- esphome/components/esp32_hosted/__init__.py +101 -0
- esphome/components/esp32_hosted/esp32_hosted.py.script +12 -0
- esphome/components/esp32_improv/esp32_improv_component.cpp +3 -0
- esphome/components/esp32_rmt/__init__.py +0 -58
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +77 -63
- esphome/components/esp32_rmt_led_strip/led_strip.h +11 -17
- esphome/components/esp32_rmt_led_strip/light.py +14 -76
- esphome/components/esp32_touch/esp32_touch.h +174 -28
- esphome/components/esp32_touch/esp32_touch_common.cpp +162 -0
- esphome/components/esp32_touch/esp32_touch_v1.cpp +240 -0
- esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
- esphome/components/esp8266/__init__.py +2 -0
- esphome/components/esp8266/gpio.cpp +10 -10
- esphome/components/esp8266/helpers.cpp +31 -0
- esphome/components/esphome/ota/__init__.py +1 -0
- esphome/components/esphome/ota/ota_esphome.cpp +24 -19
- esphome/components/ethernet/__init__.py +42 -23
- esphome/components/ethernet/esp_eth_phy_jl1101.c +0 -16
- esphome/components/ethernet/ethernet_component.cpp +69 -29
- esphome/components/ethernet/ethernet_component.h +18 -10
- esphome/components/event/__init__.py +5 -2
- esphome/components/ezo/ezo.h +0 -1
- esphome/components/ezo_pmp/ezo_pmp.h +0 -1
- esphome/components/fan/__init__.py +5 -2
- esphome/components/feedback/feedback_cover.h +0 -1
- esphome/components/font/__init__.py +92 -82
- esphome/components/font/font.cpp +9 -2
- esphome/components/font/font.h +20 -5
- esphome/components/fs3000/fs3000.h +0 -1
- esphome/components/gcja5/gcja5.h +0 -1
- esphome/components/gl_r01_i2c/__init__.py +0 -0
- esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +68 -0
- esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
- esphome/components/gl_r01_i2c/sensor.py +36 -0
- esphome/components/gp8403/gp8403.h +0 -1
- esphome/components/gpio/binary_sensor/__init__.py +17 -0
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +77 -3
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +40 -0
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +0 -2
- esphome/components/he60r/he60r.h +0 -1
- esphome/components/heatpumpir/climate.py +2 -1
- esphome/components/heatpumpir/heatpumpir.cpp +1 -0
- esphome/components/heatpumpir/heatpumpir.h +1 -0
- esphome/components/honeywellabp2_i2c/honeywellabp2.h +0 -1
- esphome/components/host/__init__.py +3 -1
- esphome/components/host/helpers.cpp +57 -0
- esphome/components/http_request/__init__.py +19 -1
- esphome/components/http_request/http_request.h +1 -1
- esphome/components/http_request/http_request_arduino.h +1 -0
- esphome/components/http_request/ota/ota_http_request.cpp +1 -1
- esphome/components/http_request/update/http_request_update.cpp +28 -9
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +3 -9
- esphome/components/hydreon_rgxx/sensor.py +1 -1
- esphome/components/i2c/__init__.py +23 -11
- esphome/components/i2c/i2c_bus.h +8 -1
- esphome/components/i2c/i2c_bus_arduino.cpp +4 -3
- esphome/components/i2c/i2c_bus_arduino.h +6 -3
- esphome/components/i2c/i2c_bus_esp_idf.h +5 -3
- esphome/components/i2c_device/i2c_device.h +0 -1
- esphome/components/i2s_audio/__init__.py +2 -10
- esphome/components/i2s_audio/i2s_audio.cpp +1 -5
- esphome/components/i2s_audio/media_player/__init__.py +2 -2
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +2 -2
- esphome/components/iaqcore/iaqcore.h +0 -2
- esphome/components/image/__init__.py +123 -24
- esphome/components/improv_serial/improv_serial_component.cpp +0 -4
- esphome/components/ina219/ina219.cpp +7 -0
- esphome/components/ina219/ina219.h +1 -0
- esphome/components/ina260/ina260.h +0 -2
- esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.h +0 -1
- esphome/components/inkplate6/display.py +15 -0
- esphome/components/inkplate6/inkplate.cpp +2 -2
- esphome/components/integration/integration_sensor.h +0 -1
- esphome/components/internal_temperature/internal_temperature.cpp +8 -27
- esphome/components/internal_temperature/sensor.py +0 -26
- esphome/components/interval/interval.h +0 -2
- esphome/components/ld2410/button/__init__.py +3 -3
- esphome/components/ld2410/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2410/button/{reset_button.h → factory_reset_button.h} +2 -2
- esphome/components/ld2410/ld2410.cpp +421 -268
- esphome/components/ld2410/ld2410.h +44 -146
- esphome/components/ld2410/number/__init__.py +2 -2
- esphome/components/ld2410/sensor.py +1 -1
- esphome/components/ld2410/switch/__init__.py +1 -1
- esphome/components/ld2420/ld2420.cpp +196 -100
- esphome/components/ld2420/ld2420.h +46 -118
- esphome/components/ld2420/number/__init__.py +2 -2
- esphome/components/ld2420/sensor/__init__.py +6 -2
- esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
- esphome/components/ld2450/button/__init__.py +3 -3
- esphome/components/ld2450/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2450/button/{reset_button.h → factory_reset_button.h} +2 -2
- esphome/components/ld2450/ld2450.cpp +384 -232
- esphome/components/ld2450/ld2450.h +60 -69
- esphome/components/ld2450/switch/__init__.py +1 -1
- esphome/components/ledc/ledc_output.cpp +1 -63
- esphome/components/libretiny/__init__.py +5 -3
- esphome/components/libretiny/const.py +5 -0
- esphome/components/libretiny/generate_components.py +1 -0
- esphome/components/libretiny/helpers.cpp +35 -0
- esphome/components/libretiny/lt_component.cpp +5 -3
- esphome/components/light/__init__.py +4 -2
- esphome/components/light/addressable_light.h +3 -3
- esphome/components/light/light_call.cpp +180 -243
- esphome/components/light/light_call.h +72 -20
- esphome/components/light/light_color_values.h +14 -14
- esphome/components/light/light_state.h +15 -13
- esphome/components/light/transformers.h +2 -2
- esphome/components/ln882x/__init__.py +52 -0
- esphome/components/ln882x/boards.py +285 -0
- esphome/components/lock/__init__.py +5 -2
- esphome/components/logger/__init__.py +40 -3
- esphome/components/logger/logger.cpp +47 -12
- esphome/components/logger/logger.h +80 -49
- esphome/components/logger/logger_esp32.cpp +3 -3
- esphome/components/lps22/__init__.py +0 -0
- esphome/components/lps22/lps22.cpp +75 -0
- esphome/components/lps22/lps22.h +27 -0
- esphome/components/lps22/sensor.py +58 -0
- esphome/components/ltr390/ltr390.h +0 -1
- esphome/components/ltr501/ltr501.h +0 -1
- esphome/components/ltr_als_ps/ltr_als_ps.h +0 -1
- esphome/components/lvgl/__init__.py +1 -1
- esphome/components/lvgl/schemas.py +66 -6
- esphome/components/lvgl/styles.py +24 -16
- esphome/components/lvgl/widgets/__init__.py +12 -2
- esphome/components/lvgl/widgets/lv_bar.py +40 -19
- esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +1 -1
- esphome/components/max9611/max9611.h +0 -1
- esphome/components/mcp23016/__init__.py +1 -1
- esphome/components/mcp23xxx_base/__init__.py +1 -1
- esphome/components/mcp4461/__init__.py +1 -1
- esphome/components/mcp4461/output/__init__.py +3 -2
- esphome/components/mcp9600/mcp9600.h +0 -2
- esphome/components/md5/md5.cpp +3 -3
- esphome/components/md5/md5.h +1 -6
- esphome/components/mdns/__init__.py +22 -11
- esphome/components/media_player/__init__.py +4 -3
- esphome/components/micro_wake_word/__init__.py +1 -5
- esphome/components/micro_wake_word/streaming_model.cpp +2 -2
- esphome/components/microphone/microphone.cpp +7 -9
- esphome/components/microphone/microphone.h +0 -2
- esphome/components/mipi_spi/display.py +1 -0
- esphome/components/mmc5603/mmc5603.cpp +1 -1
- esphome/components/modbus/modbus.cpp +33 -15
- esphome/components/modbus/modbus.h +9 -0
- esphome/components/modbus_controller/__init__.py +42 -10
- esphome/components/modbus_controller/modbus_controller.cpp +92 -11
- esphome/components/modbus_controller/modbus_controller.h +61 -7
- esphome/components/mopeka_pro_check/mopeka_pro_check.h +0 -1
- esphome/components/mopeka_std_check/mopeka_std_check.h +0 -1
- esphome/components/mpl3115a2/mpl3115a2.h +0 -2
- esphome/components/mqtt/__init__.py +16 -0
- esphome/components/mqtt/mqtt_backend.h +2 -1
- esphome/components/mqtt/mqtt_backend_esp32.cpp +132 -47
- esphome/components/mqtt/mqtt_backend_esp32.h +106 -4
- esphome/components/mqtt/mqtt_client.cpp +15 -9
- esphome/components/mqtt/mqtt_client.h +8 -3
- esphome/components/ms8607/ms8607.h +0 -1
- esphome/components/neopixelbus/light.py +4 -1
- esphome/components/neopixelbus/neopixelbus_light.h +1 -1
- esphome/components/network/__init__.py +4 -1
- esphome/components/network/ip_address.h +1 -0
- esphome/components/nextion/__init__.py +16 -0
- esphome/components/nextion/base_component.py +1 -0
- esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +1 -1
- esphome/components/nextion/display.py +14 -4
- esphome/components/nextion/nextion.cpp +166 -101
- esphome/components/nextion/nextion.h +84 -53
- esphome/components/nextion/nextion_commands.cpp +11 -10
- esphome/components/nextion/nextion_component.cpp +28 -28
- esphome/components/nextion/nextion_component.h +53 -18
- esphome/components/nextion/nextion_component_base.h +3 -0
- esphome/components/nextion/nextion_upload.cpp +36 -0
- esphome/components/nextion/nextion_upload_arduino.cpp +10 -35
- esphome/components/nextion/nextion_upload_idf.cpp +9 -33
- esphome/components/nextion/sensor/nextion_sensor.cpp +1 -1
- esphome/components/nextion/switch/nextion_switch.cpp +1 -1
- esphome/components/nextion/text_sensor/nextion_textsensor.cpp +1 -1
- esphome/components/nfc/nfc.cpp +3 -22
- esphome/components/nfc/nfc.h +3 -3
- esphome/components/number/__init__.py +5 -2
- esphome/components/online_image/__init__.py +5 -0
- esphome/components/online_image/online_image.cpp +6 -2
- esphome/components/online_image/online_image.h +4 -1
- esphome/components/opentherm/opentherm.cpp +7 -12
- esphome/components/openthread/__init__.py +47 -40
- esphome/components/openthread/const.py +1 -0
- esphome/components/openthread/openthread_esp.cpp +27 -5
- esphome/components/opt3001/__init__.py +0 -0
- esphome/components/opt3001/opt3001.cpp +122 -0
- esphome/components/opt3001/opt3001.h +27 -0
- esphome/components/opt3001/sensor.py +35 -0
- esphome/components/ota/__init__.py +17 -0
- esphome/components/ota/ota_backend.h +27 -1
- esphome/components/ota/ota_backend_arduino_esp32.cpp +12 -2
- esphome/components/ota/ota_backend_arduino_esp32.h +3 -0
- esphome/components/ota/ota_backend_arduino_esp8266.cpp +18 -4
- esphome/components/ota/ota_backend_arduino_esp8266.h +3 -0
- esphome/components/ota/ota_backend_arduino_libretiny.cpp +12 -2
- esphome/components/ota/ota_backend_arduino_libretiny.h +3 -0
- esphome/components/ota/ota_backend_arduino_rp2040.cpp +9 -2
- esphome/components/ota/ota_backend_arduino_rp2040.h +3 -0
- esphome/components/ota/ota_backend_esp_idf.cpp +10 -16
- esphome/components/ota/ota_backend_esp_idf.h +1 -0
- esphome/components/packages/__init__.py +5 -2
- esphome/components/packet_transport/binary_sensor.py +61 -4
- esphome/components/packet_transport/packet_transport.cpp +34 -1
- esphome/components/packet_transport/packet_transport.h +11 -5
- esphome/components/pcf8574/__init__.py +1 -1
- esphome/components/pi4ioe5v6408/__init__.py +84 -0
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +171 -0
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.h +70 -0
- esphome/components/pmsa003i/pmsa003i.h +0 -1
- esphome/components/pmsx003/pmsx003.h +0 -1
- esphome/components/pn7150/pn7150.cpp +7 -7
- esphome/components/pn7150/pn7150.h +0 -1
- esphome/components/pn7160/pn7160.cpp +7 -7
- esphome/components/pn7160/pn7160.h +0 -1
- esphome/components/preferences/syncer.h +2 -0
- esphome/components/prometheus/prometheus_handler.h +1 -1
- esphome/components/psram/psram.cpp +0 -20
- esphome/components/pulse_counter/pulse_counter_sensor.h +0 -1
- esphome/components/pulse_meter/pulse_meter_sensor.cpp +8 -4
- esphome/components/pulse_width/pulse_width.h +0 -1
- esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +0 -4
- esphome/components/pvvx_mithermometer/display/pvvx_display.h +0 -2
- esphome/components/pvvx_mithermometer/pvvx_mithermometer.h +0 -1
- esphome/components/qr_code/__init__.py +13 -10
- esphome/components/qwiic_pir/qwiic_pir.h +0 -1
- esphome/components/radon_eye_ble/radon_eye_listener.cpp +1 -1
- esphome/components/rc522/rc522.h +0 -1
- esphome/components/rdm6300/rdm6300.h +0 -2
- esphome/components/remote_base/__init__.py +7 -5
- esphome/components/remote_base/remote_base.cpp +24 -21
- esphome/components/remote_base/remote_base.h +3 -26
- esphome/components/remote_receiver/__init__.py +40 -46
- esphome/components/remote_receiver/remote_receiver.h +4 -18
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -87
- esphome/components/remote_receiver/remote_receiver_esp8266.cpp +1 -1
- esphome/components/remote_transmitter/__init__.py +42 -43
- esphome/components/remote_transmitter/remote_transmitter.h +2 -14
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -77
- esphome/components/resistance/resistance_sensor.h +0 -1
- esphome/components/rp2040/__init__.py +2 -0
- esphome/components/rp2040/helpers.cpp +55 -0
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +2 -2
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -4
- esphome/components/rtttl/__init__.py +4 -4
- esphome/components/rtttl/rtttl.cpp +10 -1
- esphome/components/ruuvitag/ruuvitag.h +0 -1
- esphome/components/safe_mode/safe_mode.cpp +2 -0
- esphome/components/safe_mode/safe_mode.h +4 -1
- esphome/components/scd30/scd30.h +0 -1
- esphome/components/scd30/sensor.py +2 -2
- esphome/components/scd4x/scd4x.cpp +61 -54
- esphome/components/scd4x/scd4x.h +17 -15
- esphome/components/scd4x/sensor.py +4 -4
- esphome/components/script/script.h +0 -2
- esphome/components/sdp3x/sensor.py +1 -1
- esphome/components/select/__init__.py +5 -2
- esphome/components/sen5x/sen5x.h +0 -1
- esphome/components/senseair/senseair.h +0 -1
- esphome/components/sensor/__init__.py +4 -2
- esphome/components/sensor/filter.cpp +1 -1
- esphome/components/sensor/sensor.cpp +12 -6
- esphome/components/sensor/sensor.h +13 -5
- esphome/components/servo/servo.h +0 -1
- esphome/components/sfa30/sfa30.h +0 -1
- esphome/components/sgp30/sgp30.h +0 -1
- esphome/components/sgp4x/sgp4x.h +0 -1
- esphome/components/shelly_dimmer/stm32flash.cpp +1 -2
- esphome/components/sht4x/sht4x.h +0 -1
- esphome/components/sm300d2/sm300d2.h +0 -2
- esphome/components/smt100/sensor.py +8 -4
- esphome/components/smt100/smt100.cpp +5 -5
- esphome/components/smt100/smt100.h +3 -3
- esphome/components/sn74hc595/__init__.py +1 -1
- esphome/components/sn74hc595/sn74hc595.cpp +5 -4
- esphome/components/sntp/sntp_component.cpp +9 -3
- esphome/components/sntp/time.py +2 -0
- esphome/components/socket/__init__.py +17 -0
- esphome/components/spi/__init__.py +27 -6
- esphome/components/spi/spi.cpp +3 -2
- esphome/components/spi/spi.h +9 -3
- esphome/components/spi/spi_arduino.cpp +3 -5
- esphome/components/spi/spi_esp_idf.cpp +40 -21
- esphome/components/spi_led_strip/spi_led_strip.cpp +1 -1
- esphome/components/sps30/sps30.h +0 -1
- esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
- esphome/components/st7701s/st7701s.cpp +0 -4
- esphome/components/status/status_binary_sensor.h +0 -2
- esphome/components/substitutions/__init__.py +76 -19
- esphome/components/substitutions/jinja.py +99 -0
- esphome/components/sun/sun.cpp +3 -4
- esphome/components/switch/__init__.py +5 -2
- esphome/components/switch/binary_sensor/switch_binary_sensor.h +0 -1
- esphome/components/sx126x/__init__.py +317 -0
- esphome/components/sx126x/automation.h +62 -0
- esphome/components/sx126x/packet_transport/__init__.py +26 -0
- esphome/components/sx126x/packet_transport/sx126x_transport.cpp +26 -0
- esphome/components/sx126x/packet_transport/sx126x_transport.h +25 -0
- esphome/components/sx126x/sx126x.cpp +523 -0
- esphome/components/sx126x/sx126x.h +140 -0
- esphome/components/sx126x/sx126x_reg.h +163 -0
- esphome/components/sx127x/__init__.py +325 -0
- esphome/components/sx127x/automation.h +62 -0
- esphome/components/sx127x/packet_transport/__init__.py +26 -0
- esphome/components/sx127x/packet_transport/sx127x_transport.cpp +26 -0
- esphome/components/sx127x/packet_transport/sx127x_transport.h +25 -0
- esphome/components/sx127x/sx127x.cpp +498 -0
- esphome/components/sx127x/sx127x.h +128 -0
- esphome/components/sx127x/sx127x_reg.h +295 -0
- esphome/components/syslog/esphome_syslog.cpp +5 -3
- esphome/components/syslog/esphome_syslog.h +1 -1
- esphome/components/tca9555/__init__.py +1 -1
- esphome/components/template/binary_sensor/template_binary_sensor.cpp +1 -9
- esphome/components/text/__init__.py +5 -2
- esphome/components/text_sensor/__init__.py +5 -2
- esphome/components/thermostat/thermostat_climate.cpp +34 -31
- esphome/components/thermostat/thermostat_climate.h +43 -39
- esphome/components/time/__init__.py +16 -2
- esphome/components/time/real_time_clock.cpp +4 -0
- esphome/components/time/real_time_clock.h +5 -1
- esphome/components/tlc5971/tlc5971.cpp +4 -1
- esphome/components/tmp1075/tmp1075.h +0 -2
- esphome/components/tof10120/tof10120_sensor.h +0 -1
- esphome/components/tormatic/tormatic_cover.h +0 -1
- esphome/components/total_daily_energy/total_daily_energy.h +0 -1
- esphome/components/tsl2591/tsl2591.cpp +1 -1
- esphome/components/ttp229_bsf/ttp229_bsf.h +0 -1
- esphome/components/ttp229_lsf/ttp229_lsf.h +0 -1
- esphome/components/tx20/tx20.cpp +2 -2
- esphome/components/uart/__init__.py +18 -0
- esphome/components/uart/uart_component_esp_idf.cpp +0 -4
- esphome/components/update/__init__.py +5 -2
- esphome/components/update/update_entity.h +8 -0
- esphome/components/usb_host/__init__.py +5 -2
- esphome/components/usb_host/usb_host_client.cpp +10 -10
- esphome/components/usb_uart/cp210x.cpp +1 -1
- esphome/components/usb_uart/usb_uart.cpp +41 -44
- esphome/components/usb_uart/usb_uart.h +4 -3
- esphome/components/valve/__init__.py +5 -2
- esphome/components/vbus/vbus.h +0 -1
- esphome/components/veml3235/veml3235.h +0 -1
- esphome/components/veml7700/veml7700.h +0 -1
- esphome/components/vl53l0x/vl53l0x_sensor.h +0 -1
- esphome/components/voice_assistant/voice_assistant.cpp +4 -4
- esphome/components/watchdog/watchdog.cpp +0 -4
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +6 -6
- esphome/components/web_server/__init__.py +34 -19
- esphome/components/web_server/ota/__init__.py +32 -0
- esphome/components/web_server/ota/ota_web_server.cpp +210 -0
- esphome/components/web_server/ota/ota_web_server.h +26 -0
- esphome/components/web_server/web_server.cpp +305 -427
- esphome/components/web_server/web_server.h +33 -23
- esphome/components/web_server/web_server_v1.cpp +4 -5
- esphome/components/web_server_base/__init__.py +5 -2
- esphome/components/web_server_base/web_server_base.cpp +2 -94
- esphome/components/web_server_base/web_server_base.h +5 -25
- esphome/components/web_server_idf/multipart.cpp +254 -0
- esphome/components/web_server_idf/multipart.h +86 -0
- esphome/components/web_server_idf/utils.cpp +32 -0
- esphome/components/web_server_idf/utils.h +10 -0
- esphome/components/web_server_idf/web_server_idf.cpp +162 -16
- esphome/components/web_server_idf/web_server_idf.h +11 -10
- esphome/components/wiegand/wiegand.cpp +2 -2
- esphome/components/wifi/__init__.py +18 -0
- esphome/components/wifi/wifi_component.cpp +17 -22
- esphome/components/wifi/wifi_component.h +27 -23
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +52 -59
- esphome/components/wifi/wifi_component_esp8266.cpp +46 -46
- esphome/components/wifi/wifi_component_esp_idf.cpp +35 -36
- esphome/components/wifi/wifi_component_libretiny.cpp +26 -27
- esphome/components/wifi/wifi_component_pico_w.cpp +3 -3
- esphome/components/wifi_info/wifi_info_text_sensor.cpp +6 -6
- esphome/components/wireguard/__init__.py +2 -11
- esphome/components/xiaomi_ble/xiaomi_ble.cpp +13 -1
- esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
- esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +0 -1
- esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +0 -1
- esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +0 -1
- esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +0 -1
- esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +0 -1
- esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +0 -1
- esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +0 -1
- esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +0 -1
- esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +0 -1
- esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +0 -1
- esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +0 -1
- esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +0 -1
- esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +0 -1
- esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +0 -1
- esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +0 -1
- esphome/components/xiaomi_miscale/xiaomi_miscale.h +0 -1
- esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +0 -1
- esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +0 -1
- esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +0 -1
- esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +0 -1
- esphome/components/xiaomi_xmwsdj04mmc/__init__.py +0 -0
- esphome/components/xiaomi_xmwsdj04mmc/sensor.py +77 -0
- esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.cpp +77 -0
- esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.h +36 -0
- esphome/components/zio_ultrasonic/zio_ultrasonic.h +0 -2
- esphome/components/zyaura/zyaura.h +0 -1
- esphome/config.py +88 -22
- esphome/config_helpers.py +74 -1
- esphome/config_validation.py +12 -1
- esphome/const.py +65 -10
- esphome/core/__init__.py +18 -2
- esphome/core/application.cpp +163 -10
- esphome/core/application.h +145 -165
- esphome/core/area.h +19 -0
- esphome/core/automation.h +58 -9
- esphome/core/color.cpp +3 -5
- esphome/core/color.h +16 -16
- esphome/core/component.cpp +151 -18
- esphome/core/component.h +98 -4
- esphome/core/component_iterator.cpp +11 -9
- esphome/core/component_iterator.h +12 -10
- esphome/core/config.py +155 -6
- esphome/core/controller.cpp +4 -2
- esphome/core/controller.h +1 -1
- esphome/core/datatypes.h +2 -2
- esphome/core/defines.h +17 -2
- esphome/core/device.h +20 -0
- esphome/core/entity_base.cpp +20 -15
- esphome/core/entity_base.h +76 -0
- esphome/core/entity_helpers.py +168 -1
- esphome/core/event_pool.h +81 -0
- esphome/core/helpers.cpp +75 -230
- esphome/core/helpers.h +164 -104
- esphome/core/lock_free_queue.h +151 -0
- esphome/core/log.cpp +2 -2
- esphome/core/log.h +2 -0
- esphome/core/optional.h +5 -0
- esphome/core/ring_buffer.cpp +2 -2
- esphome/core/scheduler.cpp +275 -103
- esphome/core/scheduler.h +154 -17
- esphome/core/time.cpp +5 -5
- esphome/core/time.h +5 -5
- esphome/cpp_generator.py +17 -0
- esphome/cpp_helpers.py +0 -22
- esphome/cpp_types.py +3 -1
- esphome/dashboard/entries.py +1 -1
- esphome/dashboard/util/text.py +5 -21
- esphome/dashboard/web_server.py +9 -1
- esphome/helpers.py +47 -0
- esphome/loader.py +15 -1
- esphome/pins.py +14 -8
- esphome/wizard.py +17 -4
- esphome/writer.py +21 -3
- esphome/yaml_util.py +0 -2
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/METADATA +10 -9
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/RECORD +597 -538
- esphome/components/api/api_pb2_size.h +0 -361
- esphome/components/esp32_ble/ble_event_pool.h +0 -72
- esphome/components/esp32_ble/queue.h +0 -85
- esphome/components/esp32_hall/esp32_hall.cpp +0 -25
- esphome/components/esp32_hall/esp32_hall.h +0 -23
- esphome/components/esp32_touch/esp32_touch.cpp +0 -355
- esphome/components/ld2410/button/reset_button.cpp +0 -9
- esphome/components/ld2450/button/reset_button.cpp +0 -9
- esphome/components/openthread/tlv.py +0 -65
- /esphome/{dashboard/enum.py → enum.py} +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/WHEEL +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/entry_points.txt +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/top_level.txt +0 -0
esphome/core/application.h
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
+
#include <algorithm>
|
|
4
|
+
#include <limits>
|
|
3
5
|
#include <string>
|
|
4
6
|
#include <vector>
|
|
5
7
|
#include "esphome/core/component.h"
|
|
@@ -9,6 +11,13 @@
|
|
|
9
11
|
#include "esphome/core/preferences.h"
|
|
10
12
|
#include "esphome/core/scheduler.h"
|
|
11
13
|
|
|
14
|
+
#ifdef USE_DEVICES
|
|
15
|
+
#include "esphome/core/device.h"
|
|
16
|
+
#endif
|
|
17
|
+
#ifdef USE_AREAS
|
|
18
|
+
#include "esphome/core/area.h"
|
|
19
|
+
#endif
|
|
20
|
+
|
|
12
21
|
#ifdef USE_SOCKET_SELECT_SUPPORT
|
|
13
22
|
#include <sys/select.h>
|
|
14
23
|
#endif
|
|
@@ -87,7 +96,7 @@ static const uint32_t TEARDOWN_TIMEOUT_REBOOT_MS = 1000; // 1 second for quick
|
|
|
87
96
|
|
|
88
97
|
class Application {
|
|
89
98
|
public:
|
|
90
|
-
void pre_setup(const std::string &name, const std::string &friendly_name, const char *
|
|
99
|
+
void pre_setup(const std::string &name, const std::string &friendly_name, const char *comment,
|
|
91
100
|
const char *compilation_time, bool name_add_mac_suffix) {
|
|
92
101
|
arch_init();
|
|
93
102
|
this->name_add_mac_suffix_ = name_add_mac_suffix;
|
|
@@ -102,11 +111,17 @@ class Application {
|
|
|
102
111
|
this->name_ = name;
|
|
103
112
|
this->friendly_name_ = friendly_name;
|
|
104
113
|
}
|
|
105
|
-
this->area_ = area;
|
|
106
114
|
this->comment_ = comment;
|
|
107
115
|
this->compilation_time_ = compilation_time;
|
|
108
116
|
}
|
|
109
117
|
|
|
118
|
+
#ifdef USE_DEVICES
|
|
119
|
+
void register_device(Device *device) { this->devices_.push_back(device); }
|
|
120
|
+
#endif
|
|
121
|
+
#ifdef USE_AREAS
|
|
122
|
+
void register_area(Area *area) { this->areas_.push_back(area); }
|
|
123
|
+
#endif
|
|
124
|
+
|
|
110
125
|
void set_current_component(Component *component) { this->current_component_ = component; }
|
|
111
126
|
Component *get_current_component() { return this->current_component_; }
|
|
112
127
|
|
|
@@ -264,6 +279,12 @@ class Application {
|
|
|
264
279
|
#ifdef USE_UPDATE
|
|
265
280
|
void reserve_update(size_t count) { this->updates_.reserve(count); }
|
|
266
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
|
|
267
288
|
|
|
268
289
|
/// Register the component in this Application instance.
|
|
269
290
|
template<class C> C *register_component(C *c) {
|
|
@@ -285,7 +306,15 @@ class Application {
|
|
|
285
306
|
const std::string &get_friendly_name() const { return this->friendly_name_; }
|
|
286
307
|
|
|
287
308
|
/// Get the area of this Application set by pre_setup().
|
|
288
|
-
|
|
309
|
+
const char *get_area() const {
|
|
310
|
+
#ifdef USE_AREAS
|
|
311
|
+
// If we have areas registered, return the name of the first one (which is the top-level area)
|
|
312
|
+
if (!this->areas_.empty() && this->areas_[0] != nullptr) {
|
|
313
|
+
return this->areas_[0]->get_name();
|
|
314
|
+
}
|
|
315
|
+
#endif
|
|
316
|
+
return "";
|
|
317
|
+
}
|
|
289
318
|
|
|
290
319
|
/// Get the comment of this Application set by pre_setup().
|
|
291
320
|
std::string get_comment() const { return this->comment_; }
|
|
@@ -308,11 +337,16 @@ class Application {
|
|
|
308
337
|
* Each component can request a high frequency loop execution by using the HighFrequencyLoopRequester
|
|
309
338
|
* helper in helpers.h
|
|
310
339
|
*
|
|
340
|
+
* Note: This method is not called by ESPHome core code. It is only used by lambda functions
|
|
341
|
+
* in YAML configurations or by external components.
|
|
342
|
+
*
|
|
311
343
|
* @param loop_interval The interval in milliseconds to run the core loop at. Defaults to 16 milliseconds.
|
|
312
344
|
*/
|
|
313
|
-
void set_loop_interval(uint32_t loop_interval) {
|
|
345
|
+
void set_loop_interval(uint32_t loop_interval) {
|
|
346
|
+
this->loop_interval_ = std::min(loop_interval, static_cast<uint32_t>(std::numeric_limits<uint16_t>::max()));
|
|
347
|
+
}
|
|
314
348
|
|
|
315
|
-
uint32_t get_loop_interval() const { return this->loop_interval_; }
|
|
349
|
+
uint32_t get_loop_interval() const { return static_cast<uint32_t>(this->loop_interval_); }
|
|
316
350
|
|
|
317
351
|
void schedule_dump_config() { this->dump_config_at_ = 0; }
|
|
318
352
|
|
|
@@ -334,220 +368,111 @@ class Application {
|
|
|
334
368
|
|
|
335
369
|
uint8_t get_app_state() const { return this->app_state_; }
|
|
336
370
|
|
|
371
|
+
// Helper macro for entity getter method declarations - reduces code duplication
|
|
372
|
+
// When USE_DEVICE_ID is enabled in the future, this can be conditionally compiled to add device_id parameter
|
|
373
|
+
#define GET_ENTITY_METHOD(entity_type, entity_name, entities_member) \
|
|
374
|
+
entity_type *get_##entity_name##_by_key(uint32_t key, bool include_internal = false) { \
|
|
375
|
+
for (auto *obj : this->entities_member##_) { \
|
|
376
|
+
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal())) \
|
|
377
|
+
return obj; \
|
|
378
|
+
} \
|
|
379
|
+
return nullptr; \
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
#ifdef USE_DEVICES
|
|
383
|
+
const std::vector<Device *> &get_devices() { return this->devices_; }
|
|
384
|
+
#endif
|
|
385
|
+
#ifdef USE_AREAS
|
|
386
|
+
const std::vector<Area *> &get_areas() { return this->areas_; }
|
|
387
|
+
#endif
|
|
337
388
|
#ifdef USE_BINARY_SENSOR
|
|
338
389
|
const std::vector<binary_sensor::BinarySensor *> &get_binary_sensors() { return this->binary_sensors_; }
|
|
339
|
-
binary_sensor::BinarySensor
|
|
340
|
-
for (auto *obj : this->binary_sensors_) {
|
|
341
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
342
|
-
return obj;
|
|
343
|
-
}
|
|
344
|
-
return nullptr;
|
|
345
|
-
}
|
|
390
|
+
GET_ENTITY_METHOD(binary_sensor::BinarySensor, binary_sensor, binary_sensors)
|
|
346
391
|
#endif
|
|
347
392
|
#ifdef USE_SWITCH
|
|
348
393
|
const std::vector<switch_::Switch *> &get_switches() { return this->switches_; }
|
|
349
|
-
switch_::Switch
|
|
350
|
-
for (auto *obj : this->switches_) {
|
|
351
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
352
|
-
return obj;
|
|
353
|
-
}
|
|
354
|
-
return nullptr;
|
|
355
|
-
}
|
|
394
|
+
GET_ENTITY_METHOD(switch_::Switch, switch, switches)
|
|
356
395
|
#endif
|
|
357
396
|
#ifdef USE_BUTTON
|
|
358
397
|
const std::vector<button::Button *> &get_buttons() { return this->buttons_; }
|
|
359
|
-
button::Button
|
|
360
|
-
for (auto *obj : this->buttons_) {
|
|
361
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
362
|
-
return obj;
|
|
363
|
-
}
|
|
364
|
-
return nullptr;
|
|
365
|
-
}
|
|
398
|
+
GET_ENTITY_METHOD(button::Button, button, buttons)
|
|
366
399
|
#endif
|
|
367
400
|
#ifdef USE_SENSOR
|
|
368
401
|
const std::vector<sensor::Sensor *> &get_sensors() { return this->sensors_; }
|
|
369
|
-
sensor::Sensor
|
|
370
|
-
for (auto *obj : this->sensors_) {
|
|
371
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
372
|
-
return obj;
|
|
373
|
-
}
|
|
374
|
-
return nullptr;
|
|
375
|
-
}
|
|
402
|
+
GET_ENTITY_METHOD(sensor::Sensor, sensor, sensors)
|
|
376
403
|
#endif
|
|
377
404
|
#ifdef USE_TEXT_SENSOR
|
|
378
405
|
const std::vector<text_sensor::TextSensor *> &get_text_sensors() { return this->text_sensors_; }
|
|
379
|
-
text_sensor::TextSensor
|
|
380
|
-
for (auto *obj : this->text_sensors_) {
|
|
381
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
382
|
-
return obj;
|
|
383
|
-
}
|
|
384
|
-
return nullptr;
|
|
385
|
-
}
|
|
406
|
+
GET_ENTITY_METHOD(text_sensor::TextSensor, text_sensor, text_sensors)
|
|
386
407
|
#endif
|
|
387
408
|
#ifdef USE_FAN
|
|
388
409
|
const std::vector<fan::Fan *> &get_fans() { return this->fans_; }
|
|
389
|
-
fan::Fan
|
|
390
|
-
for (auto *obj : this->fans_) {
|
|
391
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
392
|
-
return obj;
|
|
393
|
-
}
|
|
394
|
-
return nullptr;
|
|
395
|
-
}
|
|
410
|
+
GET_ENTITY_METHOD(fan::Fan, fan, fans)
|
|
396
411
|
#endif
|
|
397
412
|
#ifdef USE_COVER
|
|
398
413
|
const std::vector<cover::Cover *> &get_covers() { return this->covers_; }
|
|
399
|
-
cover::Cover
|
|
400
|
-
for (auto *obj : this->covers_) {
|
|
401
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
402
|
-
return obj;
|
|
403
|
-
}
|
|
404
|
-
return nullptr;
|
|
405
|
-
}
|
|
414
|
+
GET_ENTITY_METHOD(cover::Cover, cover, covers)
|
|
406
415
|
#endif
|
|
407
416
|
#ifdef USE_LIGHT
|
|
408
417
|
const std::vector<light::LightState *> &get_lights() { return this->lights_; }
|
|
409
|
-
light::LightState
|
|
410
|
-
for (auto *obj : this->lights_) {
|
|
411
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
412
|
-
return obj;
|
|
413
|
-
}
|
|
414
|
-
return nullptr;
|
|
415
|
-
}
|
|
418
|
+
GET_ENTITY_METHOD(light::LightState, light, lights)
|
|
416
419
|
#endif
|
|
417
420
|
#ifdef USE_CLIMATE
|
|
418
421
|
const std::vector<climate::Climate *> &get_climates() { return this->climates_; }
|
|
419
|
-
climate::Climate
|
|
420
|
-
for (auto *obj : this->climates_) {
|
|
421
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
422
|
-
return obj;
|
|
423
|
-
}
|
|
424
|
-
return nullptr;
|
|
425
|
-
}
|
|
422
|
+
GET_ENTITY_METHOD(climate::Climate, climate, climates)
|
|
426
423
|
#endif
|
|
427
424
|
#ifdef USE_NUMBER
|
|
428
425
|
const std::vector<number::Number *> &get_numbers() { return this->numbers_; }
|
|
429
|
-
number::Number
|
|
430
|
-
for (auto *obj : this->numbers_) {
|
|
431
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
432
|
-
return obj;
|
|
433
|
-
}
|
|
434
|
-
return nullptr;
|
|
435
|
-
}
|
|
426
|
+
GET_ENTITY_METHOD(number::Number, number, numbers)
|
|
436
427
|
#endif
|
|
437
428
|
#ifdef USE_DATETIME_DATE
|
|
438
429
|
const std::vector<datetime::DateEntity *> &get_dates() { return this->dates_; }
|
|
439
|
-
datetime::DateEntity
|
|
440
|
-
for (auto *obj : this->dates_) {
|
|
441
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
442
|
-
return obj;
|
|
443
|
-
}
|
|
444
|
-
return nullptr;
|
|
445
|
-
}
|
|
430
|
+
GET_ENTITY_METHOD(datetime::DateEntity, date, dates)
|
|
446
431
|
#endif
|
|
447
432
|
#ifdef USE_DATETIME_TIME
|
|
448
433
|
const std::vector<datetime::TimeEntity *> &get_times() { return this->times_; }
|
|
449
|
-
datetime::TimeEntity
|
|
450
|
-
for (auto *obj : this->times_) {
|
|
451
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
452
|
-
return obj;
|
|
453
|
-
}
|
|
454
|
-
return nullptr;
|
|
455
|
-
}
|
|
434
|
+
GET_ENTITY_METHOD(datetime::TimeEntity, time, times)
|
|
456
435
|
#endif
|
|
457
436
|
#ifdef USE_DATETIME_DATETIME
|
|
458
437
|
const std::vector<datetime::DateTimeEntity *> &get_datetimes() { return this->datetimes_; }
|
|
459
|
-
datetime::DateTimeEntity
|
|
460
|
-
for (auto *obj : this->datetimes_) {
|
|
461
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
462
|
-
return obj;
|
|
463
|
-
}
|
|
464
|
-
return nullptr;
|
|
465
|
-
}
|
|
438
|
+
GET_ENTITY_METHOD(datetime::DateTimeEntity, datetime, datetimes)
|
|
466
439
|
#endif
|
|
467
440
|
#ifdef USE_TEXT
|
|
468
441
|
const std::vector<text::Text *> &get_texts() { return this->texts_; }
|
|
469
|
-
text::Text
|
|
470
|
-
for (auto *obj : this->texts_) {
|
|
471
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
472
|
-
return obj;
|
|
473
|
-
}
|
|
474
|
-
return nullptr;
|
|
475
|
-
}
|
|
442
|
+
GET_ENTITY_METHOD(text::Text, text, texts)
|
|
476
443
|
#endif
|
|
477
444
|
#ifdef USE_SELECT
|
|
478
445
|
const std::vector<select::Select *> &get_selects() { return this->selects_; }
|
|
479
|
-
select::Select
|
|
480
|
-
for (auto *obj : this->selects_) {
|
|
481
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
482
|
-
return obj;
|
|
483
|
-
}
|
|
484
|
-
return nullptr;
|
|
485
|
-
}
|
|
446
|
+
GET_ENTITY_METHOD(select::Select, select, selects)
|
|
486
447
|
#endif
|
|
487
448
|
#ifdef USE_LOCK
|
|
488
449
|
const std::vector<lock::Lock *> &get_locks() { return this->locks_; }
|
|
489
|
-
lock::Lock
|
|
490
|
-
for (auto *obj : this->locks_) {
|
|
491
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
492
|
-
return obj;
|
|
493
|
-
}
|
|
494
|
-
return nullptr;
|
|
495
|
-
}
|
|
450
|
+
GET_ENTITY_METHOD(lock::Lock, lock, locks)
|
|
496
451
|
#endif
|
|
497
452
|
#ifdef USE_VALVE
|
|
498
453
|
const std::vector<valve::Valve *> &get_valves() { return this->valves_; }
|
|
499
|
-
valve::Valve
|
|
500
|
-
for (auto *obj : this->valves_) {
|
|
501
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
502
|
-
return obj;
|
|
503
|
-
}
|
|
504
|
-
return nullptr;
|
|
505
|
-
}
|
|
454
|
+
GET_ENTITY_METHOD(valve::Valve, valve, valves)
|
|
506
455
|
#endif
|
|
507
456
|
#ifdef USE_MEDIA_PLAYER
|
|
508
457
|
const std::vector<media_player::MediaPlayer *> &get_media_players() { return this->media_players_; }
|
|
509
|
-
media_player::MediaPlayer
|
|
510
|
-
for (auto *obj : this->media_players_) {
|
|
511
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
512
|
-
return obj;
|
|
513
|
-
}
|
|
514
|
-
return nullptr;
|
|
515
|
-
}
|
|
458
|
+
GET_ENTITY_METHOD(media_player::MediaPlayer, media_player, media_players)
|
|
516
459
|
#endif
|
|
517
460
|
|
|
518
461
|
#ifdef USE_ALARM_CONTROL_PANEL
|
|
519
462
|
const std::vector<alarm_control_panel::AlarmControlPanel *> &get_alarm_control_panels() {
|
|
520
463
|
return this->alarm_control_panels_;
|
|
521
464
|
}
|
|
522
|
-
alarm_control_panel::AlarmControlPanel
|
|
523
|
-
for (auto *obj : this->alarm_control_panels_) {
|
|
524
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
525
|
-
return obj;
|
|
526
|
-
}
|
|
527
|
-
return nullptr;
|
|
528
|
-
}
|
|
465
|
+
GET_ENTITY_METHOD(alarm_control_panel::AlarmControlPanel, alarm_control_panel, alarm_control_panels)
|
|
529
466
|
#endif
|
|
530
467
|
|
|
531
468
|
#ifdef USE_EVENT
|
|
532
469
|
const std::vector<event::Event *> &get_events() { return this->events_; }
|
|
533
|
-
event::Event
|
|
534
|
-
for (auto *obj : this->events_) {
|
|
535
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
536
|
-
return obj;
|
|
537
|
-
}
|
|
538
|
-
return nullptr;
|
|
539
|
-
}
|
|
470
|
+
GET_ENTITY_METHOD(event::Event, event, events)
|
|
540
471
|
#endif
|
|
541
472
|
|
|
542
473
|
#ifdef USE_UPDATE
|
|
543
474
|
const std::vector<update::UpdateEntity *> &get_updates() { return this->updates_; }
|
|
544
|
-
update::UpdateEntity
|
|
545
|
-
for (auto *obj : this->updates_) {
|
|
546
|
-
if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal()))
|
|
547
|
-
return obj;
|
|
548
|
-
}
|
|
549
|
-
return nullptr;
|
|
550
|
-
}
|
|
475
|
+
GET_ENTITY_METHOD(update::UpdateEntity, update, updates)
|
|
551
476
|
#endif
|
|
552
477
|
|
|
553
478
|
Scheduler scheduler;
|
|
@@ -572,14 +497,56 @@ class Application {
|
|
|
572
497
|
|
|
573
498
|
void calculate_looping_components_();
|
|
574
499
|
|
|
500
|
+
// These methods are called by Component::disable_loop() and Component::enable_loop()
|
|
501
|
+
// Components should not call these directly - use this->disable_loop() or this->enable_loop()
|
|
502
|
+
// to ensure component state is properly updated along with the loop partition
|
|
503
|
+
void disable_component_loop_(Component *component);
|
|
504
|
+
void enable_component_loop_(Component *component);
|
|
505
|
+
void enable_pending_loops_();
|
|
506
|
+
void activate_looping_component_(uint16_t index);
|
|
507
|
+
|
|
575
508
|
void feed_wdt_arch_();
|
|
576
509
|
|
|
577
510
|
/// Perform a delay while also monitoring socket file descriptors for readiness
|
|
578
511
|
void yield_with_select_(uint32_t delay_ms);
|
|
579
512
|
|
|
513
|
+
// === Member variables ordered by size to minimize padding ===
|
|
514
|
+
|
|
515
|
+
// Pointer-sized members first
|
|
516
|
+
Component *current_component_{nullptr};
|
|
517
|
+
const char *comment_{nullptr};
|
|
518
|
+
const char *compilation_time_{nullptr};
|
|
519
|
+
|
|
520
|
+
// size_t members
|
|
521
|
+
size_t dump_config_at_{SIZE_MAX};
|
|
522
|
+
|
|
523
|
+
// Vectors (largest members)
|
|
580
524
|
std::vector<Component *> components_{};
|
|
525
|
+
|
|
526
|
+
// Partitioned vector design for looping components
|
|
527
|
+
// =================================================
|
|
528
|
+
// Components are partitioned into [active | inactive] sections:
|
|
529
|
+
//
|
|
530
|
+
// looping_components_: [A, B, C, D | E, F]
|
|
531
|
+
// ^
|
|
532
|
+
// looping_components_active_end_ (4)
|
|
533
|
+
//
|
|
534
|
+
// - Components A,B,C,D are active and will be called in loop()
|
|
535
|
+
// - Components E,F are inactive (disabled/failed) and won't be called
|
|
536
|
+
// - No flag checking needed during iteration - just loop 0 to active_end_
|
|
537
|
+
// - When a component is disabled, it's swapped with the last active component
|
|
538
|
+
// and active_end_ is decremented
|
|
539
|
+
// - When a component is enabled, it's swapped with the first inactive component
|
|
540
|
+
// and active_end_ is incremented
|
|
541
|
+
// - This eliminates branch mispredictions from flag checking in the hot loop
|
|
581
542
|
std::vector<Component *> looping_components_{};
|
|
582
543
|
|
|
544
|
+
#ifdef USE_DEVICES
|
|
545
|
+
std::vector<Device *> devices_{};
|
|
546
|
+
#endif
|
|
547
|
+
#ifdef USE_AREAS
|
|
548
|
+
std::vector<Area *> areas_{};
|
|
549
|
+
#endif
|
|
583
550
|
#ifdef USE_BINARY_SENSOR
|
|
584
551
|
std::vector<binary_sensor::BinarySensor *> binary_sensors_{};
|
|
585
552
|
#endif
|
|
@@ -644,26 +611,39 @@ class Application {
|
|
|
644
611
|
std::vector<update::UpdateEntity *> updates_{};
|
|
645
612
|
#endif
|
|
646
613
|
|
|
614
|
+
#ifdef USE_SOCKET_SELECT_SUPPORT
|
|
615
|
+
std::vector<int> socket_fds_; // Vector of all monitored socket file descriptors
|
|
616
|
+
#endif
|
|
617
|
+
|
|
618
|
+
// String members
|
|
647
619
|
std::string name_;
|
|
648
620
|
std::string friendly_name_;
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
const char *compilation_time_{nullptr};
|
|
652
|
-
bool name_add_mac_suffix_;
|
|
621
|
+
|
|
622
|
+
// 4-byte members
|
|
653
623
|
uint32_t last_loop_{0};
|
|
654
|
-
uint32_t loop_interval_{16};
|
|
655
|
-
size_t dump_config_at_{SIZE_MAX};
|
|
656
|
-
uint8_t app_state_{0};
|
|
657
|
-
Component *current_component_{nullptr};
|
|
658
624
|
uint32_t loop_component_start_time_{0};
|
|
659
625
|
|
|
660
626
|
#ifdef USE_SOCKET_SELECT_SUPPORT
|
|
661
|
-
//
|
|
662
|
-
|
|
627
|
+
int max_fd_{-1}; // Highest file descriptor number for select()
|
|
628
|
+
#endif
|
|
629
|
+
|
|
630
|
+
// 2-byte members (grouped together for alignment)
|
|
631
|
+
uint16_t loop_interval_{16}; // Loop interval in ms (max 65535ms = 65.5 seconds)
|
|
632
|
+
uint16_t looping_components_active_end_{0};
|
|
633
|
+
uint16_t current_loop_index_{0}; // For safe reentrant modifications during iteration
|
|
634
|
+
|
|
635
|
+
// 1-byte members (grouped together to minimize padding)
|
|
636
|
+
uint8_t app_state_{0};
|
|
637
|
+
bool name_add_mac_suffix_;
|
|
638
|
+
bool in_loop_{false};
|
|
639
|
+
volatile bool has_pending_enable_loop_requests_{false};
|
|
640
|
+
|
|
641
|
+
#ifdef USE_SOCKET_SELECT_SUPPORT
|
|
663
642
|
bool socket_fds_changed_{false}; // Flag to rebuild base_read_fds_ when socket_fds_ changes
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
fd_set
|
|
643
|
+
|
|
644
|
+
// Variable-sized members at end
|
|
645
|
+
fd_set base_read_fds_{}; // Cached fd_set rebuilt only when socket_fds_ changes
|
|
646
|
+
fd_set read_fds_{}; // Working fd_set for select(), copied from base_read_fds_
|
|
667
647
|
#endif
|
|
668
648
|
};
|
|
669
649
|
|
esphome/core/area.h
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <cstdint>
|
|
4
|
+
|
|
5
|
+
namespace esphome {
|
|
6
|
+
|
|
7
|
+
class Area {
|
|
8
|
+
public:
|
|
9
|
+
void set_area_id(uint32_t area_id) { this->area_id_ = area_id; }
|
|
10
|
+
uint32_t get_area_id() { return this->area_id_; }
|
|
11
|
+
void set_name(const char *name) { this->name_ = name; }
|
|
12
|
+
const char *get_name() { return this->name_; }
|
|
13
|
+
|
|
14
|
+
protected:
|
|
15
|
+
uint32_t area_id_{};
|
|
16
|
+
const char *name_ = "";
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
} // namespace esphome
|
esphome/core/automation.h
CHANGED
|
@@ -27,20 +27,67 @@ template<typename T, typename... X> class TemplatableValue {
|
|
|
27
27
|
public:
|
|
28
28
|
TemplatableValue() : type_(NONE) {}
|
|
29
29
|
|
|
30
|
-
template<typename F, enable_if_t<!is_invocable<F, X...>::value, int> = 0>
|
|
31
|
-
|
|
30
|
+
template<typename F, enable_if_t<!is_invocable<F, X...>::value, int> = 0> TemplatableValue(F value) : type_(VALUE) {
|
|
31
|
+
new (&this->value_) T(std::move(value));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
template<typename F, enable_if_t<is_invocable<F, X...>::value, int> = 0> TemplatableValue(F f) : type_(LAMBDA) {
|
|
35
|
+
this->f_ = new std::function<T(X...)>(std::move(f));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Copy constructor
|
|
39
|
+
TemplatableValue(const TemplatableValue &other) : type_(other.type_) {
|
|
40
|
+
if (type_ == VALUE) {
|
|
41
|
+
new (&this->value_) T(other.value_);
|
|
42
|
+
} else if (type_ == LAMBDA) {
|
|
43
|
+
this->f_ = new std::function<T(X...)>(*other.f_);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Move constructor
|
|
48
|
+
TemplatableValue(TemplatableValue &&other) noexcept : type_(other.type_) {
|
|
49
|
+
if (type_ == VALUE) {
|
|
50
|
+
new (&this->value_) T(std::move(other.value_));
|
|
51
|
+
} else if (type_ == LAMBDA) {
|
|
52
|
+
this->f_ = other.f_;
|
|
53
|
+
other.f_ = nullptr;
|
|
54
|
+
}
|
|
55
|
+
other.type_ = NONE;
|
|
56
|
+
}
|
|
32
57
|
|
|
33
|
-
|
|
34
|
-
TemplatableValue(
|
|
58
|
+
// Assignment operators
|
|
59
|
+
TemplatableValue &operator=(const TemplatableValue &other) {
|
|
60
|
+
if (this != &other) {
|
|
61
|
+
this->~TemplatableValue();
|
|
62
|
+
new (this) TemplatableValue(other);
|
|
63
|
+
}
|
|
64
|
+
return *this;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
TemplatableValue &operator=(TemplatableValue &&other) noexcept {
|
|
68
|
+
if (this != &other) {
|
|
69
|
+
this->~TemplatableValue();
|
|
70
|
+
new (this) TemplatableValue(std::move(other));
|
|
71
|
+
}
|
|
72
|
+
return *this;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
~TemplatableValue() {
|
|
76
|
+
if (type_ == VALUE) {
|
|
77
|
+
this->value_.~T();
|
|
78
|
+
} else if (type_ == LAMBDA) {
|
|
79
|
+
delete this->f_;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
35
82
|
|
|
36
83
|
bool has_value() { return this->type_ != NONE; }
|
|
37
84
|
|
|
38
85
|
T value(X... x) {
|
|
39
86
|
if (this->type_ == LAMBDA) {
|
|
40
|
-
return this->f_(x...);
|
|
87
|
+
return (*this->f_)(x...);
|
|
41
88
|
}
|
|
42
89
|
// return value also when none
|
|
43
|
-
return this->value_;
|
|
90
|
+
return this->type_ == VALUE ? this->value_ : T{};
|
|
44
91
|
}
|
|
45
92
|
|
|
46
93
|
optional<T> optional_value(X... x) {
|
|
@@ -58,14 +105,16 @@ template<typename T, typename... X> class TemplatableValue {
|
|
|
58
105
|
}
|
|
59
106
|
|
|
60
107
|
protected:
|
|
61
|
-
enum {
|
|
108
|
+
enum : uint8_t {
|
|
62
109
|
NONE,
|
|
63
110
|
VALUE,
|
|
64
111
|
LAMBDA,
|
|
65
112
|
} type_;
|
|
66
113
|
|
|
67
|
-
|
|
68
|
-
|
|
114
|
+
union {
|
|
115
|
+
T value_;
|
|
116
|
+
std::function<T(X...)> *f_;
|
|
117
|
+
};
|
|
69
118
|
};
|
|
70
119
|
|
|
71
120
|
/** Base class for all automation conditions.
|
esphome/core/color.cpp
CHANGED
|
@@ -2,10 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
namespace esphome {
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
const Color Color::
|
|
7
|
-
|
|
8
|
-
const Color COLOR_BLACK(0, 0, 0, 0);
|
|
9
|
-
const Color COLOR_WHITE(255, 255, 255, 255);
|
|
5
|
+
// C++20 constinit ensures compile-time initialization (stored in ROM)
|
|
6
|
+
constinit const Color Color::BLACK(0, 0, 0, 0);
|
|
7
|
+
constinit const Color Color::WHITE(255, 255, 255, 255);
|
|
10
8
|
|
|
11
9
|
} // namespace esphome
|
esphome/core/color.h
CHANGED
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
namespace esphome {
|
|
7
7
|
|
|
8
|
-
inline static uint8_t esp_scale8(uint8_t i, uint8_t scale) {
|
|
8
|
+
inline static constexpr uint8_t esp_scale8(uint8_t i, uint8_t scale) {
|
|
9
|
+
return (uint16_t(i) * (1 + uint16_t(scale))) / 256;
|
|
10
|
+
}
|
|
9
11
|
|
|
10
12
|
struct Color {
|
|
11
13
|
union {
|
|
@@ -31,17 +33,20 @@ struct Color {
|
|
|
31
33
|
uint32_t raw_32;
|
|
32
34
|
};
|
|
33
35
|
|
|
34
|
-
inline Color() ESPHOME_ALWAYS_INLINE :
|
|
35
|
-
inline Color(uint8_t red, uint8_t green, uint8_t blue) ESPHOME_ALWAYS_INLINE : r(red),
|
|
36
|
+
inline constexpr Color() ESPHOME_ALWAYS_INLINE : raw_32(0) {} // NOLINT
|
|
37
|
+
inline constexpr Color(uint8_t red, uint8_t green, uint8_t blue) ESPHOME_ALWAYS_INLINE : r(red),
|
|
38
|
+
g(green),
|
|
39
|
+
b(blue),
|
|
40
|
+
w(0) {}
|
|
36
41
|
|
|
37
|
-
inline Color(uint8_t red, uint8_t green, uint8_t blue, uint8_t white) ESPHOME_ALWAYS_INLINE : r(red),
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
inline explicit Color(uint32_t colorcode) ESPHOME_ALWAYS_INLINE : r((colorcode >> 16) & 0xFF),
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
inline constexpr Color(uint8_t red, uint8_t green, uint8_t blue, uint8_t white) ESPHOME_ALWAYS_INLINE : r(red),
|
|
43
|
+
g(green),
|
|
44
|
+
b(blue),
|
|
45
|
+
w(white) {}
|
|
46
|
+
inline explicit constexpr Color(uint32_t colorcode) ESPHOME_ALWAYS_INLINE : r((colorcode >> 16) & 0xFF),
|
|
47
|
+
g((colorcode >> 8) & 0xFF),
|
|
48
|
+
b((colorcode >> 0) & 0xFF),
|
|
49
|
+
w((colorcode >> 24) & 0xFF) {}
|
|
45
50
|
|
|
46
51
|
inline bool is_on() ESPHOME_ALWAYS_INLINE { return this->raw_32 != 0; }
|
|
47
52
|
|
|
@@ -169,9 +174,4 @@ struct Color {
|
|
|
169
174
|
static const Color WHITE;
|
|
170
175
|
};
|
|
171
176
|
|
|
172
|
-
ESPDEPRECATED("Use Color::BLACK instead of COLOR_BLACK", "v1.21")
|
|
173
|
-
extern const Color COLOR_BLACK;
|
|
174
|
-
ESPDEPRECATED("Use Color::WHITE instead of COLOR_WHITE", "v1.21")
|
|
175
|
-
extern const Color COLOR_WHITE;
|
|
176
|
-
|
|
177
177
|
} // namespace esphome
|