esphome 2025.6.3__py3-none-any.whl → 2025.7.0b1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- esphome/__main__.py +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 +42 -20
- esphome/components/api/api_connection.cpp +318 -391
- esphome/components/api/api_connection.h +206 -126
- esphome/components/api/api_frame_helper.cpp +89 -124
- esphome/components/api/api_frame_helper.h +57 -45
- esphome/components/api/api_pb2.cpp +414 -4350
- esphome/components/api/api_pb2.h +287 -198
- esphome/components/api/api_pb2_dump.cpp +4333 -0
- esphome/components/api/api_pb2_service.cpp +180 -425
- esphome/components/api/api_pb2_service.h +7 -6
- esphome/components/api/api_pb2_size.h +2 -4
- esphome/components/api/api_server.cpp +138 -167
- esphome/components/api/api_server.h +66 -12
- esphome/components/api/client.py +8 -2
- esphome/components/api/list_entities.cpp +36 -105
- esphome/components/api/list_entities.h +31 -23
- esphome/components/api/proto.h +26 -3
- esphome/components/api/subscribe_state.cpp +23 -29
- esphome/components/api/subscribe_state.h +26 -19
- 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/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 +102 -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 +111 -97
- 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 +238 -0
- esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
- esphome/components/esp8266/__init__.py +1 -0
- esphome/components/esp8266/gpio.cpp +10 -10
- esphome/components/esp8266/helpers.cpp +31 -0
- esphome/components/esphome/ota/__init__.py +1 -0
- esphome/components/esphome/ota/ota_esphome.cpp +24 -19
- esphome/components/ethernet/__init__.py +42 -23
- esphome/components/ethernet/esp_eth_phy_jl1101.c +0 -16
- esphome/components/ethernet/ethernet_component.cpp +69 -29
- esphome/components/ethernet/ethernet_component.h +18 -10
- esphome/components/event/__init__.py +5 -2
- esphome/components/ezo/ezo.h +0 -1
- esphome/components/ezo_pmp/ezo_pmp.h +0 -1
- esphome/components/fan/__init__.py +5 -2
- esphome/components/feedback/feedback_cover.h +0 -1
- esphome/components/font/__init__.py +92 -82
- esphome/components/font/font.cpp +9 -2
- esphome/components/font/font.h +20 -5
- esphome/components/fs3000/fs3000.h +0 -1
- esphome/components/gcja5/gcja5.h +0 -1
- esphome/components/gl_r01_i2c/__init__.py +0 -0
- esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +68 -0
- esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
- esphome/components/gl_r01_i2c/sensor.py +36 -0
- esphome/components/gp8403/gp8403.h +0 -1
- esphome/components/gpio/binary_sensor/__init__.py +17 -0
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +77 -3
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +40 -0
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +0 -2
- esphome/components/he60r/he60r.h +0 -1
- esphome/components/heatpumpir/climate.py +2 -1
- esphome/components/heatpumpir/heatpumpir.cpp +1 -0
- esphome/components/heatpumpir/heatpumpir.h +1 -0
- esphome/components/honeywellabp2_i2c/honeywellabp2.h +0 -1
- esphome/components/host/__init__.py +2 -1
- esphome/components/host/helpers.cpp +57 -0
- esphome/components/http_request/__init__.py +19 -1
- esphome/components/http_request/http_request.h +1 -1
- esphome/components/http_request/http_request_arduino.h +1 -0
- esphome/components/http_request/ota/ota_http_request.cpp +1 -1
- esphome/components/http_request/update/http_request_update.cpp +28 -9
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +3 -9
- esphome/components/hydreon_rgxx/sensor.py +1 -1
- esphome/components/i2c/__init__.py +23 -11
- esphome/components/i2c/i2c_bus.h +8 -1
- esphome/components/i2c/i2c_bus_arduino.cpp +4 -3
- esphome/components/i2c/i2c_bus_arduino.h +6 -3
- esphome/components/i2c/i2c_bus_esp_idf.h +5 -3
- esphome/components/i2c_device/i2c_device.h +0 -1
- esphome/components/i2s_audio/__init__.py +2 -10
- esphome/components/i2s_audio/i2s_audio.cpp +1 -5
- esphome/components/i2s_audio/media_player/__init__.py +2 -2
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +2 -2
- esphome/components/iaqcore/iaqcore.h +0 -2
- esphome/components/image/__init__.py +123 -24
- esphome/components/improv_serial/improv_serial_component.cpp +0 -4
- esphome/components/ina219/ina219.cpp +7 -0
- esphome/components/ina219/ina219.h +1 -0
- esphome/components/ina260/ina260.h +0 -2
- esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.h +0 -1
- esphome/components/inkplate6/display.py +15 -0
- esphome/components/inkplate6/inkplate.cpp +2 -2
- esphome/components/integration/integration_sensor.h +0 -1
- esphome/components/internal_temperature/internal_temperature.cpp +8 -27
- esphome/components/internal_temperature/sensor.py +0 -26
- esphome/components/interval/interval.h +0 -2
- esphome/components/ld2410/button/__init__.py +3 -3
- esphome/components/ld2410/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2410/button/{reset_button.h → factory_reset_button.h} +2 -2
- esphome/components/ld2410/ld2410.cpp +430 -261
- esphome/components/ld2410/ld2410.h +44 -146
- esphome/components/ld2410/number/__init__.py +2 -2
- esphome/components/ld2410/sensor.py +1 -1
- esphome/components/ld2410/switch/__init__.py +1 -1
- esphome/components/ld2420/ld2420.cpp +196 -100
- esphome/components/ld2420/ld2420.h +46 -118
- esphome/components/ld2420/number/__init__.py +2 -2
- esphome/components/ld2420/sensor/__init__.py +6 -2
- esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
- esphome/components/ld2450/button/__init__.py +3 -3
- esphome/components/ld2450/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2450/button/{reset_button.h → factory_reset_button.h} +2 -2
- esphome/components/ld2450/ld2450.cpp +384 -232
- esphome/components/ld2450/ld2450.h +60 -69
- esphome/components/ld2450/switch/__init__.py +1 -1
- esphome/components/ledc/ledc_output.cpp +1 -63
- esphome/components/libretiny/__init__.py +4 -3
- esphome/components/libretiny/const.py +5 -0
- esphome/components/libretiny/generate_components.py +1 -0
- esphome/components/libretiny/helpers.cpp +35 -0
- esphome/components/libretiny/lt_component.cpp +5 -3
- esphome/components/light/__init__.py +4 -2
- esphome/components/light/addressable_light.h +3 -3
- esphome/components/light/light_call.cpp +180 -243
- esphome/components/light/light_call.h +72 -20
- esphome/components/light/light_color_values.h +14 -14
- esphome/components/light/light_state.h +15 -13
- esphome/components/light/transformers.h +2 -2
- esphome/components/ln882x/__init__.py +52 -0
- esphome/components/ln882x/boards.py +285 -0
- esphome/components/lock/__init__.py +5 -2
- esphome/components/logger/__init__.py +40 -3
- esphome/components/logger/logger.cpp +47 -12
- esphome/components/logger/logger.h +80 -49
- esphome/components/logger/logger_esp32.cpp +3 -3
- esphome/components/lps22/__init__.py +0 -0
- esphome/components/lps22/lps22.cpp +75 -0
- esphome/components/lps22/lps22.h +27 -0
- esphome/components/lps22/sensor.py +58 -0
- esphome/components/ltr390/ltr390.h +0 -1
- esphome/components/ltr501/ltr501.h +0 -1
- esphome/components/ltr_als_ps/ltr_als_ps.h +0 -1
- esphome/components/lvgl/__init__.py +1 -1
- esphome/components/lvgl/schemas.py +66 -6
- esphome/components/lvgl/styles.py +24 -16
- esphome/components/lvgl/widgets/__init__.py +12 -2
- esphome/components/lvgl/widgets/lv_bar.py +40 -19
- esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +1 -1
- esphome/components/max9611/max9611.h +0 -1
- esphome/components/mcp23016/__init__.py +1 -1
- esphome/components/mcp23xxx_base/__init__.py +1 -1
- esphome/components/mcp4461/__init__.py +1 -1
- esphome/components/mcp4461/output/__init__.py +3 -2
- esphome/components/mcp9600/mcp9600.h +0 -2
- esphome/components/md5/md5.cpp +3 -3
- esphome/components/md5/md5.h +1 -6
- esphome/components/mdns/__init__.py +22 -11
- esphome/components/media_player/__init__.py +4 -3
- esphome/components/micro_wake_word/__init__.py +1 -5
- esphome/components/micro_wake_word/streaming_model.cpp +2 -2
- esphome/components/microphone/microphone.cpp +7 -9
- esphome/components/microphone/microphone.h +0 -2
- esphome/components/mipi_spi/display.py +1 -0
- esphome/components/mmc5603/mmc5603.cpp +1 -1
- esphome/components/modbus/modbus.cpp +33 -15
- esphome/components/modbus/modbus.h +9 -0
- esphome/components/modbus_controller/__init__.py +42 -10
- esphome/components/modbus_controller/modbus_controller.cpp +92 -11
- esphome/components/modbus_controller/modbus_controller.h +61 -7
- esphome/components/mopeka_pro_check/mopeka_pro_check.h +0 -1
- esphome/components/mopeka_std_check/mopeka_std_check.h +0 -1
- esphome/components/mpl3115a2/mpl3115a2.h +0 -2
- esphome/components/mqtt/__init__.py +16 -0
- esphome/components/mqtt/mqtt_backend.h +2 -1
- esphome/components/mqtt/mqtt_backend_esp32.cpp +126 -45
- esphome/components/mqtt/mqtt_backend_esp32.h +106 -4
- esphome/components/mqtt/mqtt_client.cpp +15 -9
- esphome/components/mqtt/mqtt_client.h +8 -3
- esphome/components/ms8607/ms8607.h +0 -1
- esphome/components/neopixelbus/light.py +4 -1
- esphome/components/neopixelbus/neopixelbus_light.h +1 -1
- esphome/components/network/__init__.py +4 -1
- esphome/components/network/ip_address.h +1 -0
- esphome/components/nextion/__init__.py +16 -0
- esphome/components/nextion/base_component.py +1 -0
- esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +1 -1
- esphome/components/nextion/display.py +14 -4
- esphome/components/nextion/nextion.cpp +166 -101
- esphome/components/nextion/nextion.h +84 -53
- esphome/components/nextion/nextion_commands.cpp +11 -10
- esphome/components/nextion/nextion_component.cpp +28 -28
- esphome/components/nextion/nextion_component.h +53 -18
- esphome/components/nextion/nextion_component_base.h +3 -0
- esphome/components/nextion/nextion_upload.cpp +36 -0
- esphome/components/nextion/nextion_upload_arduino.cpp +10 -35
- esphome/components/nextion/nextion_upload_idf.cpp +9 -33
- esphome/components/nextion/sensor/nextion_sensor.cpp +1 -1
- esphome/components/nextion/switch/nextion_switch.cpp +1 -1
- esphome/components/nextion/text_sensor/nextion_textsensor.cpp +1 -1
- esphome/components/nfc/nfc.cpp +3 -22
- esphome/components/nfc/nfc.h +3 -3
- esphome/components/number/__init__.py +5 -2
- esphome/components/online_image/__init__.py +5 -0
- esphome/components/online_image/online_image.cpp +6 -2
- esphome/components/online_image/online_image.h +4 -1
- esphome/components/opentherm/opentherm.cpp +7 -12
- esphome/components/openthread/__init__.py +47 -40
- esphome/components/openthread/const.py +1 -0
- esphome/components/openthread/openthread_esp.cpp +27 -5
- esphome/components/opt3001/__init__.py +0 -0
- esphome/components/opt3001/opt3001.cpp +122 -0
- esphome/components/opt3001/opt3001.h +27 -0
- esphome/components/opt3001/sensor.py +35 -0
- esphome/components/ota/__init__.py +17 -0
- esphome/components/ota/ota_backend.h +27 -1
- esphome/components/ota/ota_backend_arduino_esp32.cpp +12 -2
- esphome/components/ota/ota_backend_arduino_esp32.h +3 -0
- esphome/components/ota/ota_backend_arduino_esp8266.cpp +18 -4
- esphome/components/ota/ota_backend_arduino_esp8266.h +3 -0
- esphome/components/ota/ota_backend_arduino_libretiny.cpp +12 -2
- esphome/components/ota/ota_backend_arduino_libretiny.h +3 -0
- esphome/components/ota/ota_backend_arduino_rp2040.cpp +9 -2
- esphome/components/ota/ota_backend_arduino_rp2040.h +3 -0
- esphome/components/ota/ota_backend_esp_idf.cpp +10 -16
- esphome/components/ota/ota_backend_esp_idf.h +1 -0
- esphome/components/packages/__init__.py +5 -2
- esphome/components/packet_transport/binary_sensor.py +61 -4
- esphome/components/packet_transport/packet_transport.cpp +31 -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 +1 -0
- esphome/components/rp2040/helpers.cpp +55 -0
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +2 -2
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -4
- esphome/components/rtttl/__init__.py +4 -4
- esphome/components/rtttl/rtttl.cpp +10 -1
- esphome/components/ruuvitag/ruuvitag.h +0 -1
- esphome/components/safe_mode/safe_mode.cpp +2 -0
- esphome/components/safe_mode/safe_mode.h +4 -1
- esphome/components/scd30/scd30.h +0 -1
- esphome/components/scd30/sensor.py +2 -2
- esphome/components/scd4x/scd4x.cpp +61 -54
- esphome/components/scd4x/scd4x.h +17 -15
- esphome/components/scd4x/sensor.py +4 -4
- esphome/components/script/script.h +0 -2
- esphome/components/sdp3x/sensor.py +1 -1
- esphome/components/select/__init__.py +5 -2
- esphome/components/sen5x/sen5x.h +0 -1
- esphome/components/senseair/senseair.h +0 -1
- esphome/components/sensor/__init__.py +4 -2
- esphome/components/sensor/filter.cpp +1 -1
- esphome/components/sensor/sensor.cpp +12 -6
- esphome/components/sensor/sensor.h +13 -5
- esphome/components/servo/servo.h +0 -1
- esphome/components/sfa30/sfa30.h +0 -1
- esphome/components/sgp30/sgp30.h +0 -1
- esphome/components/sgp4x/sgp4x.h +0 -1
- esphome/components/shelly_dimmer/stm32flash.cpp +1 -2
- esphome/components/sht4x/sht4x.h +0 -1
- esphome/components/sm300d2/sm300d2.h +0 -2
- esphome/components/smt100/sensor.py +8 -4
- esphome/components/smt100/smt100.cpp +5 -5
- esphome/components/smt100/smt100.h +3 -3
- esphome/components/sn74hc595/__init__.py +1 -1
- esphome/components/sn74hc595/sn74hc595.cpp +5 -4
- esphome/components/sntp/sntp_component.cpp +9 -3
- esphome/components/sntp/time.py +2 -0
- esphome/components/socket/__init__.py +17 -0
- esphome/components/spi/__init__.py +27 -6
- esphome/components/spi/spi.cpp +3 -2
- esphome/components/spi/spi.h +9 -3
- esphome/components/spi/spi_arduino.cpp +3 -5
- esphome/components/spi/spi_esp_idf.cpp +40 -21
- esphome/components/spi_led_strip/spi_led_strip.cpp +1 -1
- esphome/components/sps30/sps30.h +0 -1
- esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
- esphome/components/st7701s/st7701s.cpp +0 -4
- esphome/components/status/status_binary_sensor.h +0 -2
- esphome/components/substitutions/__init__.py +76 -19
- esphome/components/substitutions/jinja.py +99 -0
- esphome/components/sun/sun.cpp +3 -4
- esphome/components/switch/__init__.py +5 -2
- esphome/components/switch/binary_sensor/switch_binary_sensor.h +0 -1
- esphome/components/sx126x/__init__.py +317 -0
- esphome/components/sx126x/automation.h +62 -0
- esphome/components/sx126x/packet_transport/__init__.py +26 -0
- esphome/components/sx126x/packet_transport/sx126x_transport.cpp +26 -0
- esphome/components/sx126x/packet_transport/sx126x_transport.h +25 -0
- esphome/components/sx126x/sx126x.cpp +523 -0
- esphome/components/sx126x/sx126x.h +140 -0
- esphome/components/sx126x/sx126x_reg.h +163 -0
- esphome/components/sx127x/__init__.py +325 -0
- esphome/components/sx127x/automation.h +62 -0
- esphome/components/sx127x/packet_transport/__init__.py +26 -0
- esphome/components/sx127x/packet_transport/sx127x_transport.cpp +26 -0
- esphome/components/sx127x/packet_transport/sx127x_transport.h +25 -0
- esphome/components/sx127x/sx127x.cpp +498 -0
- esphome/components/sx127x/sx127x.h +128 -0
- esphome/components/sx127x/sx127x_reg.h +295 -0
- esphome/components/syslog/esphome_syslog.cpp +5 -3
- esphome/components/syslog/esphome_syslog.h +1 -1
- esphome/components/tca9555/__init__.py +1 -1
- esphome/components/template/binary_sensor/template_binary_sensor.cpp +1 -9
- esphome/components/text/__init__.py +5 -2
- esphome/components/text_sensor/__init__.py +5 -2
- esphome/components/thermostat/thermostat_climate.cpp +34 -31
- esphome/components/thermostat/thermostat_climate.h +43 -39
- esphome/components/time/__init__.py +16 -2
- esphome/components/time/real_time_clock.cpp +4 -0
- esphome/components/time/real_time_clock.h +5 -1
- esphome/components/tlc5971/tlc5971.cpp +4 -1
- esphome/components/tmp1075/tmp1075.h +0 -2
- esphome/components/tof10120/tof10120_sensor.h +0 -1
- esphome/components/tormatic/tormatic_cover.h +0 -1
- esphome/components/total_daily_energy/total_daily_energy.h +0 -1
- esphome/components/tsl2591/tsl2591.cpp +1 -1
- esphome/components/ttp229_bsf/ttp229_bsf.h +0 -1
- esphome/components/ttp229_lsf/ttp229_lsf.h +0 -1
- esphome/components/tx20/tx20.cpp +2 -2
- esphome/components/uart/__init__.py +18 -0
- esphome/components/uart/uart_component_esp_idf.cpp +0 -4
- esphome/components/update/__init__.py +5 -2
- esphome/components/update/update_entity.h +8 -0
- esphome/components/usb_host/__init__.py +5 -2
- esphome/components/valve/__init__.py +5 -2
- esphome/components/vbus/vbus.h +0 -1
- esphome/components/veml3235/veml3235.h +0 -1
- esphome/components/veml7700/veml7700.h +0 -1
- esphome/components/vl53l0x/vl53l0x_sensor.h +0 -1
- esphome/components/voice_assistant/voice_assistant.cpp +4 -4
- esphome/components/watchdog/watchdog.cpp +0 -4
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +6 -6
- esphome/components/web_server/__init__.py +34 -19
- esphome/components/web_server/ota/__init__.py +32 -0
- esphome/components/web_server/ota/ota_web_server.cpp +210 -0
- esphome/components/web_server/ota/ota_web_server.h +26 -0
- esphome/components/web_server/web_server.cpp +305 -427
- esphome/components/web_server/web_server.h +33 -23
- esphome/components/web_server/web_server_v1.cpp +4 -5
- esphome/components/web_server_base/__init__.py +5 -2
- esphome/components/web_server_base/web_server_base.cpp +2 -94
- esphome/components/web_server_base/web_server_base.h +5 -25
- esphome/components/web_server_idf/multipart.cpp +254 -0
- esphome/components/web_server_idf/multipart.h +86 -0
- esphome/components/web_server_idf/utils.cpp +32 -0
- esphome/components/web_server_idf/utils.h +10 -0
- esphome/components/web_server_idf/web_server_idf.cpp +162 -16
- esphome/components/web_server_idf/web_server_idf.h +11 -10
- esphome/components/wiegand/wiegand.cpp +2 -2
- esphome/components/wifi/__init__.py +18 -0
- esphome/components/wifi/wifi_component.cpp +17 -22
- esphome/components/wifi/wifi_component.h +27 -23
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +52 -59
- esphome/components/wifi/wifi_component_esp8266.cpp +46 -46
- esphome/components/wifi/wifi_component_esp_idf.cpp +35 -36
- esphome/components/wifi/wifi_component_libretiny.cpp +26 -27
- esphome/components/wifi/wifi_component_pico_w.cpp +3 -3
- esphome/components/wifi_info/wifi_info_text_sensor.cpp +6 -6
- esphome/components/wireguard/__init__.py +2 -11
- esphome/components/xiaomi_ble/xiaomi_ble.cpp +13 -1
- esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
- esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +0 -1
- esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +0 -1
- esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +0 -1
- esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +0 -1
- esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +0 -1
- esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +0 -1
- esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +0 -1
- esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +0 -1
- esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +0 -1
- esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +0 -1
- esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +0 -1
- esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +0 -1
- esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +0 -1
- esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +0 -1
- esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +0 -1
- esphome/components/xiaomi_miscale/xiaomi_miscale.h +0 -1
- esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +0 -1
- esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +0 -1
- esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +0 -1
- esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +0 -1
- esphome/components/xiaomi_xmwsdj04mmc/__init__.py +0 -0
- esphome/components/xiaomi_xmwsdj04mmc/sensor.py +77 -0
- esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.cpp +77 -0
- esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.h +36 -0
- esphome/components/zio_ultrasonic/zio_ultrasonic.h +0 -2
- esphome/components/zyaura/zyaura.h +0 -1
- esphome/config.py +88 -22
- esphome/config_helpers.py +74 -1
- esphome/config_validation.py +12 -1
- esphome/const.py +65 -10
- esphome/core/__init__.py +18 -2
- esphome/core/application.cpp +163 -10
- esphome/core/application.h +145 -165
- esphome/core/area.h +19 -0
- esphome/core/automation.h +58 -9
- esphome/core/color.cpp +3 -5
- esphome/core/color.h +16 -16
- esphome/core/component.cpp +151 -18
- esphome/core/component.h +98 -4
- esphome/core/component_iterator.cpp +7 -7
- esphome/core/component_iterator.h +9 -7
- 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 +162 -1
- esphome/core/event_pool.h +81 -0
- esphome/core/helpers.cpp +75 -230
- esphome/core/helpers.h +164 -104
- esphome/core/lock_free_queue.h +151 -0
- esphome/core/log.cpp +2 -2
- esphome/core/log.h +2 -0
- esphome/core/optional.h +5 -0
- esphome/core/ring_buffer.cpp +2 -2
- esphome/core/scheduler.cpp +278 -103
- esphome/core/scheduler.h +157 -17
- esphome/core/time.cpp +5 -5
- esphome/core/time.h +5 -5
- esphome/cpp_generator.py +17 -0
- esphome/cpp_helpers.py +0 -22
- esphome/cpp_types.py +3 -1
- esphome/dashboard/entries.py +1 -1
- esphome/dashboard/util/text.py +5 -21
- esphome/dashboard/web_server.py +9 -1
- esphome/helpers.py +47 -0
- esphome/loader.py +15 -1
- esphome/pins.py +14 -8
- esphome/wizard.py +16 -3
- esphome/writer.py +21 -3
- esphome/yaml_util.py +0 -2
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b1.dist-info}/METADATA +10 -9
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b1.dist-info}/RECORD +591 -531
- 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.0b1.dist-info}/WHEEL +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b1.dist-info}/entry_points.txt +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b1.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b1.dist-info}/top_level.txt +0 -0
|
@@ -480,7 +480,11 @@ void BedJetHub::set_clock(uint8_t hour, uint8_t minute) {
|
|
|
480
480
|
|
|
481
481
|
/* Internal */
|
|
482
482
|
|
|
483
|
-
void BedJetHub::loop() {
|
|
483
|
+
void BedJetHub::loop() {
|
|
484
|
+
// Parent BLEClientNode has a loop() method, but this component uses
|
|
485
|
+
// polling via update() and BLE callbacks so loop isn't needed
|
|
486
|
+
this->disable_loop();
|
|
487
|
+
}
|
|
484
488
|
void BedJetHub::update() { this->dispatch_status_(); }
|
|
485
489
|
|
|
486
490
|
void BedJetHub::dump_config() {
|
|
@@ -83,7 +83,11 @@ void BedJetClimate::reset_state_() {
|
|
|
83
83
|
this->publish_state();
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
void BedJetClimate::loop() {
|
|
86
|
+
void BedJetClimate::loop() {
|
|
87
|
+
// This component is controlled via the parent BedJetHub
|
|
88
|
+
// Empty loop not needed, disable to save CPU cycles
|
|
89
|
+
this->disable_loop();
|
|
90
|
+
}
|
|
87
91
|
|
|
88
92
|
void BedJetClimate::control(const ClimateCall &call) {
|
|
89
93
|
ESP_LOGD(TAG, "Received BedJetClimate::control");
|
|
@@ -7,11 +7,13 @@
|
|
|
7
7
|
|
|
8
8
|
extern "C" {
|
|
9
9
|
#include "rtos_pub.h"
|
|
10
|
-
|
|
10
|
+
// rtos_pub.h must be included before the rest of the includes
|
|
11
|
+
|
|
11
12
|
#include "arm_arch.h"
|
|
12
13
|
#include "general_dma_pub.h"
|
|
13
14
|
#include "gpio_pub.h"
|
|
14
15
|
#include "icu_pub.h"
|
|
16
|
+
#include "spi.h"
|
|
15
17
|
#undef SPI_DAT
|
|
16
18
|
#undef SPI_BASE
|
|
17
19
|
};
|
|
@@ -124,7 +126,7 @@ void BekenSPILEDStripLightOutput::setup() {
|
|
|
124
126
|
size_t buffer_size = this->get_buffer_size_();
|
|
125
127
|
size_t dma_buffer_size = (buffer_size * 8) + (2 * 64);
|
|
126
128
|
|
|
127
|
-
|
|
129
|
+
RAMAllocator<uint8_t> allocator;
|
|
128
130
|
this->buf_ = allocator.allocate(buffer_size);
|
|
129
131
|
if (this->buf_ == nullptr) {
|
|
130
132
|
ESP_LOGE(TAG, "Cannot allocate LED buffer!");
|
|
@@ -50,7 +50,7 @@ void BH1750Sensor::read_lx_(BH1750Mode mode, uint8_t mtreg, const std::function<
|
|
|
50
50
|
// turn on (after one-shot sensor automatically powers down)
|
|
51
51
|
uint8_t turn_on = BH1750_COMMAND_POWER_ON;
|
|
52
52
|
if (this->write(&turn_on, 1) != i2c::ERROR_OK) {
|
|
53
|
-
ESP_LOGW(TAG, "
|
|
53
|
+
ESP_LOGW(TAG, "Power on failed");
|
|
54
54
|
f(NAN);
|
|
55
55
|
return;
|
|
56
56
|
}
|
|
@@ -60,7 +60,7 @@ void BH1750Sensor::read_lx_(BH1750Mode mode, uint8_t mtreg, const std::function<
|
|
|
60
60
|
uint8_t mtreg_hi = BH1750_COMMAND_MT_REG_HI | ((mtreg >> 5) & 0b111);
|
|
61
61
|
uint8_t mtreg_lo = BH1750_COMMAND_MT_REG_LO | ((mtreg >> 0) & 0b11111);
|
|
62
62
|
if (this->write(&mtreg_hi, 1) != i2c::ERROR_OK || this->write(&mtreg_lo, 1) != i2c::ERROR_OK) {
|
|
63
|
-
ESP_LOGW(TAG, "
|
|
63
|
+
ESP_LOGW(TAG, "Set measurement time failed");
|
|
64
64
|
active_mtreg_ = 0;
|
|
65
65
|
f(NAN);
|
|
66
66
|
return;
|
|
@@ -88,7 +88,7 @@ void BH1750Sensor::read_lx_(BH1750Mode mode, uint8_t mtreg, const std::function<
|
|
|
88
88
|
return;
|
|
89
89
|
}
|
|
90
90
|
if (this->write(&cmd, 1) != i2c::ERROR_OK) {
|
|
91
|
-
ESP_LOGW(TAG, "
|
|
91
|
+
ESP_LOGW(TAG, "Start measurement failed");
|
|
92
92
|
f(NAN);
|
|
93
93
|
return;
|
|
94
94
|
}
|
|
@@ -99,7 +99,7 @@ void BH1750Sensor::read_lx_(BH1750Mode mode, uint8_t mtreg, const std::function<
|
|
|
99
99
|
this->set_timeout("read", meas_time, [this, mode, mtreg, f]() {
|
|
100
100
|
uint16_t raw_value;
|
|
101
101
|
if (this->read(reinterpret_cast<uint8_t *>(&raw_value), 2) != i2c::ERROR_OK) {
|
|
102
|
-
ESP_LOGW(TAG, "
|
|
102
|
+
ESP_LOGW(TAG, "Read data failed");
|
|
103
103
|
f(NAN);
|
|
104
104
|
return;
|
|
105
105
|
}
|
|
@@ -156,7 +156,7 @@ void BH1750Sensor::update() {
|
|
|
156
156
|
this->publish_state(NAN);
|
|
157
157
|
return;
|
|
158
158
|
}
|
|
159
|
-
ESP_LOGD(TAG, "'%s':
|
|
159
|
+
ESP_LOGD(TAG, "'%s': Illuminance=%.1flx", this->get_name().c_str(), val);
|
|
160
160
|
this->status_clear_warning();
|
|
161
161
|
this->publish_state(val);
|
|
162
162
|
});
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
from logging import getLogger
|
|
2
|
+
|
|
1
3
|
from esphome import automation, core
|
|
2
4
|
from esphome.automation import Condition, maybe_simple_id
|
|
3
5
|
import esphome.codegen as cg
|
|
4
6
|
from esphome.components import mqtt, web_server
|
|
7
|
+
from esphome.components.const import CONF_ON_STATE_CHANGE
|
|
5
8
|
import esphome.config_validation as cv
|
|
6
9
|
from esphome.const import (
|
|
7
10
|
CONF_DELAY,
|
|
@@ -57,8 +60,8 @@ from esphome.const import (
|
|
|
57
60
|
DEVICE_CLASS_WINDOW,
|
|
58
61
|
)
|
|
59
62
|
from esphome.core import CORE, coroutine_with_priority
|
|
63
|
+
from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
|
|
60
64
|
from esphome.cpp_generator import MockObjClass
|
|
61
|
-
from esphome.cpp_helpers import setup_entity
|
|
62
65
|
from esphome.util import Registry
|
|
63
66
|
|
|
64
67
|
CODEOWNERS = ["@esphome/core"]
|
|
@@ -98,6 +101,7 @@ IS_PLATFORM_COMPONENT = True
|
|
|
98
101
|
|
|
99
102
|
CONF_TIME_OFF = "time_off"
|
|
100
103
|
CONF_TIME_ON = "time_on"
|
|
104
|
+
CONF_TRIGGER_ON_INITIAL_STATE = "trigger_on_initial_state"
|
|
101
105
|
|
|
102
106
|
DEFAULT_DELAY = "1s"
|
|
103
107
|
DEFAULT_TIME_OFF = "100ms"
|
|
@@ -127,15 +131,24 @@ MultiClickTriggerEvent = binary_sensor_ns.struct("MultiClickTriggerEvent")
|
|
|
127
131
|
StateTrigger = binary_sensor_ns.class_(
|
|
128
132
|
"StateTrigger", automation.Trigger.template(bool)
|
|
129
133
|
)
|
|
134
|
+
StateChangeTrigger = binary_sensor_ns.class_(
|
|
135
|
+
"StateChangeTrigger",
|
|
136
|
+
automation.Trigger.template(cg.optional.template(bool), cg.optional.template(bool)),
|
|
137
|
+
)
|
|
138
|
+
|
|
130
139
|
BinarySensorPublishAction = binary_sensor_ns.class_(
|
|
131
140
|
"BinarySensorPublishAction", automation.Action
|
|
132
141
|
)
|
|
142
|
+
BinarySensorInvalidateAction = binary_sensor_ns.class_(
|
|
143
|
+
"BinarySensorInvalidateAction", automation.Action
|
|
144
|
+
)
|
|
133
145
|
|
|
134
146
|
# Condition
|
|
135
147
|
BinarySensorCondition = binary_sensor_ns.class_("BinarySensorCondition", Condition)
|
|
136
148
|
|
|
137
149
|
# Filters
|
|
138
150
|
Filter = binary_sensor_ns.class_("Filter")
|
|
151
|
+
TimeoutFilter = binary_sensor_ns.class_("TimeoutFilter", Filter, cg.Component)
|
|
139
152
|
DelayedOnOffFilter = binary_sensor_ns.class_("DelayedOnOffFilter", Filter, cg.Component)
|
|
140
153
|
DelayedOnFilter = binary_sensor_ns.class_("DelayedOnFilter", Filter, cg.Component)
|
|
141
154
|
DelayedOffFilter = binary_sensor_ns.class_("DelayedOffFilter", Filter, cg.Component)
|
|
@@ -144,6 +157,8 @@ AutorepeatFilter = binary_sensor_ns.class_("AutorepeatFilter", Filter, cg.Compon
|
|
|
144
157
|
LambdaFilter = binary_sensor_ns.class_("LambdaFilter", Filter)
|
|
145
158
|
SettleFilter = binary_sensor_ns.class_("SettleFilter", Filter, cg.Component)
|
|
146
159
|
|
|
160
|
+
_LOGGER = getLogger(__name__)
|
|
161
|
+
|
|
147
162
|
FILTER_REGISTRY = Registry()
|
|
148
163
|
validate_filters = cv.validate_registry("filter", FILTER_REGISTRY)
|
|
149
164
|
|
|
@@ -157,6 +172,19 @@ async def invert_filter_to_code(config, filter_id):
|
|
|
157
172
|
return cg.new_Pvariable(filter_id)
|
|
158
173
|
|
|
159
174
|
|
|
175
|
+
@register_filter(
|
|
176
|
+
"timeout",
|
|
177
|
+
TimeoutFilter,
|
|
178
|
+
cv.templatable(cv.positive_time_period_milliseconds),
|
|
179
|
+
)
|
|
180
|
+
async def timeout_filter_to_code(config, filter_id):
|
|
181
|
+
var = cg.new_Pvariable(filter_id)
|
|
182
|
+
await cg.register_component(var, {})
|
|
183
|
+
template_ = await cg.templatable(config, [], cg.uint32)
|
|
184
|
+
cg.add(var.set_timeout_value(template_))
|
|
185
|
+
return var
|
|
186
|
+
|
|
187
|
+
|
|
160
188
|
@register_filter(
|
|
161
189
|
"delayed_on_off",
|
|
162
190
|
DelayedOnOffFilter,
|
|
@@ -386,6 +414,14 @@ def validate_click_timing(value):
|
|
|
386
414
|
return value
|
|
387
415
|
|
|
388
416
|
|
|
417
|
+
def validate_publish_initial_state(value):
|
|
418
|
+
value = cv.boolean(value)
|
|
419
|
+
_LOGGER.warning(
|
|
420
|
+
"The 'publish_initial_state' option has been replaced by 'trigger_on_initial_state' and will be removed in a future release"
|
|
421
|
+
)
|
|
422
|
+
return value
|
|
423
|
+
|
|
424
|
+
|
|
389
425
|
_BINARY_SENSOR_SCHEMA = (
|
|
390
426
|
cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA)
|
|
391
427
|
.extend(cv.MQTT_COMPONENT_SCHEMA)
|
|
@@ -395,7 +431,12 @@ _BINARY_SENSOR_SCHEMA = (
|
|
|
395
431
|
cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(
|
|
396
432
|
mqtt.MQTTBinarySensorComponent
|
|
397
433
|
),
|
|
398
|
-
cv.
|
|
434
|
+
cv.Exclusive(
|
|
435
|
+
CONF_PUBLISH_INITIAL_STATE, CONF_TRIGGER_ON_INITIAL_STATE
|
|
436
|
+
): validate_publish_initial_state,
|
|
437
|
+
cv.Exclusive(
|
|
438
|
+
CONF_TRIGGER_ON_INITIAL_STATE, CONF_TRIGGER_ON_INITIAL_STATE
|
|
439
|
+
): cv.boolean,
|
|
399
440
|
cv.Optional(CONF_DEVICE_CLASS): validate_device_class,
|
|
400
441
|
cv.Optional(CONF_FILTERS): validate_filters,
|
|
401
442
|
cv.Optional(CONF_ON_PRESS): automation.validate_automation(
|
|
@@ -454,11 +495,19 @@ _BINARY_SENSOR_SCHEMA = (
|
|
|
454
495
|
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(StateTrigger),
|
|
455
496
|
}
|
|
456
497
|
),
|
|
498
|
+
cv.Optional(CONF_ON_STATE_CHANGE): automation.validate_automation(
|
|
499
|
+
{
|
|
500
|
+
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(StateChangeTrigger),
|
|
501
|
+
}
|
|
502
|
+
),
|
|
457
503
|
}
|
|
458
504
|
)
|
|
459
505
|
)
|
|
460
506
|
|
|
461
507
|
|
|
508
|
+
_BINARY_SENSOR_SCHEMA.add_extra(entity_duplicate_validator("binary_sensor"))
|
|
509
|
+
|
|
510
|
+
|
|
462
511
|
def binary_sensor_schema(
|
|
463
512
|
class_: MockObjClass = cv.UNDEFINED,
|
|
464
513
|
*,
|
|
@@ -489,12 +538,14 @@ BINARY_SENSOR_SCHEMA.add_extra(cv.deprecated_schema_constant("binary_sensor"))
|
|
|
489
538
|
|
|
490
539
|
|
|
491
540
|
async def setup_binary_sensor_core_(var, config):
|
|
492
|
-
await setup_entity(var, config)
|
|
541
|
+
await setup_entity(var, config, "binary_sensor")
|
|
493
542
|
|
|
494
543
|
if (device_class := config.get(CONF_DEVICE_CLASS)) is not None:
|
|
495
544
|
cg.add(var.set_device_class(device_class))
|
|
496
|
-
|
|
497
|
-
|
|
545
|
+
trigger = config.get(CONF_TRIGGER_ON_INITIAL_STATE, False) or config.get(
|
|
546
|
+
CONF_PUBLISH_INITIAL_STATE, False
|
|
547
|
+
)
|
|
548
|
+
cg.add(var.set_trigger_on_initial_state(trigger))
|
|
498
549
|
if inverted := config.get(CONF_INVERTED):
|
|
499
550
|
cg.add(var.set_inverted(inverted))
|
|
500
551
|
if filters_config := config.get(CONF_FILTERS):
|
|
@@ -542,6 +593,17 @@ async def setup_binary_sensor_core_(var, config):
|
|
|
542
593
|
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
|
|
543
594
|
await automation.build_automation(trigger, [(bool, "x")], conf)
|
|
544
595
|
|
|
596
|
+
for conf in config.get(CONF_ON_STATE_CHANGE, []):
|
|
597
|
+
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
|
|
598
|
+
await automation.build_automation(
|
|
599
|
+
trigger,
|
|
600
|
+
[
|
|
601
|
+
(cg.optional.template(bool), "x_previous"),
|
|
602
|
+
(cg.optional.template(bool), "x"),
|
|
603
|
+
],
|
|
604
|
+
conf,
|
|
605
|
+
)
|
|
606
|
+
|
|
545
607
|
if mqtt_id := config.get(CONF_MQTT_ID):
|
|
546
608
|
mqtt_ = cg.new_Pvariable(mqtt_id, var)
|
|
547
609
|
await mqtt.register_mqtt_component(mqtt_, config)
|
|
@@ -591,3 +653,18 @@ async def binary_sensor_is_off_to_code(config, condition_id, template_arg, args)
|
|
|
591
653
|
async def to_code(config):
|
|
592
654
|
cg.add_define("USE_BINARY_SENSOR")
|
|
593
655
|
cg.add_global(binary_sensor_ns.using)
|
|
656
|
+
|
|
657
|
+
|
|
658
|
+
@automation.register_action(
|
|
659
|
+
"binary_sensor.invalidate_state",
|
|
660
|
+
BinarySensorInvalidateAction,
|
|
661
|
+
cv.maybe_simple_value(
|
|
662
|
+
{
|
|
663
|
+
cv.Required(CONF_ID): cv.use_id(BinarySensor),
|
|
664
|
+
},
|
|
665
|
+
key=CONF_ID,
|
|
666
|
+
),
|
|
667
|
+
)
|
|
668
|
+
async def binary_sensor_invalidate_state_to_code(config, action_id, template_arg, args):
|
|
669
|
+
paren = await cg.get_variable(config[CONF_ID])
|
|
670
|
+
return cg.new_Pvariable(action_id, template_arg, paren)
|
|
@@ -96,7 +96,7 @@ class MultiClickTrigger : public Trigger<>, public Component {
|
|
|
96
96
|
: parent_(parent), timing_(std::move(timing)) {}
|
|
97
97
|
|
|
98
98
|
void setup() override {
|
|
99
|
-
this->last_state_ = this->parent_->
|
|
99
|
+
this->last_state_ = this->parent_->get_state_default(false);
|
|
100
100
|
auto f = std::bind(&MultiClickTrigger::on_state_, this, std::placeholders::_1);
|
|
101
101
|
this->parent_->add_on_state_callback(f);
|
|
102
102
|
}
|
|
@@ -130,6 +130,14 @@ class StateTrigger : public Trigger<bool> {
|
|
|
130
130
|
}
|
|
131
131
|
};
|
|
132
132
|
|
|
133
|
+
class StateChangeTrigger : public Trigger<optional<bool>, optional<bool> > {
|
|
134
|
+
public:
|
|
135
|
+
explicit StateChangeTrigger(BinarySensor *parent) {
|
|
136
|
+
parent->add_full_state_callback(
|
|
137
|
+
[this](optional<bool> old_state, optional<bool> state) { this->trigger(old_state, state); });
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
|
|
133
141
|
template<typename... Ts> class BinarySensorCondition : public Condition<Ts...> {
|
|
134
142
|
public:
|
|
135
143
|
BinarySensorCondition(BinarySensor *parent, bool state) : parent_(parent), state_(state) {}
|
|
@@ -154,5 +162,15 @@ template<typename... Ts> class BinarySensorPublishAction : public Action<Ts...>
|
|
|
154
162
|
BinarySensor *sensor_;
|
|
155
163
|
};
|
|
156
164
|
|
|
165
|
+
template<typename... Ts> class BinarySensorInvalidateAction : public Action<Ts...> {
|
|
166
|
+
public:
|
|
167
|
+
explicit BinarySensorInvalidateAction(BinarySensor *sensor) : sensor_(sensor) {}
|
|
168
|
+
|
|
169
|
+
void play(Ts... x) override { this->sensor_->invalidate_state(); }
|
|
170
|
+
|
|
171
|
+
protected:
|
|
172
|
+
BinarySensor *sensor_;
|
|
173
|
+
};
|
|
174
|
+
|
|
157
175
|
} // namespace binary_sensor
|
|
158
176
|
} // namespace esphome
|
|
@@ -7,43 +7,26 @@ namespace binary_sensor {
|
|
|
7
7
|
|
|
8
8
|
static const char *const TAG = "binary_sensor";
|
|
9
9
|
|
|
10
|
-
void BinarySensor::
|
|
11
|
-
this->state_callback_.add(std::move(callback));
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
void BinarySensor::publish_state(bool state) {
|
|
15
|
-
if (!this->publish_dedup_.next(state))
|
|
16
|
-
return;
|
|
10
|
+
void BinarySensor::publish_state(bool new_state) {
|
|
17
11
|
if (this->filter_list_ == nullptr) {
|
|
18
|
-
this->send_state_internal(
|
|
12
|
+
this->send_state_internal(new_state);
|
|
19
13
|
} else {
|
|
20
|
-
this->filter_list_->input(
|
|
14
|
+
this->filter_list_->input(new_state);
|
|
21
15
|
}
|
|
22
16
|
}
|
|
23
|
-
void BinarySensor::publish_initial_state(bool
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if (this->filter_list_ == nullptr) {
|
|
27
|
-
this->send_state_internal(state, true);
|
|
28
|
-
} else {
|
|
29
|
-
this->filter_list_->input(state, true);
|
|
30
|
-
}
|
|
17
|
+
void BinarySensor::publish_initial_state(bool new_state) {
|
|
18
|
+
this->invalidate_state();
|
|
19
|
+
this->publish_state(new_state);
|
|
31
20
|
}
|
|
32
|
-
void BinarySensor::send_state_internal(bool
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
this->has_state_ = true;
|
|
39
|
-
this->state = state;
|
|
40
|
-
if (!is_initial || this->publish_initial_state_) {
|
|
41
|
-
this->state_callback_.call(state);
|
|
21
|
+
void BinarySensor::send_state_internal(bool new_state) {
|
|
22
|
+
// copy the new state to the visible property for backwards compatibility, before any callbacks
|
|
23
|
+
this->state = new_state;
|
|
24
|
+
// Note that set_state_ de-dups and will only trigger callbacks if the state has actually changed
|
|
25
|
+
if (this->set_state_(new_state)) {
|
|
26
|
+
ESP_LOGD(TAG, "'%s': New state is %s", this->get_name().c_str(), ONOFF(new_state));
|
|
42
27
|
}
|
|
43
28
|
}
|
|
44
29
|
|
|
45
|
-
BinarySensor::BinarySensor() : state(false) {}
|
|
46
|
-
|
|
47
30
|
void BinarySensor::add_filter(Filter *filter) {
|
|
48
31
|
filter->parent_ = this;
|
|
49
32
|
if (this->filter_list_ == nullptr) {
|
|
@@ -60,7 +43,6 @@ void BinarySensor::add_filters(const std::vector<Filter *> &filters) {
|
|
|
60
43
|
this->add_filter(filter);
|
|
61
44
|
}
|
|
62
45
|
}
|
|
63
|
-
bool BinarySensor::has_state() const { return this->has_state_; }
|
|
64
46
|
bool BinarySensor::is_status_binary_sensor() const { return false; }
|
|
65
47
|
|
|
66
48
|
} // namespace binary_sensor
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
-
#include "esphome/core/component.h"
|
|
4
3
|
#include "esphome/core/entity_base.h"
|
|
5
4
|
#include "esphome/core/helpers.h"
|
|
6
5
|
#include "esphome/components/binary_sensor/filter.h"
|
|
@@ -34,52 +33,39 @@ namespace binary_sensor {
|
|
|
34
33
|
* The sub classes should notify the front-end of new states via the publish_state() method which
|
|
35
34
|
* handles inverted inputs for you.
|
|
36
35
|
*/
|
|
37
|
-
class BinarySensor : public
|
|
36
|
+
class BinarySensor : public StatefulEntityBase<bool>, public EntityBase_DeviceClass {
|
|
38
37
|
public:
|
|
39
|
-
explicit BinarySensor();
|
|
40
|
-
|
|
41
|
-
/** Add a callback to be notified of state changes.
|
|
42
|
-
*
|
|
43
|
-
* @param callback The void(bool) callback.
|
|
44
|
-
*/
|
|
45
|
-
void add_on_state_callback(std::function<void(bool)> &&callback);
|
|
38
|
+
explicit BinarySensor(){};
|
|
46
39
|
|
|
47
40
|
/** Publish a new state to the front-end.
|
|
48
41
|
*
|
|
49
|
-
* @param
|
|
42
|
+
* @param new_state The new state.
|
|
50
43
|
*/
|
|
51
|
-
void publish_state(bool
|
|
44
|
+
void publish_state(bool new_state);
|
|
52
45
|
|
|
53
46
|
/** Publish the initial state, this will not make the callback manager send callbacks
|
|
54
47
|
* and is meant only for the initial state on boot.
|
|
55
48
|
*
|
|
56
|
-
* @param
|
|
49
|
+
* @param new_state The new state.
|
|
57
50
|
*/
|
|
58
|
-
void publish_initial_state(bool
|
|
59
|
-
|
|
60
|
-
/// The current reported state of the binary sensor.
|
|
61
|
-
bool state{false};
|
|
51
|
+
void publish_initial_state(bool new_state);
|
|
62
52
|
|
|
63
53
|
void add_filter(Filter *filter);
|
|
64
54
|
void add_filters(const std::vector<Filter *> &filters);
|
|
65
55
|
|
|
66
|
-
void set_publish_initial_state(bool publish_initial_state) { this->publish_initial_state_ = publish_initial_state; }
|
|
67
|
-
|
|
68
56
|
// ========== INTERNAL METHODS ==========
|
|
69
57
|
// (In most use cases you won't need these)
|
|
70
|
-
void send_state_internal(bool
|
|
58
|
+
void send_state_internal(bool new_state);
|
|
71
59
|
|
|
72
60
|
/// Return whether this binary sensor has outputted a state.
|
|
73
|
-
virtual bool has_state() const;
|
|
74
|
-
|
|
75
61
|
virtual bool is_status_binary_sensor() const;
|
|
76
62
|
|
|
63
|
+
// For backward compatibility, provide an accessible property
|
|
64
|
+
|
|
65
|
+
bool state{};
|
|
66
|
+
|
|
77
67
|
protected:
|
|
78
|
-
CallbackManager<void(bool)> state_callback_{};
|
|
79
68
|
Filter *filter_list_{nullptr};
|
|
80
|
-
bool has_state_{false};
|
|
81
|
-
bool publish_initial_state_{false};
|
|
82
|
-
Deduplicator<bool> publish_dedup_;
|
|
83
69
|
};
|
|
84
70
|
|
|
85
71
|
class BinarySensorInitiallyOff : public BinarySensor {
|
|
@@ -9,37 +9,42 @@ namespace binary_sensor {
|
|
|
9
9
|
|
|
10
10
|
static const char *const TAG = "sensor.filter";
|
|
11
11
|
|
|
12
|
-
void Filter::output(bool value
|
|
13
|
-
if (!this->dedup_.next(value))
|
|
14
|
-
return;
|
|
15
|
-
|
|
12
|
+
void Filter::output(bool value) {
|
|
16
13
|
if (this->next_ == nullptr) {
|
|
17
|
-
this->parent_->send_state_internal(value
|
|
14
|
+
this->parent_->send_state_internal(value);
|
|
18
15
|
} else {
|
|
19
|
-
this->next_->input(value
|
|
16
|
+
this->next_->input(value);
|
|
20
17
|
}
|
|
21
18
|
}
|
|
22
|
-
void Filter::input(bool value
|
|
23
|
-
|
|
19
|
+
void Filter::input(bool value) {
|
|
20
|
+
if (!this->dedup_.next(value))
|
|
21
|
+
return;
|
|
22
|
+
auto b = this->new_value(value);
|
|
24
23
|
if (b.has_value()) {
|
|
25
|
-
this->output(*b
|
|
24
|
+
this->output(*b);
|
|
26
25
|
}
|
|
27
26
|
}
|
|
28
27
|
|
|
29
|
-
|
|
28
|
+
void TimeoutFilter::input(bool value) {
|
|
29
|
+
this->set_timeout("timeout", this->timeout_delay_.value(), [this]() { this->parent_->invalidate_state(); });
|
|
30
|
+
// we do not de-dup here otherwise changes from invalid to valid state will not be output
|
|
31
|
+
this->output(value);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
optional<bool> DelayedOnOffFilter::new_value(bool value) {
|
|
30
35
|
if (value) {
|
|
31
|
-
this->set_timeout("ON_OFF", this->on_delay_.value(), [this
|
|
36
|
+
this->set_timeout("ON_OFF", this->on_delay_.value(), [this]() { this->output(true); });
|
|
32
37
|
} else {
|
|
33
|
-
this->set_timeout("ON_OFF", this->off_delay_.value(), [this
|
|
38
|
+
this->set_timeout("ON_OFF", this->off_delay_.value(), [this]() { this->output(false); });
|
|
34
39
|
}
|
|
35
40
|
return {};
|
|
36
41
|
}
|
|
37
42
|
|
|
38
43
|
float DelayedOnOffFilter::get_setup_priority() const { return setup_priority::HARDWARE; }
|
|
39
44
|
|
|
40
|
-
optional<bool> DelayedOnFilter::new_value(bool value
|
|
45
|
+
optional<bool> DelayedOnFilter::new_value(bool value) {
|
|
41
46
|
if (value) {
|
|
42
|
-
this->set_timeout("ON", this->delay_.value(), [this
|
|
47
|
+
this->set_timeout("ON", this->delay_.value(), [this]() { this->output(true); });
|
|
43
48
|
return {};
|
|
44
49
|
} else {
|
|
45
50
|
this->cancel_timeout("ON");
|
|
@@ -49,9 +54,9 @@ optional<bool> DelayedOnFilter::new_value(bool value, bool is_initial) {
|
|
|
49
54
|
|
|
50
55
|
float DelayedOnFilter::get_setup_priority() const { return setup_priority::HARDWARE; }
|
|
51
56
|
|
|
52
|
-
optional<bool> DelayedOffFilter::new_value(bool value
|
|
57
|
+
optional<bool> DelayedOffFilter::new_value(bool value) {
|
|
53
58
|
if (!value) {
|
|
54
|
-
this->set_timeout("OFF", this->delay_.value(), [this
|
|
59
|
+
this->set_timeout("OFF", this->delay_.value(), [this]() { this->output(false); });
|
|
55
60
|
return {};
|
|
56
61
|
} else {
|
|
57
62
|
this->cancel_timeout("OFF");
|
|
@@ -61,11 +66,11 @@ optional<bool> DelayedOffFilter::new_value(bool value, bool is_initial) {
|
|
|
61
66
|
|
|
62
67
|
float DelayedOffFilter::get_setup_priority() const { return setup_priority::HARDWARE; }
|
|
63
68
|
|
|
64
|
-
optional<bool> InvertFilter::new_value(bool value
|
|
69
|
+
optional<bool> InvertFilter::new_value(bool value) { return !value; }
|
|
65
70
|
|
|
66
71
|
AutorepeatFilter::AutorepeatFilter(std::vector<AutorepeatFilterTiming> timings) : timings_(std::move(timings)) {}
|
|
67
72
|
|
|
68
|
-
optional<bool> AutorepeatFilter::new_value(bool value
|
|
73
|
+
optional<bool> AutorepeatFilter::new_value(bool value) {
|
|
69
74
|
if (value) {
|
|
70
75
|
// Ignore if already running
|
|
71
76
|
if (this->active_timing_ != 0)
|
|
@@ -101,7 +106,7 @@ void AutorepeatFilter::next_timing_() {
|
|
|
101
106
|
|
|
102
107
|
void AutorepeatFilter::next_value_(bool val) {
|
|
103
108
|
const AutorepeatFilterTiming &timing = this->timings_[this->active_timing_ - 2];
|
|
104
|
-
this->output(val
|
|
109
|
+
this->output(val); // This is at least the second one so not initial
|
|
105
110
|
this->set_timeout("ON_OFF", val ? timing.time_on : timing.time_off, [this, val]() { this->next_value_(!val); });
|
|
106
111
|
}
|
|
107
112
|
|
|
@@ -109,18 +114,18 @@ float AutorepeatFilter::get_setup_priority() const { return setup_priority::HARD
|
|
|
109
114
|
|
|
110
115
|
LambdaFilter::LambdaFilter(std::function<optional<bool>(bool)> f) : f_(std::move(f)) {}
|
|
111
116
|
|
|
112
|
-
optional<bool> LambdaFilter::new_value(bool value
|
|
117
|
+
optional<bool> LambdaFilter::new_value(bool value) { return this->f_(value); }
|
|
113
118
|
|
|
114
|
-
optional<bool> SettleFilter::new_value(bool value
|
|
119
|
+
optional<bool> SettleFilter::new_value(bool value) {
|
|
115
120
|
if (!this->steady_) {
|
|
116
|
-
this->set_timeout("SETTLE", this->delay_.value(), [this, value
|
|
121
|
+
this->set_timeout("SETTLE", this->delay_.value(), [this, value]() {
|
|
117
122
|
this->steady_ = true;
|
|
118
|
-
this->output(value
|
|
123
|
+
this->output(value);
|
|
119
124
|
});
|
|
120
125
|
return {};
|
|
121
126
|
} else {
|
|
122
127
|
this->steady_ = false;
|
|
123
|
-
this->output(value
|
|
128
|
+
this->output(value);
|
|
124
129
|
this->set_timeout("SETTLE", this->delay_.value(), [this]() { this->steady_ = true; });
|
|
125
130
|
return value;
|
|
126
131
|
}
|
|
@@ -14,11 +14,11 @@ class BinarySensor;
|
|
|
14
14
|
|
|
15
15
|
class Filter {
|
|
16
16
|
public:
|
|
17
|
-
virtual optional<bool> new_value(bool value
|
|
17
|
+
virtual optional<bool> new_value(bool value) = 0;
|
|
18
18
|
|
|
19
|
-
void input(bool value
|
|
19
|
+
virtual void input(bool value);
|
|
20
20
|
|
|
21
|
-
void output(bool value
|
|
21
|
+
void output(bool value);
|
|
22
22
|
|
|
23
23
|
protected:
|
|
24
24
|
friend BinarySensor;
|
|
@@ -28,9 +28,19 @@ class Filter {
|
|
|
28
28
|
Deduplicator<bool> dedup_;
|
|
29
29
|
};
|
|
30
30
|
|
|
31
|
+
class TimeoutFilter : public Filter, public Component {
|
|
32
|
+
public:
|
|
33
|
+
optional<bool> new_value(bool value) override { return value; }
|
|
34
|
+
void input(bool value) override;
|
|
35
|
+
template<typename T> void set_timeout_value(T timeout) { this->timeout_delay_ = timeout; }
|
|
36
|
+
|
|
37
|
+
protected:
|
|
38
|
+
TemplatableValue<uint32_t> timeout_delay_{};
|
|
39
|
+
};
|
|
40
|
+
|
|
31
41
|
class DelayedOnOffFilter : public Filter, public Component {
|
|
32
42
|
public:
|
|
33
|
-
optional<bool> new_value(bool value
|
|
43
|
+
optional<bool> new_value(bool value) override;
|
|
34
44
|
|
|
35
45
|
float get_setup_priority() const override;
|
|
36
46
|
|
|
@@ -44,7 +54,7 @@ class DelayedOnOffFilter : public Filter, public Component {
|
|
|
44
54
|
|
|
45
55
|
class DelayedOnFilter : public Filter, public Component {
|
|
46
56
|
public:
|
|
47
|
-
optional<bool> new_value(bool value
|
|
57
|
+
optional<bool> new_value(bool value) override;
|
|
48
58
|
|
|
49
59
|
float get_setup_priority() const override;
|
|
50
60
|
|
|
@@ -56,7 +66,7 @@ class DelayedOnFilter : public Filter, public Component {
|
|
|
56
66
|
|
|
57
67
|
class DelayedOffFilter : public Filter, public Component {
|
|
58
68
|
public:
|
|
59
|
-
optional<bool> new_value(bool value
|
|
69
|
+
optional<bool> new_value(bool value) override;
|
|
60
70
|
|
|
61
71
|
float get_setup_priority() const override;
|
|
62
72
|
|
|
@@ -68,7 +78,7 @@ class DelayedOffFilter : public Filter, public Component {
|
|
|
68
78
|
|
|
69
79
|
class InvertFilter : public Filter {
|
|
70
80
|
public:
|
|
71
|
-
optional<bool> new_value(bool value
|
|
81
|
+
optional<bool> new_value(bool value) override;
|
|
72
82
|
};
|
|
73
83
|
|
|
74
84
|
struct AutorepeatFilterTiming {
|
|
@@ -86,7 +96,7 @@ class AutorepeatFilter : public Filter, public Component {
|
|
|
86
96
|
public:
|
|
87
97
|
explicit AutorepeatFilter(std::vector<AutorepeatFilterTiming> timings);
|
|
88
98
|
|
|
89
|
-
optional<bool> new_value(bool value
|
|
99
|
+
optional<bool> new_value(bool value) override;
|
|
90
100
|
|
|
91
101
|
float get_setup_priority() const override;
|
|
92
102
|
|
|
@@ -102,7 +112,7 @@ class LambdaFilter : public Filter {
|
|
|
102
112
|
public:
|
|
103
113
|
explicit LambdaFilter(std::function<optional<bool>(bool)> f);
|
|
104
114
|
|
|
105
|
-
optional<bool> new_value(bool value
|
|
115
|
+
optional<bool> new_value(bool value) override;
|
|
106
116
|
|
|
107
117
|
protected:
|
|
108
118
|
std::function<optional<bool>(bool)> f_;
|
|
@@ -110,7 +120,7 @@ class LambdaFilter : public Filter {
|
|
|
110
120
|
|
|
111
121
|
class SettleFilter : public Filter, public Component {
|
|
112
122
|
public:
|
|
113
|
-
optional<bool> new_value(bool value
|
|
123
|
+
optional<bool> new_value(bool value) override;
|
|
114
124
|
|
|
115
125
|
float get_setup_priority() const override;
|
|
116
126
|
|
|
@@ -16,7 +16,6 @@ class BLEBinaryOutput : public output::BinaryOutput, public BLEClientNode, publi
|
|
|
16
16
|
public:
|
|
17
17
|
void dump_config() override;
|
|
18
18
|
void loop() override {}
|
|
19
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
20
19
|
void set_service_uuid16(uint16_t uuid) { this->service_uuid_ = espbt::ESPBTUUID::from_uint16(uuid); }
|
|
21
20
|
void set_service_uuid32(uint32_t uuid) { this->service_uuid_ = espbt::ESPBTUUID::from_uint32(uuid); }
|
|
22
21
|
void set_service_uuid128(uint8_t *uuid) { this->service_uuid_ = espbt::ESPBTUUID::from_raw(uuid); }
|