esphome 2025.6.2__py3-none-any.whl → 2025.7.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- esphome/__main__.py +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 +10 -4
- 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/as3935_spi/as3935_spi.h +0 -2
- 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/esp_ldo/__init__.py +10 -8
- esphome/components/esp_ldo/esp_ldo.h +3 -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/fan/fan.cpp +4 -0
- 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 +39 -1
- 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.cpp +0 -1
- esphome/components/http_request/http_request_arduino.h +1 -0
- esphome/components/http_request/http_request_idf.cpp +0 -1
- esphome/components/http_request/ota/ota_http_request.cpp +1 -1
- esphome/components/http_request/update/http_request_update.cpp +35 -16
- 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/__init__.py +1 -1
- 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/json/__init__.py +1 -1
- esphome/components/json/json_util.cpp +56 -63
- 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/binary_sensor/ld2420_binary_sensor.cpp +2 -2
- esphome/components/ld2420/button/reconfig_buttons.cpp +1 -1
- esphome/components/ld2420/ld2420.cpp +252 -147
- esphome/components/ld2420/ld2420.h +52 -126
- esphome/components/ld2420/number/__init__.py +2 -2
- esphome/components/ld2420/number/gate_config_number.cpp +1 -1
- esphome/components/ld2420/select/operating_mode_select.cpp +1 -1
- esphome/components/ld2420/sensor/__init__.py +6 -2
- esphome/components/ld2420/sensor/ld2420_sensor.cpp +2 -2
- esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
- esphome/components/ld2420/text_sensor/text_sensor.cpp +2 -2
- 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_json_schema.cpp +17 -16
- 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/lvgl/widgets/meter.py +20 -13
- 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_alarm_control_panel.cpp +2 -1
- 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_binary_sensor.cpp +1 -0
- esphome/components/mqtt/mqtt_button.cpp +4 -1
- esphome/components/mqtt/mqtt_client.cpp +17 -9
- esphome/components/mqtt/mqtt_client.h +8 -3
- esphome/components/mqtt/mqtt_climate.cpp +6 -4
- esphome/components/mqtt/mqtt_component.cpp +3 -1
- esphome/components/mqtt/mqtt_cover.cpp +1 -0
- esphome/components/mqtt/mqtt_date.cpp +4 -3
- esphome/components/mqtt/mqtt_datetime.cpp +7 -6
- esphome/components/mqtt/mqtt_event.cpp +6 -3
- esphome/components/mqtt/mqtt_fan.cpp +1 -0
- esphome/components/mqtt/mqtt_light.cpp +8 -4
- esphome/components/mqtt/mqtt_lock.cpp +3 -1
- esphome/components/mqtt/mqtt_number.cpp +1 -0
- esphome/components/mqtt/mqtt_select.cpp +2 -1
- esphome/components/mqtt/mqtt_sensor.cpp +3 -1
- esphome/components/mqtt/mqtt_switch.cpp +3 -1
- esphome/components/mqtt/mqtt_text.cpp +1 -0
- esphome/components/mqtt/mqtt_text_sensor.cpp +3 -1
- esphome/components/mqtt/mqtt_time.cpp +4 -3
- esphome/components/mqtt/mqtt_update.cpp +1 -0
- esphome/components/mqtt/mqtt_valve.cpp +3 -1
- esphome/components/ms8607/ms8607.cpp +1 -1
- 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 +9 -1
- esphome/components/online_image/online_image.cpp +17 -7
- esphome/components/online_image/online_image.h +10 -2
- esphome/components/opentherm/opentherm.cpp +7 -12
- esphome/components/opentherm/output/output.cpp +1 -1
- 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.cpp +2 -2
- 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 +81 -21
- esphome/components/substitutions/jinja.py +99 -0
- esphome/components/sun/sun.cpp +3 -4
- esphome/components/switch/__init__.py +5 -2
- esphome/components/switch/binary_sensor/switch_binary_sensor.h +0 -1
- esphome/components/sx126x/__init__.py +317 -0
- esphome/components/sx126x/automation.h +62 -0
- esphome/components/sx126x/packet_transport/__init__.py +26 -0
- esphome/components/sx126x/packet_transport/sx126x_transport.cpp +26 -0
- esphome/components/sx126x/packet_transport/sx126x_transport.h +25 -0
- esphome/components/sx126x/sx126x.cpp +523 -0
- esphome/components/sx126x/sx126x.h +140 -0
- esphome/components/sx126x/sx126x_reg.h +163 -0
- esphome/components/sx127x/__init__.py +325 -0
- esphome/components/sx127x/automation.h +62 -0
- esphome/components/sx127x/packet_transport/__init__.py +26 -0
- esphome/components/sx127x/packet_transport/sx127x_transport.cpp +26 -0
- esphome/components/sx127x/packet_transport/sx127x_transport.h +25 -0
- esphome/components/sx127x/sx127x.cpp +498 -0
- esphome/components/sx127x/sx127x.h +128 -0
- esphome/components/sx127x/sx127x_reg.h +295 -0
- esphome/components/syslog/esphome_syslog.cpp +5 -3
- esphome/components/syslog/esphome_syslog.h +1 -1
- esphome/components/tca9555/__init__.py +1 -1
- esphome/components/template/binary_sensor/template_binary_sensor.cpp +1 -9
- esphome/components/text/__init__.py +5 -2
- esphome/components/text_sensor/__init__.py +5 -2
- esphome/components/thermostat/thermostat_climate.cpp +34 -31
- esphome/components/thermostat/thermostat_climate.h +43 -39
- esphome/components/time/__init__.py +16 -2
- esphome/components/time/real_time_clock.cpp +4 -0
- esphome/components/time/real_time_clock.h +5 -1
- esphome/components/tlc5971/tlc5971.cpp +4 -1
- esphome/components/tmp1075/tmp1075.h +0 -2
- esphome/components/tof10120/tof10120_sensor.h +0 -1
- esphome/components/tormatic/tormatic_cover.h +0 -1
- esphome/components/total_daily_energy/total_daily_energy.h +0 -1
- esphome/components/tsl2591/tsl2591.cpp +1 -1
- esphome/components/ttp229_bsf/ttp229_bsf.h +0 -1
- esphome/components/ttp229_lsf/ttp229_lsf.h +0 -1
- esphome/components/tx20/tx20.cpp +2 -2
- esphome/components/uart/__init__.py +18 -0
- esphome/components/uart/uart_component_esp_idf.cpp +1 -5
- esphome/components/update/__init__.py +5 -2
- esphome/components/update/update_entity.h +8 -0
- esphome/components/usb_host/__init__.py +5 -2
- esphome/components/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 +324 -439
- 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 +164 -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 +169 -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 +156 -22
- 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 +165 -105
- 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/platformio_api.py +2 -0
- esphome/wizard.py +17 -4
- esphome/writer.py +44 -3
- esphome/yaml_util.py +0 -2
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/METADATA +10 -9
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/RECORD +639 -580
- 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.2.dist-info → esphome-2025.7.0.dist-info}/WHEEL +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/entry_points.txt +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
-
#include "esphome/core/optional.h"
|
|
4
3
|
#include "light_color_values.h"
|
|
5
4
|
#include <set>
|
|
6
5
|
|
|
@@ -10,6 +9,11 @@ namespace light {
|
|
|
10
9
|
class LightState;
|
|
11
10
|
|
|
12
11
|
/** This class represents a requested change in a light state.
|
|
12
|
+
*
|
|
13
|
+
* Light state changes are tracked using a bitfield flags_ to minimize memory usage.
|
|
14
|
+
* Each possible light property has a flag indicating whether it has been set.
|
|
15
|
+
* This design keeps LightCall at ~56 bytes to minimize heap fragmentation on
|
|
16
|
+
* ESP8266 and other memory-constrained devices.
|
|
13
17
|
*/
|
|
14
18
|
class LightCall {
|
|
15
19
|
public:
|
|
@@ -131,6 +135,19 @@ class LightCall {
|
|
|
131
135
|
/// Set whether this light call should trigger a save state to recover them at startup..
|
|
132
136
|
LightCall &set_save(bool save);
|
|
133
137
|
|
|
138
|
+
// Getter methods to check if values are set
|
|
139
|
+
bool has_state() const { return (flags_ & FLAG_HAS_STATE) != 0; }
|
|
140
|
+
bool has_brightness() const { return (flags_ & FLAG_HAS_BRIGHTNESS) != 0; }
|
|
141
|
+
bool has_color_brightness() const { return (flags_ & FLAG_HAS_COLOR_BRIGHTNESS) != 0; }
|
|
142
|
+
bool has_red() const { return (flags_ & FLAG_HAS_RED) != 0; }
|
|
143
|
+
bool has_green() const { return (flags_ & FLAG_HAS_GREEN) != 0; }
|
|
144
|
+
bool has_blue() const { return (flags_ & FLAG_HAS_BLUE) != 0; }
|
|
145
|
+
bool has_white() const { return (flags_ & FLAG_HAS_WHITE) != 0; }
|
|
146
|
+
bool has_color_temperature() const { return (flags_ & FLAG_HAS_COLOR_TEMPERATURE) != 0; }
|
|
147
|
+
bool has_cold_white() const { return (flags_ & FLAG_HAS_COLD_WHITE) != 0; }
|
|
148
|
+
bool has_warm_white() const { return (flags_ & FLAG_HAS_WARM_WHITE) != 0; }
|
|
149
|
+
bool has_color_mode() const { return (flags_ & FLAG_HAS_COLOR_MODE) != 0; }
|
|
150
|
+
|
|
134
151
|
/** Set the RGB color of the light by RGB values.
|
|
135
152
|
*
|
|
136
153
|
* Please note that this only changes the color of the light, not the brightness.
|
|
@@ -170,27 +187,62 @@ class LightCall {
|
|
|
170
187
|
/// Some color modes also can be set using non-native parameters, transform those calls.
|
|
171
188
|
void transform_parameters_();
|
|
172
189
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
190
|
+
// Bitfield flags - each flag indicates whether a corresponding value has been set.
|
|
191
|
+
enum FieldFlags : uint16_t {
|
|
192
|
+
FLAG_HAS_STATE = 1 << 0,
|
|
193
|
+
FLAG_HAS_TRANSITION = 1 << 1,
|
|
194
|
+
FLAG_HAS_FLASH = 1 << 2,
|
|
195
|
+
FLAG_HAS_EFFECT = 1 << 3,
|
|
196
|
+
FLAG_HAS_BRIGHTNESS = 1 << 4,
|
|
197
|
+
FLAG_HAS_COLOR_BRIGHTNESS = 1 << 5,
|
|
198
|
+
FLAG_HAS_RED = 1 << 6,
|
|
199
|
+
FLAG_HAS_GREEN = 1 << 7,
|
|
200
|
+
FLAG_HAS_BLUE = 1 << 8,
|
|
201
|
+
FLAG_HAS_WHITE = 1 << 9,
|
|
202
|
+
FLAG_HAS_COLOR_TEMPERATURE = 1 << 10,
|
|
203
|
+
FLAG_HAS_COLD_WHITE = 1 << 11,
|
|
204
|
+
FLAG_HAS_WARM_WHITE = 1 << 12,
|
|
205
|
+
FLAG_HAS_COLOR_MODE = 1 << 13,
|
|
206
|
+
FLAG_PUBLISH = 1 << 14,
|
|
207
|
+
FLAG_SAVE = 1 << 15,
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
bool has_transition_() { return (this->flags_ & FLAG_HAS_TRANSITION) != 0; }
|
|
211
|
+
bool has_flash_() { return (this->flags_ & FLAG_HAS_FLASH) != 0; }
|
|
212
|
+
bool has_effect_() { return (this->flags_ & FLAG_HAS_EFFECT) != 0; }
|
|
213
|
+
bool get_publish_() { return (this->flags_ & FLAG_PUBLISH) != 0; }
|
|
214
|
+
bool get_save_() { return (this->flags_ & FLAG_SAVE) != 0; }
|
|
215
|
+
|
|
216
|
+
// Helper to set flag
|
|
217
|
+
void set_flag_(FieldFlags flag, bool value) {
|
|
218
|
+
if (value) {
|
|
219
|
+
this->flags_ |= flag;
|
|
220
|
+
} else {
|
|
221
|
+
this->flags_ &= ~flag;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
176
224
|
|
|
177
225
|
LightState *parent_;
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
226
|
+
|
|
227
|
+
// Light state values - use flags_ to check if a value has been set.
|
|
228
|
+
// Group 4-byte aligned members first
|
|
229
|
+
uint32_t transition_length_;
|
|
230
|
+
uint32_t flash_length_;
|
|
231
|
+
uint32_t effect_;
|
|
232
|
+
float brightness_;
|
|
233
|
+
float color_brightness_;
|
|
234
|
+
float red_;
|
|
235
|
+
float green_;
|
|
236
|
+
float blue_;
|
|
237
|
+
float white_;
|
|
238
|
+
float color_temperature_;
|
|
239
|
+
float cold_white_;
|
|
240
|
+
float warm_white_;
|
|
241
|
+
|
|
242
|
+
// Smaller members at the end for better packing
|
|
243
|
+
uint16_t flags_{FLAG_PUBLISH | FLAG_SAVE}; // Tracks which values are set
|
|
244
|
+
ColorMode color_mode_;
|
|
245
|
+
bool state_;
|
|
194
246
|
};
|
|
195
247
|
|
|
196
248
|
} // namespace light
|
|
@@ -46,8 +46,7 @@ class LightColorValues {
|
|
|
46
46
|
public:
|
|
47
47
|
/// Construct the LightColorValues with all attributes enabled, but state set to off.
|
|
48
48
|
LightColorValues()
|
|
49
|
-
:
|
|
50
|
-
state_(0.0f),
|
|
49
|
+
: state_(0.0f),
|
|
51
50
|
brightness_(1.0f),
|
|
52
51
|
color_brightness_(1.0f),
|
|
53
52
|
red_(1.0f),
|
|
@@ -56,7 +55,8 @@ class LightColorValues {
|
|
|
56
55
|
white_(1.0f),
|
|
57
56
|
color_temperature_{0.0f},
|
|
58
57
|
cold_white_{1.0f},
|
|
59
|
-
warm_white_{1.0f}
|
|
58
|
+
warm_white_{1.0f},
|
|
59
|
+
color_mode_(ColorMode::UNKNOWN) {}
|
|
60
60
|
|
|
61
61
|
LightColorValues(ColorMode color_mode, float state, float brightness, float color_brightness, float red, float green,
|
|
62
62
|
float blue, float white, float color_temperature, float cold_white, float warm_white) {
|
|
@@ -86,16 +86,16 @@ class LightColorValues {
|
|
|
86
86
|
static LightColorValues lerp(const LightColorValues &start, const LightColorValues &end, float completion) {
|
|
87
87
|
LightColorValues v;
|
|
88
88
|
v.set_color_mode(end.color_mode_);
|
|
89
|
-
v.set_state(
|
|
90
|
-
v.set_brightness(
|
|
91
|
-
v.set_color_brightness(
|
|
92
|
-
v.set_red(
|
|
93
|
-
v.set_green(
|
|
94
|
-
v.set_blue(
|
|
95
|
-
v.set_white(
|
|
96
|
-
v.set_color_temperature(
|
|
97
|
-
v.set_cold_white(
|
|
98
|
-
v.set_warm_white(
|
|
89
|
+
v.set_state(std::lerp(start.get_state(), end.get_state(), completion));
|
|
90
|
+
v.set_brightness(std::lerp(start.get_brightness(), end.get_brightness(), completion));
|
|
91
|
+
v.set_color_brightness(std::lerp(start.get_color_brightness(), end.get_color_brightness(), completion));
|
|
92
|
+
v.set_red(std::lerp(start.get_red(), end.get_red(), completion));
|
|
93
|
+
v.set_green(std::lerp(start.get_green(), end.get_green(), completion));
|
|
94
|
+
v.set_blue(std::lerp(start.get_blue(), end.get_blue(), completion));
|
|
95
|
+
v.set_white(std::lerp(start.get_white(), end.get_white(), completion));
|
|
96
|
+
v.set_color_temperature(std::lerp(start.get_color_temperature(), end.get_color_temperature(), completion));
|
|
97
|
+
v.set_cold_white(std::lerp(start.get_cold_white(), end.get_cold_white(), completion));
|
|
98
|
+
v.set_warm_white(std::lerp(start.get_warm_white(), end.get_warm_white(), completion));
|
|
99
99
|
return v;
|
|
100
100
|
}
|
|
101
101
|
|
|
@@ -292,7 +292,6 @@ class LightColorValues {
|
|
|
292
292
|
void set_warm_white(float warm_white) { this->warm_white_ = clamp(warm_white, 0.0f, 1.0f); }
|
|
293
293
|
|
|
294
294
|
protected:
|
|
295
|
-
ColorMode color_mode_;
|
|
296
295
|
float state_; ///< ON / OFF, float for transition
|
|
297
296
|
float brightness_;
|
|
298
297
|
float color_brightness_;
|
|
@@ -303,6 +302,7 @@ class LightColorValues {
|
|
|
303
302
|
float color_temperature_; ///< Color Temperature in Mired
|
|
304
303
|
float cold_white_;
|
|
305
304
|
float warm_white_;
|
|
305
|
+
ColorMode color_mode_;
|
|
306
306
|
};
|
|
307
307
|
|
|
308
308
|
} // namespace light
|
|
@@ -9,6 +9,7 @@ namespace light {
|
|
|
9
9
|
// See https://www.home-assistant.io/integrations/light.mqtt/#json-schema for documentation on the schema
|
|
10
10
|
|
|
11
11
|
void LightJSONSchema::dump_json(LightState &state, JsonObject root) {
|
|
12
|
+
// NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) false positive with ArduinoJson
|
|
12
13
|
if (state.supports_effects())
|
|
13
14
|
root["effect"] = state.get_effect_name();
|
|
14
15
|
|
|
@@ -52,7 +53,7 @@ void LightJSONSchema::dump_json(LightState &state, JsonObject root) {
|
|
|
52
53
|
if (values.get_color_mode() & ColorCapability::BRIGHTNESS)
|
|
53
54
|
root["brightness"] = uint8_t(values.get_brightness() * 255);
|
|
54
55
|
|
|
55
|
-
JsonObject color = root
|
|
56
|
+
JsonObject color = root["color"].to<JsonObject>();
|
|
56
57
|
if (values.get_color_mode() & ColorCapability::RGB) {
|
|
57
58
|
color["r"] = uint8_t(values.get_color_brightness() * values.get_red() * 255);
|
|
58
59
|
color["g"] = uint8_t(values.get_color_brightness() * values.get_green() * 255);
|
|
@@ -73,7 +74,7 @@ void LightJSONSchema::dump_json(LightState &state, JsonObject root) {
|
|
|
73
74
|
}
|
|
74
75
|
|
|
75
76
|
void LightJSONSchema::parse_color_json(LightState &state, LightCall &call, JsonObject root) {
|
|
76
|
-
if (root
|
|
77
|
+
if (root["state"].is<const char *>()) {
|
|
77
78
|
auto val = parse_on_off(root["state"]);
|
|
78
79
|
switch (val) {
|
|
79
80
|
case PARSE_ON:
|
|
@@ -90,40 +91,40 @@ void LightJSONSchema::parse_color_json(LightState &state, LightCall &call, JsonO
|
|
|
90
91
|
}
|
|
91
92
|
}
|
|
92
93
|
|
|
93
|
-
if (root
|
|
94
|
+
if (root["brightness"].is<uint8_t>()) {
|
|
94
95
|
call.set_brightness(float(root["brightness"]) / 255.0f);
|
|
95
96
|
}
|
|
96
97
|
|
|
97
|
-
if (root
|
|
98
|
+
if (root["color"].is<JsonObject>()) {
|
|
98
99
|
JsonObject color = root["color"];
|
|
99
100
|
// HA also encodes brightness information in the r, g, b values, so extract that and set it as color brightness.
|
|
100
101
|
float max_rgb = 0.0f;
|
|
101
|
-
if (color
|
|
102
|
+
if (color["r"].is<uint8_t>()) {
|
|
102
103
|
float r = float(color["r"]) / 255.0f;
|
|
103
104
|
max_rgb = fmaxf(max_rgb, r);
|
|
104
105
|
call.set_red(r);
|
|
105
106
|
}
|
|
106
|
-
if (color
|
|
107
|
+
if (color["g"].is<uint8_t>()) {
|
|
107
108
|
float g = float(color["g"]) / 255.0f;
|
|
108
109
|
max_rgb = fmaxf(max_rgb, g);
|
|
109
110
|
call.set_green(g);
|
|
110
111
|
}
|
|
111
|
-
if (color
|
|
112
|
+
if (color["b"].is<uint8_t>()) {
|
|
112
113
|
float b = float(color["b"]) / 255.0f;
|
|
113
114
|
max_rgb = fmaxf(max_rgb, b);
|
|
114
115
|
call.set_blue(b);
|
|
115
116
|
}
|
|
116
|
-
if (color
|
|
117
|
+
if (color["r"].is<uint8_t>() || color["g"].is<uint8_t>() || color["b"].is<uint8_t>()) {
|
|
117
118
|
call.set_color_brightness(max_rgb);
|
|
118
119
|
}
|
|
119
120
|
|
|
120
|
-
if (color
|
|
121
|
+
if (color["c"].is<uint8_t>()) {
|
|
121
122
|
call.set_cold_white(float(color["c"]) / 255.0f);
|
|
122
123
|
}
|
|
123
|
-
if (color
|
|
124
|
+
if (color["w"].is<uint8_t>()) {
|
|
124
125
|
// the HA scheme is ambiguous here, the same key is used for white channel in RGBW and warm
|
|
125
126
|
// white channel in RGBWW.
|
|
126
|
-
if (color
|
|
127
|
+
if (color["c"].is<uint8_t>()) {
|
|
127
128
|
call.set_warm_white(float(color["w"]) / 255.0f);
|
|
128
129
|
} else {
|
|
129
130
|
call.set_white(float(color["w"]) / 255.0f);
|
|
@@ -131,11 +132,11 @@ void LightJSONSchema::parse_color_json(LightState &state, LightCall &call, JsonO
|
|
|
131
132
|
}
|
|
132
133
|
}
|
|
133
134
|
|
|
134
|
-
if (root
|
|
135
|
+
if (root["white_value"].is<uint8_t>()) { // legacy API
|
|
135
136
|
call.set_white(float(root["white_value"]) / 255.0f);
|
|
136
137
|
}
|
|
137
138
|
|
|
138
|
-
if (root
|
|
139
|
+
if (root["color_temp"].is<uint16_t>()) {
|
|
139
140
|
call.set_color_temperature(float(root["color_temp"]));
|
|
140
141
|
}
|
|
141
142
|
}
|
|
@@ -143,17 +144,17 @@ void LightJSONSchema::parse_color_json(LightState &state, LightCall &call, JsonO
|
|
|
143
144
|
void LightJSONSchema::parse_json(LightState &state, LightCall &call, JsonObject root) {
|
|
144
145
|
LightJSONSchema::parse_color_json(state, call, root);
|
|
145
146
|
|
|
146
|
-
if (root
|
|
147
|
+
if (root["flash"].is<uint32_t>()) {
|
|
147
148
|
auto length = uint32_t(float(root["flash"]) * 1000);
|
|
148
149
|
call.set_flash_length(length);
|
|
149
150
|
}
|
|
150
151
|
|
|
151
|
-
if (root
|
|
152
|
+
if (root["transition"].is<uint16_t>()) {
|
|
152
153
|
auto length = uint32_t(float(root["transition"]) * 1000);
|
|
153
154
|
call.set_transition_length(length);
|
|
154
155
|
}
|
|
155
156
|
|
|
156
|
-
if (root
|
|
157
|
+
if (root["effect"].is<const char *>()) {
|
|
157
158
|
const char *effect = root["effect"];
|
|
158
159
|
call.set_effect(effect);
|
|
159
160
|
}
|
|
@@ -31,9 +31,7 @@ enum LightRestoreMode : uint8_t {
|
|
|
31
31
|
struct LightStateRTCState {
|
|
32
32
|
LightStateRTCState(ColorMode color_mode, bool state, float brightness, float color_brightness, float red, float green,
|
|
33
33
|
float blue, float white, float color_temp, float cold_white, float warm_white)
|
|
34
|
-
:
|
|
35
|
-
state(state),
|
|
36
|
-
brightness(brightness),
|
|
34
|
+
: brightness(brightness),
|
|
37
35
|
color_brightness(color_brightness),
|
|
38
36
|
red(red),
|
|
39
37
|
green(green),
|
|
@@ -41,10 +39,12 @@ struct LightStateRTCState {
|
|
|
41
39
|
white(white),
|
|
42
40
|
color_temp(color_temp),
|
|
43
41
|
cold_white(cold_white),
|
|
44
|
-
warm_white(warm_white)
|
|
42
|
+
warm_white(warm_white),
|
|
43
|
+
effect(0),
|
|
44
|
+
color_mode(color_mode),
|
|
45
|
+
state(state) {}
|
|
45
46
|
LightStateRTCState() = default;
|
|
46
|
-
|
|
47
|
-
bool state{false};
|
|
47
|
+
// Group 4-byte aligned members first
|
|
48
48
|
float brightness{1.0f};
|
|
49
49
|
float color_brightness{1.0f};
|
|
50
50
|
float red{1.0f};
|
|
@@ -55,6 +55,9 @@ struct LightStateRTCState {
|
|
|
55
55
|
float cold_white{1.0f};
|
|
56
56
|
float warm_white{1.0f};
|
|
57
57
|
uint32_t effect{0};
|
|
58
|
+
// Group smaller members at the end
|
|
59
|
+
ColorMode color_mode{ColorMode::UNKNOWN};
|
|
60
|
+
bool state{false};
|
|
58
61
|
};
|
|
59
62
|
|
|
60
63
|
/** This class represents the communication layer between the front-end MQTT layer and the
|
|
@@ -216,6 +219,8 @@ class LightState : public EntityBase, public Component {
|
|
|
216
219
|
std::unique_ptr<LightTransformer> transformer_{nullptr};
|
|
217
220
|
/// List of effects for this light.
|
|
218
221
|
std::vector<LightEffect *> effects_;
|
|
222
|
+
/// Object used to store the persisted values of the light.
|
|
223
|
+
ESPPreferenceObject rtc_;
|
|
219
224
|
/// Value for storing the index of the currently active effect. 0 if no effect is active
|
|
220
225
|
uint32_t active_effect_index_{};
|
|
221
226
|
/// Default transition length for all transitions in ms.
|
|
@@ -224,9 +229,10 @@ class LightState : public EntityBase, public Component {
|
|
|
224
229
|
uint32_t flash_transition_length_{};
|
|
225
230
|
/// Gamma correction factor for the light.
|
|
226
231
|
float gamma_correct_{};
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
232
|
+
/// Whether the light value should be written in the next cycle.
|
|
233
|
+
bool next_write_{true};
|
|
234
|
+
// for effects, true if a transformer (transition) is active.
|
|
235
|
+
bool is_transformer_active_ = false;
|
|
230
236
|
|
|
231
237
|
/** Callback to call when new values for the frontend are available.
|
|
232
238
|
*
|
|
@@ -247,10 +253,6 @@ class LightState : public EntityBase, public Component {
|
|
|
247
253
|
|
|
248
254
|
/// Restore mode of the light.
|
|
249
255
|
LightRestoreMode restore_mode_;
|
|
250
|
-
/// Whether the light value should be written in the next cycle.
|
|
251
|
-
bool next_write_{true};
|
|
252
|
-
// for effects, true if a transformer (transition) is active.
|
|
253
|
-
bool is_transformer_active_ = false;
|
|
254
256
|
};
|
|
255
257
|
|
|
256
258
|
} // namespace light
|
|
@@ -59,9 +59,9 @@ class LightTransitionTransformer : public LightTransformer {
|
|
|
59
59
|
// transition from 0 to 1 on x = [0, 1]
|
|
60
60
|
static float smoothed_progress(float x) { return x * x * x * (x * (x * 6.0f - 15.0f) + 10.0f); }
|
|
61
61
|
|
|
62
|
-
bool changing_color_mode_{false};
|
|
63
62
|
LightColorValues end_values_{};
|
|
64
63
|
LightColorValues intermediate_values_{};
|
|
64
|
+
bool changing_color_mode_{false};
|
|
65
65
|
};
|
|
66
66
|
|
|
67
67
|
class LightFlashTransformer : public LightTransformer {
|
|
@@ -117,8 +117,8 @@ class LightFlashTransformer : public LightTransformer {
|
|
|
117
117
|
|
|
118
118
|
protected:
|
|
119
119
|
LightState &state_;
|
|
120
|
-
uint32_t transition_length_;
|
|
121
120
|
std::unique_ptr<LightTransformer> transformer_{nullptr};
|
|
121
|
+
uint32_t transition_length_;
|
|
122
122
|
bool begun_lightstate_restore_;
|
|
123
123
|
};
|
|
124
124
|
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# This file was auto-generated by libretiny/generate_components.py
|
|
2
|
+
# Do not modify its contents.
|
|
3
|
+
# For custom pin validators, put validate_pin() or validate_usage()
|
|
4
|
+
# in gpio.py file in this directory.
|
|
5
|
+
# For changing schema/pin schema, put COMPONENT_SCHEMA or COMPONENT_PIN_SCHEMA
|
|
6
|
+
# in schema.py file in this directory.
|
|
7
|
+
|
|
8
|
+
from esphome import pins
|
|
9
|
+
from esphome.components import libretiny
|
|
10
|
+
from esphome.components.libretiny.const import (
|
|
11
|
+
COMPONENT_LN882X,
|
|
12
|
+
KEY_COMPONENT_DATA,
|
|
13
|
+
KEY_LIBRETINY,
|
|
14
|
+
LibreTinyComponent,
|
|
15
|
+
)
|
|
16
|
+
from esphome.core import CORE
|
|
17
|
+
|
|
18
|
+
from .boards import LN882X_BOARD_PINS, LN882X_BOARDS
|
|
19
|
+
|
|
20
|
+
CODEOWNERS = ["@lamauny"]
|
|
21
|
+
AUTO_LOAD = ["libretiny"]
|
|
22
|
+
IS_TARGET_PLATFORM = True
|
|
23
|
+
|
|
24
|
+
COMPONENT_DATA = LibreTinyComponent(
|
|
25
|
+
name=COMPONENT_LN882X,
|
|
26
|
+
boards=LN882X_BOARDS,
|
|
27
|
+
board_pins=LN882X_BOARD_PINS,
|
|
28
|
+
pin_validation=None,
|
|
29
|
+
usage_validation=None,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _set_core_data(config):
|
|
34
|
+
CORE.data[KEY_LIBRETINY] = {}
|
|
35
|
+
CORE.data[KEY_LIBRETINY][KEY_COMPONENT_DATA] = COMPONENT_DATA
|
|
36
|
+
return config
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
CONFIG_SCHEMA = libretiny.BASE_SCHEMA
|
|
40
|
+
|
|
41
|
+
PIN_SCHEMA = libretiny.gpio.BASE_PIN_SCHEMA
|
|
42
|
+
|
|
43
|
+
CONFIG_SCHEMA.prepend_extra(_set_core_data)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
async def to_code(config):
|
|
47
|
+
return await libretiny.component_to_code(config)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
@pins.PIN_SCHEMA_REGISTRY.register("ln882x", PIN_SCHEMA)
|
|
51
|
+
async def pin_to_code(config):
|
|
52
|
+
return await libretiny.gpio.component_pin_to_code(config)
|