esphome 2025.6.3__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 +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/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.h +1 -0
- 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 +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 +318 -436
- 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.3.dist-info → esphome-2025.7.0.dist-info}/METADATA +10 -9
- {esphome-2025.6.3.dist-info → esphome-2025.7.0.dist-info}/RECORD +637 -578
- 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.0.dist-info}/WHEEL +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0.dist-info}/entry_points.txt +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0.dist-info}/top_level.txt +0 -0
|
@@ -2,12 +2,28 @@
|
|
|
2
2
|
#include "light_call.h"
|
|
3
3
|
#include "light_state.h"
|
|
4
4
|
#include "esphome/core/log.h"
|
|
5
|
+
#include "esphome/core/optional.h"
|
|
5
6
|
|
|
6
7
|
namespace esphome {
|
|
7
8
|
namespace light {
|
|
8
9
|
|
|
9
10
|
static const char *const TAG = "light";
|
|
10
11
|
|
|
12
|
+
// Macro to reduce repetitive setter code
|
|
13
|
+
#define IMPLEMENT_LIGHT_CALL_SETTER(name, type, flag) \
|
|
14
|
+
LightCall &LightCall::set_##name(optional<type>(name)) { \
|
|
15
|
+
if ((name).has_value()) { \
|
|
16
|
+
this->name##_ = (name).value(); \
|
|
17
|
+
} \
|
|
18
|
+
this->set_flag_(flag, (name).has_value()); \
|
|
19
|
+
return *this; \
|
|
20
|
+
} \
|
|
21
|
+
LightCall &LightCall::set_##name(type name) { \
|
|
22
|
+
this->name##_ = name; \
|
|
23
|
+
this->set_flag_(flag, true); \
|
|
24
|
+
return *this; \
|
|
25
|
+
}
|
|
26
|
+
|
|
11
27
|
static const LogString *color_mode_to_human(ColorMode color_mode) {
|
|
12
28
|
if (color_mode == ColorMode::UNKNOWN)
|
|
13
29
|
return LOG_STR("Unknown");
|
|
@@ -32,41 +48,43 @@ void LightCall::perform() {
|
|
|
32
48
|
const char *name = this->parent_->get_name().c_str();
|
|
33
49
|
LightColorValues v = this->validate_();
|
|
34
50
|
|
|
35
|
-
if (this->
|
|
51
|
+
if (this->get_publish_()) {
|
|
36
52
|
ESP_LOGD(TAG, "'%s' Setting:", name);
|
|
37
53
|
|
|
38
54
|
// Only print color mode when it's being changed
|
|
39
55
|
ColorMode current_color_mode = this->parent_->remote_values.get_color_mode();
|
|
40
|
-
|
|
56
|
+
ColorMode target_color_mode = this->has_color_mode() ? this->color_mode_ : current_color_mode;
|
|
57
|
+
if (target_color_mode != current_color_mode) {
|
|
41
58
|
ESP_LOGD(TAG, " Color mode: %s", LOG_STR_ARG(color_mode_to_human(v.get_color_mode())));
|
|
42
59
|
}
|
|
43
60
|
|
|
44
61
|
// Only print state when it's being changed
|
|
45
62
|
bool current_state = this->parent_->remote_values.is_on();
|
|
46
|
-
|
|
63
|
+
bool target_state = this->has_state() ? this->state_ : current_state;
|
|
64
|
+
if (target_state != current_state) {
|
|
47
65
|
ESP_LOGD(TAG, " State: %s", ONOFF(v.is_on()));
|
|
48
66
|
}
|
|
49
67
|
|
|
50
|
-
if (this->
|
|
68
|
+
if (this->has_brightness()) {
|
|
51
69
|
ESP_LOGD(TAG, " Brightness: %.0f%%", v.get_brightness() * 100.0f);
|
|
52
70
|
}
|
|
53
71
|
|
|
54
|
-
if (this->
|
|
72
|
+
if (this->has_color_brightness()) {
|
|
55
73
|
ESP_LOGD(TAG, " Color brightness: %.0f%%", v.get_color_brightness() * 100.0f);
|
|
56
74
|
}
|
|
57
|
-
if (this->
|
|
75
|
+
if (this->has_red() || this->has_green() || this->has_blue()) {
|
|
58
76
|
ESP_LOGD(TAG, " Red: %.0f%%, Green: %.0f%%, Blue: %.0f%%", v.get_red() * 100.0f, v.get_green() * 100.0f,
|
|
59
77
|
v.get_blue() * 100.0f);
|
|
60
78
|
}
|
|
61
79
|
|
|
62
|
-
if (this->
|
|
80
|
+
if (this->has_white()) {
|
|
63
81
|
ESP_LOGD(TAG, " White: %.0f%%", v.get_white() * 100.0f);
|
|
64
82
|
}
|
|
65
|
-
if (this->
|
|
83
|
+
if (this->has_color_temperature()) {
|
|
66
84
|
ESP_LOGD(TAG, " Color temperature: %.1f mireds", v.get_color_temperature());
|
|
67
85
|
}
|
|
68
86
|
|
|
69
|
-
if (this->
|
|
87
|
+
if (this->has_cold_white() || this->has_warm_white()) {
|
|
70
88
|
ESP_LOGD(TAG, " Cold white: %.0f%%, warm white: %.0f%%", v.get_cold_white() * 100.0f,
|
|
71
89
|
v.get_warm_white() * 100.0f);
|
|
72
90
|
}
|
|
@@ -74,58 +92,57 @@ void LightCall::perform() {
|
|
|
74
92
|
|
|
75
93
|
if (this->has_flash_()) {
|
|
76
94
|
// FLASH
|
|
77
|
-
if (this->
|
|
78
|
-
ESP_LOGD(TAG, " Flash length: %.1fs",
|
|
95
|
+
if (this->get_publish_()) {
|
|
96
|
+
ESP_LOGD(TAG, " Flash length: %.1fs", this->flash_length_ / 1e3f);
|
|
79
97
|
}
|
|
80
98
|
|
|
81
|
-
this->parent_->start_flash_(v,
|
|
99
|
+
this->parent_->start_flash_(v, this->flash_length_, this->get_publish_());
|
|
82
100
|
} else if (this->has_transition_()) {
|
|
83
101
|
// TRANSITION
|
|
84
|
-
if (this->
|
|
85
|
-
ESP_LOGD(TAG, " Transition length: %.1fs",
|
|
102
|
+
if (this->get_publish_()) {
|
|
103
|
+
ESP_LOGD(TAG, " Transition length: %.1fs", this->transition_length_ / 1e3f);
|
|
86
104
|
}
|
|
87
105
|
|
|
88
106
|
// Special case: Transition and effect can be set when turning off
|
|
89
107
|
if (this->has_effect_()) {
|
|
90
|
-
if (this->
|
|
108
|
+
if (this->get_publish_()) {
|
|
91
109
|
ESP_LOGD(TAG, " Effect: 'None'");
|
|
92
110
|
}
|
|
93
111
|
this->parent_->stop_effect_();
|
|
94
112
|
}
|
|
95
113
|
|
|
96
|
-
this->parent_->start_transition_(v,
|
|
114
|
+
this->parent_->start_transition_(v, this->transition_length_, this->get_publish_());
|
|
97
115
|
|
|
98
116
|
} else if (this->has_effect_()) {
|
|
99
117
|
// EFFECT
|
|
100
|
-
auto effect = this->effect_;
|
|
101
118
|
const char *effect_s;
|
|
102
|
-
if (
|
|
119
|
+
if (this->effect_ == 0u) {
|
|
103
120
|
effect_s = "None";
|
|
104
121
|
} else {
|
|
105
|
-
effect_s = this->parent_->effects_[
|
|
122
|
+
effect_s = this->parent_->effects_[this->effect_ - 1]->get_name().c_str();
|
|
106
123
|
}
|
|
107
124
|
|
|
108
|
-
if (this->
|
|
125
|
+
if (this->get_publish_()) {
|
|
109
126
|
ESP_LOGD(TAG, " Effect: '%s'", effect_s);
|
|
110
127
|
}
|
|
111
128
|
|
|
112
|
-
this->parent_->start_effect_(
|
|
129
|
+
this->parent_->start_effect_(this->effect_);
|
|
113
130
|
|
|
114
131
|
// Also set light color values when starting an effect
|
|
115
132
|
// For example to turn off the light
|
|
116
133
|
this->parent_->set_immediately_(v, true);
|
|
117
134
|
} else {
|
|
118
135
|
// INSTANT CHANGE
|
|
119
|
-
this->parent_->set_immediately_(v, this->
|
|
136
|
+
this->parent_->set_immediately_(v, this->get_publish_());
|
|
120
137
|
}
|
|
121
138
|
|
|
122
139
|
if (!this->has_transition_()) {
|
|
123
140
|
this->parent_->target_state_reached_callback_.call();
|
|
124
141
|
}
|
|
125
|
-
if (this->
|
|
142
|
+
if (this->get_publish_()) {
|
|
126
143
|
this->parent_->publish_state();
|
|
127
144
|
}
|
|
128
|
-
if (this->
|
|
145
|
+
if (this->get_save_()) {
|
|
129
146
|
this->parent_->save_remote_values_();
|
|
130
147
|
}
|
|
131
148
|
}
|
|
@@ -135,82 +152,80 @@ LightColorValues LightCall::validate_() {
|
|
|
135
152
|
auto traits = this->parent_->get_traits();
|
|
136
153
|
|
|
137
154
|
// Color mode check
|
|
138
|
-
if (this->
|
|
139
|
-
ESP_LOGW(TAG, "'%s'
|
|
140
|
-
|
|
141
|
-
this->color_mode_.reset();
|
|
155
|
+
if (this->has_color_mode() && !traits.supports_color_mode(this->color_mode_)) {
|
|
156
|
+
ESP_LOGW(TAG, "'%s' does not support color mode %s", name, LOG_STR_ARG(color_mode_to_human(this->color_mode_)));
|
|
157
|
+
this->set_flag_(FLAG_HAS_COLOR_MODE, false);
|
|
142
158
|
}
|
|
143
159
|
|
|
144
160
|
// Ensure there is always a color mode set
|
|
145
|
-
if (!this->
|
|
161
|
+
if (!this->has_color_mode()) {
|
|
146
162
|
this->color_mode_ = this->compute_color_mode_();
|
|
163
|
+
this->set_flag_(FLAG_HAS_COLOR_MODE, true);
|
|
147
164
|
}
|
|
148
|
-
auto color_mode =
|
|
165
|
+
auto color_mode = this->color_mode_;
|
|
149
166
|
|
|
150
167
|
// Transform calls that use non-native parameters for the current mode.
|
|
151
168
|
this->transform_parameters_();
|
|
152
169
|
|
|
153
170
|
// Brightness exists check
|
|
154
|
-
if (this->
|
|
155
|
-
ESP_LOGW(TAG, "'%s'
|
|
156
|
-
this->
|
|
171
|
+
if (this->has_brightness() && this->brightness_ > 0.0f && !(color_mode & ColorCapability::BRIGHTNESS)) {
|
|
172
|
+
ESP_LOGW(TAG, "'%s': setting brightness not supported", name);
|
|
173
|
+
this->set_flag_(FLAG_HAS_BRIGHTNESS, false);
|
|
157
174
|
}
|
|
158
175
|
|
|
159
176
|
// Transition length possible check
|
|
160
|
-
if (this->
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
this->transition_length_.reset();
|
|
177
|
+
if (this->has_transition_() && this->transition_length_ != 0 && !(color_mode & ColorCapability::BRIGHTNESS)) {
|
|
178
|
+
ESP_LOGW(TAG, "'%s': transitions not supported", name);
|
|
179
|
+
this->set_flag_(FLAG_HAS_TRANSITION, false);
|
|
164
180
|
}
|
|
165
181
|
|
|
166
182
|
// Color brightness exists check
|
|
167
|
-
if (this->
|
|
168
|
-
ESP_LOGW(TAG, "'%s'
|
|
169
|
-
this->
|
|
183
|
+
if (this->has_color_brightness() && this->color_brightness_ > 0.0f && !(color_mode & ColorCapability::RGB)) {
|
|
184
|
+
ESP_LOGW(TAG, "'%s': color mode does not support setting RGB brightness", name);
|
|
185
|
+
this->set_flag_(FLAG_HAS_COLOR_BRIGHTNESS, false);
|
|
170
186
|
}
|
|
171
187
|
|
|
172
188
|
// RGB exists check
|
|
173
|
-
if ((this->
|
|
174
|
-
(this->
|
|
189
|
+
if ((this->has_red() && this->red_ > 0.0f) || (this->has_green() && this->green_ > 0.0f) ||
|
|
190
|
+
(this->has_blue() && this->blue_ > 0.0f)) {
|
|
175
191
|
if (!(color_mode & ColorCapability::RGB)) {
|
|
176
|
-
ESP_LOGW(TAG, "'%s'
|
|
177
|
-
this->
|
|
178
|
-
this->
|
|
179
|
-
this->
|
|
192
|
+
ESP_LOGW(TAG, "'%s': color mode does not support setting RGB color", name);
|
|
193
|
+
this->set_flag_(FLAG_HAS_RED, false);
|
|
194
|
+
this->set_flag_(FLAG_HAS_GREEN, false);
|
|
195
|
+
this->set_flag_(FLAG_HAS_BLUE, false);
|
|
180
196
|
}
|
|
181
197
|
}
|
|
182
198
|
|
|
183
199
|
// White value exists check
|
|
184
|
-
if (this->
|
|
200
|
+
if (this->has_white() && this->white_ > 0.0f &&
|
|
185
201
|
!(color_mode & ColorCapability::WHITE || color_mode & ColorCapability::COLD_WARM_WHITE)) {
|
|
186
|
-
ESP_LOGW(TAG, "'%s'
|
|
187
|
-
this->
|
|
202
|
+
ESP_LOGW(TAG, "'%s': color mode does not support setting white value", name);
|
|
203
|
+
this->set_flag_(FLAG_HAS_WHITE, false);
|
|
188
204
|
}
|
|
189
205
|
|
|
190
206
|
// Color temperature exists check
|
|
191
|
-
if (this->
|
|
207
|
+
if (this->has_color_temperature() &&
|
|
192
208
|
!(color_mode & ColorCapability::COLOR_TEMPERATURE || color_mode & ColorCapability::COLD_WARM_WHITE)) {
|
|
193
|
-
ESP_LOGW(TAG, "'%s'
|
|
194
|
-
this->
|
|
209
|
+
ESP_LOGW(TAG, "'%s': color mode does not support setting color temperature", name);
|
|
210
|
+
this->set_flag_(FLAG_HAS_COLOR_TEMPERATURE, false);
|
|
195
211
|
}
|
|
196
212
|
|
|
197
213
|
// Cold/warm white value exists check
|
|
198
|
-
if ((this->cold_white_.
|
|
199
|
-
(this->warm_white_.has_value() && *this->warm_white_ > 0.0f)) {
|
|
214
|
+
if ((this->has_cold_white() && this->cold_white_ > 0.0f) || (this->has_warm_white() && this->warm_white_ > 0.0f)) {
|
|
200
215
|
if (!(color_mode & ColorCapability::COLD_WARM_WHITE)) {
|
|
201
|
-
ESP_LOGW(TAG, "'%s'
|
|
202
|
-
this->
|
|
203
|
-
this->
|
|
216
|
+
ESP_LOGW(TAG, "'%s': color mode does not support setting cold/warm white value", name);
|
|
217
|
+
this->set_flag_(FLAG_HAS_COLD_WHITE, false);
|
|
218
|
+
this->set_flag_(FLAG_HAS_WARM_WHITE, false);
|
|
204
219
|
}
|
|
205
220
|
}
|
|
206
221
|
|
|
207
222
|
#define VALIDATE_RANGE_(name_, upper_name, min, max) \
|
|
208
|
-
if (name_
|
|
209
|
-
auto val =
|
|
223
|
+
if (this->has_##name_()) { \
|
|
224
|
+
auto val = this->name_##_; \
|
|
210
225
|
if (val < (min) || val > (max)) { \
|
|
211
|
-
ESP_LOGW(TAG, "'%s'
|
|
226
|
+
ESP_LOGW(TAG, "'%s': %s value %.2f is out of range [%.1f - %.1f]", name, LOG_STR_LITERAL(upper_name), val, \
|
|
212
227
|
(min), (max)); \
|
|
213
|
-
name_##_ = clamp(val, (min), (max)); \
|
|
228
|
+
this->name_##_ = clamp(val, (min), (max)); \
|
|
214
229
|
} \
|
|
215
230
|
}
|
|
216
231
|
#define VALIDATE_RANGE(name, upper_name) VALIDATE_RANGE_(name, upper_name, 0.0f, 1.0f)
|
|
@@ -227,110 +242,116 @@ LightColorValues LightCall::validate_() {
|
|
|
227
242
|
VALIDATE_RANGE_(color_temperature, "Color temperature", traits.get_min_mireds(), traits.get_max_mireds())
|
|
228
243
|
|
|
229
244
|
// Flag whether an explicit turn off was requested, in which case we'll also stop the effect.
|
|
230
|
-
bool explicit_turn_off_request = this->
|
|
245
|
+
bool explicit_turn_off_request = this->has_state() && !this->state_;
|
|
231
246
|
|
|
232
247
|
// Turn off when brightness is set to zero, and reset brightness (so that it has nonzero brightness when turned on).
|
|
233
|
-
if (this->
|
|
234
|
-
this->state_ =
|
|
235
|
-
this->
|
|
248
|
+
if (this->has_brightness() && this->brightness_ == 0.0f) {
|
|
249
|
+
this->state_ = false;
|
|
250
|
+
this->set_flag_(FLAG_HAS_STATE, true);
|
|
251
|
+
this->brightness_ = 1.0f;
|
|
236
252
|
}
|
|
237
253
|
|
|
238
254
|
// Set color brightness to 100% if currently zero and a color is set.
|
|
239
|
-
if (this->
|
|
240
|
-
if (!this->
|
|
241
|
-
this->color_brightness_ =
|
|
255
|
+
if (this->has_red() || this->has_green() || this->has_blue()) {
|
|
256
|
+
if (!this->has_color_brightness() && this->parent_->remote_values.get_color_brightness() == 0.0f) {
|
|
257
|
+
this->color_brightness_ = 1.0f;
|
|
258
|
+
this->set_flag_(FLAG_HAS_COLOR_BRIGHTNESS, true);
|
|
259
|
+
}
|
|
242
260
|
}
|
|
243
261
|
|
|
244
262
|
// Create color values for the light with this call applied.
|
|
245
263
|
auto v = this->parent_->remote_values;
|
|
246
|
-
if (this->
|
|
247
|
-
v.set_color_mode(
|
|
248
|
-
if (this->
|
|
249
|
-
v.set_state(
|
|
250
|
-
if (this->
|
|
251
|
-
v.set_brightness(
|
|
252
|
-
if (this->
|
|
253
|
-
v.set_color_brightness(
|
|
254
|
-
if (this->
|
|
255
|
-
v.set_red(
|
|
256
|
-
if (this->
|
|
257
|
-
v.set_green(
|
|
258
|
-
if (this->
|
|
259
|
-
v.set_blue(
|
|
260
|
-
if (this->
|
|
261
|
-
v.set_white(
|
|
262
|
-
if (this->
|
|
263
|
-
v.set_color_temperature(
|
|
264
|
-
if (this->
|
|
265
|
-
v.set_cold_white(
|
|
266
|
-
if (this->
|
|
267
|
-
v.set_warm_white(
|
|
264
|
+
if (this->has_color_mode())
|
|
265
|
+
v.set_color_mode(this->color_mode_);
|
|
266
|
+
if (this->has_state())
|
|
267
|
+
v.set_state(this->state_);
|
|
268
|
+
if (this->has_brightness())
|
|
269
|
+
v.set_brightness(this->brightness_);
|
|
270
|
+
if (this->has_color_brightness())
|
|
271
|
+
v.set_color_brightness(this->color_brightness_);
|
|
272
|
+
if (this->has_red())
|
|
273
|
+
v.set_red(this->red_);
|
|
274
|
+
if (this->has_green())
|
|
275
|
+
v.set_green(this->green_);
|
|
276
|
+
if (this->has_blue())
|
|
277
|
+
v.set_blue(this->blue_);
|
|
278
|
+
if (this->has_white())
|
|
279
|
+
v.set_white(this->white_);
|
|
280
|
+
if (this->has_color_temperature())
|
|
281
|
+
v.set_color_temperature(this->color_temperature_);
|
|
282
|
+
if (this->has_cold_white())
|
|
283
|
+
v.set_cold_white(this->cold_white_);
|
|
284
|
+
if (this->has_warm_white())
|
|
285
|
+
v.set_warm_white(this->warm_white_);
|
|
268
286
|
|
|
269
287
|
v.normalize_color();
|
|
270
288
|
|
|
271
289
|
// Flash length check
|
|
272
|
-
if (this->has_flash_() &&
|
|
273
|
-
ESP_LOGW(TAG, "'%s'
|
|
274
|
-
this->
|
|
290
|
+
if (this->has_flash_() && this->flash_length_ == 0) {
|
|
291
|
+
ESP_LOGW(TAG, "'%s': flash length must be greater than zero", name);
|
|
292
|
+
this->set_flag_(FLAG_HAS_FLASH, false);
|
|
275
293
|
}
|
|
276
294
|
|
|
277
295
|
// validate transition length/flash length/effect not used at the same time
|
|
278
296
|
bool supports_transition = color_mode & ColorCapability::BRIGHTNESS;
|
|
279
297
|
|
|
280
298
|
// If effect is already active, remove effect start
|
|
281
|
-
if (this->has_effect_() &&
|
|
282
|
-
this->
|
|
299
|
+
if (this->has_effect_() && this->effect_ == this->parent_->active_effect_index_) {
|
|
300
|
+
this->set_flag_(FLAG_HAS_EFFECT, false);
|
|
283
301
|
}
|
|
284
302
|
|
|
285
303
|
// validate effect index
|
|
286
|
-
if (this->has_effect_() &&
|
|
287
|
-
ESP_LOGW(TAG, "'%s'
|
|
288
|
-
this->
|
|
304
|
+
if (this->has_effect_() && this->effect_ > this->parent_->effects_.size()) {
|
|
305
|
+
ESP_LOGW(TAG, "'%s': invalid effect index %" PRIu32, name, this->effect_);
|
|
306
|
+
this->set_flag_(FLAG_HAS_EFFECT, false);
|
|
289
307
|
}
|
|
290
308
|
|
|
291
309
|
if (this->has_effect_() && (this->has_transition_() || this->has_flash_())) {
|
|
292
|
-
ESP_LOGW(TAG, "'%s'
|
|
293
|
-
this->
|
|
294
|
-
this->
|
|
310
|
+
ESP_LOGW(TAG, "'%s': effect cannot be used with transition/flash", name);
|
|
311
|
+
this->set_flag_(FLAG_HAS_TRANSITION, false);
|
|
312
|
+
this->set_flag_(FLAG_HAS_FLASH, false);
|
|
295
313
|
}
|
|
296
314
|
|
|
297
315
|
if (this->has_flash_() && this->has_transition_()) {
|
|
298
|
-
ESP_LOGW(TAG, "'%s'
|
|
299
|
-
this->
|
|
316
|
+
ESP_LOGW(TAG, "'%s': flash cannot be used with transition", name);
|
|
317
|
+
this->set_flag_(FLAG_HAS_TRANSITION, false);
|
|
300
318
|
}
|
|
301
319
|
|
|
302
|
-
if (!this->has_transition_() && !this->has_flash_() && (!this->has_effect_() ||
|
|
320
|
+
if (!this->has_transition_() && !this->has_flash_() && (!this->has_effect_() || this->effect_ == 0) &&
|
|
303
321
|
supports_transition) {
|
|
304
322
|
// nothing specified and light supports transitions, set default transition length
|
|
305
323
|
this->transition_length_ = this->parent_->default_transition_length_;
|
|
324
|
+
this->set_flag_(FLAG_HAS_TRANSITION, true);
|
|
306
325
|
}
|
|
307
326
|
|
|
308
|
-
if (this->
|
|
327
|
+
if (this->has_transition_() && this->transition_length_ == 0) {
|
|
309
328
|
// 0 transition is interpreted as no transition (instant change)
|
|
310
|
-
this->
|
|
329
|
+
this->set_flag_(FLAG_HAS_TRANSITION, false);
|
|
311
330
|
}
|
|
312
331
|
|
|
313
332
|
if (this->has_transition_() && !supports_transition) {
|
|
314
|
-
ESP_LOGW(TAG, "'%s'
|
|
315
|
-
this->
|
|
333
|
+
ESP_LOGW(TAG, "'%s': transitions not supported", name);
|
|
334
|
+
this->set_flag_(FLAG_HAS_TRANSITION, false);
|
|
316
335
|
}
|
|
317
336
|
|
|
318
337
|
// If not a flash and turning the light off, then disable the light
|
|
319
338
|
// Do not use light color values directly, so that effects can set 0% brightness
|
|
320
339
|
// Reason: When user turns off the light in frontend, the effect should also stop
|
|
321
|
-
|
|
340
|
+
bool target_state = this->has_state() ? this->state_ : v.is_on();
|
|
341
|
+
if (!this->has_flash_() && !target_state) {
|
|
322
342
|
if (this->has_effect_()) {
|
|
323
|
-
ESP_LOGW(TAG, "'%s'
|
|
324
|
-
this->
|
|
343
|
+
ESP_LOGW(TAG, "'%s': cannot start effect when turning off", name);
|
|
344
|
+
this->set_flag_(FLAG_HAS_EFFECT, false);
|
|
325
345
|
} else if (this->parent_->active_effect_index_ != 0 && explicit_turn_off_request) {
|
|
326
346
|
// Auto turn off effect
|
|
327
347
|
this->effect_ = 0;
|
|
348
|
+
this->set_flag_(FLAG_HAS_EFFECT, true);
|
|
328
349
|
}
|
|
329
350
|
}
|
|
330
351
|
|
|
331
352
|
// Disable saving for flashes
|
|
332
353
|
if (this->has_flash_())
|
|
333
|
-
this->
|
|
354
|
+
this->set_flag_(FLAG_SAVE, false);
|
|
334
355
|
|
|
335
356
|
return v;
|
|
336
357
|
}
|
|
@@ -343,24 +364,27 @@ void LightCall::transform_parameters_() {
|
|
|
343
364
|
// - RGBWW lights with color_interlock=true, which also sets "brightness" and
|
|
344
365
|
// "color_temperature" (without color_interlock, CW/WW are set directly)
|
|
345
366
|
// - Legacy Home Assistant (pre-colormode), which sets "white" and "color_temperature"
|
|
346
|
-
if (((this->
|
|
347
|
-
(
|
|
348
|
-
!(
|
|
349
|
-
!(
|
|
367
|
+
if (((this->has_white() && this->white_ > 0.0f) || this->has_color_temperature()) && //
|
|
368
|
+
(this->color_mode_ & ColorCapability::COLD_WARM_WHITE) && //
|
|
369
|
+
!(this->color_mode_ & ColorCapability::WHITE) && //
|
|
370
|
+
!(this->color_mode_ & ColorCapability::COLOR_TEMPERATURE) && //
|
|
350
371
|
traits.get_min_mireds() > 0.0f && traits.get_max_mireds() > 0.0f) {
|
|
351
|
-
ESP_LOGD(TAG, "'%s'
|
|
372
|
+
ESP_LOGD(TAG, "'%s': setting cold/warm white channels using white/color temperature values",
|
|
352
373
|
this->parent_->get_name().c_str());
|
|
353
|
-
if (this->
|
|
354
|
-
const float color_temp = clamp(
|
|
374
|
+
if (this->has_color_temperature()) {
|
|
375
|
+
const float color_temp = clamp(this->color_temperature_, traits.get_min_mireds(), traits.get_max_mireds());
|
|
355
376
|
const float ww_fraction =
|
|
356
377
|
(color_temp - traits.get_min_mireds()) / (traits.get_max_mireds() - traits.get_min_mireds());
|
|
357
378
|
const float cw_fraction = 1.0f - ww_fraction;
|
|
358
379
|
const float max_cw_ww = std::max(ww_fraction, cw_fraction);
|
|
359
380
|
this->cold_white_ = gamma_uncorrect(cw_fraction / max_cw_ww, this->parent_->get_gamma_correct());
|
|
360
381
|
this->warm_white_ = gamma_uncorrect(ww_fraction / max_cw_ww, this->parent_->get_gamma_correct());
|
|
382
|
+
this->set_flag_(FLAG_HAS_COLD_WHITE, true);
|
|
383
|
+
this->set_flag_(FLAG_HAS_WARM_WHITE, true);
|
|
361
384
|
}
|
|
362
|
-
if (this->
|
|
363
|
-
this->brightness_ =
|
|
385
|
+
if (this->has_white()) {
|
|
386
|
+
this->brightness_ = this->white_;
|
|
387
|
+
this->set_flag_(FLAG_HAS_BRIGHTNESS, true);
|
|
364
388
|
}
|
|
365
389
|
}
|
|
366
390
|
}
|
|
@@ -378,7 +402,7 @@ ColorMode LightCall::compute_color_mode_() {
|
|
|
378
402
|
|
|
379
403
|
// Don't change if the light is being turned off.
|
|
380
404
|
ColorMode current_mode = this->parent_->remote_values.get_color_mode();
|
|
381
|
-
if (this->
|
|
405
|
+
if (this->has_state() && !this->state_)
|
|
382
406
|
return current_mode;
|
|
383
407
|
|
|
384
408
|
// If no color mode is specified, we try to guess the color mode. This is needed for backward compatibility to
|
|
@@ -388,8 +412,8 @@ ColorMode LightCall::compute_color_mode_() {
|
|
|
388
412
|
|
|
389
413
|
// Don't change if the current mode is suitable.
|
|
390
414
|
if (suitable_modes.count(current_mode) > 0) {
|
|
391
|
-
ESP_LOGI(TAG, "'%s'
|
|
392
|
-
|
|
415
|
+
ESP_LOGI(TAG, "'%s': color mode not specified; retaining %s", this->parent_->get_name().c_str(),
|
|
416
|
+
LOG_STR_ARG(color_mode_to_human(current_mode)));
|
|
393
417
|
return current_mode;
|
|
394
418
|
}
|
|
395
419
|
|
|
@@ -398,7 +422,7 @@ ColorMode LightCall::compute_color_mode_() {
|
|
|
398
422
|
if (supported_modes.count(mode) == 0)
|
|
399
423
|
continue;
|
|
400
424
|
|
|
401
|
-
ESP_LOGI(TAG, "'%s'
|
|
425
|
+
ESP_LOGI(TAG, "'%s': color mode not specified; using %s", this->parent_->get_name().c_str(),
|
|
402
426
|
LOG_STR_ARG(color_mode_to_human(mode)));
|
|
403
427
|
return mode;
|
|
404
428
|
}
|
|
@@ -406,17 +430,17 @@ ColorMode LightCall::compute_color_mode_() {
|
|
|
406
430
|
// There's no supported mode for this call, so warn, use the current more or a mode at random and let validation strip
|
|
407
431
|
// out whatever we don't support.
|
|
408
432
|
auto color_mode = current_mode != ColorMode::UNKNOWN ? current_mode : *supported_modes.begin();
|
|
409
|
-
ESP_LOGW(TAG, "'%s'
|
|
410
|
-
|
|
433
|
+
ESP_LOGW(TAG, "'%s': no suitable color mode supported; defaulting to %s", this->parent_->get_name().c_str(),
|
|
434
|
+
LOG_STR_ARG(color_mode_to_human(color_mode)));
|
|
411
435
|
return color_mode;
|
|
412
436
|
}
|
|
413
437
|
std::set<ColorMode> LightCall::get_suitable_color_modes_() {
|
|
414
|
-
bool has_white = this->
|
|
415
|
-
bool has_ct = this->
|
|
416
|
-
bool has_cwww =
|
|
417
|
-
|
|
418
|
-
bool has_rgb = (this->
|
|
419
|
-
(this->
|
|
438
|
+
bool has_white = this->has_white() && this->white_ > 0.0f;
|
|
439
|
+
bool has_ct = this->has_color_temperature();
|
|
440
|
+
bool has_cwww =
|
|
441
|
+
(this->has_cold_white() && this->cold_white_ > 0.0f) || (this->has_warm_white() && this->warm_white_ > 0.0f);
|
|
442
|
+
bool has_rgb = (this->has_color_brightness() && this->color_brightness_ > 0.0f) ||
|
|
443
|
+
(this->has_red() || this->has_green() || this->has_blue());
|
|
420
444
|
|
|
421
445
|
#define KEY(white, ct, cwww, rgb) ((white) << 0 | (ct) << 1 | (cwww) << 2 | (rgb) << 3)
|
|
422
446
|
#define ENTRY(white, ct, cwww, rgb, ...) \
|
|
@@ -472,7 +496,7 @@ LightCall &LightCall::set_effect(const std::string &effect) {
|
|
|
472
496
|
}
|
|
473
497
|
}
|
|
474
498
|
if (!found) {
|
|
475
|
-
ESP_LOGW(TAG, "'%s'
|
|
499
|
+
ESP_LOGW(TAG, "'%s': no such effect '%s'", this->parent_->get_name().c_str(), effect.c_str());
|
|
476
500
|
}
|
|
477
501
|
return *this;
|
|
478
502
|
}
|
|
@@ -491,7 +515,7 @@ LightCall &LightCall::from_light_color_values(const LightColorValues &values) {
|
|
|
491
515
|
return *this;
|
|
492
516
|
}
|
|
493
517
|
ColorMode LightCall::get_active_color_mode_() {
|
|
494
|
-
return this->
|
|
518
|
+
return this->has_color_mode() ? this->color_mode_ : this->parent_->remote_values.get_color_mode();
|
|
495
519
|
}
|
|
496
520
|
LightCall &LightCall::set_transition_length_if_supported(uint32_t transition_length) {
|
|
497
521
|
if (this->get_active_color_mode_() & ColorCapability::BRIGHTNESS)
|
|
@@ -505,7 +529,7 @@ LightCall &LightCall::set_brightness_if_supported(float brightness) {
|
|
|
505
529
|
}
|
|
506
530
|
LightCall &LightCall::set_color_mode_if_supported(ColorMode color_mode) {
|
|
507
531
|
if (this->parent_->get_traits().supports_color_mode(color_mode))
|
|
508
|
-
this->
|
|
532
|
+
this->set_color_mode(color_mode);
|
|
509
533
|
return *this;
|
|
510
534
|
}
|
|
511
535
|
LightCall &LightCall::set_color_brightness_if_supported(float brightness) {
|
|
@@ -549,110 +573,19 @@ LightCall &LightCall::set_warm_white_if_supported(float warm_white) {
|
|
|
549
573
|
this->set_warm_white(warm_white);
|
|
550
574
|
return *this;
|
|
551
575
|
}
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
this->transition_length_ = transition_length;
|
|
566
|
-
return *this;
|
|
567
|
-
}
|
|
568
|
-
LightCall &LightCall::set_flash_length(optional<uint32_t> flash_length) {
|
|
569
|
-
this->flash_length_ = flash_length;
|
|
570
|
-
return *this;
|
|
571
|
-
}
|
|
572
|
-
LightCall &LightCall::set_flash_length(uint32_t flash_length) {
|
|
573
|
-
this->flash_length_ = flash_length;
|
|
574
|
-
return *this;
|
|
575
|
-
}
|
|
576
|
-
LightCall &LightCall::set_brightness(optional<float> brightness) {
|
|
577
|
-
this->brightness_ = brightness;
|
|
578
|
-
return *this;
|
|
579
|
-
}
|
|
580
|
-
LightCall &LightCall::set_brightness(float brightness) {
|
|
581
|
-
this->brightness_ = brightness;
|
|
582
|
-
return *this;
|
|
583
|
-
}
|
|
584
|
-
LightCall &LightCall::set_color_mode(optional<ColorMode> color_mode) {
|
|
585
|
-
this->color_mode_ = color_mode;
|
|
586
|
-
return *this;
|
|
587
|
-
}
|
|
588
|
-
LightCall &LightCall::set_color_mode(ColorMode color_mode) {
|
|
589
|
-
this->color_mode_ = color_mode;
|
|
590
|
-
return *this;
|
|
591
|
-
}
|
|
592
|
-
LightCall &LightCall::set_color_brightness(optional<float> brightness) {
|
|
593
|
-
this->color_brightness_ = brightness;
|
|
594
|
-
return *this;
|
|
595
|
-
}
|
|
596
|
-
LightCall &LightCall::set_color_brightness(float brightness) {
|
|
597
|
-
this->color_brightness_ = brightness;
|
|
598
|
-
return *this;
|
|
599
|
-
}
|
|
600
|
-
LightCall &LightCall::set_red(optional<float> red) {
|
|
601
|
-
this->red_ = red;
|
|
602
|
-
return *this;
|
|
603
|
-
}
|
|
604
|
-
LightCall &LightCall::set_red(float red) {
|
|
605
|
-
this->red_ = red;
|
|
606
|
-
return *this;
|
|
607
|
-
}
|
|
608
|
-
LightCall &LightCall::set_green(optional<float> green) {
|
|
609
|
-
this->green_ = green;
|
|
610
|
-
return *this;
|
|
611
|
-
}
|
|
612
|
-
LightCall &LightCall::set_green(float green) {
|
|
613
|
-
this->green_ = green;
|
|
614
|
-
return *this;
|
|
615
|
-
}
|
|
616
|
-
LightCall &LightCall::set_blue(optional<float> blue) {
|
|
617
|
-
this->blue_ = blue;
|
|
618
|
-
return *this;
|
|
619
|
-
}
|
|
620
|
-
LightCall &LightCall::set_blue(float blue) {
|
|
621
|
-
this->blue_ = blue;
|
|
622
|
-
return *this;
|
|
623
|
-
}
|
|
624
|
-
LightCall &LightCall::set_white(optional<float> white) {
|
|
625
|
-
this->white_ = white;
|
|
626
|
-
return *this;
|
|
627
|
-
}
|
|
628
|
-
LightCall &LightCall::set_white(float white) {
|
|
629
|
-
this->white_ = white;
|
|
630
|
-
return *this;
|
|
631
|
-
}
|
|
632
|
-
LightCall &LightCall::set_color_temperature(optional<float> color_temperature) {
|
|
633
|
-
this->color_temperature_ = color_temperature;
|
|
634
|
-
return *this;
|
|
635
|
-
}
|
|
636
|
-
LightCall &LightCall::set_color_temperature(float color_temperature) {
|
|
637
|
-
this->color_temperature_ = color_temperature;
|
|
638
|
-
return *this;
|
|
639
|
-
}
|
|
640
|
-
LightCall &LightCall::set_cold_white(optional<float> cold_white) {
|
|
641
|
-
this->cold_white_ = cold_white;
|
|
642
|
-
return *this;
|
|
643
|
-
}
|
|
644
|
-
LightCall &LightCall::set_cold_white(float cold_white) {
|
|
645
|
-
this->cold_white_ = cold_white;
|
|
646
|
-
return *this;
|
|
647
|
-
}
|
|
648
|
-
LightCall &LightCall::set_warm_white(optional<float> warm_white) {
|
|
649
|
-
this->warm_white_ = warm_white;
|
|
650
|
-
return *this;
|
|
651
|
-
}
|
|
652
|
-
LightCall &LightCall::set_warm_white(float warm_white) {
|
|
653
|
-
this->warm_white_ = warm_white;
|
|
654
|
-
return *this;
|
|
655
|
-
}
|
|
576
|
+
IMPLEMENT_LIGHT_CALL_SETTER(state, bool, FLAG_HAS_STATE)
|
|
577
|
+
IMPLEMENT_LIGHT_CALL_SETTER(transition_length, uint32_t, FLAG_HAS_TRANSITION)
|
|
578
|
+
IMPLEMENT_LIGHT_CALL_SETTER(flash_length, uint32_t, FLAG_HAS_FLASH)
|
|
579
|
+
IMPLEMENT_LIGHT_CALL_SETTER(brightness, float, FLAG_HAS_BRIGHTNESS)
|
|
580
|
+
IMPLEMENT_LIGHT_CALL_SETTER(color_mode, ColorMode, FLAG_HAS_COLOR_MODE)
|
|
581
|
+
IMPLEMENT_LIGHT_CALL_SETTER(color_brightness, float, FLAG_HAS_COLOR_BRIGHTNESS)
|
|
582
|
+
IMPLEMENT_LIGHT_CALL_SETTER(red, float, FLAG_HAS_RED)
|
|
583
|
+
IMPLEMENT_LIGHT_CALL_SETTER(green, float, FLAG_HAS_GREEN)
|
|
584
|
+
IMPLEMENT_LIGHT_CALL_SETTER(blue, float, FLAG_HAS_BLUE)
|
|
585
|
+
IMPLEMENT_LIGHT_CALL_SETTER(white, float, FLAG_HAS_WHITE)
|
|
586
|
+
IMPLEMENT_LIGHT_CALL_SETTER(color_temperature, float, FLAG_HAS_COLOR_TEMPERATURE)
|
|
587
|
+
IMPLEMENT_LIGHT_CALL_SETTER(cold_white, float, FLAG_HAS_COLD_WHITE)
|
|
588
|
+
IMPLEMENT_LIGHT_CALL_SETTER(warm_white, float, FLAG_HAS_WARM_WHITE)
|
|
656
589
|
LightCall &LightCall::set_effect(optional<std::string> effect) {
|
|
657
590
|
if (effect.has_value())
|
|
658
591
|
this->set_effect(*effect);
|
|
@@ -660,18 +593,22 @@ LightCall &LightCall::set_effect(optional<std::string> effect) {
|
|
|
660
593
|
}
|
|
661
594
|
LightCall &LightCall::set_effect(uint32_t effect_number) {
|
|
662
595
|
this->effect_ = effect_number;
|
|
596
|
+
this->set_flag_(FLAG_HAS_EFFECT, true);
|
|
663
597
|
return *this;
|
|
664
598
|
}
|
|
665
599
|
LightCall &LightCall::set_effect(optional<uint32_t> effect_number) {
|
|
666
|
-
|
|
600
|
+
if (effect_number.has_value()) {
|
|
601
|
+
this->effect_ = effect_number.value();
|
|
602
|
+
}
|
|
603
|
+
this->set_flag_(FLAG_HAS_EFFECT, effect_number.has_value());
|
|
667
604
|
return *this;
|
|
668
605
|
}
|
|
669
606
|
LightCall &LightCall::set_publish(bool publish) {
|
|
670
|
-
this->
|
|
607
|
+
this->set_flag_(FLAG_PUBLISH, publish);
|
|
671
608
|
return *this;
|
|
672
609
|
}
|
|
673
610
|
LightCall &LightCall::set_save(bool save) {
|
|
674
|
-
this->
|
|
611
|
+
this->set_flag_(FLAG_SAVE, save);
|
|
675
612
|
return *this;
|
|
676
613
|
}
|
|
677
614
|
LightCall &LightCall::set_rgb(float red, float green, float blue) {
|