esphome 2025.6.2__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 +10 -4
- 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.cpp +0 -1
- esphome/components/http_request/http_request_arduino.h +1 -0
- esphome/components/http_request/http_request_idf.cpp +0 -1
- esphome/components/http_request/ota/ota_http_request.cpp +1 -1
- esphome/components/http_request/update/http_request_update.cpp +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 +1 -5
- esphome/components/update/__init__.py +5 -2
- esphome/components/update/update_entity.h +8 -0
- esphome/components/usb_host/__init__.py +5 -2
- esphome/components/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 +311 -430
- 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.2.dist-info → esphome-2025.7.0b1.dist-info}/METADATA +10 -9
- {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/RECORD +593 -533
- esphome/components/esp32_ble/ble_event_pool.h +0 -72
- esphome/components/esp32_ble/queue.h +0 -85
- esphome/components/esp32_hall/esp32_hall.cpp +0 -25
- esphome/components/esp32_hall/esp32_hall.h +0 -23
- esphome/components/esp32_touch/esp32_touch.cpp +0 -355
- esphome/components/ld2410/button/reset_button.cpp +0 -9
- esphome/components/ld2450/button/reset_button.cpp +0 -9
- esphome/components/openthread/tlv.py +0 -65
- /esphome/{dashboard/enum.py → enum.py} +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/WHEEL +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/entry_points.txt +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/top_level.txt +0 -0
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
#include "esphome/components/sensor/sensor.h"
|
|
9
9
|
#endif
|
|
10
10
|
|
|
11
|
+
#include "esphome/core/application.h"
|
|
12
|
+
|
|
13
|
+
#define CHECK_BIT(var, pos) (((var) >> (pos)) & 1)
|
|
11
14
|
#define highbyte(val) (uint8_t)((val) >> 8)
|
|
12
15
|
#define lowbyte(val) (uint8_t)((val) &0xff)
|
|
13
16
|
|
|
@@ -15,68 +18,244 @@ namespace esphome {
|
|
|
15
18
|
namespace ld2410 {
|
|
16
19
|
|
|
17
20
|
static const char *const TAG = "ld2410";
|
|
21
|
+
static const char *const UNKNOWN_MAC = "unknown";
|
|
22
|
+
static const char *const VERSION_FMT = "%u.%02X.%02X%02X%02X%02X";
|
|
23
|
+
|
|
24
|
+
enum BaudRate : uint8_t {
|
|
25
|
+
BAUD_RATE_9600 = 1,
|
|
26
|
+
BAUD_RATE_19200 = 2,
|
|
27
|
+
BAUD_RATE_38400 = 3,
|
|
28
|
+
BAUD_RATE_57600 = 4,
|
|
29
|
+
BAUD_RATE_115200 = 5,
|
|
30
|
+
BAUD_RATE_230400 = 6,
|
|
31
|
+
BAUD_RATE_256000 = 7,
|
|
32
|
+
BAUD_RATE_460800 = 8,
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
enum DistanceResolution : uint8_t {
|
|
36
|
+
DISTANCE_RESOLUTION_0_2 = 0x01,
|
|
37
|
+
DISTANCE_RESOLUTION_0_75 = 0x00,
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
enum LightFunction : uint8_t {
|
|
41
|
+
LIGHT_FUNCTION_OFF = 0x00,
|
|
42
|
+
LIGHT_FUNCTION_BELOW = 0x01,
|
|
43
|
+
LIGHT_FUNCTION_ABOVE = 0x02,
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
enum OutPinLevel : uint8_t {
|
|
47
|
+
OUT_PIN_LEVEL_LOW = 0x00,
|
|
48
|
+
OUT_PIN_LEVEL_HIGH = 0x01,
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
enum PeriodicData : uint8_t {
|
|
52
|
+
DATA_TYPES = 6,
|
|
53
|
+
TARGET_STATES = 8,
|
|
54
|
+
MOVING_TARGET_LOW = 9,
|
|
55
|
+
MOVING_TARGET_HIGH = 10,
|
|
56
|
+
MOVING_ENERGY = 11,
|
|
57
|
+
STILL_TARGET_LOW = 12,
|
|
58
|
+
STILL_TARGET_HIGH = 13,
|
|
59
|
+
STILL_ENERGY = 14,
|
|
60
|
+
DETECT_DISTANCE_LOW = 15,
|
|
61
|
+
DETECT_DISTANCE_HIGH = 16,
|
|
62
|
+
MOVING_SENSOR_START = 19,
|
|
63
|
+
STILL_SENSOR_START = 28,
|
|
64
|
+
LIGHT_SENSOR = 37,
|
|
65
|
+
OUT_PIN_SENSOR = 38,
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
enum PeriodicDataValue : uint8_t {
|
|
69
|
+
HEADER = 0xAA,
|
|
70
|
+
FOOTER = 0x55,
|
|
71
|
+
CHECK = 0x00,
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
enum AckData : uint8_t {
|
|
75
|
+
COMMAND = 6,
|
|
76
|
+
COMMAND_STATUS = 7,
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
// Memory-efficient lookup tables
|
|
80
|
+
struct StringToUint8 {
|
|
81
|
+
const char *str;
|
|
82
|
+
const uint8_t value;
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
struct Uint8ToString {
|
|
86
|
+
const uint8_t value;
|
|
87
|
+
const char *str;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
constexpr StringToUint8 BAUD_RATES_BY_STR[] = {
|
|
91
|
+
{"9600", BAUD_RATE_9600}, {"19200", BAUD_RATE_19200}, {"38400", BAUD_RATE_38400},
|
|
92
|
+
{"57600", BAUD_RATE_57600}, {"115200", BAUD_RATE_115200}, {"230400", BAUD_RATE_230400},
|
|
93
|
+
{"256000", BAUD_RATE_256000}, {"460800", BAUD_RATE_460800},
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
constexpr StringToUint8 DISTANCE_RESOLUTIONS_BY_STR[] = {
|
|
97
|
+
{"0.2m", DISTANCE_RESOLUTION_0_2},
|
|
98
|
+
{"0.75m", DISTANCE_RESOLUTION_0_75},
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
constexpr Uint8ToString DISTANCE_RESOLUTIONS_BY_UINT[] = {
|
|
102
|
+
{DISTANCE_RESOLUTION_0_2, "0.2m"},
|
|
103
|
+
{DISTANCE_RESOLUTION_0_75, "0.75m"},
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
constexpr StringToUint8 LIGHT_FUNCTIONS_BY_STR[] = {
|
|
107
|
+
{"off", LIGHT_FUNCTION_OFF},
|
|
108
|
+
{"below", LIGHT_FUNCTION_BELOW},
|
|
109
|
+
{"above", LIGHT_FUNCTION_ABOVE},
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
constexpr Uint8ToString LIGHT_FUNCTIONS_BY_UINT[] = {
|
|
113
|
+
{LIGHT_FUNCTION_OFF, "off"},
|
|
114
|
+
{LIGHT_FUNCTION_BELOW, "below"},
|
|
115
|
+
{LIGHT_FUNCTION_ABOVE, "above"},
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
constexpr StringToUint8 OUT_PIN_LEVELS_BY_STR[] = {
|
|
119
|
+
{"low", OUT_PIN_LEVEL_LOW},
|
|
120
|
+
{"high", OUT_PIN_LEVEL_HIGH},
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
constexpr Uint8ToString OUT_PIN_LEVELS_BY_UINT[] = {
|
|
124
|
+
{OUT_PIN_LEVEL_LOW, "low"},
|
|
125
|
+
{OUT_PIN_LEVEL_HIGH, "high"},
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
// Helper functions for lookups
|
|
129
|
+
template<size_t N> uint8_t find_uint8(const StringToUint8 (&arr)[N], const std::string &str) {
|
|
130
|
+
for (const auto &entry : arr) {
|
|
131
|
+
if (str == entry.str)
|
|
132
|
+
return entry.value;
|
|
133
|
+
}
|
|
134
|
+
return 0xFF; // Not found
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
template<size_t N> const char *find_str(const Uint8ToString (&arr)[N], uint8_t value) {
|
|
138
|
+
for (const auto &entry : arr) {
|
|
139
|
+
if (value == entry.value)
|
|
140
|
+
return entry.str;
|
|
141
|
+
}
|
|
142
|
+
return ""; // Not found
|
|
143
|
+
}
|
|
18
144
|
|
|
19
|
-
|
|
145
|
+
// Commands
|
|
146
|
+
static constexpr uint8_t CMD_ENABLE_CONF = 0xFF;
|
|
147
|
+
static constexpr uint8_t CMD_DISABLE_CONF = 0xFE;
|
|
148
|
+
static constexpr uint8_t CMD_ENABLE_ENG = 0x62;
|
|
149
|
+
static constexpr uint8_t CMD_DISABLE_ENG = 0x63;
|
|
150
|
+
static constexpr uint8_t CMD_MAXDIST_DURATION = 0x60;
|
|
151
|
+
static constexpr uint8_t CMD_QUERY = 0x61;
|
|
152
|
+
static constexpr uint8_t CMD_GATE_SENS = 0x64;
|
|
153
|
+
static constexpr uint8_t CMD_QUERY_VERSION = 0xA0;
|
|
154
|
+
static constexpr uint8_t CMD_QUERY_DISTANCE_RESOLUTION = 0xAB;
|
|
155
|
+
static constexpr uint8_t CMD_SET_DISTANCE_RESOLUTION = 0xAA;
|
|
156
|
+
static constexpr uint8_t CMD_QUERY_LIGHT_CONTROL = 0xAE;
|
|
157
|
+
static constexpr uint8_t CMD_SET_LIGHT_CONTROL = 0xAD;
|
|
158
|
+
static constexpr uint8_t CMD_SET_BAUD_RATE = 0xA1;
|
|
159
|
+
static constexpr uint8_t CMD_BT_PASSWORD = 0xA9;
|
|
160
|
+
static constexpr uint8_t CMD_QUERY_MAC_ADDRESS = 0xA5;
|
|
161
|
+
static constexpr uint8_t CMD_RESET = 0xA2;
|
|
162
|
+
static constexpr uint8_t CMD_RESTART = 0xA3;
|
|
163
|
+
static constexpr uint8_t CMD_BLUETOOTH = 0xA4;
|
|
164
|
+
// Commands values
|
|
165
|
+
static constexpr uint8_t CMD_MAX_MOVE_VALUE = 0x00;
|
|
166
|
+
static constexpr uint8_t CMD_MAX_STILL_VALUE = 0x01;
|
|
167
|
+
static constexpr uint8_t CMD_DURATION_VALUE = 0x02;
|
|
168
|
+
// Header & Footer size
|
|
169
|
+
static constexpr uint8_t HEADER_FOOTER_SIZE = 4;
|
|
170
|
+
// Command Header & Footer
|
|
171
|
+
static constexpr uint8_t CMD_FRAME_HEADER[HEADER_FOOTER_SIZE] = {0xFD, 0xFC, 0xFB, 0xFA};
|
|
172
|
+
static constexpr uint8_t CMD_FRAME_FOOTER[HEADER_FOOTER_SIZE] = {0x04, 0x03, 0x02, 0x01};
|
|
173
|
+
// Data Header & Footer
|
|
174
|
+
static constexpr uint8_t DATA_FRAME_HEADER[HEADER_FOOTER_SIZE] = {0xF4, 0xF3, 0xF2, 0xF1};
|
|
175
|
+
static constexpr uint8_t DATA_FRAME_FOOTER[HEADER_FOOTER_SIZE] = {0xF8, 0xF7, 0xF6, 0xF5};
|
|
176
|
+
// MAC address the module uses when Bluetooth is disabled
|
|
177
|
+
static constexpr uint8_t NO_MAC[] = {0x08, 0x05, 0x04, 0x03, 0x02, 0x01};
|
|
178
|
+
|
|
179
|
+
static inline int two_byte_to_int(char firstbyte, char secondbyte) { return (int16_t) (secondbyte << 8) + firstbyte; }
|
|
180
|
+
|
|
181
|
+
static bool validate_header_footer(const uint8_t *header_footer, const uint8_t *buffer) {
|
|
182
|
+
for (uint8_t i = 0; i < HEADER_FOOTER_SIZE; i++) {
|
|
183
|
+
if (header_footer[i] != buffer[i]) {
|
|
184
|
+
return false; // Mismatch in header/footer
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return true; // Valid header/footer
|
|
188
|
+
}
|
|
20
189
|
|
|
21
190
|
void LD2410Component::dump_config() {
|
|
22
|
-
|
|
191
|
+
std::string mac_str =
|
|
192
|
+
mac_address_is_valid(this->mac_address_) ? format_mac_address_pretty(this->mac_address_) : UNKNOWN_MAC;
|
|
193
|
+
std::string version = str_sprintf(VERSION_FMT, this->version_[1], this->version_[0], this->version_[5],
|
|
194
|
+
this->version_[4], this->version_[3], this->version_[2]);
|
|
195
|
+
ESP_LOGCONFIG(TAG,
|
|
196
|
+
"LD2410:\n"
|
|
197
|
+
" Firmware version: %s\n"
|
|
198
|
+
" MAC address: %s\n"
|
|
199
|
+
" Throttle: %u ms",
|
|
200
|
+
version.c_str(), mac_str.c_str(), this->throttle_);
|
|
23
201
|
#ifdef USE_BINARY_SENSOR
|
|
24
|
-
|
|
25
|
-
LOG_BINARY_SENSOR(" ", "
|
|
26
|
-
LOG_BINARY_SENSOR(" ", "
|
|
27
|
-
LOG_BINARY_SENSOR(" ", "
|
|
28
|
-
|
|
29
|
-
#ifdef USE_SWITCH
|
|
30
|
-
LOG_SWITCH(" ", "EngineeringModeSwitch", this->engineering_mode_switch_);
|
|
31
|
-
LOG_SWITCH(" ", "BluetoothSwitch", this->bluetooth_switch_);
|
|
32
|
-
#endif
|
|
33
|
-
#ifdef USE_BUTTON
|
|
34
|
-
LOG_BUTTON(" ", "ResetButton", this->reset_button_);
|
|
35
|
-
LOG_BUTTON(" ", "RestartButton", this->restart_button_);
|
|
36
|
-
LOG_BUTTON(" ", "QueryButton", this->query_button_);
|
|
202
|
+
ESP_LOGCONFIG(TAG, "Binary Sensors:");
|
|
203
|
+
LOG_BINARY_SENSOR(" ", "Target", this->target_binary_sensor_);
|
|
204
|
+
LOG_BINARY_SENSOR(" ", "MovingTarget", this->moving_target_binary_sensor_);
|
|
205
|
+
LOG_BINARY_SENSOR(" ", "StillTarget", this->still_target_binary_sensor_);
|
|
206
|
+
LOG_BINARY_SENSOR(" ", "OutPinPresenceStatus", this->out_pin_presence_status_binary_sensor_);
|
|
37
207
|
#endif
|
|
38
208
|
#ifdef USE_SENSOR
|
|
39
|
-
|
|
40
|
-
LOG_SENSOR(" ", "
|
|
41
|
-
LOG_SENSOR(" ", "
|
|
42
|
-
LOG_SENSOR(" ", "
|
|
43
|
-
LOG_SENSOR(" ", "
|
|
44
|
-
LOG_SENSOR(" ", "
|
|
45
|
-
|
|
46
|
-
LOG_SENSOR(" ", "NthGateStillSesnsor", s);
|
|
47
|
-
}
|
|
209
|
+
ESP_LOGCONFIG(TAG, "Sensors:");
|
|
210
|
+
LOG_SENSOR(" ", "Light", this->light_sensor_);
|
|
211
|
+
LOG_SENSOR(" ", "DetectionDistance", this->detection_distance_sensor_);
|
|
212
|
+
LOG_SENSOR(" ", "MovingTargetDistance", this->moving_target_distance_sensor_);
|
|
213
|
+
LOG_SENSOR(" ", "MovingTargetEnergy", this->moving_target_energy_sensor_);
|
|
214
|
+
LOG_SENSOR(" ", "StillTargetDistance", this->still_target_distance_sensor_);
|
|
215
|
+
LOG_SENSOR(" ", "StillTargetEnergy", this->still_target_energy_sensor_);
|
|
48
216
|
for (sensor::Sensor *s : this->gate_move_sensors_) {
|
|
49
|
-
LOG_SENSOR(" ", "
|
|
217
|
+
LOG_SENSOR(" ", "GateMove", s);
|
|
218
|
+
}
|
|
219
|
+
for (sensor::Sensor *s : this->gate_still_sensors_) {
|
|
220
|
+
LOG_SENSOR(" ", "GateStill", s);
|
|
50
221
|
}
|
|
51
222
|
#endif
|
|
52
223
|
#ifdef USE_TEXT_SENSOR
|
|
53
|
-
|
|
54
|
-
LOG_TEXT_SENSOR(" ", "
|
|
55
|
-
|
|
56
|
-
#ifdef USE_SELECT
|
|
57
|
-
LOG_SELECT(" ", "LightFunctionSelect", this->light_function_select_);
|
|
58
|
-
LOG_SELECT(" ", "OutPinLevelSelect", this->out_pin_level_select_);
|
|
59
|
-
LOG_SELECT(" ", "DistanceResolutionSelect", this->distance_resolution_select_);
|
|
60
|
-
LOG_SELECT(" ", "BaudRateSelect", this->baud_rate_select_);
|
|
224
|
+
ESP_LOGCONFIG(TAG, "Text Sensors:");
|
|
225
|
+
LOG_TEXT_SENSOR(" ", "Mac", this->mac_text_sensor_);
|
|
226
|
+
LOG_TEXT_SENSOR(" ", "Version", this->version_text_sensor_);
|
|
61
227
|
#endif
|
|
62
228
|
#ifdef USE_NUMBER
|
|
63
|
-
|
|
64
|
-
LOG_NUMBER(" ", "
|
|
65
|
-
LOG_NUMBER(" ", "
|
|
66
|
-
LOG_NUMBER(" ", "
|
|
67
|
-
|
|
68
|
-
LOG_NUMBER(" ", "Still Thresholds Number", n);
|
|
69
|
-
}
|
|
229
|
+
ESP_LOGCONFIG(TAG, "Numbers:");
|
|
230
|
+
LOG_NUMBER(" ", "LightThreshold", this->light_threshold_number_);
|
|
231
|
+
LOG_NUMBER(" ", "MaxMoveDistanceGate", this->max_move_distance_gate_number_);
|
|
232
|
+
LOG_NUMBER(" ", "MaxStillDistanceGate", this->max_still_distance_gate_number_);
|
|
233
|
+
LOG_NUMBER(" ", "Timeout", this->timeout_number_);
|
|
70
234
|
for (number::Number *n : this->gate_move_threshold_numbers_) {
|
|
71
|
-
LOG_NUMBER(" ", "
|
|
235
|
+
LOG_NUMBER(" ", "MoveThreshold", n);
|
|
236
|
+
}
|
|
237
|
+
for (number::Number *n : this->gate_still_threshold_numbers_) {
|
|
238
|
+
LOG_NUMBER(" ", "StillThreshold", n);
|
|
72
239
|
}
|
|
73
240
|
#endif
|
|
74
|
-
|
|
75
|
-
ESP_LOGCONFIG(TAG,
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
241
|
+
#ifdef USE_SELECT
|
|
242
|
+
ESP_LOGCONFIG(TAG, "Selects:");
|
|
243
|
+
LOG_SELECT(" ", "BaudRate", this->baud_rate_select_);
|
|
244
|
+
LOG_SELECT(" ", "DistanceResolution", this->distance_resolution_select_);
|
|
245
|
+
LOG_SELECT(" ", "LightFunction", this->light_function_select_);
|
|
246
|
+
LOG_SELECT(" ", "OutPinLevel", this->out_pin_level_select_);
|
|
247
|
+
#endif
|
|
248
|
+
#ifdef USE_SWITCH
|
|
249
|
+
ESP_LOGCONFIG(TAG, "Switches:");
|
|
250
|
+
LOG_SWITCH(" ", "Bluetooth", this->bluetooth_switch_);
|
|
251
|
+
LOG_SWITCH(" ", "EngineeringMode", this->engineering_mode_switch_);
|
|
252
|
+
#endif
|
|
253
|
+
#ifdef USE_BUTTON
|
|
254
|
+
ESP_LOGCONFIG(TAG, "Buttons:");
|
|
255
|
+
LOG_BUTTON(" ", "FactoryReset", this->factory_reset_button_);
|
|
256
|
+
LOG_BUTTON(" ", "Query", this->query_button_);
|
|
257
|
+
LOG_BUTTON(" ", "Restart", this->restart_button_);
|
|
258
|
+
#endif
|
|
80
259
|
}
|
|
81
260
|
|
|
82
261
|
void LD2410Component::setup() {
|
|
@@ -89,12 +268,12 @@ void LD2410Component::read_all_info() {
|
|
|
89
268
|
this->get_version_();
|
|
90
269
|
this->get_mac_();
|
|
91
270
|
this->get_distance_resolution_();
|
|
92
|
-
this->
|
|
271
|
+
this->query_light_control_();
|
|
93
272
|
this->query_parameters_();
|
|
94
273
|
this->set_config_mode_(false);
|
|
95
274
|
#ifdef USE_SELECT
|
|
96
275
|
const auto baud_rate = std::to_string(this->parent_->get_baud_rate());
|
|
97
|
-
if (this->baud_rate_select_ != nullptr
|
|
276
|
+
if (this->baud_rate_select_ != nullptr) {
|
|
98
277
|
this->baud_rate_select_->publish_state(baud_rate);
|
|
99
278
|
}
|
|
100
279
|
#endif
|
|
@@ -107,66 +286,59 @@ void LD2410Component::restart_and_read_all_info() {
|
|
|
107
286
|
}
|
|
108
287
|
|
|
109
288
|
void LD2410Component::loop() {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
while (available()) {
|
|
114
|
-
this->readline_(read(), buffer, max_line_length);
|
|
289
|
+
while (this->available()) {
|
|
290
|
+
this->readline_(this->read());
|
|
115
291
|
}
|
|
116
292
|
}
|
|
117
293
|
|
|
118
|
-
void LD2410Component::send_command_(uint8_t command, const uint8_t *command_value,
|
|
294
|
+
void LD2410Component::send_command_(uint8_t command, const uint8_t *command_value, uint8_t command_value_len) {
|
|
119
295
|
ESP_LOGV(TAG, "Sending COMMAND %02X", command);
|
|
120
|
-
// frame
|
|
121
|
-
this->write_array(CMD_FRAME_HEADER,
|
|
296
|
+
// frame header bytes
|
|
297
|
+
this->write_array(CMD_FRAME_HEADER, sizeof(CMD_FRAME_HEADER));
|
|
122
298
|
// length bytes
|
|
123
|
-
|
|
124
|
-
if (command_value != nullptr)
|
|
299
|
+
uint8_t len = 2;
|
|
300
|
+
if (command_value != nullptr) {
|
|
125
301
|
len += command_value_len;
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
// command
|
|
130
|
-
this->write_byte(lowbyte(command));
|
|
131
|
-
this->write_byte(highbyte(command));
|
|
302
|
+
}
|
|
303
|
+
uint8_t len_cmd[] = {lowbyte(len), highbyte(len), command, 0x00};
|
|
304
|
+
this->write_array(len_cmd, sizeof(len_cmd));
|
|
132
305
|
|
|
133
306
|
// command value bytes
|
|
134
307
|
if (command_value != nullptr) {
|
|
135
|
-
for (
|
|
308
|
+
for (uint8_t i = 0; i < command_value_len; i++) {
|
|
136
309
|
this->write_byte(command_value[i]);
|
|
137
310
|
}
|
|
138
311
|
}
|
|
139
|
-
// frame
|
|
140
|
-
this->write_array(
|
|
312
|
+
// frame footer bytes
|
|
313
|
+
this->write_array(CMD_FRAME_FOOTER, sizeof(CMD_FRAME_FOOTER));
|
|
141
314
|
// FIXME to remove
|
|
142
315
|
delay(50); // NOLINT
|
|
143
316
|
}
|
|
144
317
|
|
|
145
|
-
void LD2410Component::handle_periodic_data_(
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
if (
|
|
318
|
+
void LD2410Component::handle_periodic_data_() {
|
|
319
|
+
// Reduce data update rate to reduce home assistant database growth
|
|
320
|
+
// Check this first to prevent unnecessary processing done in later checks/parsing
|
|
321
|
+
if (App.get_loop_component_start_time() - this->last_periodic_millis_ < this->throttle_) {
|
|
149
322
|
return;
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
int32_t current_millis = millis();
|
|
157
|
-
if (current_millis - last_periodic_millis_ < this->throttle_)
|
|
323
|
+
}
|
|
324
|
+
// 4 frame header bytes + 2 length bytes + 1 data end byte + 1 crc byte + 4 frame footer bytes
|
|
325
|
+
// data header=0xAA, data footer=0x55, crc=0x00
|
|
326
|
+
if (this->buffer_pos_ < 12 || !ld2410::validate_header_footer(DATA_FRAME_HEADER, this->buffer_data_) ||
|
|
327
|
+
this->buffer_data_[7] != HEADER || this->buffer_data_[this->buffer_pos_ - 6] != FOOTER ||
|
|
328
|
+
this->buffer_data_[this->buffer_pos_ - 5] != CHECK) {
|
|
158
329
|
return;
|
|
159
|
-
|
|
330
|
+
}
|
|
331
|
+
// Save the timestamp after validating the frame so, if invalid, we'll take the next frame immediately
|
|
332
|
+
this->last_periodic_millis_ = App.get_loop_component_start_time();
|
|
160
333
|
|
|
161
334
|
/*
|
|
162
335
|
Data Type: 7th
|
|
163
336
|
0x01: Engineering mode
|
|
164
337
|
0x02: Normal mode
|
|
165
338
|
*/
|
|
166
|
-
bool engineering_mode =
|
|
339
|
+
bool engineering_mode = this->buffer_data_[DATA_TYPES] == 0x01;
|
|
167
340
|
#ifdef USE_SWITCH
|
|
168
|
-
if (this->engineering_mode_switch_ != nullptr
|
|
169
|
-
current_millis - last_engineering_mode_change_millis_ > this->throttle_) {
|
|
341
|
+
if (this->engineering_mode_switch_ != nullptr) {
|
|
170
342
|
this->engineering_mode_switch_->publish_state(engineering_mode);
|
|
171
343
|
}
|
|
172
344
|
#endif
|
|
@@ -178,7 +350,7 @@ void LD2410Component::handle_periodic_data_(uint8_t *buffer, int len) {
|
|
|
178
350
|
0x02 = Still targets
|
|
179
351
|
0x03 = Moving+Still targets
|
|
180
352
|
*/
|
|
181
|
-
char target_state =
|
|
353
|
+
char target_state = this->buffer_data_[TARGET_STATES];
|
|
182
354
|
if (this->target_binary_sensor_ != nullptr) {
|
|
183
355
|
this->target_binary_sensor_->publish_state(target_state != 0x00);
|
|
184
356
|
}
|
|
@@ -198,27 +370,30 @@ void LD2410Component::handle_periodic_data_(uint8_t *buffer, int len) {
|
|
|
198
370
|
*/
|
|
199
371
|
#ifdef USE_SENSOR
|
|
200
372
|
if (this->moving_target_distance_sensor_ != nullptr) {
|
|
201
|
-
int new_moving_target_distance =
|
|
373
|
+
int new_moving_target_distance =
|
|
374
|
+
ld2410::two_byte_to_int(this->buffer_data_[MOVING_TARGET_LOW], this->buffer_data_[MOVING_TARGET_HIGH]);
|
|
202
375
|
if (this->moving_target_distance_sensor_->get_state() != new_moving_target_distance)
|
|
203
376
|
this->moving_target_distance_sensor_->publish_state(new_moving_target_distance);
|
|
204
377
|
}
|
|
205
378
|
if (this->moving_target_energy_sensor_ != nullptr) {
|
|
206
|
-
int new_moving_target_energy =
|
|
379
|
+
int new_moving_target_energy = this->buffer_data_[MOVING_ENERGY];
|
|
207
380
|
if (this->moving_target_energy_sensor_->get_state() != new_moving_target_energy)
|
|
208
381
|
this->moving_target_energy_sensor_->publish_state(new_moving_target_energy);
|
|
209
382
|
}
|
|
210
383
|
if (this->still_target_distance_sensor_ != nullptr) {
|
|
211
|
-
int new_still_target_distance =
|
|
384
|
+
int new_still_target_distance =
|
|
385
|
+
ld2410::two_byte_to_int(this->buffer_data_[STILL_TARGET_LOW], this->buffer_data_[STILL_TARGET_HIGH]);
|
|
212
386
|
if (this->still_target_distance_sensor_->get_state() != new_still_target_distance)
|
|
213
387
|
this->still_target_distance_sensor_->publish_state(new_still_target_distance);
|
|
214
388
|
}
|
|
215
389
|
if (this->still_target_energy_sensor_ != nullptr) {
|
|
216
|
-
int new_still_target_energy =
|
|
390
|
+
int new_still_target_energy = this->buffer_data_[STILL_ENERGY];
|
|
217
391
|
if (this->still_target_energy_sensor_->get_state() != new_still_target_energy)
|
|
218
392
|
this->still_target_energy_sensor_->publish_state(new_still_target_energy);
|
|
219
393
|
}
|
|
220
394
|
if (this->detection_distance_sensor_ != nullptr) {
|
|
221
|
-
int new_detect_distance =
|
|
395
|
+
int new_detect_distance =
|
|
396
|
+
ld2410::two_byte_to_int(this->buffer_data_[DETECT_DISTANCE_LOW], this->buffer_data_[DETECT_DISTANCE_HIGH]);
|
|
222
397
|
if (this->detection_distance_sensor_->get_state() != new_detect_distance)
|
|
223
398
|
this->detection_distance_sensor_->publish_state(new_detect_distance);
|
|
224
399
|
}
|
|
@@ -231,7 +406,7 @@ void LD2410Component::handle_periodic_data_(uint8_t *buffer, int len) {
|
|
|
231
406
|
for (std::vector<sensor::Sensor *>::size_type i = 0; i != this->gate_move_sensors_.size(); i++) {
|
|
232
407
|
sensor::Sensor *s = this->gate_move_sensors_[i];
|
|
233
408
|
if (s != nullptr) {
|
|
234
|
-
s->publish_state(
|
|
409
|
+
s->publish_state(this->buffer_data_[MOVING_SENSOR_START + i]);
|
|
235
410
|
}
|
|
236
411
|
}
|
|
237
412
|
/*
|
|
@@ -240,16 +415,17 @@ void LD2410Component::handle_periodic_data_(uint8_t *buffer, int len) {
|
|
|
240
415
|
for (std::vector<sensor::Sensor *>::size_type i = 0; i != this->gate_still_sensors_.size(); i++) {
|
|
241
416
|
sensor::Sensor *s = this->gate_still_sensors_[i];
|
|
242
417
|
if (s != nullptr) {
|
|
243
|
-
s->publish_state(
|
|
418
|
+
s->publish_state(this->buffer_data_[STILL_SENSOR_START + i]);
|
|
244
419
|
}
|
|
245
420
|
}
|
|
246
421
|
/*
|
|
247
422
|
Light sensor: 38th bytes
|
|
248
423
|
*/
|
|
249
424
|
if (this->light_sensor_ != nullptr) {
|
|
250
|
-
int new_light_sensor =
|
|
251
|
-
if (this->light_sensor_->get_state() != new_light_sensor)
|
|
425
|
+
int new_light_sensor = this->buffer_data_[LIGHT_SENSOR];
|
|
426
|
+
if (this->light_sensor_->get_state() != new_light_sensor) {
|
|
252
427
|
this->light_sensor_->publish_state(new_light_sensor);
|
|
428
|
+
}
|
|
253
429
|
}
|
|
254
430
|
} else {
|
|
255
431
|
for (auto *s : this->gate_move_sensors_) {
|
|
@@ -270,7 +446,7 @@ void LD2410Component::handle_periodic_data_(uint8_t *buffer, int len) {
|
|
|
270
446
|
#ifdef USE_BINARY_SENSOR
|
|
271
447
|
if (engineering_mode) {
|
|
272
448
|
if (this->out_pin_presence_status_binary_sensor_ != nullptr) {
|
|
273
|
-
this->out_pin_presence_status_binary_sensor_->publish_state(
|
|
449
|
+
this->out_pin_presence_status_binary_sensor_->publish_state(this->buffer_data_[OUT_PIN_SENSOR] == 0x01);
|
|
274
450
|
}
|
|
275
451
|
} else {
|
|
276
452
|
if (this->out_pin_presence_status_binary_sensor_ != nullptr) {
|
|
@@ -280,163 +456,151 @@ void LD2410Component::handle_periodic_data_(uint8_t *buffer, int len) {
|
|
|
280
456
|
#endif
|
|
281
457
|
}
|
|
282
458
|
|
|
283
|
-
const char VERSION_FMT[] = "%u.%02X.%02X%02X%02X%02X";
|
|
284
|
-
|
|
285
|
-
std::string format_version(uint8_t *buffer) {
|
|
286
|
-
std::string::size_type version_size = 256;
|
|
287
|
-
std::string version;
|
|
288
|
-
do {
|
|
289
|
-
version.resize(version_size + 1);
|
|
290
|
-
version_size = std::snprintf(&version[0], version.size(), VERSION_FMT, buffer[13], buffer[12], buffer[17],
|
|
291
|
-
buffer[16], buffer[15], buffer[14]);
|
|
292
|
-
} while (version_size + 1 > version.size());
|
|
293
|
-
version.resize(version_size);
|
|
294
|
-
return version;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
const char MAC_FMT[] = "%02X:%02X:%02X:%02X:%02X:%02X";
|
|
298
|
-
|
|
299
|
-
const std::string UNKNOWN_MAC("unknown");
|
|
300
|
-
const std::string NO_MAC("08:05:04:03:02:01");
|
|
301
|
-
|
|
302
|
-
std::string format_mac(uint8_t *buffer) {
|
|
303
|
-
std::string::size_type mac_size = 256;
|
|
304
|
-
std::string mac;
|
|
305
|
-
do {
|
|
306
|
-
mac.resize(mac_size + 1);
|
|
307
|
-
mac_size = std::snprintf(&mac[0], mac.size(), MAC_FMT, buffer[10], buffer[11], buffer[12], buffer[13], buffer[14],
|
|
308
|
-
buffer[15]);
|
|
309
|
-
} while (mac_size + 1 > mac.size());
|
|
310
|
-
mac.resize(mac_size);
|
|
311
|
-
if (mac == NO_MAC) {
|
|
312
|
-
return UNKNOWN_MAC;
|
|
313
|
-
}
|
|
314
|
-
return mac;
|
|
315
|
-
}
|
|
316
|
-
|
|
317
459
|
#ifdef USE_NUMBER
|
|
318
460
|
std::function<void(void)> set_number_value(number::Number *n, float value) {
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
n
|
|
322
|
-
return [n, normalized_value]() { n->publish_state(normalized_value); };
|
|
461
|
+
if (n != nullptr && (!n->has_state() || n->state != value)) {
|
|
462
|
+
n->state = value;
|
|
463
|
+
return [n, value]() { n->publish_state(value); };
|
|
323
464
|
}
|
|
324
465
|
return []() {};
|
|
325
466
|
}
|
|
326
467
|
#endif
|
|
327
468
|
|
|
328
|
-
bool LD2410Component::handle_ack_data_(
|
|
329
|
-
ESP_LOGV(TAG, "Handling ACK DATA for COMMAND %02X",
|
|
330
|
-
if (
|
|
331
|
-
ESP_LOGE(TAG, "
|
|
469
|
+
bool LD2410Component::handle_ack_data_() {
|
|
470
|
+
ESP_LOGV(TAG, "Handling ACK DATA for COMMAND %02X", this->buffer_data_[COMMAND]);
|
|
471
|
+
if (this->buffer_pos_ < 10) {
|
|
472
|
+
ESP_LOGE(TAG, "Invalid length");
|
|
332
473
|
return true;
|
|
333
474
|
}
|
|
334
|
-
if (
|
|
335
|
-
|
|
475
|
+
if (!ld2410::validate_header_footer(CMD_FRAME_HEADER, this->buffer_data_)) {
|
|
476
|
+
ESP_LOGW(TAG, "Invalid header: %s", format_hex_pretty(this->buffer_data_, HEADER_FOOTER_SIZE).c_str());
|
|
336
477
|
return true;
|
|
337
478
|
}
|
|
338
|
-
if (
|
|
339
|
-
ESP_LOGE(TAG, "
|
|
479
|
+
if (this->buffer_data_[COMMAND_STATUS] != 0x01) {
|
|
480
|
+
ESP_LOGE(TAG, "Invalid status");
|
|
340
481
|
return true;
|
|
341
482
|
}
|
|
342
|
-
if (this->
|
|
343
|
-
|
|
483
|
+
if (ld2410::two_byte_to_int(this->buffer_data_[8], this->buffer_data_[9]) != 0x00) {
|
|
484
|
+
ESP_LOGW(TAG, "Invalid command: %02X, %02X", this->buffer_data_[8], this->buffer_data_[9]);
|
|
344
485
|
return true;
|
|
345
486
|
}
|
|
346
487
|
|
|
347
|
-
switch (
|
|
348
|
-
case
|
|
349
|
-
ESP_LOGV(TAG, "
|
|
488
|
+
switch (this->buffer_data_[COMMAND]) {
|
|
489
|
+
case CMD_ENABLE_CONF:
|
|
490
|
+
ESP_LOGV(TAG, "Enable conf");
|
|
350
491
|
break;
|
|
351
|
-
|
|
352
|
-
|
|
492
|
+
|
|
493
|
+
case CMD_DISABLE_CONF:
|
|
494
|
+
ESP_LOGV(TAG, "Disabled conf");
|
|
353
495
|
break;
|
|
354
|
-
|
|
355
|
-
|
|
496
|
+
|
|
497
|
+
case CMD_SET_BAUD_RATE:
|
|
498
|
+
ESP_LOGV(TAG, "Baud rate change");
|
|
356
499
|
#ifdef USE_SELECT
|
|
357
500
|
if (this->baud_rate_select_ != nullptr) {
|
|
358
|
-
ESP_LOGE(TAG, "Change baud rate
|
|
501
|
+
ESP_LOGE(TAG, "Change baud rate to %s and reinstall", this->baud_rate_select_->state.c_str());
|
|
359
502
|
}
|
|
360
503
|
#endif
|
|
361
504
|
break;
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
505
|
+
|
|
506
|
+
case CMD_QUERY_VERSION: {
|
|
507
|
+
std::memcpy(this->version_, &this->buffer_data_[12], sizeof(this->version_));
|
|
508
|
+
std::string version = str_sprintf(VERSION_FMT, this->version_[1], this->version_[0], this->version_[5],
|
|
509
|
+
this->version_[4], this->version_[3], this->version_[2]);
|
|
510
|
+
ESP_LOGV(TAG, "Firmware version: %s", version.c_str());
|
|
365
511
|
#ifdef USE_TEXT_SENSOR
|
|
366
512
|
if (this->version_text_sensor_ != nullptr) {
|
|
367
|
-
this->version_text_sensor_->publish_state(
|
|
513
|
+
this->version_text_sensor_->publish_state(version);
|
|
368
514
|
}
|
|
369
515
|
#endif
|
|
370
516
|
break;
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
case CMD_QUERY_DISTANCE_RESOLUTION: {
|
|
520
|
+
const auto *distance_resolution = find_str(DISTANCE_RESOLUTIONS_BY_UINT, this->buffer_data_[10]);
|
|
521
|
+
ESP_LOGV(TAG, "Distance resolution: %s", distance_resolution);
|
|
375
522
|
#ifdef USE_SELECT
|
|
376
|
-
if (this->distance_resolution_select_ != nullptr
|
|
377
|
-
this->distance_resolution_select_->state != distance_resolution) {
|
|
523
|
+
if (this->distance_resolution_select_ != nullptr) {
|
|
378
524
|
this->distance_resolution_select_->publish_state(distance_resolution);
|
|
379
525
|
}
|
|
380
526
|
#endif
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
this->
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
527
|
+
break;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
case CMD_QUERY_LIGHT_CONTROL: {
|
|
531
|
+
this->light_function_ = this->buffer_data_[10];
|
|
532
|
+
this->light_threshold_ = this->buffer_data_[11];
|
|
533
|
+
this->out_pin_level_ = this->buffer_data_[12];
|
|
534
|
+
const auto *light_function_str = find_str(LIGHT_FUNCTIONS_BY_UINT, this->light_function_);
|
|
535
|
+
const auto *out_pin_level_str = find_str(OUT_PIN_LEVELS_BY_UINT, this->out_pin_level_);
|
|
536
|
+
ESP_LOGV(TAG,
|
|
537
|
+
"Light function is: %s\n"
|
|
538
|
+
"Light threshold is: %u\n"
|
|
539
|
+
"Out pin level: %s",
|
|
540
|
+
light_function_str, this->light_threshold_, out_pin_level_str);
|
|
389
541
|
#ifdef USE_SELECT
|
|
390
|
-
if (this->light_function_select_ != nullptr
|
|
391
|
-
this->light_function_select_->publish_state(
|
|
542
|
+
if (this->light_function_select_ != nullptr) {
|
|
543
|
+
this->light_function_select_->publish_state(light_function_str);
|
|
392
544
|
}
|
|
393
|
-
if (this->out_pin_level_select_ != nullptr
|
|
394
|
-
this->out_pin_level_select_->publish_state(
|
|
545
|
+
if (this->out_pin_level_select_ != nullptr) {
|
|
546
|
+
this->out_pin_level_select_->publish_state(out_pin_level_str);
|
|
395
547
|
}
|
|
396
548
|
#endif
|
|
397
549
|
#ifdef USE_NUMBER
|
|
398
|
-
if (this->light_threshold_number_ != nullptr
|
|
399
|
-
|
|
400
|
-
this->light_threshold_number_->state != this->light_threshold_)) {
|
|
401
|
-
this->light_threshold_number_->publish_state(this->light_threshold_);
|
|
550
|
+
if (this->light_threshold_number_ != nullptr) {
|
|
551
|
+
this->light_threshold_number_->publish_state(static_cast<float>(this->light_threshold_));
|
|
402
552
|
}
|
|
403
553
|
#endif
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
554
|
+
break;
|
|
555
|
+
}
|
|
556
|
+
case CMD_QUERY_MAC_ADDRESS: {
|
|
557
|
+
if (this->buffer_pos_ < 20) {
|
|
407
558
|
return false;
|
|
408
559
|
}
|
|
409
|
-
|
|
410
|
-
|
|
560
|
+
|
|
561
|
+
this->bluetooth_on_ = std::memcmp(&this->buffer_data_[10], NO_MAC, sizeof(NO_MAC)) != 0;
|
|
562
|
+
if (this->bluetooth_on_) {
|
|
563
|
+
std::memcpy(this->mac_address_, &this->buffer_data_[10], sizeof(this->mac_address_));
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
std::string mac_str =
|
|
567
|
+
mac_address_is_valid(this->mac_address_) ? format_mac_address_pretty(this->mac_address_) : UNKNOWN_MAC;
|
|
568
|
+
ESP_LOGV(TAG, "MAC address: %s", mac_str.c_str());
|
|
411
569
|
#ifdef USE_TEXT_SENSOR
|
|
412
570
|
if (this->mac_text_sensor_ != nullptr) {
|
|
413
|
-
this->mac_text_sensor_->publish_state(
|
|
571
|
+
this->mac_text_sensor_->publish_state(mac_str);
|
|
414
572
|
}
|
|
415
573
|
#endif
|
|
416
574
|
#ifdef USE_SWITCH
|
|
417
575
|
if (this->bluetooth_switch_ != nullptr) {
|
|
418
|
-
this->bluetooth_switch_->publish_state(this->
|
|
576
|
+
this->bluetooth_switch_->publish_state(this->bluetooth_on_);
|
|
419
577
|
}
|
|
420
578
|
#endif
|
|
421
579
|
break;
|
|
422
|
-
|
|
423
|
-
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
case CMD_GATE_SENS:
|
|
583
|
+
ESP_LOGV(TAG, "Sensitivity");
|
|
424
584
|
break;
|
|
425
|
-
|
|
426
|
-
|
|
585
|
+
|
|
586
|
+
case CMD_BLUETOOTH:
|
|
587
|
+
ESP_LOGV(TAG, "Bluetooth");
|
|
427
588
|
break;
|
|
428
|
-
|
|
429
|
-
|
|
589
|
+
|
|
590
|
+
case CMD_SET_DISTANCE_RESOLUTION:
|
|
591
|
+
ESP_LOGV(TAG, "Set distance resolution");
|
|
430
592
|
break;
|
|
431
|
-
|
|
432
|
-
|
|
593
|
+
|
|
594
|
+
case CMD_SET_LIGHT_CONTROL:
|
|
595
|
+
ESP_LOGV(TAG, "Set light control");
|
|
433
596
|
break;
|
|
434
|
-
|
|
435
|
-
|
|
597
|
+
|
|
598
|
+
case CMD_BT_PASSWORD:
|
|
599
|
+
ESP_LOGV(TAG, "Set bluetooth password");
|
|
436
600
|
break;
|
|
437
|
-
|
|
438
|
-
{
|
|
439
|
-
if (
|
|
601
|
+
|
|
602
|
+
case CMD_QUERY: { // Query parameters response
|
|
603
|
+
if (this->buffer_data_[10] != 0xAA)
|
|
440
604
|
return true; // value head=0xAA
|
|
441
605
|
#ifdef USE_NUMBER
|
|
442
606
|
/*
|
|
@@ -444,29 +608,31 @@ bool LD2410Component::handle_ack_data_(uint8_t *buffer, int len) {
|
|
|
444
608
|
Still distance range: 14th byte
|
|
445
609
|
*/
|
|
446
610
|
std::vector<std::function<void(void)>> updates;
|
|
447
|
-
updates.push_back(set_number_value(this->max_move_distance_gate_number_,
|
|
448
|
-
updates.push_back(set_number_value(this->max_still_distance_gate_number_,
|
|
611
|
+
updates.push_back(set_number_value(this->max_move_distance_gate_number_, this->buffer_data_[12]));
|
|
612
|
+
updates.push_back(set_number_value(this->max_still_distance_gate_number_, this->buffer_data_[13]));
|
|
449
613
|
/*
|
|
450
614
|
Moving Sensitivities: 15~23th bytes
|
|
451
615
|
*/
|
|
452
616
|
for (std::vector<number::Number *>::size_type i = 0; i != this->gate_move_threshold_numbers_.size(); i++) {
|
|
453
|
-
updates.push_back(set_number_value(this->gate_move_threshold_numbers_[i],
|
|
617
|
+
updates.push_back(set_number_value(this->gate_move_threshold_numbers_[i], this->buffer_data_[14 + i]));
|
|
454
618
|
}
|
|
455
619
|
/*
|
|
456
620
|
Still Sensitivities: 24~32th bytes
|
|
457
621
|
*/
|
|
458
622
|
for (std::vector<number::Number *>::size_type i = 0; i != this->gate_still_threshold_numbers_.size(); i++) {
|
|
459
|
-
updates.push_back(set_number_value(this->gate_still_threshold_numbers_[i],
|
|
623
|
+
updates.push_back(set_number_value(this->gate_still_threshold_numbers_[i], this->buffer_data_[23 + i]));
|
|
460
624
|
}
|
|
461
625
|
/*
|
|
462
626
|
None Duration: 33~34th bytes
|
|
463
627
|
*/
|
|
464
|
-
updates.push_back(set_number_value(this->timeout_number_,
|
|
628
|
+
updates.push_back(set_number_value(this->timeout_number_,
|
|
629
|
+
ld2410::two_byte_to_int(this->buffer_data_[32], this->buffer_data_[33])));
|
|
465
630
|
for (auto &update : updates) {
|
|
466
631
|
update();
|
|
467
632
|
}
|
|
468
633
|
#endif
|
|
469
|
-
|
|
634
|
+
break;
|
|
635
|
+
}
|
|
470
636
|
default:
|
|
471
637
|
break;
|
|
472
638
|
}
|
|
@@ -474,78 +640,84 @@ bool LD2410Component::handle_ack_data_(uint8_t *buffer, int len) {
|
|
|
474
640
|
return true;
|
|
475
641
|
}
|
|
476
642
|
|
|
477
|
-
void LD2410Component::readline_(int readch
|
|
478
|
-
|
|
643
|
+
void LD2410Component::readline_(int readch) {
|
|
644
|
+
if (readch < 0) {
|
|
645
|
+
return; // No data available
|
|
646
|
+
}
|
|
479
647
|
|
|
480
|
-
if (
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
648
|
+
if (this->buffer_pos_ < MAX_LINE_LENGTH - 1) {
|
|
649
|
+
this->buffer_data_[this->buffer_pos_++] = readch;
|
|
650
|
+
this->buffer_data_[this->buffer_pos_] = 0;
|
|
651
|
+
} else {
|
|
652
|
+
// We should never get here, but just in case...
|
|
653
|
+
ESP_LOGW(TAG, "Max command length exceeded; ignoring");
|
|
654
|
+
this->buffer_pos_ = 0;
|
|
655
|
+
}
|
|
656
|
+
if (this->buffer_pos_ < 4) {
|
|
657
|
+
return; // Not enough data to process yet
|
|
658
|
+
}
|
|
659
|
+
if (this->buffer_data_[this->buffer_pos_ - 4] == DATA_FRAME_FOOTER[0] &&
|
|
660
|
+
this->buffer_data_[this->buffer_pos_ - 3] == DATA_FRAME_FOOTER[1] &&
|
|
661
|
+
this->buffer_data_[this->buffer_pos_ - 2] == DATA_FRAME_FOOTER[2] &&
|
|
662
|
+
this->buffer_data_[this->buffer_pos_ - 1] == DATA_FRAME_FOOTER[3]) {
|
|
663
|
+
ESP_LOGV(TAG, "Handling Periodic Data: %s", format_hex_pretty(this->buffer_data_, this->buffer_pos_).c_str());
|
|
664
|
+
this->handle_periodic_data_();
|
|
665
|
+
this->buffer_pos_ = 0; // Reset position index for next message
|
|
666
|
+
} else if (this->buffer_data_[this->buffer_pos_ - 4] == CMD_FRAME_FOOTER[0] &&
|
|
667
|
+
this->buffer_data_[this->buffer_pos_ - 3] == CMD_FRAME_FOOTER[1] &&
|
|
668
|
+
this->buffer_data_[this->buffer_pos_ - 2] == CMD_FRAME_FOOTER[2] &&
|
|
669
|
+
this->buffer_data_[this->buffer_pos_ - 1] == CMD_FRAME_FOOTER[3]) {
|
|
670
|
+
ESP_LOGV(TAG, "Handling Ack Data: %s", format_hex_pretty(this->buffer_data_, this->buffer_pos_).c_str());
|
|
671
|
+
if (this->handle_ack_data_()) {
|
|
672
|
+
this->buffer_pos_ = 0; // Reset position index for next message
|
|
484
673
|
} else {
|
|
485
|
-
|
|
486
|
-
}
|
|
487
|
-
if (pos >= 4) {
|
|
488
|
-
if (buffer[pos - 4] == 0xF8 && buffer[pos - 3] == 0xF7 && buffer[pos - 2] == 0xF6 && buffer[pos - 1] == 0xF5) {
|
|
489
|
-
ESP_LOGV(TAG, "Will handle Periodic Data");
|
|
490
|
-
this->handle_periodic_data_(buffer, pos);
|
|
491
|
-
pos = 0; // Reset position index ready for next time
|
|
492
|
-
} else if (buffer[pos - 4] == 0x04 && buffer[pos - 3] == 0x03 && buffer[pos - 2] == 0x02 &&
|
|
493
|
-
buffer[pos - 1] == 0x01) {
|
|
494
|
-
ESP_LOGV(TAG, "Will handle ACK Data");
|
|
495
|
-
if (this->handle_ack_data_(buffer, pos)) {
|
|
496
|
-
pos = 0; // Reset position index ready for next time
|
|
497
|
-
} else {
|
|
498
|
-
ESP_LOGV(TAG, "ACK Data incomplete");
|
|
499
|
-
}
|
|
500
|
-
}
|
|
674
|
+
ESP_LOGV(TAG, "Ack Data incomplete");
|
|
501
675
|
}
|
|
502
676
|
}
|
|
503
677
|
}
|
|
504
678
|
|
|
505
679
|
void LD2410Component::set_config_mode_(bool enable) {
|
|
506
|
-
uint8_t cmd = enable ? CMD_ENABLE_CONF : CMD_DISABLE_CONF;
|
|
507
|
-
uint8_t cmd_value[2] = {0x01, 0x00};
|
|
508
|
-
this->send_command_(cmd, enable ? cmd_value : nullptr,
|
|
680
|
+
const uint8_t cmd = enable ? CMD_ENABLE_CONF : CMD_DISABLE_CONF;
|
|
681
|
+
const uint8_t cmd_value[2] = {0x01, 0x00};
|
|
682
|
+
this->send_command_(cmd, enable ? cmd_value : nullptr, sizeof(cmd_value));
|
|
509
683
|
}
|
|
510
684
|
|
|
511
685
|
void LD2410Component::set_bluetooth(bool enable) {
|
|
512
686
|
this->set_config_mode_(true);
|
|
513
|
-
uint8_t
|
|
514
|
-
|
|
515
|
-
this->send_command_(CMD_BLUETOOTH, enable ? enable_cmd_value : disable_cmd_value, 2);
|
|
687
|
+
const uint8_t cmd_value[2] = {enable ? (uint8_t) 0x01 : (uint8_t) 0x00, 0x00};
|
|
688
|
+
this->send_command_(CMD_BLUETOOTH, cmd_value, sizeof(cmd_value));
|
|
516
689
|
this->set_timeout(200, [this]() { this->restart_and_read_all_info(); });
|
|
517
690
|
}
|
|
518
691
|
|
|
519
692
|
void LD2410Component::set_distance_resolution(const std::string &state) {
|
|
520
693
|
this->set_config_mode_(true);
|
|
521
|
-
uint8_t cmd_value[2] = {
|
|
522
|
-
this->send_command_(CMD_SET_DISTANCE_RESOLUTION, cmd_value,
|
|
694
|
+
const uint8_t cmd_value[2] = {find_uint8(DISTANCE_RESOLUTIONS_BY_STR, state), 0x00};
|
|
695
|
+
this->send_command_(CMD_SET_DISTANCE_RESOLUTION, cmd_value, sizeof(cmd_value));
|
|
523
696
|
this->set_timeout(200, [this]() { this->restart_and_read_all_info(); });
|
|
524
697
|
}
|
|
525
698
|
|
|
526
699
|
void LD2410Component::set_baud_rate(const std::string &state) {
|
|
527
700
|
this->set_config_mode_(true);
|
|
528
|
-
uint8_t cmd_value[2] = {
|
|
529
|
-
this->send_command_(CMD_SET_BAUD_RATE, cmd_value,
|
|
701
|
+
const uint8_t cmd_value[2] = {find_uint8(BAUD_RATES_BY_STR, state), 0x00};
|
|
702
|
+
this->send_command_(CMD_SET_BAUD_RATE, cmd_value, sizeof(cmd_value));
|
|
530
703
|
this->set_timeout(200, [this]() { this->restart_(); });
|
|
531
704
|
}
|
|
532
705
|
|
|
533
706
|
void LD2410Component::set_bluetooth_password(const std::string &password) {
|
|
534
707
|
if (password.length() != 6) {
|
|
535
|
-
ESP_LOGE(TAG, "
|
|
708
|
+
ESP_LOGE(TAG, "Password must be exactly 6 chars");
|
|
536
709
|
return;
|
|
537
710
|
}
|
|
538
711
|
this->set_config_mode_(true);
|
|
539
712
|
uint8_t cmd_value[6];
|
|
540
713
|
std::copy(password.begin(), password.end(), std::begin(cmd_value));
|
|
541
|
-
this->send_command_(CMD_BT_PASSWORD, cmd_value,
|
|
714
|
+
this->send_command_(CMD_BT_PASSWORD, cmd_value, sizeof(cmd_value));
|
|
542
715
|
this->set_config_mode_(false);
|
|
543
716
|
}
|
|
544
717
|
|
|
545
718
|
void LD2410Component::set_engineering_mode(bool enable) {
|
|
719
|
+
const uint8_t cmd = enable ? CMD_ENABLE_ENG : CMD_DISABLE_ENG;
|
|
546
720
|
this->set_config_mode_(true);
|
|
547
|
-
last_engineering_mode_change_millis_ = millis();
|
|
548
|
-
uint8_t cmd = enable ? CMD_ENABLE_ENG : CMD_DISABLE_ENG;
|
|
549
721
|
this->send_command_(cmd, nullptr, 0);
|
|
550
722
|
this->set_config_mode_(false);
|
|
551
723
|
}
|
|
@@ -559,14 +731,17 @@ void LD2410Component::factory_reset() {
|
|
|
559
731
|
void LD2410Component::restart_() { this->send_command_(CMD_RESTART, nullptr, 0); }
|
|
560
732
|
|
|
561
733
|
void LD2410Component::query_parameters_() { this->send_command_(CMD_QUERY, nullptr, 0); }
|
|
562
|
-
|
|
734
|
+
|
|
735
|
+
void LD2410Component::get_version_() { this->send_command_(CMD_QUERY_VERSION, nullptr, 0); }
|
|
736
|
+
|
|
563
737
|
void LD2410Component::get_mac_() {
|
|
564
|
-
uint8_t cmd_value[2] = {0x01, 0x00};
|
|
565
|
-
this->send_command_(
|
|
738
|
+
const uint8_t cmd_value[2] = {0x01, 0x00};
|
|
739
|
+
this->send_command_(CMD_QUERY_MAC_ADDRESS, cmd_value, sizeof(cmd_value));
|
|
566
740
|
}
|
|
741
|
+
|
|
567
742
|
void LD2410Component::get_distance_resolution_() { this->send_command_(CMD_QUERY_DISTANCE_RESOLUTION, nullptr, 0); }
|
|
568
743
|
|
|
569
|
-
void LD2410Component::
|
|
744
|
+
void LD2410Component::query_light_control_() { this->send_command_(CMD_QUERY_LIGHT_CONTROL, nullptr, 0); }
|
|
570
745
|
|
|
571
746
|
#ifdef USE_NUMBER
|
|
572
747
|
void LD2410Component::set_max_distances_timeout() {
|
|
@@ -596,7 +771,7 @@ void LD2410Component::set_max_distances_timeout() {
|
|
|
596
771
|
0x00,
|
|
597
772
|
0x00};
|
|
598
773
|
this->set_config_mode_(true);
|
|
599
|
-
this->send_command_(CMD_MAXDIST_DURATION, value,
|
|
774
|
+
this->send_command_(CMD_MAXDIST_DURATION, value, sizeof(value));
|
|
600
775
|
delay(50); // NOLINT
|
|
601
776
|
this->query_parameters_();
|
|
602
777
|
this->set_timeout(200, [this]() { this->restart_and_read_all_info(); });
|
|
@@ -626,17 +801,17 @@ void LD2410Component::set_gate_threshold(uint8_t gate) {
|
|
|
626
801
|
uint8_t value[18] = {0x00, 0x00, lowbyte(gate), highbyte(gate), 0x00, 0x00,
|
|
627
802
|
0x01, 0x00, lowbyte(motion), highbyte(motion), 0x00, 0x00,
|
|
628
803
|
0x02, 0x00, lowbyte(still), highbyte(still), 0x00, 0x00};
|
|
629
|
-
this->send_command_(CMD_GATE_SENS, value,
|
|
804
|
+
this->send_command_(CMD_GATE_SENS, value, sizeof(value));
|
|
630
805
|
delay(50); // NOLINT
|
|
631
806
|
this->query_parameters_();
|
|
632
807
|
this->set_config_mode_(false);
|
|
633
808
|
}
|
|
634
809
|
|
|
635
|
-
void LD2410Component::set_gate_still_threshold_number(
|
|
810
|
+
void LD2410Component::set_gate_still_threshold_number(uint8_t gate, number::Number *n) {
|
|
636
811
|
this->gate_still_threshold_numbers_[gate] = n;
|
|
637
812
|
}
|
|
638
813
|
|
|
639
|
-
void LD2410Component::set_gate_move_threshold_number(
|
|
814
|
+
void LD2410Component::set_gate_move_threshold_number(uint8_t gate, number::Number *n) {
|
|
640
815
|
this->gate_move_threshold_numbers_[gate] = n;
|
|
641
816
|
}
|
|
642
817
|
#endif
|
|
@@ -644,35 +819,29 @@ void LD2410Component::set_gate_move_threshold_number(int gate, number::Number *n
|
|
|
644
819
|
void LD2410Component::set_light_out_control() {
|
|
645
820
|
#ifdef USE_NUMBER
|
|
646
821
|
if (this->light_threshold_number_ != nullptr && this->light_threshold_number_->has_state()) {
|
|
647
|
-
this->light_threshold_ = this->light_threshold_number_->state;
|
|
822
|
+
this->light_threshold_ = static_cast<uint8_t>(this->light_threshold_number_->state);
|
|
648
823
|
}
|
|
649
824
|
#endif
|
|
650
825
|
#ifdef USE_SELECT
|
|
651
826
|
if (this->light_function_select_ != nullptr && this->light_function_select_->has_state()) {
|
|
652
|
-
this->light_function_ = this->light_function_select_->state;
|
|
827
|
+
this->light_function_ = find_uint8(LIGHT_FUNCTIONS_BY_STR, this->light_function_select_->state);
|
|
653
828
|
}
|
|
654
829
|
if (this->out_pin_level_select_ != nullptr && this->out_pin_level_select_->has_state()) {
|
|
655
|
-
this->out_pin_level_ = this->out_pin_level_select_->state;
|
|
830
|
+
this->out_pin_level_ = find_uint8(OUT_PIN_LEVELS_BY_STR, this->out_pin_level_select_->state);
|
|
656
831
|
}
|
|
657
832
|
#endif
|
|
658
|
-
if (this->light_function_.empty() || this->out_pin_level_.empty() || this->light_threshold_ < 0) {
|
|
659
|
-
return;
|
|
660
|
-
}
|
|
661
833
|
this->set_config_mode_(true);
|
|
662
|
-
uint8_t
|
|
663
|
-
|
|
664
|
-
uint8_t out_pin_level = OUT_PIN_LEVEL_ENUM_TO_INT.at(this->out_pin_level_);
|
|
665
|
-
uint8_t value[4] = {light_function, light_threshold, out_pin_level, 0x00};
|
|
666
|
-
this->send_command_(CMD_SET_LIGHT_CONTROL, value, 4);
|
|
834
|
+
uint8_t value[4] = {this->light_function_, this->light_threshold_, this->out_pin_level_, 0x00};
|
|
835
|
+
this->send_command_(CMD_SET_LIGHT_CONTROL, value, sizeof(value));
|
|
667
836
|
delay(50); // NOLINT
|
|
668
|
-
this->
|
|
837
|
+
this->query_light_control_();
|
|
669
838
|
this->set_timeout(200, [this]() { this->restart_and_read_all_info(); });
|
|
670
839
|
this->set_config_mode_(false);
|
|
671
840
|
}
|
|
672
841
|
|
|
673
842
|
#ifdef USE_SENSOR
|
|
674
|
-
void LD2410Component::set_gate_move_sensor(
|
|
675
|
-
void LD2410Component::set_gate_still_sensor(
|
|
843
|
+
void LD2410Component::set_gate_move_sensor(uint8_t gate, sensor::Sensor *s) { this->gate_move_sensors_[gate] = s; }
|
|
844
|
+
void LD2410Component::set_gate_still_sensor(uint8_t gate, sensor::Sensor *s) { this->gate_still_sensors_[gate] = s; }
|
|
676
845
|
#endif
|
|
677
846
|
|
|
678
847
|
} // namespace ld2410
|