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.
Files changed (601) hide show
  1. esphome/__main__.py +1 -3
  2. esphome/codegen.py +2 -0
  3. esphome/components/ac_dimmer/ac_dimmer.cpp +6 -6
  4. esphome/components/adc/__init__.py +25 -1
  5. esphome/components/adc/adc_sensor.h +11 -11
  6. esphome/components/adc/adc_sensor_common.cpp +1 -1
  7. esphome/components/adc/adc_sensor_esp32.cpp +16 -8
  8. esphome/components/ade7880/ade7880.h +0 -2
  9. esphome/components/ads1115/ads1115.h +0 -1
  10. esphome/components/ads1118/ads1118.h +0 -1
  11. esphome/components/ags10/ags10.h +0 -2
  12. esphome/components/aic3204/aic3204.h +0 -1
  13. esphome/components/alarm_control_panel/__init__.py +5 -2
  14. esphome/components/alpha3/alpha3.h +0 -1
  15. esphome/components/am43/cover/am43_cover.h +0 -1
  16. esphome/components/am43/sensor/am43_sensor.h +0 -1
  17. esphome/components/analog_threshold/analog_threshold_binary_sensor.h +0 -2
  18. esphome/components/anova/anova.cpp +5 -1
  19. esphome/components/anova/anova.h +0 -1
  20. esphome/components/apds9960/apds9960.cpp +1 -1
  21. esphome/components/api/__init__.py +42 -20
  22. esphome/components/api/api_connection.cpp +318 -391
  23. esphome/components/api/api_connection.h +206 -126
  24. esphome/components/api/api_frame_helper.cpp +89 -124
  25. esphome/components/api/api_frame_helper.h +57 -45
  26. esphome/components/api/api_pb2.cpp +414 -4350
  27. esphome/components/api/api_pb2.h +287 -198
  28. esphome/components/api/api_pb2_dump.cpp +4333 -0
  29. esphome/components/api/api_pb2_service.cpp +180 -425
  30. esphome/components/api/api_pb2_service.h +7 -6
  31. esphome/components/api/api_pb2_size.h +2 -4
  32. esphome/components/api/api_server.cpp +138 -167
  33. esphome/components/api/api_server.h +66 -12
  34. esphome/components/api/client.py +10 -4
  35. esphome/components/api/list_entities.cpp +36 -105
  36. esphome/components/api/list_entities.h +31 -23
  37. esphome/components/api/proto.h +26 -3
  38. esphome/components/api/subscribe_state.cpp +23 -29
  39. esphome/components/api/subscribe_state.h +26 -19
  40. esphome/components/as5600/as5600.h +0 -1
  41. esphome/components/async_tcp/__init__.py +14 -5
  42. esphome/components/atc_mithermometer/atc_mithermometer.h +0 -1
  43. esphome/components/atm90e32/atm90e32.cpp +2 -1
  44. esphome/components/audio/audio_decoder.cpp +1 -1
  45. esphome/components/audio/audio_transfer_buffer.cpp +2 -2
  46. esphome/components/b_parasite/b_parasite.h +0 -1
  47. esphome/components/bedjet/bedjet_hub.cpp +5 -1
  48. esphome/components/bedjet/climate/bedjet_climate.cpp +5 -1
  49. esphome/components/beken_spi_led_strip/led_strip.cpp +4 -2
  50. esphome/components/bh1750/bh1750.cpp +5 -5
  51. esphome/components/binary_sensor/__init__.py +82 -5
  52. esphome/components/binary_sensor/automation.h +19 -1
  53. esphome/components/binary_sensor/binary_sensor.cpp +12 -30
  54. esphome/components/binary_sensor/binary_sensor.h +11 -25
  55. esphome/components/binary_sensor/filter.cpp +29 -24
  56. esphome/components/binary_sensor/filter.h +20 -10
  57. esphome/components/ble_client/output/ble_binary_output.h +0 -1
  58. esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +5 -1
  59. esphome/components/ble_client/sensor/ble_rssi_sensor.h +0 -1
  60. esphome/components/ble_client/sensor/ble_sensor.cpp +5 -1
  61. esphome/components/ble_client/sensor/ble_sensor.h +0 -1
  62. esphome/components/ble_client/switch/ble_switch.h +0 -1
  63. esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +5 -1
  64. esphome/components/ble_client/text_sensor/ble_text_sensor.h +0 -1
  65. esphome/components/ble_presence/ble_presence_device.h +0 -1
  66. esphome/components/ble_rssi/ble_rssi_sensor.h +0 -1
  67. esphome/components/ble_scanner/ble_scanner.h +0 -1
  68. esphome/components/bluetooth_proxy/bluetooth_connection.h +9 -2
  69. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -6
  70. esphome/components/bluetooth_proxy/bluetooth_proxy.h +8 -2
  71. esphome/components/bme680/sensor.py +1 -1
  72. esphome/components/bmp581/bmp581.h +0 -2
  73. esphome/components/button/__init__.py +5 -2
  74. esphome/components/camera/__init__.py +1 -0
  75. esphome/components/camera/camera.cpp +22 -0
  76. esphome/components/camera/camera.h +80 -0
  77. esphome/components/canbus/__init__.py +1 -0
  78. esphome/components/cap1188/cap1188.h +0 -1
  79. esphome/components/captive_portal/__init__.py +12 -2
  80. esphome/components/captive_portal/captive_portal.cpp +12 -2
  81. esphome/components/captive_portal/captive_portal.h +5 -2
  82. esphome/components/ccs811/ccs811.h +0 -2
  83. esphome/components/climate/__init__.py +5 -2
  84. esphome/components/cm1106/sensor.py +2 -2
  85. esphome/components/const/__init__.py +2 -0
  86. esphome/components/copy/binary_sensor/copy_binary_sensor.h +0 -1
  87. esphome/components/copy/button/copy_button.h +0 -1
  88. esphome/components/copy/cover/copy_cover.h +0 -1
  89. esphome/components/copy/fan/copy_fan.h +0 -1
  90. esphome/components/copy/lock/copy_lock.h +0 -1
  91. esphome/components/copy/number/copy_number.h +0 -1
  92. esphome/components/copy/select/copy_select.h +0 -1
  93. esphome/components/copy/sensor/copy_sensor.h +0 -1
  94. esphome/components/copy/switch/copy_switch.h +0 -1
  95. esphome/components/copy/text/copy_text.h +0 -1
  96. esphome/components/copy/text_sensor/copy_text_sensor.h +0 -1
  97. esphome/components/cover/__init__.py +5 -2
  98. esphome/components/cs5460a/cs5460a.h +0 -1
  99. esphome/components/datetime/__init__.py +4 -2
  100. esphome/components/debug/__init__.py +20 -0
  101. esphome/components/deep_sleep/__init__.py +43 -9
  102. esphome/components/demo/__init__.py +2 -2
  103. esphome/components/display/display.cpp +4 -3
  104. esphome/components/display/display.h +0 -2
  105. esphome/components/display/display_buffer.cpp +1 -1
  106. esphome/components/ds2484/__init__.py +1 -0
  107. esphome/components/ds2484/ds2484.cpp +209 -0
  108. esphome/components/ds2484/ds2484.h +43 -0
  109. esphome/components/ds2484/one_wire.py +37 -0
  110. esphome/components/duty_time/duty_time_sensor.h +0 -1
  111. esphome/components/ens160_base/ens160_base.h +0 -1
  112. esphome/components/es7210/es7210.h +0 -1
  113. esphome/components/es7243e/es7243e.h +0 -1
  114. esphome/components/es8156/es8156.h +0 -1
  115. esphome/components/es8311/es8311.h +0 -1
  116. esphome/components/es8388/es8388.h +0 -1
  117. esphome/components/esp32/__init__.py +102 -135
  118. esphome/components/esp32/core.cpp +0 -4
  119. esphome/components/esp32/gpio.h +1 -1
  120. esphome/components/esp32/helpers.cpp +69 -0
  121. esphome/components/esp32_ble/ble.cpp +5 -6
  122. esphome/components/esp32_ble/ble.h +29 -14
  123. esphome/components/esp32_ble/ble_event.h +6 -6
  124. esphome/components/esp32_ble_client/ble_client_base.cpp +21 -6
  125. esphome/components/esp32_ble_client/ble_client_base.h +24 -9
  126. esphome/components/esp32_ble_tracker/__init__.py +2 -8
  127. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +5 -5
  128. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +11 -7
  129. esphome/components/esp32_camera/__init__.py +111 -97
  130. esphome/components/esp32_camera/esp32_camera.cpp +41 -31
  131. esphome/components/esp32_camera/esp32_camera.h +35 -30
  132. esphome/components/esp32_camera_web_server/__init__.py +2 -1
  133. esphome/components/esp32_camera_web_server/camera_web_server.cpp +8 -8
  134. esphome/components/esp32_camera_web_server/camera_web_server.h +3 -3
  135. esphome/components/esp32_hall/sensor.py +2 -21
  136. esphome/components/esp32_hosted/__init__.py +101 -0
  137. esphome/components/esp32_hosted/esp32_hosted.py.script +12 -0
  138. esphome/components/esp32_improv/esp32_improv_component.cpp +3 -0
  139. esphome/components/esp32_rmt/__init__.py +0 -58
  140. esphome/components/esp32_rmt_led_strip/led_strip.cpp +77 -63
  141. esphome/components/esp32_rmt_led_strip/led_strip.h +11 -17
  142. esphome/components/esp32_rmt_led_strip/light.py +14 -76
  143. esphome/components/esp32_touch/esp32_touch.h +174 -28
  144. esphome/components/esp32_touch/esp32_touch_common.cpp +162 -0
  145. esphome/components/esp32_touch/esp32_touch_v1.cpp +238 -0
  146. esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
  147. esphome/components/esp8266/__init__.py +1 -0
  148. esphome/components/esp8266/gpio.cpp +10 -10
  149. esphome/components/esp8266/helpers.cpp +31 -0
  150. esphome/components/esphome/ota/__init__.py +1 -0
  151. esphome/components/esphome/ota/ota_esphome.cpp +24 -19
  152. esphome/components/ethernet/__init__.py +42 -23
  153. esphome/components/ethernet/esp_eth_phy_jl1101.c +0 -16
  154. esphome/components/ethernet/ethernet_component.cpp +69 -29
  155. esphome/components/ethernet/ethernet_component.h +18 -10
  156. esphome/components/event/__init__.py +5 -2
  157. esphome/components/ezo/ezo.h +0 -1
  158. esphome/components/ezo_pmp/ezo_pmp.h +0 -1
  159. esphome/components/fan/__init__.py +5 -2
  160. esphome/components/feedback/feedback_cover.h +0 -1
  161. esphome/components/font/__init__.py +92 -82
  162. esphome/components/font/font.cpp +9 -2
  163. esphome/components/font/font.h +20 -5
  164. esphome/components/fs3000/fs3000.h +0 -1
  165. esphome/components/gcja5/gcja5.h +0 -1
  166. esphome/components/gl_r01_i2c/__init__.py +0 -0
  167. esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +68 -0
  168. esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
  169. esphome/components/gl_r01_i2c/sensor.py +36 -0
  170. esphome/components/gp8403/gp8403.h +0 -1
  171. esphome/components/gpio/binary_sensor/__init__.py +17 -0
  172. esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +77 -3
  173. esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +40 -0
  174. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +0 -2
  175. esphome/components/he60r/he60r.h +0 -1
  176. esphome/components/heatpumpir/climate.py +2 -1
  177. esphome/components/heatpumpir/heatpumpir.cpp +1 -0
  178. esphome/components/heatpumpir/heatpumpir.h +1 -0
  179. esphome/components/honeywellabp2_i2c/honeywellabp2.h +0 -1
  180. esphome/components/host/__init__.py +2 -1
  181. esphome/components/host/helpers.cpp +57 -0
  182. esphome/components/http_request/__init__.py +19 -1
  183. esphome/components/http_request/http_request.h +1 -1
  184. esphome/components/http_request/http_request_arduino.cpp +0 -1
  185. esphome/components/http_request/http_request_arduino.h +1 -0
  186. esphome/components/http_request/http_request_idf.cpp +0 -1
  187. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  188. esphome/components/http_request/update/http_request_update.cpp +28 -9
  189. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +3 -9
  190. esphome/components/hydreon_rgxx/sensor.py +1 -1
  191. esphome/components/i2c/__init__.py +23 -11
  192. esphome/components/i2c/i2c_bus.h +8 -1
  193. esphome/components/i2c/i2c_bus_arduino.cpp +4 -3
  194. esphome/components/i2c/i2c_bus_arduino.h +6 -3
  195. esphome/components/i2c/i2c_bus_esp_idf.h +5 -3
  196. esphome/components/i2c_device/i2c_device.h +0 -1
  197. esphome/components/i2s_audio/__init__.py +2 -10
  198. esphome/components/i2s_audio/i2s_audio.cpp +1 -5
  199. esphome/components/i2s_audio/media_player/__init__.py +2 -2
  200. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +2 -2
  201. esphome/components/iaqcore/iaqcore.h +0 -2
  202. esphome/components/image/__init__.py +123 -24
  203. esphome/components/improv_serial/improv_serial_component.cpp +0 -4
  204. esphome/components/ina219/ina219.cpp +7 -0
  205. esphome/components/ina219/ina219.h +1 -0
  206. esphome/components/ina260/ina260.h +0 -2
  207. esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.h +0 -1
  208. esphome/components/inkplate6/display.py +15 -0
  209. esphome/components/inkplate6/inkplate.cpp +2 -2
  210. esphome/components/integration/integration_sensor.h +0 -1
  211. esphome/components/internal_temperature/internal_temperature.cpp +8 -27
  212. esphome/components/internal_temperature/sensor.py +0 -26
  213. esphome/components/interval/interval.h +0 -2
  214. esphome/components/ld2410/button/__init__.py +3 -3
  215. esphome/components/ld2410/button/factory_reset_button.cpp +9 -0
  216. esphome/components/ld2410/button/{reset_button.h → factory_reset_button.h} +2 -2
  217. esphome/components/ld2410/ld2410.cpp +430 -261
  218. esphome/components/ld2410/ld2410.h +44 -146
  219. esphome/components/ld2410/number/__init__.py +2 -2
  220. esphome/components/ld2410/sensor.py +1 -1
  221. esphome/components/ld2410/switch/__init__.py +1 -1
  222. esphome/components/ld2420/ld2420.cpp +196 -100
  223. esphome/components/ld2420/ld2420.h +46 -118
  224. esphome/components/ld2420/number/__init__.py +2 -2
  225. esphome/components/ld2420/sensor/__init__.py +6 -2
  226. esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
  227. esphome/components/ld2450/button/__init__.py +3 -3
  228. esphome/components/ld2450/button/factory_reset_button.cpp +9 -0
  229. esphome/components/ld2450/button/{reset_button.h → factory_reset_button.h} +2 -2
  230. esphome/components/ld2450/ld2450.cpp +384 -232
  231. esphome/components/ld2450/ld2450.h +60 -69
  232. esphome/components/ld2450/switch/__init__.py +1 -1
  233. esphome/components/ledc/ledc_output.cpp +1 -63
  234. esphome/components/libretiny/__init__.py +4 -3
  235. esphome/components/libretiny/const.py +5 -0
  236. esphome/components/libretiny/generate_components.py +1 -0
  237. esphome/components/libretiny/helpers.cpp +35 -0
  238. esphome/components/libretiny/lt_component.cpp +5 -3
  239. esphome/components/light/__init__.py +4 -2
  240. esphome/components/light/addressable_light.h +3 -3
  241. esphome/components/light/light_call.cpp +180 -243
  242. esphome/components/light/light_call.h +72 -20
  243. esphome/components/light/light_color_values.h +14 -14
  244. esphome/components/light/light_state.h +15 -13
  245. esphome/components/light/transformers.h +2 -2
  246. esphome/components/ln882x/__init__.py +52 -0
  247. esphome/components/ln882x/boards.py +285 -0
  248. esphome/components/lock/__init__.py +5 -2
  249. esphome/components/logger/__init__.py +40 -3
  250. esphome/components/logger/logger.cpp +47 -12
  251. esphome/components/logger/logger.h +80 -49
  252. esphome/components/logger/logger_esp32.cpp +3 -3
  253. esphome/components/lps22/__init__.py +0 -0
  254. esphome/components/lps22/lps22.cpp +75 -0
  255. esphome/components/lps22/lps22.h +27 -0
  256. esphome/components/lps22/sensor.py +58 -0
  257. esphome/components/ltr390/ltr390.h +0 -1
  258. esphome/components/ltr501/ltr501.h +0 -1
  259. esphome/components/ltr_als_ps/ltr_als_ps.h +0 -1
  260. esphome/components/lvgl/__init__.py +1 -1
  261. esphome/components/lvgl/schemas.py +66 -6
  262. esphome/components/lvgl/styles.py +24 -16
  263. esphome/components/lvgl/widgets/__init__.py +12 -2
  264. esphome/components/lvgl/widgets/lv_bar.py +40 -19
  265. esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +1 -1
  266. esphome/components/max9611/max9611.h +0 -1
  267. esphome/components/mcp23016/__init__.py +1 -1
  268. esphome/components/mcp23xxx_base/__init__.py +1 -1
  269. esphome/components/mcp4461/__init__.py +1 -1
  270. esphome/components/mcp4461/output/__init__.py +3 -2
  271. esphome/components/mcp9600/mcp9600.h +0 -2
  272. esphome/components/md5/md5.cpp +3 -3
  273. esphome/components/md5/md5.h +1 -6
  274. esphome/components/mdns/__init__.py +22 -11
  275. esphome/components/media_player/__init__.py +4 -3
  276. esphome/components/micro_wake_word/__init__.py +1 -5
  277. esphome/components/micro_wake_word/streaming_model.cpp +2 -2
  278. esphome/components/microphone/microphone.cpp +7 -9
  279. esphome/components/microphone/microphone.h +0 -2
  280. esphome/components/mipi_spi/display.py +1 -0
  281. esphome/components/mmc5603/mmc5603.cpp +1 -1
  282. esphome/components/modbus/modbus.cpp +33 -15
  283. esphome/components/modbus/modbus.h +9 -0
  284. esphome/components/modbus_controller/__init__.py +42 -10
  285. esphome/components/modbus_controller/modbus_controller.cpp +92 -11
  286. esphome/components/modbus_controller/modbus_controller.h +61 -7
  287. esphome/components/mopeka_pro_check/mopeka_pro_check.h +0 -1
  288. esphome/components/mopeka_std_check/mopeka_std_check.h +0 -1
  289. esphome/components/mpl3115a2/mpl3115a2.h +0 -2
  290. esphome/components/mqtt/__init__.py +16 -0
  291. esphome/components/mqtt/mqtt_backend.h +2 -1
  292. esphome/components/mqtt/mqtt_backend_esp32.cpp +126 -45
  293. esphome/components/mqtt/mqtt_backend_esp32.h +106 -4
  294. esphome/components/mqtt/mqtt_client.cpp +15 -9
  295. esphome/components/mqtt/mqtt_client.h +8 -3
  296. esphome/components/ms8607/ms8607.h +0 -1
  297. esphome/components/neopixelbus/light.py +4 -1
  298. esphome/components/neopixelbus/neopixelbus_light.h +1 -1
  299. esphome/components/network/__init__.py +4 -1
  300. esphome/components/network/ip_address.h +1 -0
  301. esphome/components/nextion/__init__.py +16 -0
  302. esphome/components/nextion/base_component.py +1 -0
  303. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +1 -1
  304. esphome/components/nextion/display.py +14 -4
  305. esphome/components/nextion/nextion.cpp +166 -101
  306. esphome/components/nextion/nextion.h +84 -53
  307. esphome/components/nextion/nextion_commands.cpp +11 -10
  308. esphome/components/nextion/nextion_component.cpp +28 -28
  309. esphome/components/nextion/nextion_component.h +53 -18
  310. esphome/components/nextion/nextion_component_base.h +3 -0
  311. esphome/components/nextion/nextion_upload.cpp +36 -0
  312. esphome/components/nextion/nextion_upload_arduino.cpp +10 -35
  313. esphome/components/nextion/nextion_upload_idf.cpp +9 -33
  314. esphome/components/nextion/sensor/nextion_sensor.cpp +1 -1
  315. esphome/components/nextion/switch/nextion_switch.cpp +1 -1
  316. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +1 -1
  317. esphome/components/nfc/nfc.cpp +3 -22
  318. esphome/components/nfc/nfc.h +3 -3
  319. esphome/components/number/__init__.py +5 -2
  320. esphome/components/online_image/__init__.py +5 -0
  321. esphome/components/online_image/online_image.cpp +6 -2
  322. esphome/components/online_image/online_image.h +4 -1
  323. esphome/components/opentherm/opentherm.cpp +7 -12
  324. esphome/components/openthread/__init__.py +47 -40
  325. esphome/components/openthread/const.py +1 -0
  326. esphome/components/openthread/openthread_esp.cpp +27 -5
  327. esphome/components/opt3001/__init__.py +0 -0
  328. esphome/components/opt3001/opt3001.cpp +122 -0
  329. esphome/components/opt3001/opt3001.h +27 -0
  330. esphome/components/opt3001/sensor.py +35 -0
  331. esphome/components/ota/__init__.py +17 -0
  332. esphome/components/ota/ota_backend.h +27 -1
  333. esphome/components/ota/ota_backend_arduino_esp32.cpp +12 -2
  334. esphome/components/ota/ota_backend_arduino_esp32.h +3 -0
  335. esphome/components/ota/ota_backend_arduino_esp8266.cpp +18 -4
  336. esphome/components/ota/ota_backend_arduino_esp8266.h +3 -0
  337. esphome/components/ota/ota_backend_arduino_libretiny.cpp +12 -2
  338. esphome/components/ota/ota_backend_arduino_libretiny.h +3 -0
  339. esphome/components/ota/ota_backend_arduino_rp2040.cpp +9 -2
  340. esphome/components/ota/ota_backend_arduino_rp2040.h +3 -0
  341. esphome/components/ota/ota_backend_esp_idf.cpp +10 -16
  342. esphome/components/ota/ota_backend_esp_idf.h +1 -0
  343. esphome/components/packages/__init__.py +5 -2
  344. esphome/components/packet_transport/binary_sensor.py +61 -4
  345. esphome/components/packet_transport/packet_transport.cpp +31 -1
  346. esphome/components/packet_transport/packet_transport.h +11 -5
  347. esphome/components/pcf8574/__init__.py +1 -1
  348. esphome/components/pi4ioe5v6408/__init__.py +84 -0
  349. esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +171 -0
  350. esphome/components/pi4ioe5v6408/pi4ioe5v6408.h +70 -0
  351. esphome/components/pmsa003i/pmsa003i.h +0 -1
  352. esphome/components/pmsx003/pmsx003.h +0 -1
  353. esphome/components/pn7150/pn7150.cpp +7 -7
  354. esphome/components/pn7150/pn7150.h +0 -1
  355. esphome/components/pn7160/pn7160.cpp +7 -7
  356. esphome/components/pn7160/pn7160.h +0 -1
  357. esphome/components/preferences/syncer.h +2 -0
  358. esphome/components/prometheus/prometheus_handler.h +1 -1
  359. esphome/components/psram/psram.cpp +0 -20
  360. esphome/components/pulse_counter/pulse_counter_sensor.h +0 -1
  361. esphome/components/pulse_meter/pulse_meter_sensor.cpp +8 -4
  362. esphome/components/pulse_width/pulse_width.h +0 -1
  363. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +0 -4
  364. esphome/components/pvvx_mithermometer/display/pvvx_display.h +0 -2
  365. esphome/components/pvvx_mithermometer/pvvx_mithermometer.h +0 -1
  366. esphome/components/qr_code/__init__.py +13 -10
  367. esphome/components/qwiic_pir/qwiic_pir.h +0 -1
  368. esphome/components/radon_eye_ble/radon_eye_listener.cpp +1 -1
  369. esphome/components/rc522/rc522.h +0 -1
  370. esphome/components/rdm6300/rdm6300.h +0 -2
  371. esphome/components/remote_base/__init__.py +7 -5
  372. esphome/components/remote_base/remote_base.cpp +24 -21
  373. esphome/components/remote_base/remote_base.h +3 -26
  374. esphome/components/remote_receiver/__init__.py +40 -46
  375. esphome/components/remote_receiver/remote_receiver.h +4 -18
  376. esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -87
  377. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +1 -1
  378. esphome/components/remote_transmitter/__init__.py +42 -43
  379. esphome/components/remote_transmitter/remote_transmitter.h +2 -14
  380. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -77
  381. esphome/components/resistance/resistance_sensor.h +0 -1
  382. esphome/components/rp2040/__init__.py +1 -0
  383. esphome/components/rp2040/helpers.cpp +55 -0
  384. esphome/components/rp2040_pio_led_strip/led_strip.cpp +2 -2
  385. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -4
  386. esphome/components/rtttl/__init__.py +4 -4
  387. esphome/components/rtttl/rtttl.cpp +10 -1
  388. esphome/components/ruuvitag/ruuvitag.h +0 -1
  389. esphome/components/safe_mode/safe_mode.cpp +2 -0
  390. esphome/components/safe_mode/safe_mode.h +4 -1
  391. esphome/components/scd30/scd30.h +0 -1
  392. esphome/components/scd30/sensor.py +2 -2
  393. esphome/components/scd4x/scd4x.cpp +61 -54
  394. esphome/components/scd4x/scd4x.h +17 -15
  395. esphome/components/scd4x/sensor.py +4 -4
  396. esphome/components/script/script.h +0 -2
  397. esphome/components/sdp3x/sensor.py +1 -1
  398. esphome/components/select/__init__.py +5 -2
  399. esphome/components/sen5x/sen5x.h +0 -1
  400. esphome/components/senseair/senseair.h +0 -1
  401. esphome/components/sensor/__init__.py +4 -2
  402. esphome/components/sensor/filter.cpp +1 -1
  403. esphome/components/sensor/sensor.cpp +12 -6
  404. esphome/components/sensor/sensor.h +13 -5
  405. esphome/components/servo/servo.h +0 -1
  406. esphome/components/sfa30/sfa30.h +0 -1
  407. esphome/components/sgp30/sgp30.h +0 -1
  408. esphome/components/sgp4x/sgp4x.h +0 -1
  409. esphome/components/shelly_dimmer/stm32flash.cpp +1 -2
  410. esphome/components/sht4x/sht4x.h +0 -1
  411. esphome/components/sm300d2/sm300d2.h +0 -2
  412. esphome/components/smt100/sensor.py +8 -4
  413. esphome/components/smt100/smt100.cpp +5 -5
  414. esphome/components/smt100/smt100.h +3 -3
  415. esphome/components/sn74hc595/__init__.py +1 -1
  416. esphome/components/sn74hc595/sn74hc595.cpp +5 -4
  417. esphome/components/sntp/sntp_component.cpp +9 -3
  418. esphome/components/sntp/time.py +2 -0
  419. esphome/components/socket/__init__.py +17 -0
  420. esphome/components/spi/__init__.py +27 -6
  421. esphome/components/spi/spi.cpp +3 -2
  422. esphome/components/spi/spi.h +9 -3
  423. esphome/components/spi/spi_arduino.cpp +3 -5
  424. esphome/components/spi/spi_esp_idf.cpp +40 -21
  425. esphome/components/spi_led_strip/spi_led_strip.cpp +1 -1
  426. esphome/components/sps30/sps30.h +0 -1
  427. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  428. esphome/components/st7701s/st7701s.cpp +0 -4
  429. esphome/components/status/status_binary_sensor.h +0 -2
  430. esphome/components/substitutions/__init__.py +76 -19
  431. esphome/components/substitutions/jinja.py +99 -0
  432. esphome/components/sun/sun.cpp +3 -4
  433. esphome/components/switch/__init__.py +5 -2
  434. esphome/components/switch/binary_sensor/switch_binary_sensor.h +0 -1
  435. esphome/components/sx126x/__init__.py +317 -0
  436. esphome/components/sx126x/automation.h +62 -0
  437. esphome/components/sx126x/packet_transport/__init__.py +26 -0
  438. esphome/components/sx126x/packet_transport/sx126x_transport.cpp +26 -0
  439. esphome/components/sx126x/packet_transport/sx126x_transport.h +25 -0
  440. esphome/components/sx126x/sx126x.cpp +523 -0
  441. esphome/components/sx126x/sx126x.h +140 -0
  442. esphome/components/sx126x/sx126x_reg.h +163 -0
  443. esphome/components/sx127x/__init__.py +325 -0
  444. esphome/components/sx127x/automation.h +62 -0
  445. esphome/components/sx127x/packet_transport/__init__.py +26 -0
  446. esphome/components/sx127x/packet_transport/sx127x_transport.cpp +26 -0
  447. esphome/components/sx127x/packet_transport/sx127x_transport.h +25 -0
  448. esphome/components/sx127x/sx127x.cpp +498 -0
  449. esphome/components/sx127x/sx127x.h +128 -0
  450. esphome/components/sx127x/sx127x_reg.h +295 -0
  451. esphome/components/syslog/esphome_syslog.cpp +5 -3
  452. esphome/components/syslog/esphome_syslog.h +1 -1
  453. esphome/components/tca9555/__init__.py +1 -1
  454. esphome/components/template/binary_sensor/template_binary_sensor.cpp +1 -9
  455. esphome/components/text/__init__.py +5 -2
  456. esphome/components/text_sensor/__init__.py +5 -2
  457. esphome/components/thermostat/thermostat_climate.cpp +34 -31
  458. esphome/components/thermostat/thermostat_climate.h +43 -39
  459. esphome/components/time/__init__.py +16 -2
  460. esphome/components/time/real_time_clock.cpp +4 -0
  461. esphome/components/time/real_time_clock.h +5 -1
  462. esphome/components/tlc5971/tlc5971.cpp +4 -1
  463. esphome/components/tmp1075/tmp1075.h +0 -2
  464. esphome/components/tof10120/tof10120_sensor.h +0 -1
  465. esphome/components/tormatic/tormatic_cover.h +0 -1
  466. esphome/components/total_daily_energy/total_daily_energy.h +0 -1
  467. esphome/components/tsl2591/tsl2591.cpp +1 -1
  468. esphome/components/ttp229_bsf/ttp229_bsf.h +0 -1
  469. esphome/components/ttp229_lsf/ttp229_lsf.h +0 -1
  470. esphome/components/tx20/tx20.cpp +2 -2
  471. esphome/components/uart/__init__.py +18 -0
  472. esphome/components/uart/uart_component_esp_idf.cpp +1 -5
  473. esphome/components/update/__init__.py +5 -2
  474. esphome/components/update/update_entity.h +8 -0
  475. esphome/components/usb_host/__init__.py +5 -2
  476. esphome/components/valve/__init__.py +5 -2
  477. esphome/components/vbus/vbus.h +0 -1
  478. esphome/components/veml3235/veml3235.h +0 -1
  479. esphome/components/veml7700/veml7700.h +0 -1
  480. esphome/components/vl53l0x/vl53l0x_sensor.h +0 -1
  481. esphome/components/voice_assistant/voice_assistant.cpp +4 -4
  482. esphome/components/watchdog/watchdog.cpp +0 -4
  483. esphome/components/waveshare_epaper/waveshare_epaper.cpp +6 -6
  484. esphome/components/web_server/__init__.py +34 -19
  485. esphome/components/web_server/ota/__init__.py +32 -0
  486. esphome/components/web_server/ota/ota_web_server.cpp +210 -0
  487. esphome/components/web_server/ota/ota_web_server.h +26 -0
  488. esphome/components/web_server/web_server.cpp +311 -430
  489. esphome/components/web_server/web_server.h +33 -23
  490. esphome/components/web_server/web_server_v1.cpp +4 -5
  491. esphome/components/web_server_base/__init__.py +5 -2
  492. esphome/components/web_server_base/web_server_base.cpp +2 -94
  493. esphome/components/web_server_base/web_server_base.h +5 -25
  494. esphome/components/web_server_idf/multipart.cpp +254 -0
  495. esphome/components/web_server_idf/multipart.h +86 -0
  496. esphome/components/web_server_idf/utils.cpp +32 -0
  497. esphome/components/web_server_idf/utils.h +10 -0
  498. esphome/components/web_server_idf/web_server_idf.cpp +162 -16
  499. esphome/components/web_server_idf/web_server_idf.h +11 -10
  500. esphome/components/wiegand/wiegand.cpp +2 -2
  501. esphome/components/wifi/__init__.py +18 -0
  502. esphome/components/wifi/wifi_component.cpp +17 -22
  503. esphome/components/wifi/wifi_component.h +27 -23
  504. esphome/components/wifi/wifi_component_esp32_arduino.cpp +52 -59
  505. esphome/components/wifi/wifi_component_esp8266.cpp +46 -46
  506. esphome/components/wifi/wifi_component_esp_idf.cpp +35 -36
  507. esphome/components/wifi/wifi_component_libretiny.cpp +26 -27
  508. esphome/components/wifi/wifi_component_pico_w.cpp +3 -3
  509. esphome/components/wifi_info/wifi_info_text_sensor.cpp +6 -6
  510. esphome/components/wireguard/__init__.py +2 -11
  511. esphome/components/xiaomi_ble/xiaomi_ble.cpp +13 -1
  512. esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
  513. esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +0 -1
  514. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +0 -1
  515. esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +0 -1
  516. esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +0 -1
  517. esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +0 -1
  518. esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +0 -1
  519. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +0 -1
  520. esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +0 -1
  521. esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +0 -1
  522. esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +0 -1
  523. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +0 -1
  524. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +0 -1
  525. esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +0 -1
  526. esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +0 -1
  527. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +0 -1
  528. esphome/components/xiaomi_miscale/xiaomi_miscale.h +0 -1
  529. esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +0 -1
  530. esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +0 -1
  531. esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +0 -1
  532. esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +0 -1
  533. esphome/components/xiaomi_xmwsdj04mmc/__init__.py +0 -0
  534. esphome/components/xiaomi_xmwsdj04mmc/sensor.py +77 -0
  535. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.cpp +77 -0
  536. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.h +36 -0
  537. esphome/components/zio_ultrasonic/zio_ultrasonic.h +0 -2
  538. esphome/components/zyaura/zyaura.h +0 -1
  539. esphome/config.py +88 -22
  540. esphome/config_helpers.py +74 -1
  541. esphome/config_validation.py +12 -1
  542. esphome/const.py +65 -10
  543. esphome/core/__init__.py +18 -2
  544. esphome/core/application.cpp +163 -10
  545. esphome/core/application.h +145 -165
  546. esphome/core/area.h +19 -0
  547. esphome/core/automation.h +58 -9
  548. esphome/core/color.cpp +3 -5
  549. esphome/core/color.h +16 -16
  550. esphome/core/component.cpp +151 -18
  551. esphome/core/component.h +98 -4
  552. esphome/core/component_iterator.cpp +7 -7
  553. esphome/core/component_iterator.h +9 -7
  554. esphome/core/config.py +155 -6
  555. esphome/core/controller.cpp +4 -2
  556. esphome/core/controller.h +1 -1
  557. esphome/core/datatypes.h +2 -2
  558. esphome/core/defines.h +17 -2
  559. esphome/core/device.h +20 -0
  560. esphome/core/entity_base.cpp +20 -15
  561. esphome/core/entity_base.h +76 -0
  562. esphome/core/entity_helpers.py +162 -1
  563. esphome/core/event_pool.h +81 -0
  564. esphome/core/helpers.cpp +75 -230
  565. esphome/core/helpers.h +164 -104
  566. esphome/core/lock_free_queue.h +151 -0
  567. esphome/core/log.cpp +2 -2
  568. esphome/core/log.h +2 -0
  569. esphome/core/optional.h +5 -0
  570. esphome/core/ring_buffer.cpp +2 -2
  571. esphome/core/scheduler.cpp +278 -103
  572. esphome/core/scheduler.h +157 -17
  573. esphome/core/time.cpp +5 -5
  574. esphome/core/time.h +5 -5
  575. esphome/cpp_generator.py +17 -0
  576. esphome/cpp_helpers.py +0 -22
  577. esphome/cpp_types.py +3 -1
  578. esphome/dashboard/entries.py +1 -1
  579. esphome/dashboard/util/text.py +5 -21
  580. esphome/dashboard/web_server.py +9 -1
  581. esphome/helpers.py +47 -0
  582. esphome/loader.py +15 -1
  583. esphome/pins.py +14 -8
  584. esphome/wizard.py +16 -3
  585. esphome/writer.py +21 -3
  586. esphome/yaml_util.py +0 -2
  587. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/METADATA +10 -9
  588. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/RECORD +593 -533
  589. esphome/components/esp32_ble/ble_event_pool.h +0 -72
  590. esphome/components/esp32_ble/queue.h +0 -85
  591. esphome/components/esp32_hall/esp32_hall.cpp +0 -25
  592. esphome/components/esp32_hall/esp32_hall.h +0 -23
  593. esphome/components/esp32_touch/esp32_touch.cpp +0 -355
  594. esphome/components/ld2410/button/reset_button.cpp +0 -9
  595. esphome/components/ld2450/button/reset_button.cpp +0 -9
  596. esphome/components/openthread/tlv.py +0 -65
  597. /esphome/{dashboard/enum.py → enum.py} +0 -0
  598. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/WHEEL +0 -0
  599. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/entry_points.txt +0 -0
  600. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/licenses/LICENSE +0 -0
  601. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/top_level.txt +0 -0
@@ -1,4 +1,5 @@
1
1
  #include "ld2420.h"
2
+ #include "esphome/core/application.h"
2
3
  #include "esphome/core/helpers.h"
3
4
 
4
5
  /*
@@ -40,7 +41,7 @@ There are three documented parameters for modes:
40
41
  00 04 = Energy output mode
41
42
  This mode outputs detailed signal energy values for each gate and the target distance.
42
43
  The data format consist of the following.
43
- Header HH, Length LL, Persence PP, Distance DD, 16 Gate Energies EE, Footer FF
44
+ Header HH, Length LL, Presence PP, Distance DD, 16 Gate Energies EE, Footer FF
44
45
  HH HH HH HH LL LL PP DD DD EE EE .. 16x .. FF FF FF FF
45
46
  F4 F3 F2 F1 23 00 00 00 00 00 00 .. .. .. .. F8 F7 F6 F5
46
47
  00 00 = debug output mode
@@ -62,38 +63,105 @@ namespace ld2420 {
62
63
 
63
64
  static const char *const TAG = "ld2420";
64
65
 
65
- float LD2420Component::get_setup_priority() const { return setup_priority::BUS; }
66
-
67
- void LD2420Component::dump_config() {
68
- ESP_LOGCONFIG(TAG,
69
- "LD2420:\n"
70
- " Firmware Version : %7s\n"
71
- "LD2420 Number:",
72
- this->ld2420_firmware_ver_);
73
- #ifdef USE_NUMBER
74
- LOG_NUMBER(TAG, " Gate Timeout:", this->gate_timeout_number_);
75
- LOG_NUMBER(TAG, " Gate Max Distance:", this->max_gate_distance_number_);
76
- LOG_NUMBER(TAG, " Gate Min Distance:", this->min_gate_distance_number_);
77
- LOG_NUMBER(TAG, " Gate Select:", this->gate_select_number_);
78
- for (uint8_t gate = 0; gate < LD2420_TOTAL_GATES; gate++) {
79
- LOG_NUMBER(TAG, " Gate Move Threshold:", this->gate_move_threshold_numbers_[gate]);
80
- LOG_NUMBER(TAG, " Gate Still Threshold::", this->gate_still_threshold_numbers_[gate]);
81
- }
82
- #endif
83
- #ifdef USE_BUTTON
84
- LOG_BUTTON(TAG, " Apply Config:", this->apply_config_button_);
85
- LOG_BUTTON(TAG, " Revert Edits:", this->revert_config_button_);
86
- LOG_BUTTON(TAG, " Factory Reset:", this->factory_reset_button_);
87
- LOG_BUTTON(TAG, " Restart Module:", this->restart_module_button_);
88
- #endif
89
- ESP_LOGCONFIG(TAG, "LD2420 Select:");
90
- LOG_SELECT(TAG, " Operating Mode", this->operating_selector_);
91
- if (this->get_firmware_int_(ld2420_firmware_ver_) < CALIBRATE_VERSION_MIN) {
92
- ESP_LOGW(TAG, "LD2420 Firmware Version %s and older are only supported in Simple Mode", ld2420_firmware_ver_);
93
- }
66
+ // Local const's
67
+ static const uint16_t REFRESH_RATE_MS = 1000;
68
+
69
+ // Command sets
70
+ static const uint16_t CMD_DISABLE_CONF = 0x00FE;
71
+ static const uint16_t CMD_ENABLE_CONF = 0x00FF;
72
+ static const uint16_t CMD_PARM_HIGH_TRESH = 0x0012;
73
+ static const uint16_t CMD_PARM_LOW_TRESH = 0x0021;
74
+ static const uint16_t CMD_PROTOCOL_VER = 0x0002;
75
+ static const uint16_t CMD_READ_ABD_PARAM = 0x0008;
76
+ static const uint16_t CMD_READ_REG_ADDR = 0x0020;
77
+ static const uint16_t CMD_READ_REGISTER = 0x0002;
78
+ static const uint16_t CMD_READ_SERIAL_NUM = 0x0011;
79
+ static const uint16_t CMD_READ_SYS_PARAM = 0x0013;
80
+ static const uint16_t CMD_READ_VERSION = 0x0000;
81
+ static const uint16_t CMD_RESTART = 0x0068;
82
+ static const uint16_t CMD_SYSTEM_MODE = 0x0000;
83
+ static const uint16_t CMD_SYSTEM_MODE_GR = 0x0003;
84
+ static const uint16_t CMD_SYSTEM_MODE_MTT = 0x0001;
85
+ static const uint16_t CMD_SYSTEM_MODE_SIMPLE = 0x0064;
86
+ static const uint16_t CMD_SYSTEM_MODE_DEBUG = 0x0000;
87
+ static const uint16_t CMD_SYSTEM_MODE_ENERGY = 0x0004;
88
+ static const uint16_t CMD_SYSTEM_MODE_VS = 0x0002;
89
+ static const uint16_t CMD_WRITE_ABD_PARAM = 0x0007;
90
+ static const uint16_t CMD_WRITE_REGISTER = 0x0001;
91
+ static const uint16_t CMD_WRITE_SYS_PARAM = 0x0012;
92
+
93
+ static const uint8_t CMD_ABD_DATA_REPLY_SIZE = 0x04;
94
+ static const uint8_t CMD_ABD_DATA_REPLY_START = 0x0A;
95
+ static const uint8_t CMD_MAX_BYTES = 0x64;
96
+ static const uint8_t CMD_REG_DATA_REPLY_SIZE = 0x02;
97
+
98
+ static const uint8_t LD2420_ERROR_NONE = 0x00;
99
+ static const uint8_t LD2420_ERROR_TIMEOUT = 0x02;
100
+ static const uint8_t LD2420_ERROR_UNKNOWN = 0x01;
101
+
102
+ // Register address values
103
+ static const uint16_t CMD_MIN_GATE_REG = 0x0000;
104
+ static const uint16_t CMD_MAX_GATE_REG = 0x0001;
105
+ static const uint16_t CMD_TIMEOUT_REG = 0x0004;
106
+ static const uint16_t CMD_GATE_MOVE_THRESH[TOTAL_GATES] = {0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015,
107
+ 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B,
108
+ 0x001C, 0x001D, 0x001E, 0x001F};
109
+ static const uint16_t CMD_GATE_STILL_THRESH[TOTAL_GATES] = {0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025,
110
+ 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B,
111
+ 0x002C, 0x002D, 0x002E, 0x002F};
112
+ static const uint32_t FACTORY_MOVE_THRESH[TOTAL_GATES] = {60000, 30000, 400, 250, 250, 250, 250, 250,
113
+ 250, 250, 250, 250, 250, 250, 250, 250};
114
+ static const uint32_t FACTORY_STILL_THRESH[TOTAL_GATES] = {40000, 20000, 200, 200, 200, 200, 200, 150,
115
+ 150, 100, 100, 100, 100, 100, 100, 100};
116
+ static const uint16_t FACTORY_TIMEOUT = 120;
117
+ static const uint16_t FACTORY_MIN_GATE = 1;
118
+ static const uint16_t FACTORY_MAX_GATE = 12;
119
+
120
+ // COMMAND_BYTE Header & Footer
121
+ static const uint32_t CMD_FRAME_FOOTER = 0x01020304;
122
+ static const uint32_t CMD_FRAME_HEADER = 0xFAFBFCFD;
123
+ static const uint32_t DEBUG_FRAME_FOOTER = 0xFAFBFCFD;
124
+ static const uint32_t DEBUG_FRAME_HEADER = 0x1410BFAA;
125
+ static const uint32_t ENERGY_FRAME_FOOTER = 0xF5F6F7F8;
126
+ static const uint32_t ENERGY_FRAME_HEADER = 0xF1F2F3F4;
127
+ static const int CALIBRATE_VERSION_MIN = 154;
128
+ static const uint8_t CMD_FRAME_COMMAND = 6;
129
+ static const uint8_t CMD_FRAME_DATA_LENGTH = 4;
130
+ static const uint8_t CMD_FRAME_STATUS = 7;
131
+ static const uint8_t CMD_ERROR_WORD = 8;
132
+ static const uint8_t ENERGY_SENSOR_START = 9;
133
+ static const uint8_t CALIBRATE_REPORT_INTERVAL = 4;
134
+ static const std::string OP_NORMAL_MODE_STRING = "Normal";
135
+ static const std::string OP_SIMPLE_MODE_STRING = "Simple";
136
+
137
+ // Memory-efficient lookup tables
138
+ struct StringToUint8 {
139
+ const char *str;
140
+ uint8_t value;
141
+ };
142
+
143
+ static constexpr StringToUint8 OP_MODE_BY_STR[] = {
144
+ {"Normal", OP_NORMAL_MODE},
145
+ {"Calibrate", OP_CALIBRATE_MODE},
146
+ {"Simple", OP_SIMPLE_MODE},
147
+ };
148
+
149
+ static constexpr const char *ERR_MESSAGE[] = {
150
+ "None",
151
+ "Unknown",
152
+ "Timeout",
153
+ };
154
+
155
+ // Helper function for lookups
156
+ template<size_t N> uint8_t find_uint8(const StringToUint8 (&arr)[N], const std::string &str) {
157
+ for (const auto &entry : arr) {
158
+ if (str == entry.str)
159
+ return entry.value;
160
+ }
161
+ return 0xFF; // Not found
94
162
  }
95
163
 
96
- uint8_t LD2420Component::calc_checksum(void *data, size_t size) {
164
+ static uint8_t calc_checksum(void *data, size_t size) {
97
165
  uint8_t checksum = 0;
98
166
  uint8_t *data_bytes = (uint8_t *) data;
99
167
  for (size_t i = 0; i < size; i++) {
@@ -102,7 +170,7 @@ uint8_t LD2420Component::calc_checksum(void *data, size_t size) {
102
170
  return checksum;
103
171
  }
104
172
 
105
- int LD2420Component::get_firmware_int_(const char *version_string) {
173
+ static int get_firmware_int(const char *version_string) {
106
174
  std::string version_str = version_string;
107
175
  if (version_str[0] == 'v') {
108
176
  version_str = version_str.substr(1);
@@ -112,10 +180,41 @@ int LD2420Component::get_firmware_int_(const char *version_string) {
112
180
  return version_integer;
113
181
  }
114
182
 
183
+ float LD2420Component::get_setup_priority() const { return setup_priority::BUS; }
184
+
185
+ void LD2420Component::dump_config() {
186
+ ESP_LOGCONFIG(TAG,
187
+ "LD2420:\n"
188
+ " Firmware version: %7s",
189
+ this->firmware_ver_);
190
+ #ifdef USE_NUMBER
191
+ ESP_LOGCONFIG(TAG, "Number:");
192
+ LOG_NUMBER(" ", "Gate Timeout:", this->gate_timeout_number_);
193
+ LOG_NUMBER(" ", "Gate Max Distance:", this->max_gate_distance_number_);
194
+ LOG_NUMBER(" ", "Gate Min Distance:", this->min_gate_distance_number_);
195
+ LOG_NUMBER(" ", "Gate Select:", this->gate_select_number_);
196
+ for (uint8_t gate = 0; gate < TOTAL_GATES; gate++) {
197
+ LOG_NUMBER(" ", "Gate Move Threshold:", this->gate_move_threshold_numbers_[gate]);
198
+ LOG_NUMBER(" ", "Gate Still Threshold::", this->gate_still_threshold_numbers_[gate]);
199
+ }
200
+ #endif
201
+ #ifdef USE_BUTTON
202
+ LOG_BUTTON(" ", "Apply Config:", this->apply_config_button_);
203
+ LOG_BUTTON(" ", "Revert Edits:", this->revert_config_button_);
204
+ LOG_BUTTON(" ", "Factory Reset:", this->factory_reset_button_);
205
+ LOG_BUTTON(" ", "Restart Module:", this->restart_module_button_);
206
+ #endif
207
+ ESP_LOGCONFIG(TAG, "Select:");
208
+ LOG_SELECT(" ", "Operating Mode", this->operating_selector_);
209
+ if (ld2420::get_firmware_int(this->firmware_ver_) < CALIBRATE_VERSION_MIN) {
210
+ ESP_LOGW(TAG, "Firmware version %s and older supports Simple Mode only", this->firmware_ver_);
211
+ }
212
+ }
213
+
115
214
  void LD2420Component::setup() {
116
215
  ESP_LOGCONFIG(TAG, "Running setup");
117
216
  if (this->set_config_mode(true) == LD2420_ERROR_TIMEOUT) {
118
- ESP_LOGE(TAG, "LD2420 module has failed to respond, check baud rate and serial connections.");
217
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
119
218
  this->mark_failed();
120
219
  return;
121
220
  }
@@ -124,24 +223,24 @@ void LD2420Component::setup() {
124
223
  this->init_gate_config_numbers();
125
224
  #endif
126
225
  this->get_firmware_version_();
127
- const char *pfw = this->ld2420_firmware_ver_;
226
+ const char *pfw = this->firmware_ver_;
128
227
  std::string fw_str(pfw);
129
228
 
130
- for (auto &listener : listeners_) {
229
+ for (auto &listener : this->listeners_) {
131
230
  listener->on_fw_version(fw_str);
132
231
  }
133
232
 
134
- for (uint8_t gate = 0; gate < LD2420_TOTAL_GATES; gate++) {
233
+ for (uint8_t gate = 0; gate < TOTAL_GATES; gate++) {
135
234
  delay_microseconds_safe(125);
136
235
  this->get_gate_threshold_(gate);
137
236
  }
138
237
 
139
238
  memcpy(&this->new_config, &this->current_config, sizeof(this->current_config));
140
- if (get_firmware_int_(ld2420_firmware_ver_) < CALIBRATE_VERSION_MIN) {
239
+ if (ld2420::get_firmware_int(this->firmware_ver_) < CALIBRATE_VERSION_MIN) {
141
240
  this->set_operating_mode(OP_SIMPLE_MODE_STRING);
142
241
  this->operating_selector_->publish_state(OP_SIMPLE_MODE_STRING);
143
242
  this->set_mode_(CMD_SYSTEM_MODE_SIMPLE);
144
- ESP_LOGW(TAG, "LD2420 Frimware Version %s and older are only supported in Simple Mode", ld2420_firmware_ver_);
243
+ ESP_LOGW(TAG, "Firmware version %s and older supports Simple Mode only", this->firmware_ver_);
145
244
  } else {
146
245
  this->set_mode_(CMD_SYSTEM_MODE_ENERGY);
147
246
  this->operating_selector_->publish_state(OP_NORMAL_MODE_STRING);
@@ -151,23 +250,22 @@ void LD2420Component::setup() {
151
250
  #endif
152
251
  this->set_system_mode(this->system_mode_);
153
252
  this->set_config_mode(false);
154
- ESP_LOGCONFIG(TAG, "LD2420 setup complete.");
155
253
  }
156
254
 
157
255
  void LD2420Component::apply_config_action() {
158
256
  const uint8_t checksum = calc_checksum(&this->new_config, sizeof(this->new_config));
159
257
  if (checksum == calc_checksum(&this->current_config, sizeof(this->current_config))) {
160
- ESP_LOGCONFIG(TAG, "No configuration change detected");
258
+ ESP_LOGD(TAG, "No configuration change detected");
161
259
  return;
162
260
  }
163
- ESP_LOGCONFIG(TAG, "Reconfiguring LD2420");
261
+ ESP_LOGD(TAG, "Reconfiguring");
164
262
  if (this->set_config_mode(true) == LD2420_ERROR_TIMEOUT) {
165
- ESP_LOGE(TAG, "LD2420 module has failed to respond, check baud rate and serial connections.");
263
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
166
264
  this->mark_failed();
167
265
  return;
168
266
  }
169
267
  this->set_min_max_distances_timeout(this->new_config.max_gate, this->new_config.min_gate, this->new_config.timeout);
170
- for (uint8_t gate = 0; gate < LD2420_TOTAL_GATES; gate++) {
268
+ for (uint8_t gate = 0; gate < TOTAL_GATES; gate++) {
171
269
  delay_microseconds_safe(125);
172
270
  this->set_gate_threshold(gate);
173
271
  }
@@ -178,13 +276,12 @@ void LD2420Component::apply_config_action() {
178
276
  this->set_system_mode(this->system_mode_);
179
277
  this->set_config_mode(false); // Disable config mode to save new values in LD2420 nvm
180
278
  this->set_operating_mode(OP_NORMAL_MODE_STRING);
181
- ESP_LOGCONFIG(TAG, "LD2420 reconfig complete.");
182
279
  }
183
280
 
184
281
  void LD2420Component::factory_reset_action() {
185
- ESP_LOGCONFIG(TAG, "Setting factory defaults");
282
+ ESP_LOGD(TAG, "Setting factory defaults");
186
283
  if (this->set_config_mode(true) == LD2420_ERROR_TIMEOUT) {
187
- ESP_LOGE(TAG, "LD2420 module has failed to respond, check baud rate and serial connections.");
284
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
188
285
  this->mark_failed();
189
286
  return;
190
287
  }
@@ -194,7 +291,7 @@ void LD2420Component::factory_reset_action() {
194
291
  this->min_gate_distance_number_->state = FACTORY_MIN_GATE;
195
292
  this->max_gate_distance_number_->state = FACTORY_MAX_GATE;
196
293
  #endif
197
- for (uint8_t gate = 0; gate < LD2420_TOTAL_GATES; gate++) {
294
+ for (uint8_t gate = 0; gate < TOTAL_GATES; gate++) {
198
295
  this->new_config.move_thresh[gate] = FACTORY_MOVE_THRESH[gate];
199
296
  this->new_config.still_thresh[gate] = FACTORY_STILL_THRESH[gate];
200
297
  delay_microseconds_safe(125);
@@ -207,18 +304,16 @@ void LD2420Component::factory_reset_action() {
207
304
  this->init_gate_config_numbers();
208
305
  this->refresh_gate_config_numbers();
209
306
  #endif
210
- ESP_LOGCONFIG(TAG, "LD2420 factory reset complete.");
211
307
  }
212
308
 
213
309
  void LD2420Component::restart_module_action() {
214
- ESP_LOGCONFIG(TAG, "Restarting LD2420 module");
310
+ ESP_LOGD(TAG, "Restarting");
215
311
  this->send_module_restart();
216
312
  this->set_timeout(250, [this]() {
217
313
  this->set_config_mode(true);
218
- this->set_system_mode(system_mode_);
314
+ this->set_system_mode(this->system_mode_);
219
315
  this->set_config_mode(false);
220
316
  });
221
- ESP_LOGCONFIG(TAG, "LD2420 Restarted.");
222
317
  }
223
318
 
224
319
  void LD2420Component::revert_config_action() {
@@ -226,25 +321,25 @@ void LD2420Component::revert_config_action() {
226
321
  #ifdef USE_NUMBER
227
322
  this->init_gate_config_numbers();
228
323
  #endif
229
- ESP_LOGCONFIG(TAG, "Reverted config number edits.");
324
+ ESP_LOGD(TAG, "Reverted config number edits");
230
325
  }
231
326
 
232
327
  void LD2420Component::loop() {
233
328
  // If there is a active send command do not process it here, the send command call will handle it.
234
- if (!get_cmd_active_()) {
235
- if (!available())
329
+ if (!this->get_cmd_active_()) {
330
+ if (!this->available())
236
331
  return;
237
332
  static uint8_t buffer[2048];
238
333
  static uint8_t rx_data;
239
- while (available()) {
240
- rx_data = read();
334
+ while (this->available()) {
335
+ rx_data = this->read();
241
336
  this->readline_(rx_data, buffer, sizeof(buffer));
242
337
  }
243
338
  }
244
339
  }
245
340
 
246
341
  void LD2420Component::update_radar_data(uint16_t const *gate_energy, uint8_t sample_number) {
247
- for (uint8_t gate = 0; gate < LD2420_TOTAL_GATES; ++gate) {
342
+ for (uint8_t gate = 0; gate < TOTAL_GATES; ++gate) {
248
343
  this->radar_data[gate][sample_number] = gate_energy[gate];
249
344
  }
250
345
  this->total_sample_number_counter++;
@@ -254,7 +349,7 @@ void LD2420Component::auto_calibrate_sensitivity() {
254
349
  // Calculate average and peak values for each gate
255
350
  const float move_factor = gate_move_sensitivity_factor + 1;
256
351
  const float still_factor = (gate_still_sensitivity_factor / 2) + 1;
257
- for (uint8_t gate = 0; gate < LD2420_TOTAL_GATES; ++gate) {
352
+ for (uint8_t gate = 0; gate < TOTAL_GATES; ++gate) {
258
353
  uint32_t sum = 0;
259
354
  uint16_t peak = 0;
260
355
 
@@ -283,7 +378,7 @@ void LD2420Component::auto_calibrate_sensitivity() {
283
378
  }
284
379
 
285
380
  void LD2420Component::report_gate_data() {
286
- for (uint8_t gate = 0; gate < LD2420_TOTAL_GATES; ++gate) {
381
+ for (uint8_t gate = 0; gate < TOTAL_GATES; ++gate) {
287
382
  // Output results
288
383
  ESP_LOGI(TAG, "Gate: %2d Avg: %5d Peak: %5d", gate, this->gate_avg[gate], this->gate_peak[gate]);
289
384
  }
@@ -292,13 +387,13 @@ void LD2420Component::report_gate_data() {
292
387
 
293
388
  void LD2420Component::set_operating_mode(const std::string &state) {
294
389
  // If unsupported firmware ignore mode select
295
- if (get_firmware_int_(ld2420_firmware_ver_) >= CALIBRATE_VERSION_MIN) {
296
- this->current_operating_mode = OP_MODE_TO_UINT.at(state);
390
+ if (ld2420::get_firmware_int(firmware_ver_) >= CALIBRATE_VERSION_MIN) {
391
+ this->current_operating_mode = find_uint8(OP_MODE_BY_STR, state);
297
392
  // Entering Auto Calibrate we need to clear the privoiuos data collection
298
393
  this->operating_selector_->publish_state(state);
299
394
  if (current_operating_mode == OP_CALIBRATE_MODE) {
300
395
  this->set_calibration_(true);
301
- for (uint8_t gate = 0; gate < LD2420_TOTAL_GATES; gate++) {
396
+ for (uint8_t gate = 0; gate < TOTAL_GATES; gate++) {
302
397
  this->gate_avg[gate] = 0;
303
398
  this->gate_peak[gate] = 0;
304
399
  for (uint8_t i = 0; i < CALIBRATE_SAMPLES; i++) {
@@ -333,11 +428,12 @@ void LD2420Component::readline_(int rx_data, uint8_t *buffer, int len) {
333
428
  this->set_cmd_active_(false); // Set command state to inactive after responce.
334
429
  this->handle_ack_data_(buffer, pos);
335
430
  pos = 0;
336
- } else if ((buffer[pos - 2] == 0x0D && buffer[pos - 1] == 0x0A) && (get_mode_() == CMD_SYSTEM_MODE_SIMPLE)) {
431
+ } else if ((buffer[pos - 2] == 0x0D && buffer[pos - 1] == 0x0A) &&
432
+ (this->get_mode_() == CMD_SYSTEM_MODE_SIMPLE)) {
337
433
  this->handle_simple_mode_(buffer, pos);
338
434
  pos = 0;
339
435
  } else if ((memcmp(&buffer[pos - 4], &ENERGY_FRAME_FOOTER, sizeof(ENERGY_FRAME_FOOTER)) == 0) &&
340
- (get_mode_() == CMD_SYSTEM_MODE_ENERGY)) {
436
+ (this->get_mode_() == CMD_SYSTEM_MODE_ENERGY)) {
341
437
  this->handle_energy_mode_(buffer, pos);
342
438
  pos = 0;
343
439
  }
@@ -365,13 +461,13 @@ void LD2420Component::handle_energy_mode_(uint8_t *buffer, int len) {
365
461
  }
366
462
 
367
463
  // Resonable refresh rate for home assistant database size health
368
- const int32_t current_millis = millis();
464
+ const int32_t current_millis = App.get_loop_component_start_time();
369
465
  if (current_millis - this->last_periodic_millis < REFRESH_RATE_MS)
370
466
  return;
371
467
  this->last_periodic_millis = current_millis;
372
468
  for (auto &listener : this->listeners_) {
373
- listener->on_distance(get_distance_());
374
- listener->on_presence(get_presence_());
469
+ listener->on_distance(this->get_distance_());
470
+ listener->on_presence(this->get_presence_());
375
471
  listener->on_energy(this->gate_energy_, sizeof(this->gate_energy_) / sizeof(this->gate_energy_[0]));
376
472
  }
377
473
 
@@ -392,9 +488,9 @@ void LD2420Component::handle_simple_mode_(const uint8_t *inbuf, int len) {
392
488
  char outbuf[bufsize]{0};
393
489
  while (true) {
394
490
  if (inbuf[pos - 2] == 'O' && inbuf[pos - 1] == 'F' && inbuf[pos] == 'F') {
395
- set_presence_(false);
491
+ this->set_presence_(false);
396
492
  } else if (inbuf[pos - 1] == 'O' && inbuf[pos] == 'N') {
397
- set_presence_(true);
493
+ this->set_presence_(true);
398
494
  }
399
495
  if (inbuf[pos] >= '0' && inbuf[pos] <= '9') {
400
496
  if (index < bufsize - 1) {
@@ -411,18 +507,18 @@ void LD2420Component::handle_simple_mode_(const uint8_t *inbuf, int len) {
411
507
  }
412
508
  outbuf[index] = '\0';
413
509
  if (index > 1)
414
- set_distance_(strtol(outbuf, &endptr, 10));
510
+ this->set_distance_(strtol(outbuf, &endptr, 10));
415
511
 
416
- if (get_mode_() == CMD_SYSTEM_MODE_SIMPLE) {
512
+ if (this->get_mode_() == CMD_SYSTEM_MODE_SIMPLE) {
417
513
  // Resonable refresh rate for home assistant database size health
418
- const int32_t current_millis = millis();
514
+ const int32_t current_millis = App.get_loop_component_start_time();
419
515
  if (current_millis - this->last_normal_periodic_millis < REFRESH_RATE_MS)
420
516
  return;
421
517
  this->last_normal_periodic_millis = current_millis;
422
518
  for (auto &listener : this->listeners_)
423
- listener->on_distance(get_distance_());
519
+ listener->on_distance(this->get_distance_());
424
520
  for (auto &listener : this->listeners_)
425
- listener->on_presence(get_presence_());
521
+ listener->on_presence(this->get_presence_());
426
522
  }
427
523
  }
428
524
 
@@ -433,10 +529,10 @@ void LD2420Component::handle_ack_data_(uint8_t *buffer, int len) {
433
529
  uint8_t data_element = 0;
434
530
  uint16_t data_pos = 0;
435
531
  if (this->cmd_reply_.length > CMD_MAX_BYTES) {
436
- ESP_LOGW(TAG, "LD2420 reply - received command reply frame is corrupt, length exceeds %d bytes.", CMD_MAX_BYTES);
532
+ ESP_LOGW(TAG, "Reply frame too long");
437
533
  return;
438
534
  } else if (this->cmd_reply_.length < 2) {
439
- ESP_LOGW(TAG, "LD2420 reply - received command frame is corrupt, length is less than 2 bytes.");
535
+ ESP_LOGW(TAG, "Command frame too short");
440
536
  return;
441
537
  }
442
538
  memcpy(&this->cmd_reply_.error, &buffer[CMD_ERROR_WORD], sizeof(this->cmd_reply_.error));
@@ -447,13 +543,13 @@ void LD2420Component::handle_ack_data_(uint8_t *buffer, int len) {
447
543
  this->cmd_reply_.ack = true;
448
544
  switch ((uint16_t) this->cmd_reply_.command) {
449
545
  case (CMD_ENABLE_CONF):
450
- ESP_LOGD(TAG, "LD2420 reply - set config enable: CMD = %2X %s", CMD_ENABLE_CONF, result);
546
+ ESP_LOGV(TAG, "Set config enable: CMD = %2X %s", CMD_ENABLE_CONF, result);
451
547
  break;
452
548
  case (CMD_DISABLE_CONF):
453
- ESP_LOGD(TAG, "LD2420 reply - set config disable: CMD = %2X %s", CMD_DISABLE_CONF, result);
549
+ ESP_LOGV(TAG, "Set config disable: CMD = %2X %s", CMD_DISABLE_CONF, result);
454
550
  break;
455
551
  case (CMD_READ_REGISTER):
456
- ESP_LOGD(TAG, "LD2420 reply - read register: CMD = %2X %s", CMD_READ_REGISTER, result);
552
+ ESP_LOGV(TAG, "Read register: CMD = %2X %s", CMD_READ_REGISTER, result);
457
553
  // TODO Read/Write register is not implemented yet, this will get flushed out to a proper header file
458
554
  data_pos = 0x0A;
459
555
  for (uint16_t index = 0; index < (CMD_REG_DATA_REPLY_SIZE * // NOLINT
@@ -465,13 +561,13 @@ void LD2420Component::handle_ack_data_(uint8_t *buffer, int len) {
465
561
  }
466
562
  break;
467
563
  case (CMD_WRITE_REGISTER):
468
- ESP_LOGD(TAG, "LD2420 reply - write register: CMD = %2X %s", CMD_WRITE_REGISTER, result);
564
+ ESP_LOGV(TAG, "Write register: CMD = %2X %s", CMD_WRITE_REGISTER, result);
469
565
  break;
470
566
  case (CMD_WRITE_ABD_PARAM):
471
- ESP_LOGD(TAG, "LD2420 reply - write gate parameter(s): %2X %s", CMD_WRITE_ABD_PARAM, result);
567
+ ESP_LOGV(TAG, "Write gate parameter(s): %2X %s", CMD_WRITE_ABD_PARAM, result);
472
568
  break;
473
569
  case (CMD_READ_ABD_PARAM):
474
- ESP_LOGD(TAG, "LD2420 reply - read gate parameter(s): %2X %s", CMD_READ_ABD_PARAM, result);
570
+ ESP_LOGV(TAG, "Read gate parameter(s): %2X %s", CMD_READ_ABD_PARAM, result);
475
571
  data_pos = CMD_ABD_DATA_REPLY_START;
476
572
  for (uint16_t index = 0; index < (CMD_ABD_DATA_REPLY_SIZE * // NOLINT
477
573
  ((buffer[CMD_FRAME_DATA_LENGTH] - 4) / CMD_ABD_DATA_REPLY_SIZE));
@@ -483,11 +579,11 @@ void LD2420Component::handle_ack_data_(uint8_t *buffer, int len) {
483
579
  }
484
580
  break;
485
581
  case (CMD_WRITE_SYS_PARAM):
486
- ESP_LOGD(TAG, "LD2420 reply - set system parameter(s): %2X %s", CMD_WRITE_SYS_PARAM, result);
582
+ ESP_LOGV(TAG, "Set system parameter(s): %2X %s", CMD_WRITE_SYS_PARAM, result);
487
583
  break;
488
584
  case (CMD_READ_VERSION):
489
- memcpy(this->ld2420_firmware_ver_, &buffer[12], buffer[10]);
490
- ESP_LOGD(TAG, "LD2420 reply - module firmware version: %7s %s", this->ld2420_firmware_ver_, result);
585
+ memcpy(this->firmware_ver_, &buffer[12], buffer[10]);
586
+ ESP_LOGV(TAG, "Firmware version: %7s %s", this->firmware_ver_, result);
491
587
  break;
492
588
  default:
493
589
  break;
@@ -533,7 +629,7 @@ int LD2420Component::send_cmd_from_array(CmdFrameT frame) {
533
629
  }
534
630
 
535
631
  while (!this->cmd_reply_.ack) {
536
- while (available()) {
632
+ while (this->available()) {
537
633
  this->readline_(read(), ack_buffer, sizeof(ack_buffer));
538
634
  }
539
635
  delay_microseconds_safe(1450);
@@ -548,7 +644,7 @@ int LD2420Component::send_cmd_from_array(CmdFrameT frame) {
548
644
  if (this->cmd_reply_.ack)
549
645
  retry = 0;
550
646
  if (this->cmd_reply_.error > 0)
551
- handle_cmd_error(error);
647
+ this->handle_cmd_error(error);
552
648
  }
553
649
  return error;
554
650
  }
@@ -563,7 +659,7 @@ uint8_t LD2420Component::set_config_mode(bool enable) {
563
659
  cmd_frame.data_length += sizeof(CMD_PROTOCOL_VER);
564
660
  }
565
661
  cmd_frame.footer = CMD_FRAME_FOOTER;
566
- ESP_LOGD(TAG, "Sending set config %s command: %2X", enable ? "enable" : "disable", cmd_frame.command);
662
+ ESP_LOGV(TAG, "Sending set config %s command: %2X", enable ? "enable" : "disable", cmd_frame.command);
567
663
  return this->send_cmd_from_array(cmd_frame);
568
664
  }
569
665
 
@@ -576,7 +672,7 @@ void LD2420Component::ld2420_restart() {
576
672
  cmd_frame.header = CMD_FRAME_HEADER;
577
673
  cmd_frame.command = CMD_RESTART;
578
674
  cmd_frame.footer = CMD_FRAME_FOOTER;
579
- ESP_LOGD(TAG, "Sending restart command: %2X", cmd_frame.command);
675
+ ESP_LOGV(TAG, "Sending restart command: %2X", cmd_frame.command);
580
676
  this->send_cmd_from_array(cmd_frame);
581
677
  }
582
678
 
@@ -588,7 +684,7 @@ void LD2420Component::get_reg_value_(uint16_t reg) {
588
684
  cmd_frame.data[1] = reg;
589
685
  cmd_frame.data_length += 2;
590
686
  cmd_frame.footer = CMD_FRAME_FOOTER;
591
- ESP_LOGD(TAG, "Sending read register %4X command: %2X", reg, cmd_frame.command);
687
+ ESP_LOGV(TAG, "Sending read register %4X command: %2X", reg, cmd_frame.command);
592
688
  this->send_cmd_from_array(cmd_frame);
593
689
  }
594
690
 
@@ -602,11 +698,11 @@ void LD2420Component::set_reg_value(uint16_t reg, uint16_t value) {
602
698
  memcpy(&cmd_frame.data[cmd_frame.data_length], &value, sizeof(CMD_REG_DATA_REPLY_SIZE));
603
699
  cmd_frame.data_length += 2;
604
700
  cmd_frame.footer = CMD_FRAME_FOOTER;
605
- ESP_LOGD(TAG, "Sending write register %4X command: %2X data = %4X", reg, cmd_frame.command, value);
701
+ ESP_LOGV(TAG, "Sending write register %4X command: %2X data = %4X", reg, cmd_frame.command, value);
606
702
  this->send_cmd_from_array(cmd_frame);
607
703
  }
608
704
 
609
- void LD2420Component::handle_cmd_error(uint8_t error) { ESP_LOGI(TAG, "Command failed: %s", ERR_MESSAGE[error]); }
705
+ void LD2420Component::handle_cmd_error(uint8_t error) { ESP_LOGE(TAG, "Command failed: %s", ERR_MESSAGE[error]); }
610
706
 
611
707
  int LD2420Component::get_gate_threshold_(uint8_t gate) {
612
708
  uint8_t error;
@@ -619,7 +715,7 @@ int LD2420Component::get_gate_threshold_(uint8_t gate) {
619
715
  memcpy(&cmd_frame.data[cmd_frame.data_length], &CMD_GATE_STILL_THRESH[gate], sizeof(CMD_GATE_STILL_THRESH[gate]));
620
716
  cmd_frame.data_length += 2;
621
717
  cmd_frame.footer = CMD_FRAME_FOOTER;
622
- ESP_LOGD(TAG, "Sending read gate %d high/low theshold command: %2X", gate, cmd_frame.command);
718
+ ESP_LOGV(TAG, "Sending read gate %d high/low threshold command: %2X", gate, cmd_frame.command);
623
719
  error = this->send_cmd_from_array(cmd_frame);
624
720
  if (error == 0) {
625
721
  this->current_config.move_thresh[gate] = cmd_reply_.data[0];
@@ -644,7 +740,7 @@ int LD2420Component::get_min_max_distances_timeout_() {
644
740
  sizeof(CMD_TIMEOUT_REG)); // Register: global delay time
645
741
  cmd_frame.data_length += sizeof(CMD_TIMEOUT_REG);
646
742
  cmd_frame.footer = CMD_FRAME_FOOTER;
647
- ESP_LOGD(TAG, "Sending read gate min max and timeout command: %2X", cmd_frame.command);
743
+ ESP_LOGV(TAG, "Sending read gate min max and timeout command: %2X", cmd_frame.command);
648
744
  error = this->send_cmd_from_array(cmd_frame);
649
745
  if (error == 0) {
650
746
  this->current_config.min_gate = (uint16_t) cmd_reply_.data[0];
@@ -667,9 +763,9 @@ void LD2420Component::set_system_mode(uint16_t mode) {
667
763
  memcpy(&cmd_frame.data[cmd_frame.data_length], &unknown_parm, sizeof(unknown_parm));
668
764
  cmd_frame.data_length += sizeof(unknown_parm);
669
765
  cmd_frame.footer = CMD_FRAME_FOOTER;
670
- ESP_LOGD(TAG, "Sending write system mode command: %2X", cmd_frame.command);
766
+ ESP_LOGV(TAG, "Sending write system mode command: %2X", cmd_frame.command);
671
767
  if (this->send_cmd_from_array(cmd_frame) == 0)
672
- set_mode_(mode);
768
+ this->set_mode_(mode);
673
769
  }
674
770
 
675
771
  void LD2420Component::get_firmware_version_() {
@@ -679,7 +775,7 @@ void LD2420Component::get_firmware_version_() {
679
775
  cmd_frame.command = CMD_READ_VERSION;
680
776
  cmd_frame.footer = CMD_FRAME_FOOTER;
681
777
 
682
- ESP_LOGD(TAG, "Sending read firmware version command: %2X", cmd_frame.command);
778
+ ESP_LOGV(TAG, "Sending read firmware version command: %2X", cmd_frame.command);
683
779
  this->send_cmd_from_array(cmd_frame);
684
780
  }
685
781
 
@@ -712,7 +808,7 @@ void LD2420Component::set_min_max_distances_timeout(uint32_t max_gate_distance,
712
808
  cmd_frame.data_length += sizeof(timeout);
713
809
  cmd_frame.footer = CMD_FRAME_FOOTER;
714
810
 
715
- ESP_LOGD(TAG, "Sending write gate min max and timeout command: %2X", cmd_frame.command);
811
+ ESP_LOGV(TAG, "Sending write gate min max and timeout command: %2X", cmd_frame.command);
716
812
  this->send_cmd_from_array(cmd_frame);
717
813
  }
718
814
 
@@ -738,7 +834,7 @@ void LD2420Component::set_gate_threshold(uint8_t gate) {
738
834
  sizeof(this->new_config.still_thresh[gate]));
739
835
  cmd_frame.data_length += sizeof(this->new_config.still_thresh[gate]);
740
836
  cmd_frame.footer = CMD_FRAME_FOOTER;
741
- ESP_LOGD(TAG, "Sending set gate %4X sensitivity command: %2X", gate, cmd_frame.command);
837
+ ESP_LOGV(TAG, "Sending set gate %4X sensitivity command: %2X", gate, cmd_frame.command);
742
838
  this->send_cmd_from_array(cmd_frame);
743
839
  }
744
840
 
@@ -756,7 +852,7 @@ void LD2420Component::init_gate_config_numbers() {
756
852
  this->gate_move_sensitivity_factor_number_->publish_state(this->gate_move_sensitivity_factor);
757
853
  if (this->gate_still_sensitivity_factor_number_ != nullptr)
758
854
  this->gate_still_sensitivity_factor_number_->publish_state(this->gate_still_sensitivity_factor);
759
- for (uint8_t gate = 0; gate < LD2420_TOTAL_GATES; gate++) {
855
+ for (uint8_t gate = 0; gate < TOTAL_GATES; gate++) {
760
856
  if (this->gate_still_threshold_numbers_[gate] != nullptr) {
761
857
  this->gate_still_threshold_numbers_[gate]->publish_state(
762
858
  static_cast<uint16_t>(this->current_config.still_thresh[gate]));