esphome 2025.5.2__py3-none-any.whl → 2025.6.0b2__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 (746) hide show
  1. esphome/__main__.py +20 -14
  2. esphome/components/a4988/a4988.cpp +1 -1
  3. esphome/components/absolute_humidity/absolute_humidity.cpp +6 -4
  4. esphome/components/ac_dimmer/ac_dimmer.cpp +4 -2
  5. esphome/components/adc/adc_sensor_esp32.cpp +5 -3
  6. esphome/components/adc/adc_sensor_esp8266.cpp +5 -3
  7. esphome/components/adc/adc_sensor_libretiny.cpp +5 -3
  8. esphome/components/adc/adc_sensor_rp2040.cpp +5 -3
  9. esphome/components/adc128s102/adc128s102.cpp +1 -1
  10. esphome/components/ade7880/ade7880.cpp +28 -17
  11. esphome/components/ade7953_base/ade7953_base.cpp +12 -9
  12. esphome/components/ade7953_i2c/ade7953_i2c.cpp +1 -1
  13. esphome/components/ade7953_spi/ade7953_spi.cpp +1 -1
  14. esphome/components/ads1115/ads1115.cpp +3 -5
  15. esphome/components/ads1118/ads1118.cpp +2 -1
  16. esphome/components/ags10/ags10.cpp +3 -2
  17. esphome/components/aht10/aht10.cpp +27 -29
  18. esphome/components/aic3204/aic3204.cpp +2 -2
  19. esphome/components/alarm_control_panel/__init__.py +1 -0
  20. esphome/components/am2315c/am2315c.cpp +2 -2
  21. esphome/components/am2320/am2320.cpp +2 -2
  22. esphome/components/am43/am43_base.h +1 -1
  23. esphome/components/am43/cover/am43_cover.cpp +4 -2
  24. esphome/components/analog_threshold/analog_threshold_binary_sensor.cpp +4 -2
  25. esphome/components/apds9306/apds9306.cpp +8 -5
  26. esphome/components/apds9960/apds9960.cpp +2 -2
  27. esphome/components/api/__init__.py +5 -0
  28. esphome/components/api/api_connection.cpp +753 -379
  29. esphome/components/api/api_connection.h +341 -283
  30. esphome/components/api/api_frame_helper.cpp +349 -344
  31. esphome/components/api/api_frame_helper.h +121 -94
  32. esphome/components/api/api_pb2.cpp +3 -0
  33. esphome/components/api/api_pb2.h +702 -227
  34. esphome/components/api/api_pb2_service.cpp +12 -688
  35. esphome/components/api/api_pb2_service.h +53 -207
  36. esphome/components/api/api_server.cpp +71 -29
  37. esphome/components/api/api_server.h +9 -0
  38. esphome/components/api/client.py +5 -4
  39. esphome/components/api/homeassistant_service.h +1 -1
  40. esphome/components/api/list_entities.cpp +1 -1
  41. esphome/components/api/proto.cpp +1 -0
  42. esphome/components/api/proto.h +5 -4
  43. esphome/components/api/subscribe_state.cpp +8 -16
  44. esphome/components/as3935/as3935.cpp +3 -3
  45. esphome/components/as5600/as5600.cpp +9 -7
  46. esphome/components/as7341/as7341.cpp +7 -5
  47. esphome/components/at581x/at581x.cpp +13 -10
  48. esphome/components/atm90e26/atm90e26.cpp +2 -2
  49. esphome/components/atm90e32/atm90e32.cpp +3 -3
  50. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +5 -3
  51. esphome/components/bang_bang/bang_bang_climate.cpp +8 -5
  52. esphome/components/bedjet/bedjet_hub.cpp +6 -4
  53. esphome/components/beken_spi_led_strip/led_strip.cpp +11 -7
  54. esphome/components/bh1750/bh1750.cpp +2 -2
  55. esphome/components/binary_sensor/__init__.py +1 -0
  56. esphome/components/binary_sensor/automation.cpp +1 -2
  57. esphome/components/bl0906/bl0906.cpp +1 -1
  58. esphome/components/bl0942/bl0942.cpp +11 -8
  59. esphome/components/bl0942/sensor.py +1 -1
  60. esphome/components/ble_client/__init__.py +5 -1
  61. esphome/components/ble_client/output/ble_binary_output.cpp +6 -3
  62. esphome/components/ble_client/sensor/ble_sensor.cpp +9 -6
  63. esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +8 -5
  64. esphome/components/bluetooth_proxy/__init__.py +5 -1
  65. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +5 -5
  66. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +18 -16
  67. esphome/components/bluetooth_proxy/bluetooth_proxy.h +1 -1
  68. esphome/components/bme280_base/bme280_base.cpp +5 -6
  69. esphome/components/bme680/bme680.cpp +3 -3
  70. esphome/components/bme680/sensor.py +2 -2
  71. esphome/components/bme680_bsec/bme680_bsec.cpp +11 -7
  72. esphome/components/bme680_bsec/sensor.py +7 -3
  73. esphome/components/bme68x_bsec2/__init__.py +6 -5
  74. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +17 -13
  75. esphome/components/bme68x_bsec2/sensor.py +4 -4
  76. esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +1 -0
  77. esphome/components/bmi160/bmi160.cpp +11 -11
  78. esphome/components/bmp085/bmp085.cpp +2 -2
  79. esphome/components/bmp280_base/bmp280_base.cpp +3 -3
  80. esphome/components/bmp3xx_base/bmp3xx_base.cpp +13 -13
  81. esphome/components/bmp581/bmp581.cpp +33 -27
  82. esphome/components/bp1658cj/bp1658cj.cpp +5 -3
  83. esphome/components/bp5758d/bp5758d.cpp +1 -1
  84. esphome/components/button/__init__.py +1 -0
  85. esphome/components/canbus/canbus.cpp +1 -1
  86. esphome/components/cap1188/cap1188.cpp +6 -4
  87. esphome/components/captive_portal/captive_portal.cpp +1 -1
  88. esphome/components/ccs811/ccs811.cpp +3 -2
  89. esphome/components/cd74hc4067/cd74hc4067.cpp +1 -1
  90. esphome/components/ch422g/ch422g.cpp +2 -2
  91. esphome/components/chsc6x/chsc6x_touchscreen.cpp +6 -4
  92. esphome/components/climate/__init__.py +1 -0
  93. esphome/components/climate/climate.cpp +12 -7
  94. esphome/components/climate/climate.h +1 -1
  95. esphome/components/climate_ir/climate_ir.cpp +7 -4
  96. esphome/components/cm1106/__init__.py +1 -0
  97. esphome/components/cm1106/cm1106.cpp +112 -0
  98. esphome/components/cm1106/cm1106.h +40 -0
  99. esphome/components/cm1106/sensor.py +72 -0
  100. esphome/components/const/__init__.py +1 -0
  101. esphome/components/cover/__init__.py +1 -0
  102. esphome/components/cs5460a/cs5460a.cpp +16 -11
  103. esphome/components/cse7761/cse7761.cpp +2 -2
  104. esphome/components/cse7766/cse7766.cpp +0 -5
  105. esphome/components/cse7766/cse7766.h +5 -1
  106. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +1 -1
  107. esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +6 -3
  108. esphome/components/current_based/current_based_cover.cpp +4 -2
  109. esphome/components/dac7678/dac7678_output.cpp +4 -4
  110. esphome/components/dallas_temp/dallas_temp.cpp +2 -3
  111. esphome/components/daly_bms/daly_bms.cpp +2 -1
  112. esphome/components/dashboard_import/__init__.py +1 -2
  113. esphome/components/datetime/__init__.py +3 -1
  114. esphome/components/datetime/date_entity.cpp +5 -5
  115. esphome/components/datetime/datetime_base.h +0 -5
  116. esphome/components/datetime/datetime_entity.cpp +8 -8
  117. esphome/components/datetime/time_entity.cpp +4 -4
  118. esphome/components/debug/debug_component.cpp +1 -1
  119. esphome/components/debug/debug_component.h +1 -1
  120. esphome/components/debug/debug_esp32.cpp +4 -2
  121. esphome/components/deep_sleep/deep_sleep_component.cpp +11 -5
  122. esphome/components/deep_sleep/deep_sleep_esp32.cpp +7 -5
  123. esphome/components/demo/__init__.py +206 -0
  124. esphome/components/demo/demo_alarm_control_panel.h +65 -0
  125. esphome/components/demo/demo_button.h +15 -0
  126. esphome/components/demo/demo_date.h +34 -0
  127. esphome/components/demo/demo_datetime.h +40 -0
  128. esphome/components/demo/demo_lock.h +17 -0
  129. esphome/components/demo/demo_select.h +15 -0
  130. esphome/components/demo/demo_text.h +18 -0
  131. esphome/components/demo/demo_time.h +34 -0
  132. esphome/components/demo/demo_valve.h +54 -0
  133. esphome/components/dfrobot_sen0395/commands.cpp +3 -3
  134. esphome/components/dht/dht.cpp +29 -50
  135. esphome/components/dht12/dht12.cpp +2 -2
  136. esphome/components/display/display.h +5 -3
  137. esphome/components/dps310/dps310.cpp +7 -5
  138. esphome/components/ds1307/ds1307.cpp +2 -2
  139. esphome/components/dsmr/dsmr.cpp +5 -3
  140. esphome/components/duty_cycle/duty_cycle_sensor.cpp +2 -2
  141. esphome/components/duty_time/duty_time_sensor.cpp +5 -3
  142. esphome/components/ee895/ee895.cpp +3 -3
  143. esphome/components/ektf2232/touchscreen/ektf2232.cpp +1 -1
  144. esphome/components/emc2101/emc2101.cpp +11 -9
  145. esphome/components/ens160_base/ens160_base.cpp +2 -2
  146. esphome/components/ens210/ens210.cpp +2 -2
  147. esphome/components/es7210/es7210.cpp +6 -4
  148. esphome/components/es7243e/es7243e.cpp +1 -1
  149. esphome/components/es8156/es8156.cpp +1 -1
  150. esphome/components/es8311/es8311.cpp +8 -6
  151. esphome/components/es8388/__init__.py +0 -0
  152. esphome/components/es8388/audio_dac.py +26 -0
  153. esphome/components/es8388/es8388.cpp +289 -0
  154. esphome/components/es8388/es8388.h +81 -0
  155. esphome/components/es8388/es8388_const.h +83 -0
  156. esphome/components/es8388/select/__init__.py +47 -0
  157. esphome/components/es8388/select/adc_input_mic_select.cpp +12 -0
  158. esphome/components/es8388/select/adc_input_mic_select.h +15 -0
  159. esphome/components/es8388/select/dac_output_select.cpp +12 -0
  160. esphome/components/es8388/select/dac_output_select.h +15 -0
  161. esphome/components/esp32/__init__.py +118 -23
  162. esphome/components/esp32/boards.py +208 -125
  163. esphome/components/esp32/const.py +6 -0
  164. esphome/components/esp32/gpio.py +14 -1
  165. esphome/components/esp32/gpio_esp32_c5.py +45 -0
  166. esphome/components/esp32/gpio_esp32_p4.py +43 -0
  167. esphome/components/esp32/preferences.cpp +7 -7
  168. esphome/components/esp32_ble/__init__.py +115 -0
  169. esphome/components/esp32_ble/ble.cpp +101 -54
  170. esphome/components/esp32_ble/ble.h +24 -5
  171. esphome/components/esp32_ble/ble_event.h +172 -32
  172. esphome/components/esp32_ble/ble_scan_result.h +24 -0
  173. esphome/components/esp32_ble/ble_uuid.h +1 -1
  174. esphome/components/esp32_ble/queue.h +53 -27
  175. esphome/components/esp32_ble_client/ble_client_base.cpp +4 -2
  176. esphome/components/esp32_ble_server/__init__.py +4 -1
  177. esphome/components/esp32_ble_server/ble_characteristic.cpp +1 -0
  178. esphome/components/esp32_ble_server/ble_server.h +0 -1
  179. esphome/components/esp32_ble_tracker/__init__.py +7 -2
  180. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +107 -75
  181. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +16 -16
  182. esphome/components/esp32_camera/esp32_camera.cpp +35 -27
  183. esphome/components/esp32_camera_web_server/camera_web_server.cpp +4 -2
  184. esphome/components/esp32_dac/esp32_dac.cpp +2 -2
  185. esphome/components/esp32_improv/__init__.py +5 -1
  186. esphome/components/esp32_improv/esp32_improv_component.cpp +2 -2
  187. esphome/components/esp32_rmt_led_strip/led_strip.cpp +11 -7
  188. esphome/components/esp32_rmt_led_strip/light.py +5 -1
  189. esphome/components/esp32_touch/esp32_touch.cpp +12 -8
  190. esphome/components/esp8266/preferences.cpp +6 -6
  191. esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
  192. esphome/components/esp_ldo/__init__.py +91 -0
  193. esphome/components/esp_ldo/esp_ldo.cpp +43 -0
  194. esphome/components/esp_ldo/esp_ldo.h +43 -0
  195. esphome/components/esphome/ota/ota_esphome.cpp +15 -8
  196. esphome/components/ethernet/ethernet_component.cpp +38 -26
  197. esphome/components/ethernet/ethernet_component.h +1 -1
  198. esphome/components/event/__init__.py +1 -0
  199. esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
  200. esphome/components/ezo/ezo.cpp +1 -1
  201. esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
  202. esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
  203. esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
  204. esphome/components/fan/__init__.py +1 -0
  205. esphome/components/fan/fan.cpp +30 -19
  206. esphome/components/fastled_base/fastled_light.cpp +7 -5
  207. esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
  208. esphome/components/fs3000/fs3000.cpp +1 -1
  209. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
  210. esphome/components/ft63x6/ft63x6.cpp +5 -3
  211. esphome/components/gcja5/gcja5.cpp +0 -12
  212. esphome/components/gcja5/gcja5.h +8 -3
  213. esphome/components/gdk101/gdk101.cpp +2 -2
  214. esphome/components/globals/globals_component.h +13 -10
  215. esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
  216. esphome/components/gp8403/gp8403.cpp +4 -2
  217. esphome/components/gp8403/output/gp8403_output.cpp +4 -2
  218. esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
  219. esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
  220. esphome/components/gpio/switch/gpio_switch.cpp +1 -1
  221. esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
  222. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
  223. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
  224. esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
  225. esphome/components/growatt_solar/growatt_solar.cpp +6 -3
  226. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
  227. esphome/components/haier/haier_base.cpp +2 -2
  228. esphome/components/haier/hon_climate.cpp +13 -6
  229. esphome/components/havells_solar/havells_solar.cpp +5 -2
  230. esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
  231. esphome/components/hdc1080/hdc1080.cpp +2 -2
  232. esphome/components/he60r/he60r.cpp +4 -2
  233. esphome/components/hlw8012/hlw8012.cpp +6 -4
  234. esphome/components/hm3301/hm3301.cpp +2 -2
  235. esphome/components/hmc5883l/hmc5883l.cpp +2 -2
  236. esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
  237. esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
  238. esphome/components/honeywellabp/honeywellabp.cpp +4 -2
  239. esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
  240. esphome/components/hte501/hte501.cpp +3 -2
  241. esphome/components/http_request/__init__.py +2 -2
  242. esphome/components/http_request/http_request.cpp +7 -5
  243. esphome/components/http_request/http_request_idf.cpp +4 -2
  244. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  245. esphome/components/htu21d/htu21d.cpp +2 -2
  246. esphome/components/htu31d/htu31d.cpp +2 -2
  247. esphome/components/hx711/hx711.cpp +2 -2
  248. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
  249. esphome/components/hyt271/hyt271.cpp +2 -2
  250. esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
  251. esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
  252. esphome/components/i2s_audio/__init__.py +2 -0
  253. esphome/components/i2s_audio/i2s_audio.cpp +3 -4
  254. esphome/components/i2s_audio/i2s_audio.h +1 -1
  255. esphome/components/i2s_audio/media_player/__init__.py +1 -1
  256. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
  257. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +13 -10
  258. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +1 -1
  259. esphome/components/iaqcore/iaqcore.cpp +3 -3
  260. esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
  261. esphome/components/ili9xxx/ili9xxx_display.h +1 -1
  262. esphome/components/image/image.cpp +1 -0
  263. esphome/components/ina219/ina219.cpp +2 -2
  264. esphome/components/ina226/ina226.cpp +8 -5
  265. esphome/components/ina260/ina260.cpp +1 -1
  266. esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
  267. esphome/components/ina3221/ina3221.cpp +2 -2
  268. esphome/components/inkplate6/display.py +12 -2
  269. esphome/components/inkplate6/inkplate.cpp +13 -9
  270. esphome/components/inkplate6/inkplate.h +7 -6
  271. esphome/components/integration/integration_sensor.cpp +1 -1
  272. esphome/components/internal_temperature/internal_temperature.cpp +4 -4
  273. esphome/components/json/json_util.cpp +4 -5
  274. esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
  275. esphome/components/key_collector/key_collector.cpp +4 -2
  276. esphome/components/kmeteriso/kmeteriso.cpp +4 -4
  277. esphome/components/kuntze/kuntze.cpp +4 -2
  278. esphome/components/lc709203f/__init__.py +1 -0
  279. esphome/components/lc709203f/lc709203f.cpp +299 -0
  280. esphome/components/lc709203f/lc709203f.h +55 -0
  281. esphome/components/lc709203f/sensor.py +93 -0
  282. esphome/components/lcd_base/lcd_display.cpp +2 -2
  283. esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
  284. esphome/components/lcd_menu/lcd_menu.cpp +6 -4
  285. esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
  286. esphome/components/ld2410/ld2410.cpp +6 -7
  287. esphome/components/ld2420/ld2420.cpp +9 -7
  288. esphome/components/ld2450/ld2450.cpp +6 -4
  289. esphome/components/ld2450/sensor.py +2 -2
  290. esphome/components/ledc/ledc_output.cpp +32 -28
  291. esphome/components/libretiny/const.py +1 -1
  292. esphome/components/libretiny/preferences.cpp +6 -7
  293. esphome/components/light/__init__.py +2 -1
  294. esphome/components/light/esp_hsv_color.h +1 -1
  295. esphome/components/light/light_state.cpp +9 -5
  296. esphome/components/light/light_transformer.h +1 -1
  297. esphome/components/lightwaverf/LwTx.cpp +1 -1
  298. esphome/components/lightwaverf/lightwaverf.cpp +1 -1
  299. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
  300. esphome/components/lock/__init__.py +1 -0
  301. esphome/components/lock/lock.h +1 -1
  302. esphome/components/logger/__init__.py +6 -0
  303. esphome/components/logger/logger.cpp +11 -20
  304. esphome/components/logger/logger.h +1 -2
  305. esphome/components/logger/logger_esp32.cpp +5 -5
  306. esphome/components/ltr390/ltr390.cpp +8 -5
  307. esphome/components/ltr501/ltr501.cpp +19 -14
  308. esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
  309. esphome/components/lvgl/__init__.py +2 -2
  310. esphome/components/lvgl/automation.py +5 -4
  311. esphome/components/lvgl/defines.py +0 -2
  312. esphome/components/lvgl/lv_validation.py +1 -3
  313. esphome/components/lvgl/lvcode.py +7 -8
  314. esphome/components/lvgl/lvgl_esphome.cpp +26 -10
  315. esphome/components/lvgl/schemas.py +22 -23
  316. esphome/components/lvgl/trigger.py +8 -3
  317. esphome/components/lvgl/widgets/__init__.py +2 -2
  318. esphome/components/lvgl/widgets/canvas.py +9 -3
  319. esphome/components/lvgl/widgets/line.py +2 -1
  320. esphome/components/lvgl/widgets/tabview.py +7 -0
  321. esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
  322. esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
  323. esphome/components/max17043/max17043.cpp +2 -2
  324. esphome/components/max31855/max31855.cpp +2 -1
  325. esphome/components/max31856/max31856.cpp +9 -11
  326. esphome/components/max31865/max31865.cpp +6 -4
  327. esphome/components/max44009/max44009.cpp +2 -2
  328. esphome/components/max6675/max6675.cpp +1 -1
  329. esphome/components/max6956/max6956.cpp +5 -3
  330. esphome/components/max7219/max7219.cpp +8 -6
  331. esphome/components/max7219digit/automation.h +52 -0
  332. esphome/components/max7219digit/display.py +93 -1
  333. esphome/components/max7219digit/max7219digit.cpp +16 -13
  334. esphome/components/max9611/max9611.cpp +9 -6
  335. esphome/components/mcp23008/mcp23008.cpp +1 -1
  336. esphome/components/mcp23016/mcp23016.cpp +1 -1
  337. esphome/components/mcp23017/mcp23017.cpp +1 -1
  338. esphome/components/mcp23s08/mcp23s08.cpp +1 -1
  339. esphome/components/mcp23s17/mcp23s17.cpp +1 -1
  340. esphome/components/mcp3008/mcp3008.cpp +1 -1
  341. esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
  342. esphome/components/mcp3204/mcp3204.cpp +1 -1
  343. esphome/components/mcp4461/mcp4461.cpp +2 -2
  344. esphome/components/mcp4725/mcp4725.cpp +2 -2
  345. esphome/components/mcp4728/mcp4728.cpp +2 -2
  346. esphome/components/mcp9600/mcp9600.cpp +1 -1
  347. esphome/components/mcp9808/mcp9808.cpp +4 -4
  348. esphome/components/mdns/mdns_component.cpp +8 -2
  349. esphome/components/mdns/mdns_component.h +3 -1
  350. esphome/components/mdns/mdns_esp32.cpp +2 -2
  351. esphome/components/media_player/__init__.py +1 -0
  352. esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
  353. esphome/components/micro_wake_word/streaming_model.cpp +10 -6
  354. esphome/components/micronova/micronova.h +2 -2
  355. esphome/components/mics_4514/mics_4514.cpp +2 -2
  356. esphome/components/midea/air_conditioner.cpp +7 -5
  357. esphome/components/midea_ir/midea_ir.cpp +1 -1
  358. esphome/components/mipi_spi/mipi_spi.cpp +24 -15
  359. esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
  360. esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
  361. esphome/components/mlx90614/mlx90614.cpp +4 -3
  362. esphome/components/mmc5603/mmc5603.cpp +2 -2
  363. esphome/components/mmc5983/mmc5983.cpp +1 -1
  364. esphome/components/modbus/modbus.cpp +7 -5
  365. esphome/components/modbus_controller/modbus_controller.cpp +6 -4
  366. esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
  367. esphome/components/modbus_controller/switch/__init__.py +6 -2
  368. esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
  369. esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
  370. esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
  371. esphome/components/mpr121/mpr121.cpp +2 -2
  372. esphome/components/mpu6050/mpu6050.cpp +6 -6
  373. esphome/components/mpu6886/mpu6886.cpp +6 -6
  374. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
  375. esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
  376. esphome/components/mqtt/mqtt_client.cpp +31 -24
  377. esphome/components/mqtt/mqtt_component.cpp +3 -3
  378. esphome/components/mqtt/mqtt_cover.cpp +8 -4
  379. esphome/components/mqtt/mqtt_fan.cpp +12 -6
  380. esphome/components/mqtt/mqtt_valve.cpp +4 -2
  381. esphome/components/ms5611/ms5611.cpp +2 -2
  382. esphome/components/ms8607/ms8607.cpp +2 -2
  383. esphome/components/msa3xx/msa3xx.cpp +16 -12
  384. esphome/components/my9231/my9231.cpp +7 -5
  385. esphome/components/nau7802/nau7802.cpp +6 -4
  386. esphome/components/neopixelbus/neopixelbus_light.h +2 -2
  387. esphome/components/network/ip_address.h +1 -1
  388. esphome/components/network/util.cpp +13 -0
  389. esphome/components/nextion/base_component.py +2 -0
  390. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +3 -4
  391. esphome/components/nextion/display.py +34 -22
  392. esphome/components/nextion/nextion.cpp +182 -143
  393. esphome/components/nextion/nextion.h +36 -0
  394. esphome/components/nextion/nextion_commands.cpp +3 -3
  395. esphome/components/nextion/nextion_upload_arduino.cpp +69 -69
  396. esphome/components/nextion/nextion_upload_idf.cpp +79 -80
  397. esphome/components/nextion/sensor/nextion_sensor.cpp +5 -5
  398. esphome/components/nextion/switch/nextion_switch.cpp +2 -2
  399. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +3 -3
  400. esphome/components/nfc/nci_message.h +1 -1
  401. esphome/components/nfc/ndef_record.h +1 -1
  402. esphome/components/nfc/ndef_record_text.h +1 -1
  403. esphome/components/nfc/ndef_record_uri.h +1 -1
  404. esphome/components/nfc/nfc.h +1 -1
  405. esphome/components/nfc/nfc_tag.h +1 -1
  406. esphome/components/noblex/noblex.cpp +1 -1
  407. esphome/components/npi19/npi19.cpp +5 -7
  408. esphome/components/number/__init__.py +11 -0
  409. esphome/components/number/number.cpp +1 -1
  410. esphome/components/number/number.h +0 -4
  411. esphome/components/online_image/__init__.py +13 -1
  412. esphome/components/online_image/online_image.cpp +26 -4
  413. esphome/components/online_image/online_image.h +21 -4
  414. esphome/components/opentherm/generate.py +3 -3
  415. esphome/components/opentherm/hub.cpp +11 -7
  416. esphome/components/opentherm/number/number.cpp +5 -3
  417. esphome/components/opentherm/opentherm.h +1 -1
  418. esphome/components/opentherm/schema.py +13 -13
  419. esphome/components/opentherm/validate.py +1 -1
  420. esphome/components/openthread/__init__.py +146 -0
  421. esphome/components/openthread/const.py +10 -0
  422. esphome/components/openthread/openthread.cpp +206 -0
  423. esphome/components/openthread/openthread.h +68 -0
  424. esphome/components/openthread/openthread_esp.cpp +164 -0
  425. esphome/components/openthread/tlv.py +58 -0
  426. esphome/components/openthread_info/__init__.py +0 -0
  427. esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
  428. esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
  429. esphome/components/openthread_info/text_sensor.py +105 -0
  430. esphome/components/output/float_output.cpp +1 -1
  431. esphome/components/output/switch/output_switch.cpp +1 -1
  432. esphome/components/packet_transport/packet_transport.cpp +6 -4
  433. esphome/components/pca6416a/pca6416a.cpp +2 -2
  434. esphome/components/pca9554/pca9554.cpp +6 -4
  435. esphome/components/pca9685/pca9685_output.cpp +12 -8
  436. esphome/components/pcd8544/pcd_8544.cpp +1 -1
  437. esphome/components/pcf85063/pcf85063.cpp +2 -2
  438. esphome/components/pcf8563/pcf8563.cpp +2 -2
  439. esphome/components/pcf8574/pcf8574.cpp +2 -2
  440. esphome/components/pid/pid_climate.cpp +8 -5
  441. esphome/components/pid/pid_climate.h +1 -1
  442. esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
  443. esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
  444. esphome/components/pipsolar/pipsolar.cpp +3 -3
  445. esphome/components/pm1006/pm1006.cpp +3 -7
  446. esphome/components/pm1006/pm1006.h +4 -1
  447. esphome/components/pm2005/pm2005.cpp +12 -13
  448. esphome/components/pm2005/sensor.py +1 -1
  449. esphome/components/pmsa003i/pmsa003i.cpp +2 -2
  450. esphome/components/pmsx003/pmsx003.cpp +0 -4
  451. esphome/components/pmsx003/pmsx003.h +5 -2
  452. esphome/components/pmwcs3/pmwcs3.cpp +9 -13
  453. esphome/components/pmwcs3/pmwcs3.h +0 -1
  454. esphome/components/pn532/pn532.cpp +7 -7
  455. esphome/components/pn532/pn532.h +1 -1
  456. esphome/components/pn532_spi/pn532_spi.cpp +1 -1
  457. esphome/components/pn7150/pn7150.cpp +4 -4
  458. esphome/components/pn7160/pn7160.cpp +4 -4
  459. esphome/components/power_supply/power_supply.cpp +6 -4
  460. esphome/components/power_supply/power_supply.h +1 -1
  461. esphome/components/prometheus/__init__.py +0 -1
  462. esphome/components/psram/__init__.py +59 -35
  463. esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
  464. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
  465. esphome/components/pylontech/pylontech.cpp +2 -2
  466. esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
  467. esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
  468. esphome/components/pzemac/pzemac.cpp +4 -2
  469. esphome/components/pzemdc/pzemdc.cpp +4 -2
  470. esphome/components/qmc5883l/qmc5883l.cpp +2 -2
  471. esphome/components/qmp6988/qmp6988.cpp +2 -2
  472. esphome/components/qmp6988/qmp6988.h +1 -1
  473. esphome/components/qr_code/qr_code.cpp +5 -3
  474. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  475. esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
  476. esphome/components/rc522/rc522.cpp +5 -5
  477. esphome/components/rdm6300/rdm6300.cpp +1 -0
  478. esphome/components/remote_receiver/__init__.py +10 -2
  479. esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
  480. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
  481. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
  482. esphome/components/remote_transmitter/__init__.py +10 -2
  483. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
  484. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
  485. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
  486. esphome/components/resistance/resistance_sensor.cpp +6 -3
  487. esphome/components/restart/button/restart_button.cpp +1 -1
  488. esphome/components/restart/switch/restart_switch.cpp +1 -1
  489. esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
  490. esphome/components/rp2040/__init__.py +7 -0
  491. esphome/components/rp2040/core.cpp +8 -1
  492. esphome/components/rp2040/preferences.cpp +3 -3
  493. esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
  494. esphome/components/rp2040_pio_led_strip/light.py +1 -1
  495. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
  496. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
  497. esphome/components/rtttl/rtttl.cpp +11 -9
  498. esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
  499. esphome/components/safe_mode/safe_mode.cpp +9 -8
  500. esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
  501. esphome/components/scd30/scd30.cpp +11 -8
  502. esphome/components/scd4x/scd4x.cpp +12 -8
  503. esphome/components/sdl/display.py +40 -0
  504. esphome/components/sdl/sdl_esphome.cpp +2 -2
  505. esphome/components/sdl/sdl_esphome.h +8 -0
  506. esphome/components/sdm_meter/sdm_meter.cpp +5 -2
  507. esphome/components/sdp3x/sdp3x.cpp +11 -11
  508. esphome/components/sds011/sds011.cpp +5 -6
  509. esphome/components/sds011/sds011.h +4 -1
  510. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
  511. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
  512. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
  513. esphome/components/selec_meter/selec_meter.cpp +5 -2
  514. esphome/components/select/__init__.py +1 -0
  515. esphome/components/select/select.cpp +1 -1
  516. esphome/components/select/select.h +0 -4
  517. esphome/components/sen0321/sen0321.cpp +2 -2
  518. esphome/components/sen21231/sen21231.cpp +1 -1
  519. esphome/components/sen5x/sen5x.cpp +10 -7
  520. esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
  521. esphome/components/sensirion_common/i2c_sensirion.h +1 -0
  522. esphome/components/sensor/__init__.py +11 -1
  523. esphome/components/sensor/filter.h +1 -1
  524. esphome/components/sensor/sensor.cpp +8 -4
  525. esphome/components/sensor/sensor.h +12 -11
  526. esphome/components/servo/servo.cpp +12 -9
  527. esphome/components/servo/servo.h +1 -1
  528. esphome/components/sfa30/sfa30.cpp +1 -1
  529. esphome/components/sgp30/sgp30.cpp +10 -8
  530. esphome/components/sgp4x/sgp4x.cpp +49 -61
  531. esphome/components/sgp4x/sgp4x.h +0 -1
  532. esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
  533. esphome/components/sht3xd/sht3xd.cpp +1 -1
  534. esphome/components/sht4x/sht4x.cpp +2 -2
  535. esphome/components/shtcx/shtcx.cpp +13 -16
  536. esphome/components/shutdown/button/shutdown_button.cpp +1 -1
  537. esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
  538. esphome/components/sim800l/sim800l.cpp +2 -2
  539. esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
  540. esphome/components/sm16716/sm16716.cpp +1 -1
  541. esphome/components/sm2135/sm2135.cpp +1 -1
  542. esphome/components/sm2235/sm2235.cpp +5 -3
  543. esphome/components/sm2335/sm2335.cpp +5 -3
  544. esphome/components/sml/sml.cpp +1 -1
  545. esphome/components/sn74hc165/sn74hc165.cpp +1 -2
  546. esphome/components/sn74hc595/sn74hc595.cpp +1 -2
  547. esphome/components/sntp/sntp_component.cpp +1 -1
  548. esphome/components/socket/__init__.py +2 -0
  549. esphome/components/socket/bsd_sockets_impl.cpp +51 -7
  550. esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
  551. esphome/components/socket/lwip_sockets_impl.cpp +51 -7
  552. esphome/components/socket/socket.cpp +31 -0
  553. esphome/components/socket/socket.h +27 -1
  554. esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
  555. esphome/components/sonoff_d1/sonoff_d1.h +2 -2
  556. esphome/components/sound_level/sound_level.cpp +4 -2
  557. esphome/components/speaker/media_player/__init__.py +3 -0
  558. esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
  559. esphome/components/speaker/media_player/speaker_media_player.h +6 -0
  560. esphome/components/spi/__init__.py +10 -2
  561. esphome/components/spi/spi.cpp +4 -4
  562. esphome/components/spi_device/spi_device.cpp +1 -2
  563. esphome/components/sprinkler/sprinkler.cpp +9 -6
  564. esphome/components/sps30/sps30.cpp +16 -15
  565. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  566. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
  567. esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
  568. esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
  569. esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
  570. esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
  571. esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
  572. esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
  573. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
  574. esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
  575. esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
  576. esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
  577. esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
  578. esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
  579. esphome/components/st7567_base/st7567_base.cpp +3 -3
  580. esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
  581. esphome/components/st7567_spi/st7567_spi.cpp +1 -1
  582. esphome/components/st7701s/st7701s.cpp +4 -2
  583. esphome/components/st7735/st7735.cpp +3 -3
  584. esphome/components/st7789v/st7789v.cpp +10 -7
  585. esphome/components/st7920/st7920.cpp +6 -4
  586. esphome/components/statsd/statsd.cpp +9 -5
  587. esphome/components/status_led/light/status_led_light.cpp +3 -3
  588. esphome/components/status_led/light/status_led_light.h +1 -1
  589. esphome/components/status_led/status_led.cpp +1 -1
  590. esphome/components/stepper/stepper.h +5 -3
  591. esphome/components/sts3x/sts3x.cpp +2 -2
  592. esphome/components/switch/__init__.py +1 -0
  593. esphome/components/switch/switch.cpp +18 -12
  594. esphome/components/switch/switch.h +1 -1
  595. esphome/components/sx1509/__init__.py +53 -20
  596. esphome/components/sx1509/sx1509.cpp +29 -5
  597. esphome/components/sx1509/sx1509.h +9 -1
  598. esphome/components/t6615/t6615.cpp +1 -0
  599. esphome/components/tc74/tc74.cpp +1 -1
  600. esphome/components/tca9548a/tca9548a.cpp +1 -1
  601. esphome/components/tca9555/tca9555.cpp +2 -2
  602. esphome/components/tcs34725/tcs34725.cpp +4 -4
  603. esphome/components/tee501/tee501.cpp +3 -2
  604. esphome/components/tem3200/tem3200.cpp +5 -6
  605. esphome/components/template/alarm_control_panel/__init__.py +6 -0
  606. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +43 -12
  607. esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +4 -1
  608. esphome/components/template/cover/template_cover.cpp +1 -1
  609. esphome/components/template/select/template_select.cpp +6 -4
  610. esphome/components/template/text/template_text.cpp +2 -3
  611. esphome/components/template/valve/template_valve.cpp +5 -3
  612. esphome/components/text/__init__.py +10 -11
  613. esphome/components/text/text.cpp +1 -1
  614. esphome/components/text/text.h +0 -4
  615. esphome/components/text_sensor/__init__.py +1 -0
  616. esphome/components/text_sensor/text_sensor.cpp +8 -4
  617. esphome/components/text_sensor/text_sensor.h +6 -6
  618. esphome/components/thermostat/thermostat_climate.cpp +67 -43
  619. esphome/components/time/__init__.py +1 -2
  620. esphome/components/time_based/time_based_cover.cpp +4 -2
  621. esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
  622. esphome/components/tm1621/tm1621.cpp +3 -3
  623. esphome/components/tm1637/tm1637.cpp +9 -7
  624. esphome/components/tm1638/tm1638.cpp +7 -5
  625. esphome/components/tm1651/tm1651.cpp +2 -2
  626. esphome/components/tmp102/tmp102.cpp +1 -3
  627. esphome/components/tmp102/tmp102.h +0 -3
  628. esphome/components/tmp1075/tmp1075.cpp +12 -9
  629. esphome/components/tmp117/tmp117.cpp +2 -2
  630. esphome/components/tof10120/tof10120_sensor.cpp +2 -2
  631. esphome/components/tormatic/tormatic_cover.cpp +4 -2
  632. esphome/components/tsl2561/tsl2561.cpp +7 -5
  633. esphome/components/tsl2591/tsl2591.cpp +25 -27
  634. esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
  635. esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
  636. esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
  637. esphome/components/tuya/select/tuya_select.cpp +5 -3
  638. esphome/components/tx20/tx20.cpp +3 -3
  639. esphome/components/uart/__init__.py +4 -5
  640. esphome/components/uart/button/uart_button.cpp +1 -1
  641. esphome/components/uart/switch/uart_switch.cpp +2 -2
  642. esphome/components/uart/uart.cpp +2 -2
  643. esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
  644. esphome/components/uart/uart_component_esp8266.cpp +9 -7
  645. esphome/components/uart/uart_component_esp_idf.cpp +9 -7
  646. esphome/components/uart/uart_component_host.cpp +11 -8
  647. esphome/components/uart/uart_component_libretiny.cpp +8 -6
  648. esphome/components/uart/uart_component_rp2040.cpp +8 -6
  649. esphome/components/udp/udp_component.cpp +9 -5
  650. esphome/components/ufire_ec/ufire_ec.cpp +5 -3
  651. esphome/components/ufire_ise/ufire_ise.cpp +1 -1
  652. esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
  653. esphome/components/update/__init__.py +1 -0
  654. esphome/components/update/update_entity.cpp +1 -1
  655. esphome/components/update/update_entity.h +0 -3
  656. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
  657. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
  658. esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
  659. esphome/components/uptime/sensor/uptime_timestamp_sensor.cpp +1 -1
  660. esphome/components/usb_host/__init__.py +64 -0
  661. esphome/components/usb_host/usb_host.h +116 -0
  662. esphome/components/usb_host/usb_host_client.cpp +394 -0
  663. esphome/components/usb_host/usb_host_component.cpp +35 -0
  664. esphome/components/usb_uart/__init__.py +134 -0
  665. esphome/components/usb_uart/ch34x.cpp +80 -0
  666. esphome/components/usb_uart/cp210x.cpp +126 -0
  667. esphome/components/usb_uart/usb_uart.cpp +328 -0
  668. esphome/components/usb_uart/usb_uart.h +151 -0
  669. esphome/components/valve/__init__.py +1 -0
  670. esphome/components/veml3235/veml3235.cpp +13 -9
  671. esphome/components/veml7700/veml7700.cpp +10 -6
  672. esphome/components/voice_assistant/voice_assistant.cpp +7 -7
  673. esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
  674. esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
  675. esphome/components/web_server/server_index_v2.h +632 -630
  676. esphome/components/web_server/server_index_v3.h +411 -409
  677. esphome/components/web_server/web_server.cpp +5 -3
  678. esphome/components/web_server_base/web_server_base.cpp +1 -1
  679. esphome/components/web_server_idf/__init__.py +0 -2
  680. esphome/components/web_server_idf/utils.cpp +1 -1
  681. esphome/components/web_server_idf/web_server_idf.cpp +7 -3
  682. esphome/components/web_server_idf/web_server_idf.h +7 -0
  683. esphome/components/weikai/__init__.py +2 -0
  684. esphome/components/weikai/weikai.cpp +24 -22
  685. esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
  686. esphome/components/weikai_spi/weikai_spi.cpp +11 -6
  687. esphome/components/wiegand/wiegand.cpp +1 -1
  688. esphome/components/wifi/wifi_component.cpp +50 -37
  689. esphome/components/wifi/wifi_component.h +7 -4
  690. esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
  691. esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
  692. esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
  693. esphome/components/wireguard/wireguard.cpp +21 -21
  694. esphome/components/wl_134/text_sensor.py +1 -2
  695. esphome/components/wled/wled_light_effect.cpp +1 -1
  696. esphome/components/x9c/x9c.cpp +5 -3
  697. esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
  698. esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
  699. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
  700. esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
  701. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
  702. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
  703. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
  704. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
  705. esphome/components/xl9535/xl9535.cpp +2 -2
  706. esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
  707. esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
  708. esphome/config.py +3 -2
  709. esphome/config_validation.py +46 -17
  710. esphome/const.py +10 -1
  711. esphome/core/__init__.py +37 -18
  712. esphome/core/application.cpp +197 -8
  713. esphome/core/application.h +116 -6
  714. esphome/core/component.cpp +36 -15
  715. esphome/core/component.h +43 -13
  716. esphome/core/config.py +12 -0
  717. esphome/core/defines.h +10 -2
  718. esphome/core/entity_base.cpp +4 -16
  719. esphome/core/entity_base.h +27 -13
  720. esphome/core/helpers.cpp +1 -1
  721. esphome/core/helpers.h +5 -5
  722. esphome/core/log.h +2 -0
  723. esphome/core/log_const_en.h +4 -0
  724. esphome/core/scheduler.cpp +2 -2
  725. esphome/coroutine.py +3 -4
  726. esphome/cpp_generator.py +32 -32
  727. esphome/dashboard/core.py +2 -2
  728. esphome/dashboard/web_server.py +2 -2
  729. esphome/git.py +4 -4
  730. esphome/helpers.py +5 -6
  731. esphome/loader.py +8 -7
  732. esphome/log.py +7 -1
  733. esphome/platformio_api.py +2 -3
  734. esphome/storage_json.py +13 -5
  735. esphome/types.py +12 -13
  736. esphome/util.py +1 -2
  737. esphome/wizard.py +0 -16
  738. esphome/writer.py +5 -3
  739. esphome/yaml_util.py +6 -1
  740. esphome/zeroconf.py +1 -1
  741. {esphome-2025.5.2.dist-info → esphome-2025.6.0b2.dist-info}/METADATA +12 -11
  742. {esphome-2025.5.2.dist-info → esphome-2025.6.0b2.dist-info}/RECORD +746 -692
  743. {esphome-2025.5.2.dist-info → esphome-2025.6.0b2.dist-info}/WHEEL +1 -1
  744. {esphome-2025.5.2.dist-info → esphome-2025.6.0b2.dist-info}/entry_points.txt +0 -0
  745. {esphome-2025.5.2.dist-info → esphome-2025.6.0b2.dist-info}/licenses/LICENSE +0 -0
  746. {esphome-2025.5.2.dist-info → esphome-2025.6.0b2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,299 @@
1
+ #include "esphome/core/log.h"
2
+ #include "lc709203f.h"
3
+
4
+ namespace esphome {
5
+ namespace lc709203f {
6
+
7
+ static const char *const TAG = "lc709203f.sensor";
8
+
9
+ // Device I2C address. This address is fixed.
10
+ static const uint8_t LC709203F_I2C_ADDR_DEFAULT = 0x0B;
11
+
12
+ // Device registers
13
+ static const uint8_t LC709203F_BEFORE_RSOC = 0x04;
14
+ static const uint8_t LC709203F_THERMISTOR_B = 0x06;
15
+ static const uint8_t LC709203F_INITIAL_RSOC = 0x07;
16
+ static const uint8_t LC709203F_CELL_TEMPERATURE = 0x08;
17
+ static const uint8_t LC709203F_CELL_VOLTAGE = 0x09;
18
+ static const uint8_t LC709203F_CURRENT_DIRECTION = 0x0A;
19
+ static const uint8_t LC709203F_APA = 0x0B;
20
+ static const uint8_t LC709203F_APT = 0x0C;
21
+ static const uint8_t LC709203F_RSOC = 0x0D;
22
+ static const uint8_t LC709203F_ITE = 0x0F;
23
+ static const uint8_t LC709203F_IC_VERSION = 0x11;
24
+ static const uint8_t LC709203F_CHANGE_OF_THE_PARAMETER = 0x12;
25
+ static const uint8_t LC709203F_ALARM_LOW_RSOC = 0x13;
26
+ static const uint8_t LC709203F_ALARM_LOW_CELL_VOLTAGE = 0x14;
27
+ static const uint8_t LC709203F_IC_POWER_MODE = 0x15;
28
+ static const uint8_t LC709203F_STATUS_BIT = 0x16;
29
+ static const uint8_t LC709203F_NUMBER_OF_THE_PARAMETER = 0x1A;
30
+
31
+ static const uint8_t LC709203F_POWER_MODE_ON = 0x0001;
32
+ static const uint8_t LC709203F_POWER_MODE_SLEEP = 0x0002;
33
+
34
+ // The number of times to retry an I2C transaction before giving up. In my experience,
35
+ // 10 is a good number here that will take care of most bus issues that require retry.
36
+ static const uint8_t LC709203F_I2C_RETRY_COUNT = 10;
37
+
38
+ void Lc709203f::setup() {
39
+ // Note: The setup implements a small state machine. This is because we want to have
40
+ // delays before and after sending the RSOC command. The full init process should be:
41
+ // INIT->RSOC->TEMP_SETUP->NORMAL
42
+ // The setup() function will only perform the first part of the initialization process.
43
+ // Assuming no errors, the whole process should occur during the setup() function and
44
+ // the first two calls to update(). After that, the part should remain in normal mode
45
+ // until a device reset.
46
+ //
47
+ // This device can be picky about I2C communication and can error out occasionally. The
48
+ // get/set register functions impelment retry logic to retry the I2C transactions. The
49
+ // initialization code checks the return code from those functions. If they don't return
50
+ // NO_ERROR (0x00), that part of the initialization aborts and will be retried on the next
51
+ // call to update().
52
+ ESP_LOGCONFIG(TAG, "Running setup");
53
+
54
+ // Set power mode to on. Note that, unlike some other similar devices, in sleep mode the IC
55
+ // does not record power usage. If there is significant power consumption during sleep mode,
56
+ // the pack RSOC will likely no longer be correct. Because of that, I do not implement
57
+ // sleep mode on this device.
58
+
59
+ // Initialize device registers. If any of these fail, retry during the update() function.
60
+ if (this->set_register_(LC709203F_IC_POWER_MODE, LC709203F_POWER_MODE_ON) != i2c::NO_ERROR) {
61
+ return;
62
+ }
63
+
64
+ if (this->set_register_(LC709203F_APA, this->apa_) != i2c::NO_ERROR) {
65
+ return;
66
+ }
67
+
68
+ if (this->set_register_(LC709203F_CHANGE_OF_THE_PARAMETER, this->pack_voltage_) != i2c::NO_ERROR) {
69
+ return;
70
+ }
71
+
72
+ this->state_ = STATE_RSOC;
73
+ // Note: Initialization continues in the update() function.
74
+ }
75
+
76
+ void Lc709203f::update() {
77
+ uint16_t buffer;
78
+
79
+ if (this->state_ == STATE_NORMAL) {
80
+ // Note: If we fail to read from the data registers, we do not report any sensor reading.
81
+ if (this->voltage_sensor_ != nullptr) {
82
+ if (this->get_register_(LC709203F_CELL_VOLTAGE, &buffer) == i2c::NO_ERROR) {
83
+ // Raw units are mV
84
+ this->voltage_sensor_->publish_state(static_cast<float>(buffer) / 1000.0f);
85
+ this->status_clear_warning();
86
+ }
87
+ }
88
+ if (this->battery_remaining_sensor_ != nullptr) {
89
+ if (this->get_register_(LC709203F_ITE, &buffer) == i2c::NO_ERROR) {
90
+ // Raw units are .1%
91
+ this->battery_remaining_sensor_->publish_state(static_cast<float>(buffer) / 10.0f);
92
+ this->status_clear_warning();
93
+ }
94
+ }
95
+ if (this->temperature_sensor_ != nullptr) {
96
+ // I can't test this with a real thermistor because I don't have a device with
97
+ // an attached thermistor. I have turned on the sensor and made sure that it
98
+ // sets up the registers properly.
99
+ if (this->get_register_(LC709203F_CELL_TEMPERATURE, &buffer) == i2c::NO_ERROR) {
100
+ // Raw units are .1 K
101
+ this->temperature_sensor_->publish_state((static_cast<float>(buffer) / 10.0f) - 273.15f);
102
+ this->status_clear_warning();
103
+ }
104
+ }
105
+ } else if (this->state_ == STATE_INIT) {
106
+ // Retry initializing the device registers. We should only get here if the init sequence
107
+ // failed during the setup() function. This would likely occur because of a repeated failures
108
+ // on the I2C bus. If any of these fail, retry the next time the update() function is called.
109
+ if (this->set_register_(LC709203F_IC_POWER_MODE, LC709203F_POWER_MODE_ON) != i2c::NO_ERROR) {
110
+ return;
111
+ }
112
+
113
+ if (this->set_register_(LC709203F_APA, this->apa_) != i2c::NO_ERROR) {
114
+ return;
115
+ }
116
+
117
+ if (this->set_register_(LC709203F_CHANGE_OF_THE_PARAMETER, this->pack_voltage_) != i2c::NO_ERROR) {
118
+ return;
119
+ }
120
+
121
+ this->state_ = STATE_RSOC;
122
+
123
+ } else if (this->state_ == STATE_RSOC) {
124
+ // We implement a delay here to send the initial RSOC command.
125
+ // This should run once on the first update() after initialization.
126
+ if (this->set_register_(LC709203F_INITIAL_RSOC, 0xAA55) == i2c::NO_ERROR) {
127
+ this->state_ = STATE_TEMP_SETUP;
128
+ }
129
+ } else if (this->state_ == STATE_TEMP_SETUP) {
130
+ // This should run once on the second update() after initialization.
131
+ if (this->temperature_sensor_ != nullptr) {
132
+ // This assumes that a thermistor is attached to the device as shown in the datahseet.
133
+ if (this->set_register_(LC709203F_STATUS_BIT, 0x0001) == i2c::NO_ERROR) {
134
+ if (this->set_register_(LC709203F_THERMISTOR_B, this->b_constant_) == i2c::NO_ERROR) {
135
+ this->state_ = STATE_NORMAL;
136
+ }
137
+ }
138
+ } else if (this->set_register_(LC709203F_STATUS_BIT, 0x0000) == i2c::NO_ERROR) {
139
+ // The device expects to get updates to the temperature in this mode.
140
+ // I am not doing that now. The temperature register defaults to 25C.
141
+ // In theory, we could have another temperature sensor and have ESPHome
142
+ // send updated temperature to the device occasionally, but I have no idea
143
+ // how to make that happen.
144
+ this->state_ = STATE_NORMAL;
145
+ }
146
+ }
147
+ }
148
+
149
+ void Lc709203f::dump_config() {
150
+ ESP_LOGCONFIG(TAG, "LC709203F:");
151
+ LOG_I2C_DEVICE(this);
152
+
153
+ LOG_UPDATE_INTERVAL(this);
154
+ ESP_LOGCONFIG(TAG,
155
+ " Pack Size: %d mAH\n"
156
+ " Pack APA: 0x%02X",
157
+ this->pack_size_, this->apa_);
158
+
159
+ // This is only true if the pack_voltage_ is either 0x0000 or 0x0001. The config validator
160
+ // should have already verified this.
161
+ ESP_LOGCONFIG(TAG, " Pack Rated Voltage: 3.%sV", this->pack_voltage_ == 0x0000 ? "8" : "7");
162
+
163
+ LOG_SENSOR(" ", "Voltage", this->voltage_sensor_);
164
+ LOG_SENSOR(" ", "Battery Remaining", this->battery_remaining_sensor_);
165
+
166
+ if (this->temperature_sensor_ != nullptr) {
167
+ LOG_SENSOR(" ", "Temperature", this->temperature_sensor_);
168
+ ESP_LOGCONFIG(TAG, " B_Constant: %d", this->b_constant_);
169
+ } else {
170
+ ESP_LOGCONFIG(TAG, " No Temperature Sensor");
171
+ }
172
+ }
173
+
174
+ uint8_t Lc709203f::get_register_(uint8_t register_to_read, uint16_t *register_value) {
175
+ i2c::ErrorCode return_code;
176
+ uint8_t read_buffer[6];
177
+
178
+ read_buffer[0] = (this->address_) << 1;
179
+ read_buffer[1] = register_to_read;
180
+ read_buffer[2] = ((this->address_) << 1) | 0x01;
181
+
182
+ for (uint8_t i = 0; i <= LC709203F_I2C_RETRY_COUNT; i++) {
183
+ // Note: the read_register() function does not send a stop between the write and
184
+ // the read portions of the I2C transation when you set the last variable to 'false'
185
+ // as we do below. Some of the other I2C read functions such as the generic read()
186
+ // function will send a stop between the read and the write portion of the I2C
187
+ // transaction. This is bad in this case and will result in reading nothing but 0xFFFF
188
+ // from the registers.
189
+ return_code = this->read_register(register_to_read, &read_buffer[3], 3, false);
190
+ if (return_code != i2c::NO_ERROR) {
191
+ // Error on the i2c bus
192
+ this->status_set_warning(
193
+ str_sprintf("Error code %d when reading from register 0x%02X", return_code, register_to_read).c_str());
194
+ } else if (this->crc8_(read_buffer, 5) != read_buffer[5]) {
195
+ // I2C indicated OK, but the CRC of the data does not matcth.
196
+ this->status_set_warning(str_sprintf("CRC error reading from register 0x%02X", register_to_read).c_str());
197
+ } else {
198
+ *register_value = ((uint16_t) read_buffer[4] << 8) | (uint16_t) read_buffer[3];
199
+ return i2c::NO_ERROR;
200
+ }
201
+ }
202
+
203
+ // If we get here, we tried LC709203F_I2C_RETRY_COUNT times to read the register and
204
+ // failed each time. Set the register value to 0 and return the I2C error code or 0xFF
205
+ // to indicate a CRC failure. It will be up to the higher level code what to do when
206
+ // this happens.
207
+ *register_value = 0x0000;
208
+ if (return_code != i2c::NO_ERROR) {
209
+ return return_code;
210
+ } else {
211
+ return 0xFF;
212
+ }
213
+ }
214
+
215
+ uint8_t Lc709203f::set_register_(uint8_t register_to_set, uint16_t value_to_set) {
216
+ i2c::ErrorCode return_code;
217
+ uint8_t write_buffer[5];
218
+
219
+ // Note: We don't actually send byte[0] of the buffer. We include it because it is
220
+ // part of the CRC calculation.
221
+ write_buffer[0] = (this->address_) << 1;
222
+ write_buffer[1] = register_to_set;
223
+ write_buffer[2] = value_to_set & 0xFF; // Low byte
224
+ write_buffer[3] = (value_to_set >> 8) & 0xFF; // High byte
225
+ write_buffer[4] = this->crc8_(write_buffer, 4);
226
+
227
+ for (uint8_t i = 0; i <= LC709203F_I2C_RETRY_COUNT; i++) {
228
+ // Note: we don't write the first byte of the write buffer to the device.
229
+ // This is done automatically by the write() function.
230
+ return_code = this->write(&write_buffer[1], 4, true);
231
+ if (return_code == i2c::NO_ERROR) {
232
+ return return_code;
233
+ } else {
234
+ this->status_set_warning(
235
+ str_sprintf("Error code %d when writing to register 0x%02X", return_code, register_to_set).c_str());
236
+ }
237
+ }
238
+
239
+ // If we get here, we tried to send the data LC709203F_I2C_RETRY_COUNT times and failed.
240
+ // We return the I2C error code, it is up to the higher level code what to do about it.
241
+ return return_code;
242
+ }
243
+
244
+ uint8_t Lc709203f::crc8_(uint8_t *byte_buffer, uint8_t length_of_crc) {
245
+ uint8_t crc = 0x00;
246
+ const uint8_t polynomial(0x07);
247
+
248
+ for (uint8_t j = length_of_crc; j; --j) {
249
+ crc ^= *byte_buffer++;
250
+
251
+ for (uint8_t i = 8; i; --i) {
252
+ crc = (crc & 0x80) ? (crc << 1) ^ polynomial : (crc << 1);
253
+ }
254
+ }
255
+ return crc;
256
+ }
257
+
258
+ void Lc709203f::set_pack_size(uint16_t pack_size) {
259
+ static const uint16_t PACK_SIZE_ARRAY[6] = {100, 200, 500, 1000, 2000, 3000};
260
+ static const uint16_t APA_ARRAY[6] = {0x08, 0x0B, 0x10, 0x19, 0x2D, 0x36};
261
+ float slope;
262
+ float intercept;
263
+
264
+ this->pack_size_ = pack_size; // Pack size in mAH
265
+
266
+ // The size is used to calculate the 'Adjustment Pack Application' number.
267
+ // Here we assume a type 01 or type 03 battery and do a linear curve fit to find the APA.
268
+ for (uint8_t i = 0; i < 6; i++) {
269
+ if (PACK_SIZE_ARRAY[i] == pack_size) {
270
+ // If the pack size is exactly one of the values in the array.
271
+ this->apa_ = APA_ARRAY[i];
272
+ return;
273
+ } else if ((i > 0) && (PACK_SIZE_ARRAY[i] > pack_size) && (PACK_SIZE_ARRAY[i - 1] < pack_size)) {
274
+ // If the pack size is between the current array element and the previous. Do a linear
275
+ // Curve fit to determine the APA value.
276
+
277
+ // Type casting is required here to avoid interger division
278
+ slope = static_cast<float>(APA_ARRAY[i] - APA_ARRAY[i - 1]) /
279
+ static_cast<float>(PACK_SIZE_ARRAY[i] - PACK_SIZE_ARRAY[i - 1]);
280
+
281
+ // Type casting might not be needed here.
282
+ intercept = static_cast<float>(APA_ARRAY[i]) - slope * static_cast<float>(PACK_SIZE_ARRAY[i]);
283
+
284
+ this->apa_ = static_cast<uint8_t>(slope * pack_size + intercept);
285
+ return;
286
+ }
287
+ }
288
+ // We should never get here. If we do, it means we never set the pack APA. This should
289
+ // not be possible because of the config validation. However, if it does happen, the
290
+ // consequence is that the RSOC values will likley not be as accurate. However, it should
291
+ // not cause an error or crash, so I am not doing any additional checking here.
292
+ }
293
+
294
+ void Lc709203f::set_thermistor_b_constant(uint16_t b_constant) { this->b_constant_ = b_constant; }
295
+
296
+ void Lc709203f::set_pack_voltage(LC709203FBatteryVoltage pack_voltage) { this->pack_voltage_ = pack_voltage; }
297
+
298
+ } // namespace lc709203f
299
+ } // namespace esphome
@@ -0,0 +1,55 @@
1
+ #pragma once
2
+
3
+ #include "esphome/core/component.h"
4
+ #include "esphome/components/sensor/sensor.h"
5
+ #include "esphome/components/i2c/i2c.h"
6
+
7
+ namespace esphome {
8
+ namespace lc709203f {
9
+
10
+ enum LC709203FState {
11
+ STATE_INIT,
12
+ STATE_RSOC,
13
+ STATE_TEMP_SETUP,
14
+ STATE_NORMAL,
15
+ };
16
+
17
+ /// Enum listing allowable voltage settings for the LC709203F.
18
+ enum LC709203FBatteryVoltage {
19
+ LC709203F_BATTERY_VOLTAGE_3_8 = 0x0000,
20
+ LC709203F_BATTERY_VOLTAGE_3_7 = 0x0001,
21
+ };
22
+
23
+ class Lc709203f : public sensor::Sensor, public PollingComponent, public i2c::I2CDevice {
24
+ public:
25
+ void setup() override;
26
+ void update() override;
27
+ void dump_config() override;
28
+
29
+ void set_pack_size(uint16_t pack_size);
30
+ void set_thermistor_b_constant(uint16_t b_constant);
31
+ void set_pack_voltage(LC709203FBatteryVoltage pack_voltage);
32
+ void set_voltage_sensor(sensor::Sensor *voltage_sensor) { voltage_sensor_ = voltage_sensor; }
33
+ void set_battery_remaining_sensor(sensor::Sensor *battery_remaining_sensor) {
34
+ battery_remaining_sensor_ = battery_remaining_sensor;
35
+ }
36
+ void set_temperature_sensor(sensor::Sensor *temperature_sensor) { temperature_sensor_ = temperature_sensor; }
37
+
38
+ private:
39
+ uint8_t get_register_(uint8_t register_to_read, uint16_t *register_value);
40
+ uint8_t set_register_(uint8_t register_to_set, uint16_t value_to_set);
41
+ uint8_t crc8_(uint8_t *byte_buffer, uint8_t length_of_crc);
42
+
43
+ protected:
44
+ sensor::Sensor *voltage_sensor_{nullptr};
45
+ sensor::Sensor *battery_remaining_sensor_{nullptr};
46
+ sensor::Sensor *temperature_sensor_{nullptr};
47
+ uint16_t pack_size_;
48
+ uint16_t apa_;
49
+ uint16_t b_constant_;
50
+ LC709203FState state_ = STATE_INIT;
51
+ uint16_t pack_voltage_;
52
+ };
53
+
54
+ } // namespace lc709203f
55
+ } // namespace esphome
@@ -0,0 +1,93 @@
1
+ import esphome.codegen as cg
2
+ from esphome.components import i2c, sensor
3
+ import esphome.config_validation as cv
4
+ from esphome.const import (
5
+ CONF_BATTERY_LEVEL,
6
+ CONF_BATTERY_VOLTAGE,
7
+ CONF_ID,
8
+ CONF_SIZE,
9
+ CONF_TEMPERATURE,
10
+ CONF_VOLTAGE,
11
+ DEVICE_CLASS_BATTERY,
12
+ DEVICE_CLASS_TEMPERATURE,
13
+ DEVICE_CLASS_VOLTAGE,
14
+ ENTITY_CATEGORY_DIAGNOSTIC,
15
+ STATE_CLASS_MEASUREMENT,
16
+ UNIT_CELSIUS,
17
+ UNIT_PERCENT,
18
+ UNIT_VOLT,
19
+ )
20
+
21
+ DEPENDENCIES = ["i2c"]
22
+
23
+ lc709203f_ns = cg.esphome_ns.namespace("lc709203f")
24
+
25
+ CONF_B_CONSTANT = "b_constant"
26
+
27
+ LC709203FBatteryVoltage = lc709203f_ns.enum("LC709203FBatteryVoltage")
28
+ BATTERY_VOLTAGE_OPTIONS = {
29
+ "3.7": LC709203FBatteryVoltage.LC709203F_BATTERY_VOLTAGE_3_7,
30
+ "3.8": LC709203FBatteryVoltage.LC709203F_BATTERY_VOLTAGE_3_8,
31
+ }
32
+
33
+ lc709203f = lc709203f_ns.class_("Lc709203f", cg.PollingComponent, i2c.I2CDevice)
34
+
35
+ CONFIG_SCHEMA = (
36
+ cv.Schema(
37
+ {
38
+ cv.GenerateID(): cv.declare_id(lc709203f),
39
+ cv.Optional(CONF_SIZE, default="500"): cv.int_range(100, 3000),
40
+ cv.Optional(CONF_VOLTAGE, default="3.7"): cv.enum(
41
+ BATTERY_VOLTAGE_OPTIONS, upper=True
42
+ ),
43
+ cv.Optional(CONF_BATTERY_VOLTAGE): sensor.sensor_schema(
44
+ unit_of_measurement=UNIT_VOLT,
45
+ accuracy_decimals=3,
46
+ device_class=DEVICE_CLASS_VOLTAGE,
47
+ state_class=STATE_CLASS_MEASUREMENT,
48
+ entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
49
+ ),
50
+ cv.Optional(CONF_BATTERY_LEVEL): sensor.sensor_schema(
51
+ unit_of_measurement=UNIT_PERCENT,
52
+ accuracy_decimals=3,
53
+ device_class=DEVICE_CLASS_BATTERY,
54
+ state_class=STATE_CLASS_MEASUREMENT,
55
+ entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
56
+ ),
57
+ cv.Optional(CONF_TEMPERATURE): sensor.sensor_schema(
58
+ unit_of_measurement=UNIT_CELSIUS,
59
+ accuracy_decimals=2,
60
+ device_class=DEVICE_CLASS_TEMPERATURE,
61
+ state_class=STATE_CLASS_MEASUREMENT,
62
+ entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
63
+ ).extend(
64
+ {
65
+ cv.Required(CONF_B_CONSTANT): cv.int_range(0, 0xFFFF),
66
+ }
67
+ ),
68
+ }
69
+ )
70
+ .extend(cv.polling_component_schema("60s"))
71
+ .extend(i2c.i2c_device_schema(0x0B))
72
+ )
73
+
74
+
75
+ async def to_code(config):
76
+ var = cg.new_Pvariable(config[CONF_ID])
77
+ await cg.register_component(var, config)
78
+ await i2c.register_i2c_device(var, config)
79
+ cg.add(var.set_pack_size(config.get(CONF_SIZE)))
80
+ cg.add(var.set_pack_voltage(BATTERY_VOLTAGE_OPTIONS[config[CONF_VOLTAGE]]))
81
+
82
+ if voltage_config := config.get(CONF_BATTERY_VOLTAGE):
83
+ sens = await sensor.new_sensor(voltage_config)
84
+ cg.add(var.set_voltage_sensor(sens))
85
+
86
+ if level_config := config.get(CONF_BATTERY_LEVEL):
87
+ sens = await sensor.new_sensor(level_config)
88
+ cg.add(var.set_battery_remaining_sensor(sens))
89
+
90
+ if temp_config := config.get(CONF_TEMPERATURE):
91
+ sens = await sensor.new_sensor(temp_config)
92
+ cg.add(var.set_temperature_sensor(sens))
93
+ cg.add(var.set_thermistor_b_constant(temp_config[CONF_B_CONSTANT]))
@@ -1,7 +1,7 @@
1
1
  #include "lcd_display.h"
2
- #include "esphome/core/log.h"
3
- #include "esphome/core/helpers.h"
4
2
  #include "esphome/core/hal.h"
3
+ #include "esphome/core/helpers.h"
4
+ #include "esphome/core/log.h"
5
5
 
6
6
  namespace esphome {
7
7
  namespace lcd_base {
@@ -7,7 +7,7 @@ namespace lcd_gpio {
7
7
  static const char *const TAG = "lcd_gpio";
8
8
 
9
9
  void GPIOLCDDisplay::setup() {
10
- ESP_LOGCONFIG(TAG, "Setting up GPIO LCD Display...");
10
+ ESP_LOGCONFIG(TAG, "Running setup");
11
11
  this->rs_pin_->setup(); // OUTPUT
12
12
  this->rs_pin_->digital_write(false);
13
13
  if (this->rw_pin_ != nullptr) {
@@ -24,8 +24,10 @@ void GPIOLCDDisplay::setup() {
24
24
  LCDDisplay::setup();
25
25
  }
26
26
  void GPIOLCDDisplay::dump_config() {
27
- ESP_LOGCONFIG(TAG, "GPIO LCD Display:");
28
- ESP_LOGCONFIG(TAG, " Columns: %u, Rows: %u", this->columns_, this->rows_);
27
+ ESP_LOGCONFIG(TAG,
28
+ "GPIO LCD Display:\n"
29
+ " Columns: %u, Rows: %u",
30
+ this->columns_, this->rows_);
29
31
  LOG_PIN(" RS Pin: ", this->rs_pin_);
30
32
  LOG_PIN(" RW Pin: ", this->rw_pin_);
31
33
  LOG_PIN(" Enable Pin: ", this->enable_pin_);
@@ -19,10 +19,12 @@ void LCDCharacterMenuComponent::setup() {
19
19
  float LCDCharacterMenuComponent::get_setup_priority() const { return setup_priority::PROCESSOR - 1.0f; }
20
20
 
21
21
  void LCDCharacterMenuComponent::dump_config() {
22
- ESP_LOGCONFIG(TAG, "LCD Menu");
23
- ESP_LOGCONFIG(TAG, " Columns: %u, Rows: %u", this->columns_, this->rows_);
24
- ESP_LOGCONFIG(TAG, " Mark characters: %02x, %02x, %02x, %02x", this->mark_selected_, this->mark_editing_,
25
- this->mark_submenu_, this->mark_back_);
22
+ ESP_LOGCONFIG(TAG,
23
+ "LCD Menu\n"
24
+ " Columns: %u, Rows: %u\n"
25
+ " Mark characters: %02x, %02x, %02x, %02x",
26
+ this->columns_, this->rows_, this->mark_selected_, this->mark_editing_, this->mark_submenu_,
27
+ this->mark_back_);
26
28
  if (this->is_failed()) {
27
29
  ESP_LOGE(TAG, "The connected display failed, the menu is disabled!");
28
30
  }
@@ -11,7 +11,7 @@ static const uint8_t LCD_DISPLAY_BACKLIGHT_ON = 0x08;
11
11
  static const uint8_t LCD_DISPLAY_BACKLIGHT_OFF = 0x00;
12
12
 
13
13
  void PCF8574LCDDisplay::setup() {
14
- ESP_LOGCONFIG(TAG, "Setting up PCF8574 LCD Display...");
14
+ ESP_LOGCONFIG(TAG, "Running setup");
15
15
  this->backlight_value_ = LCD_DISPLAY_BACKLIGHT_ON;
16
16
  if (!this->write_bytes(this->backlight_value_, nullptr, 0)) {
17
17
  this->mark_failed();
@@ -21,12 +21,14 @@ void PCF8574LCDDisplay::setup() {
21
21
  LCDDisplay::setup();
22
22
  }
23
23
  void PCF8574LCDDisplay::dump_config() {
24
- ESP_LOGCONFIG(TAG, "PCF8574 LCD Display:");
25
- ESP_LOGCONFIG(TAG, " Columns: %u, Rows: %u", this->columns_, this->rows_);
24
+ ESP_LOGCONFIG(TAG,
25
+ "PCF8574 LCD Display:\n"
26
+ " Columns: %u, Rows: %u",
27
+ this->columns_, this->rows_);
26
28
  LOG_I2C_DEVICE(this);
27
29
  LOG_UPDATE_INTERVAL(this);
28
30
  if (this->is_failed()) {
29
- ESP_LOGE(TAG, "Communication with LCD Display failed!");
31
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
30
32
  }
31
33
  }
32
34
  void PCF8574LCDDisplay::write_n_bits(uint8_t value, uint8_t n) {
@@ -72,17 +72,16 @@ void LD2410Component::dump_config() {
72
72
  }
73
73
  #endif
74
74
  this->read_all_info();
75
- ESP_LOGCONFIG(TAG, " Throttle_ : %ums", this->throttle_);
76
- ESP_LOGCONFIG(TAG, " MAC Address : %s", const_cast<char *>(this->mac_.c_str()));
77
- ESP_LOGCONFIG(TAG, " Firmware Version : %s", const_cast<char *>(this->version_.c_str()));
75
+ ESP_LOGCONFIG(TAG,
76
+ " Throttle_ : %ums\n"
77
+ " MAC Address : %s\n"
78
+ " Firmware Version : %s",
79
+ this->throttle_, const_cast<char *>(this->mac_.c_str()), const_cast<char *>(this->version_.c_str()));
78
80
  }
79
81
 
80
82
  void LD2410Component::setup() {
81
- ESP_LOGCONFIG(TAG, "Setting up LD2410...");
83
+ ESP_LOGCONFIG(TAG, "Running setup");
82
84
  this->read_all_info();
83
- ESP_LOGCONFIG(TAG, "Mac Address : %s", const_cast<char *>(this->mac_.c_str()));
84
- ESP_LOGCONFIG(TAG, "Firmware Version : %s", const_cast<char *>(this->version_.c_str()));
85
- ESP_LOGCONFIG(TAG, "LD2410 setup complete.");
86
85
  }
87
86
 
88
87
  void LD2410Component::read_all_info() {
@@ -65,9 +65,11 @@ static const char *const TAG = "ld2420";
65
65
  float LD2420Component::get_setup_priority() const { return setup_priority::BUS; }
66
66
 
67
67
  void LD2420Component::dump_config() {
68
- ESP_LOGCONFIG(TAG, "LD2420:");
69
- ESP_LOGCONFIG(TAG, " Firmware Version : %7s", this->ld2420_firmware_ver_);
70
- ESP_LOGCONFIG(TAG, "LD2420 Number:");
68
+ ESP_LOGCONFIG(TAG,
69
+ "LD2420:\n"
70
+ " Firmware Version : %7s\n"
71
+ "LD2420 Number:",
72
+ this->ld2420_firmware_ver_);
71
73
  #ifdef USE_NUMBER
72
74
  LOG_NUMBER(TAG, " Gate Timeout:", this->gate_timeout_number_);
73
75
  LOG_NUMBER(TAG, " Gate Max Distance:", this->max_gate_distance_number_);
@@ -111,7 +113,7 @@ int LD2420Component::get_firmware_int_(const char *version_string) {
111
113
  }
112
114
 
113
115
  void LD2420Component::setup() {
114
- ESP_LOGCONFIG(TAG, "Setting up LD2420...");
116
+ ESP_LOGCONFIG(TAG, "Running setup");
115
117
  if (this->set_config_mode(true) == LD2420_ERROR_TIMEOUT) {
116
118
  ESP_LOGE(TAG, "LD2420 module has failed to respond, check baud rate and serial connections.");
117
119
  this->mark_failed();
@@ -158,7 +160,7 @@ void LD2420Component::apply_config_action() {
158
160
  ESP_LOGCONFIG(TAG, "No configuration change detected");
159
161
  return;
160
162
  }
161
- ESP_LOGCONFIG(TAG, "Reconfiguring LD2420...");
163
+ ESP_LOGCONFIG(TAG, "Reconfiguring LD2420");
162
164
  if (this->set_config_mode(true) == LD2420_ERROR_TIMEOUT) {
163
165
  ESP_LOGE(TAG, "LD2420 module has failed to respond, check baud rate and serial connections.");
164
166
  this->mark_failed();
@@ -180,7 +182,7 @@ void LD2420Component::apply_config_action() {
180
182
  }
181
183
 
182
184
  void LD2420Component::factory_reset_action() {
183
- ESP_LOGCONFIG(TAG, "Setting factory defaults...");
185
+ ESP_LOGCONFIG(TAG, "Setting factory defaults");
184
186
  if (this->set_config_mode(true) == LD2420_ERROR_TIMEOUT) {
185
187
  ESP_LOGE(TAG, "LD2420 module has failed to respond, check baud rate and serial connections.");
186
188
  this->mark_failed();
@@ -209,7 +211,7 @@ void LD2420Component::factory_reset_action() {
209
211
  }
210
212
 
211
213
  void LD2420Component::restart_module_action() {
212
- ESP_LOGCONFIG(TAG, "Restarting LD2420 module...");
214
+ ESP_LOGCONFIG(TAG, "Restarting LD2420 module");
213
215
  this->send_module_restart();
214
216
  this->set_timeout(250, [this]() {
215
217
  this->set_config_mode(true);
@@ -109,7 +109,7 @@ static inline std::string format_version(uint8_t *buffer) {
109
109
  LD2450Component::LD2450Component() {}
110
110
 
111
111
  void LD2450Component::setup() {
112
- ESP_LOGCONFIG(TAG, "Setting up HLK-LD2450...");
112
+ ESP_LOGCONFIG(TAG, "Running setup");
113
113
  #ifdef USE_NUMBER
114
114
  if (this->presence_timeout_number_ != nullptr) {
115
115
  this->pref_ = global_preferences->make_preference<float>(this->presence_timeout_number_->get_object_id_hash());
@@ -188,9 +188,11 @@ void LD2450Component::dump_config() {
188
188
  #ifdef USE_NUMBER
189
189
  LOG_NUMBER(" ", "PresenceTimeoutNumber", this->presence_timeout_number_);
190
190
  #endif
191
- ESP_LOGCONFIG(TAG, " Throttle : %ums", this->throttle_);
192
- ESP_LOGCONFIG(TAG, " MAC Address : %s", const_cast<char *>(this->mac_.c_str()));
193
- ESP_LOGCONFIG(TAG, " Firmware version : %s", const_cast<char *>(this->version_.c_str()));
191
+ ESP_LOGCONFIG(TAG,
192
+ " Throttle : %ums\n"
193
+ " MAC Address : %s\n"
194
+ " Firmware version : %s",
195
+ this->throttle_, const_cast<char *>(this->mac_.c_str()), const_cast<char *>(this->version_.c_str()));
194
196
  }
195
197
 
196
198
  void LD2450Component::loop() {
@@ -6,6 +6,8 @@ from esphome.const import (
6
6
  CONF_DISTANCE,
7
7
  CONF_RESOLUTION,
8
8
  CONF_SPEED,
9
+ CONF_X,
10
+ CONF_Y,
9
11
  DEVICE_CLASS_DISTANCE,
10
12
  DEVICE_CLASS_SPEED,
11
13
  UNIT_DEGREES,
@@ -19,8 +21,6 @@ DEPENDENCIES = ["ld2450"]
19
21
  CONF_MOVING_TARGET_COUNT = "moving_target_count"
20
22
  CONF_STILL_TARGET_COUNT = "still_target_count"
21
23
  CONF_TARGET_COUNT = "target_count"
22
- CONF_X = "x"
23
- CONF_Y = "y"
24
24
 
25
25
  ICON_ACCOUNT_GROUP = "mdi:account-group"
26
26
  ICON_ACCOUNT_SWITCH = "mdi:account-switch"