esphome 2025.5.1__py3-none-any.whl → 2025.6.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 (720) 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 +712 -358
  29. esphome/components/api/api_connection.h +343 -284
  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 +2 -0
  33. esphome/components/api/api_pb2.h +637 -1
  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 -2
  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 +4 -3
  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 +16 -14
  67. esphome/components/bme280_base/bme280_base.cpp +3 -3
  68. esphome/components/bme680/bme680.cpp +3 -3
  69. esphome/components/bme680/sensor.py +2 -2
  70. esphome/components/bme680_bsec/bme680_bsec.cpp +11 -7
  71. esphome/components/bme680_bsec/sensor.py +7 -3
  72. esphome/components/bme68x_bsec2/__init__.py +6 -5
  73. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +17 -13
  74. esphome/components/bme68x_bsec2/sensor.py +4 -4
  75. esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +1 -0
  76. esphome/components/bmi160/bmi160.cpp +11 -11
  77. esphome/components/bmp085/bmp085.cpp +2 -2
  78. esphome/components/bmp280_base/bmp280_base.cpp +3 -3
  79. esphome/components/bmp3xx_base/bmp3xx_base.cpp +13 -13
  80. esphome/components/bmp581/bmp581.cpp +33 -27
  81. esphome/components/bp1658cj/bp1658cj.cpp +5 -3
  82. esphome/components/bp5758d/bp5758d.cpp +1 -1
  83. esphome/components/button/__init__.py +1 -0
  84. esphome/components/canbus/canbus.cpp +1 -1
  85. esphome/components/cap1188/cap1188.cpp +6 -4
  86. esphome/components/captive_portal/captive_portal.cpp +1 -1
  87. esphome/components/ccs811/ccs811.cpp +3 -2
  88. esphome/components/cd74hc4067/cd74hc4067.cpp +1 -1
  89. esphome/components/ch422g/ch422g.cpp +2 -2
  90. esphome/components/chsc6x/chsc6x_touchscreen.cpp +6 -4
  91. esphome/components/climate/__init__.py +1 -0
  92. esphome/components/climate/climate.cpp +12 -7
  93. esphome/components/climate/climate.h +1 -1
  94. esphome/components/climate_ir/climate_ir.cpp +7 -4
  95. esphome/components/cm1106/__init__.py +1 -0
  96. esphome/components/cm1106/cm1106.cpp +112 -0
  97. esphome/components/cm1106/cm1106.h +40 -0
  98. esphome/components/cm1106/sensor.py +72 -0
  99. esphome/components/const/__init__.py +1 -0
  100. esphome/components/cover/__init__.py +1 -0
  101. esphome/components/cs5460a/cs5460a.cpp +16 -11
  102. esphome/components/cse7761/cse7761.cpp +2 -2
  103. esphome/components/cse7766/cse7766.cpp +0 -5
  104. esphome/components/cse7766/cse7766.h +5 -1
  105. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +1 -1
  106. esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +6 -3
  107. esphome/components/current_based/current_based_cover.cpp +4 -2
  108. esphome/components/dac7678/dac7678_output.cpp +4 -4
  109. esphome/components/dallas_temp/dallas_temp.cpp +2 -3
  110. esphome/components/daly_bms/daly_bms.cpp +2 -1
  111. esphome/components/dashboard_import/__init__.py +1 -2
  112. esphome/components/datetime/__init__.py +3 -1
  113. esphome/components/debug/debug_component.cpp +1 -5
  114. esphome/components/debug/debug_component.h +1 -1
  115. esphome/components/debug/debug_esp32.cpp +4 -2
  116. esphome/components/deep_sleep/deep_sleep_component.cpp +11 -5
  117. esphome/components/deep_sleep/deep_sleep_esp32.cpp +7 -5
  118. esphome/components/demo/__init__.py +206 -0
  119. esphome/components/demo/demo_alarm_control_panel.h +65 -0
  120. esphome/components/demo/demo_button.h +15 -0
  121. esphome/components/demo/demo_date.h +34 -0
  122. esphome/components/demo/demo_datetime.h +40 -0
  123. esphome/components/demo/demo_lock.h +17 -0
  124. esphome/components/demo/demo_select.h +15 -0
  125. esphome/components/demo/demo_text.h +18 -0
  126. esphome/components/demo/demo_time.h +34 -0
  127. esphome/components/demo/demo_valve.h +54 -0
  128. esphome/components/dfrobot_sen0395/commands.cpp +3 -3
  129. esphome/components/dht/dht.cpp +29 -50
  130. esphome/components/dht12/dht12.cpp +2 -2
  131. esphome/components/display/display.h +5 -3
  132. esphome/components/dps310/dps310.cpp +7 -5
  133. esphome/components/ds1307/ds1307.cpp +2 -2
  134. esphome/components/dsmr/dsmr.cpp +5 -3
  135. esphome/components/duty_cycle/duty_cycle_sensor.cpp +2 -2
  136. esphome/components/duty_time/duty_time_sensor.cpp +5 -3
  137. esphome/components/ee895/ee895.cpp +3 -3
  138. esphome/components/ektf2232/touchscreen/ektf2232.cpp +1 -1
  139. esphome/components/emc2101/emc2101.cpp +11 -9
  140. esphome/components/ens160_base/ens160_base.cpp +2 -2
  141. esphome/components/ens210/ens210.cpp +2 -2
  142. esphome/components/es7210/es7210.cpp +6 -4
  143. esphome/components/es7243e/es7243e.cpp +1 -1
  144. esphome/components/es8156/es8156.cpp +1 -1
  145. esphome/components/es8311/es8311.cpp +8 -6
  146. esphome/components/es8388/__init__.py +0 -0
  147. esphome/components/es8388/audio_dac.py +26 -0
  148. esphome/components/es8388/es8388.cpp +289 -0
  149. esphome/components/es8388/es8388.h +81 -0
  150. esphome/components/es8388/es8388_const.h +83 -0
  151. esphome/components/es8388/select/__init__.py +47 -0
  152. esphome/components/es8388/select/adc_input_mic_select.cpp +12 -0
  153. esphome/components/es8388/select/adc_input_mic_select.h +15 -0
  154. esphome/components/es8388/select/dac_output_select.cpp +12 -0
  155. esphome/components/es8388/select/dac_output_select.h +15 -0
  156. esphome/components/esp32/__init__.py +88 -20
  157. esphome/components/esp32/boards.py +208 -125
  158. esphome/components/esp32/const.py +6 -0
  159. esphome/components/esp32/gpio.py +14 -1
  160. esphome/components/esp32/gpio_esp32_c5.py +45 -0
  161. esphome/components/esp32/gpio_esp32_p4.py +43 -0
  162. esphome/components/esp32/preferences.cpp +7 -7
  163. esphome/components/esp32_ble/__init__.py +115 -0
  164. esphome/components/esp32_ble/ble.cpp +11 -9
  165. esphome/components/esp32_ble/ble_uuid.h +1 -1
  166. esphome/components/esp32_ble_client/ble_client_base.cpp +4 -2
  167. esphome/components/esp32_ble_server/__init__.py +4 -1
  168. esphome/components/esp32_ble_server/ble_characteristic.cpp +1 -0
  169. esphome/components/esp32_ble_server/ble_server.h +0 -1
  170. esphome/components/esp32_ble_tracker/__init__.py +6 -2
  171. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +12 -9
  172. esphome/components/esp32_camera/esp32_camera.cpp +35 -27
  173. esphome/components/esp32_camera_web_server/camera_web_server.cpp +4 -2
  174. esphome/components/esp32_dac/esp32_dac.cpp +2 -2
  175. esphome/components/esp32_improv/__init__.py +5 -1
  176. esphome/components/esp32_improv/esp32_improv_component.cpp +2 -2
  177. esphome/components/esp32_rmt_led_strip/led_strip.cpp +11 -7
  178. esphome/components/esp32_rmt_led_strip/light.py +5 -1
  179. esphome/components/esp32_touch/esp32_touch.cpp +12 -8
  180. esphome/components/esp8266/gpio.cpp +10 -1
  181. esphome/components/esp8266/preferences.cpp +6 -6
  182. esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
  183. esphome/components/esp_ldo/__init__.py +91 -0
  184. esphome/components/esp_ldo/esp_ldo.cpp +43 -0
  185. esphome/components/esp_ldo/esp_ldo.h +43 -0
  186. esphome/components/esphome/ota/ota_esphome.cpp +15 -8
  187. esphome/components/ethernet/ethernet_component.cpp +38 -26
  188. esphome/components/ethernet/ethernet_component.h +1 -1
  189. esphome/components/event/__init__.py +1 -0
  190. esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
  191. esphome/components/ezo/ezo.cpp +1 -1
  192. esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
  193. esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
  194. esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
  195. esphome/components/fan/__init__.py +1 -0
  196. esphome/components/fan/fan.cpp +4 -2
  197. esphome/components/fastled_base/fastled_light.cpp +7 -5
  198. esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
  199. esphome/components/fs3000/fs3000.cpp +1 -1
  200. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
  201. esphome/components/ft63x6/ft63x6.cpp +5 -3
  202. esphome/components/gcja5/gcja5.cpp +0 -12
  203. esphome/components/gcja5/gcja5.h +8 -3
  204. esphome/components/gdk101/gdk101.cpp +2 -2
  205. esphome/components/globals/globals_component.h +13 -10
  206. esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
  207. esphome/components/gp8403/gp8403.cpp +4 -2
  208. esphome/components/gp8403/output/gp8403_output.cpp +4 -2
  209. esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
  210. esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
  211. esphome/components/gpio/switch/gpio_switch.cpp +1 -1
  212. esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
  213. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
  214. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
  215. esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
  216. esphome/components/growatt_solar/growatt_solar.cpp +6 -3
  217. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
  218. esphome/components/haier/haier_base.cpp +2 -2
  219. esphome/components/haier/hon_climate.cpp +13 -6
  220. esphome/components/havells_solar/havells_solar.cpp +5 -2
  221. esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
  222. esphome/components/hdc1080/hdc1080.cpp +2 -2
  223. esphome/components/he60r/he60r.cpp +4 -2
  224. esphome/components/hlw8012/hlw8012.cpp +6 -4
  225. esphome/components/hm3301/hm3301.cpp +2 -2
  226. esphome/components/hmc5883l/hmc5883l.cpp +2 -2
  227. esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
  228. esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
  229. esphome/components/honeywellabp/honeywellabp.cpp +4 -2
  230. esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
  231. esphome/components/hte501/hte501.cpp +3 -2
  232. esphome/components/http_request/__init__.py +2 -2
  233. esphome/components/http_request/http_request.cpp +7 -5
  234. esphome/components/http_request/http_request_idf.cpp +4 -2
  235. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  236. esphome/components/htu21d/htu21d.cpp +2 -2
  237. esphome/components/htu31d/htu31d.cpp +2 -2
  238. esphome/components/hx711/hx711.cpp +2 -2
  239. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
  240. esphome/components/hyt271/hyt271.cpp +2 -2
  241. esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
  242. esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
  243. esphome/components/i2s_audio/__init__.py +2 -0
  244. esphome/components/i2s_audio/i2s_audio.cpp +3 -4
  245. esphome/components/i2s_audio/i2s_audio.h +1 -1
  246. esphome/components/i2s_audio/media_player/__init__.py +1 -1
  247. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
  248. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +54 -64
  249. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +4 -0
  250. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +1 -1
  251. esphome/components/iaqcore/iaqcore.cpp +3 -3
  252. esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
  253. esphome/components/ili9xxx/ili9xxx_display.h +1 -1
  254. esphome/components/image/image.cpp +1 -0
  255. esphome/components/ina219/ina219.cpp +2 -2
  256. esphome/components/ina226/ina226.cpp +8 -5
  257. esphome/components/ina260/ina260.cpp +1 -1
  258. esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
  259. esphome/components/ina3221/ina3221.cpp +2 -2
  260. esphome/components/inkplate6/display.py +12 -2
  261. esphome/components/inkplate6/inkplate.cpp +13 -9
  262. esphome/components/inkplate6/inkplate.h +7 -6
  263. esphome/components/integration/integration_sensor.cpp +1 -1
  264. esphome/components/internal_temperature/internal_temperature.cpp +4 -4
  265. esphome/components/json/json_util.cpp +4 -5
  266. esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
  267. esphome/components/key_collector/key_collector.cpp +4 -2
  268. esphome/components/kmeteriso/kmeteriso.cpp +2 -1
  269. esphome/components/kuntze/kuntze.cpp +4 -2
  270. esphome/components/lc709203f/__init__.py +1 -0
  271. esphome/components/lc709203f/lc709203f.cpp +299 -0
  272. esphome/components/lc709203f/lc709203f.h +55 -0
  273. esphome/components/lc709203f/sensor.py +93 -0
  274. esphome/components/lcd_base/lcd_display.cpp +2 -2
  275. esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
  276. esphome/components/lcd_menu/lcd_menu.cpp +6 -4
  277. esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
  278. esphome/components/ld2410/ld2410.cpp +6 -7
  279. esphome/components/ld2420/ld2420.cpp +9 -7
  280. esphome/components/ld2450/ld2450.cpp +6 -4
  281. esphome/components/ld2450/sensor.py +2 -2
  282. esphome/components/ledc/ledc_output.cpp +32 -28
  283. esphome/components/libretiny/const.py +1 -1
  284. esphome/components/libretiny/preferences.cpp +6 -7
  285. esphome/components/light/__init__.py +2 -1
  286. esphome/components/light/esp_hsv_color.h +1 -1
  287. esphome/components/light/light_state.cpp +9 -5
  288. esphome/components/light/light_transformer.h +1 -1
  289. esphome/components/lightwaverf/LwTx.cpp +1 -1
  290. esphome/components/lightwaverf/lightwaverf.cpp +1 -1
  291. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
  292. esphome/components/lock/__init__.py +1 -0
  293. esphome/components/lock/lock.h +1 -1
  294. esphome/components/logger/__init__.py +6 -0
  295. esphome/components/logger/logger.cpp +9 -5
  296. esphome/components/logger/logger.h +4 -4
  297. esphome/components/logger/logger_esp32.cpp +5 -5
  298. esphome/components/ltr390/ltr390.cpp +8 -5
  299. esphome/components/ltr501/ltr501.cpp +19 -14
  300. esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
  301. esphome/components/lvgl/__init__.py +2 -2
  302. esphome/components/lvgl/automation.py +5 -4
  303. esphome/components/lvgl/defines.py +0 -2
  304. esphome/components/lvgl/lv_validation.py +1 -3
  305. esphome/components/lvgl/lvcode.py +7 -8
  306. esphome/components/lvgl/lvgl_esphome.cpp +26 -10
  307. esphome/components/lvgl/schemas.py +22 -23
  308. esphome/components/lvgl/trigger.py +8 -3
  309. esphome/components/lvgl/widgets/__init__.py +2 -2
  310. esphome/components/lvgl/widgets/canvas.py +9 -3
  311. esphome/components/lvgl/widgets/line.py +2 -1
  312. esphome/components/lvgl/widgets/tabview.py +7 -0
  313. esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
  314. esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
  315. esphome/components/max17043/max17043.cpp +2 -2
  316. esphome/components/max31855/max31855.cpp +2 -1
  317. esphome/components/max31856/max31856.cpp +9 -11
  318. esphome/components/max31865/max31865.cpp +6 -4
  319. esphome/components/max44009/max44009.cpp +2 -2
  320. esphome/components/max6675/max6675.cpp +1 -1
  321. esphome/components/max6956/max6956.cpp +5 -3
  322. esphome/components/max7219/max7219.cpp +8 -6
  323. esphome/components/max7219digit/automation.h +52 -0
  324. esphome/components/max7219digit/display.py +93 -1
  325. esphome/components/max7219digit/max7219digit.cpp +16 -13
  326. esphome/components/max9611/max9611.cpp +9 -6
  327. esphome/components/mcp23008/mcp23008.cpp +1 -1
  328. esphome/components/mcp23016/mcp23016.cpp +1 -1
  329. esphome/components/mcp23017/mcp23017.cpp +1 -1
  330. esphome/components/mcp23s08/mcp23s08.cpp +1 -1
  331. esphome/components/mcp23s17/mcp23s17.cpp +1 -1
  332. esphome/components/mcp3008/mcp3008.cpp +1 -1
  333. esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
  334. esphome/components/mcp3204/mcp3204.cpp +1 -1
  335. esphome/components/mcp4461/mcp4461.cpp +2 -2
  336. esphome/components/mcp4725/mcp4725.cpp +2 -2
  337. esphome/components/mcp4728/mcp4728.cpp +2 -2
  338. esphome/components/mcp9600/mcp9600.cpp +1 -1
  339. esphome/components/mcp9808/mcp9808.cpp +4 -4
  340. esphome/components/mdns/mdns_component.cpp +8 -2
  341. esphome/components/mdns/mdns_component.h +3 -1
  342. esphome/components/mdns/mdns_esp32.cpp +2 -2
  343. esphome/components/media_player/__init__.py +1 -0
  344. esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
  345. esphome/components/micro_wake_word/streaming_model.cpp +10 -6
  346. esphome/components/micronova/micronova.h +2 -2
  347. esphome/components/mics_4514/mics_4514.cpp +2 -2
  348. esphome/components/midea/air_conditioner.cpp +7 -5
  349. esphome/components/midea_ir/midea_ir.cpp +1 -1
  350. esphome/components/mipi_spi/mipi_spi.cpp +24 -15
  351. esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
  352. esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
  353. esphome/components/mlx90614/mlx90614.cpp +4 -3
  354. esphome/components/mmc5603/mmc5603.cpp +2 -2
  355. esphome/components/mmc5983/mmc5983.cpp +1 -1
  356. esphome/components/modbus/modbus.cpp +7 -5
  357. esphome/components/modbus_controller/modbus_controller.cpp +6 -4
  358. esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
  359. esphome/components/modbus_controller/switch/__init__.py +6 -2
  360. esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
  361. esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
  362. esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
  363. esphome/components/mpr121/mpr121.cpp +2 -2
  364. esphome/components/mpu6050/mpu6050.cpp +6 -6
  365. esphome/components/mpu6886/mpu6886.cpp +6 -6
  366. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
  367. esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
  368. esphome/components/mqtt/mqtt_client.cpp +31 -24
  369. esphome/components/mqtt/mqtt_component.cpp +2 -2
  370. esphome/components/mqtt/mqtt_cover.cpp +8 -4
  371. esphome/components/mqtt/mqtt_fan.cpp +12 -6
  372. esphome/components/mqtt/mqtt_valve.cpp +4 -2
  373. esphome/components/ms5611/ms5611.cpp +2 -2
  374. esphome/components/ms8607/ms8607.cpp +2 -2
  375. esphome/components/msa3xx/msa3xx.cpp +16 -12
  376. esphome/components/my9231/my9231.cpp +7 -5
  377. esphome/components/nau7802/nau7802.cpp +6 -4
  378. esphome/components/neopixelbus/neopixelbus_light.h +2 -2
  379. esphome/components/network/ip_address.h +1 -1
  380. esphome/components/network/util.cpp +13 -0
  381. esphome/components/nextion/base_component.py +2 -0
  382. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +2 -3
  383. esphome/components/nextion/display.py +34 -22
  384. esphome/components/nextion/nextion.cpp +182 -143
  385. esphome/components/nextion/nextion.h +36 -0
  386. esphome/components/nextion/nextion_commands.cpp +3 -3
  387. esphome/components/nextion/nextion_upload_arduino.cpp +58 -61
  388. esphome/components/nextion/nextion_upload_idf.cpp +69 -72
  389. esphome/components/nextion/sensor/nextion_sensor.cpp +4 -4
  390. esphome/components/nextion/switch/nextion_switch.cpp +2 -2
  391. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +2 -2
  392. esphome/components/nfc/nci_message.h +1 -1
  393. esphome/components/nfc/ndef_record.h +1 -1
  394. esphome/components/nfc/ndef_record_text.h +1 -1
  395. esphome/components/nfc/ndef_record_uri.h +1 -1
  396. esphome/components/nfc/nfc.h +1 -1
  397. esphome/components/nfc/nfc_tag.h +1 -1
  398. esphome/components/noblex/noblex.cpp +1 -1
  399. esphome/components/npi19/npi19.cpp +5 -7
  400. esphome/components/number/__init__.py +11 -0
  401. esphome/components/online_image/__init__.py +13 -1
  402. esphome/components/online_image/online_image.cpp +26 -4
  403. esphome/components/online_image/online_image.h +21 -4
  404. esphome/components/opentherm/generate.py +3 -3
  405. esphome/components/opentherm/hub.cpp +11 -7
  406. esphome/components/opentherm/number/number.cpp +5 -3
  407. esphome/components/opentherm/opentherm.h +1 -1
  408. esphome/components/opentherm/schema.py +13 -13
  409. esphome/components/opentherm/validate.py +1 -1
  410. esphome/components/openthread/__init__.py +146 -0
  411. esphome/components/openthread/const.py +10 -0
  412. esphome/components/openthread/openthread.cpp +206 -0
  413. esphome/components/openthread/openthread.h +68 -0
  414. esphome/components/openthread/openthread_esp.cpp +164 -0
  415. esphome/components/openthread/tlv.py +58 -0
  416. esphome/components/openthread_info/__init__.py +0 -0
  417. esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
  418. esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
  419. esphome/components/openthread_info/text_sensor.py +105 -0
  420. esphome/components/output/float_output.cpp +1 -1
  421. esphome/components/output/switch/output_switch.cpp +1 -1
  422. esphome/components/packet_transport/packet_transport.cpp +6 -4
  423. esphome/components/pca6416a/pca6416a.cpp +2 -2
  424. esphome/components/pca9554/pca9554.cpp +6 -4
  425. esphome/components/pca9685/pca9685_output.cpp +12 -8
  426. esphome/components/pcd8544/pcd_8544.cpp +1 -1
  427. esphome/components/pcf85063/pcf85063.cpp +2 -2
  428. esphome/components/pcf8563/pcf8563.cpp +2 -2
  429. esphome/components/pcf8574/pcf8574.cpp +2 -2
  430. esphome/components/pid/pid_climate.cpp +8 -5
  431. esphome/components/pid/pid_climate.h +1 -1
  432. esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
  433. esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
  434. esphome/components/pipsolar/pipsolar.cpp +3 -3
  435. esphome/components/pm1006/pm1006.cpp +3 -7
  436. esphome/components/pm1006/pm1006.h +4 -1
  437. esphome/components/pm2005/pm2005.cpp +12 -13
  438. esphome/components/pm2005/sensor.py +1 -1
  439. esphome/components/pmsa003i/pmsa003i.cpp +2 -2
  440. esphome/components/pmsx003/pmsx003.cpp +0 -4
  441. esphome/components/pmsx003/pmsx003.h +5 -2
  442. esphome/components/pmwcs3/pmwcs3.cpp +9 -13
  443. esphome/components/pmwcs3/pmwcs3.h +0 -1
  444. esphome/components/pn532/pn532.cpp +7 -7
  445. esphome/components/pn532/pn532.h +1 -1
  446. esphome/components/pn532_spi/pn532_spi.cpp +1 -1
  447. esphome/components/pn7150/pn7150.cpp +4 -4
  448. esphome/components/pn7160/pn7160.cpp +4 -4
  449. esphome/components/power_supply/power_supply.cpp +6 -4
  450. esphome/components/power_supply/power_supply.h +1 -1
  451. esphome/components/psram/__init__.py +59 -35
  452. esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
  453. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
  454. esphome/components/pylontech/pylontech.cpp +2 -2
  455. esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
  456. esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
  457. esphome/components/pzemac/pzemac.cpp +4 -2
  458. esphome/components/pzemdc/pzemdc.cpp +4 -2
  459. esphome/components/qmc5883l/qmc5883l.cpp +2 -2
  460. esphome/components/qmp6988/qmp6988.cpp +2 -2
  461. esphome/components/qmp6988/qmp6988.h +1 -1
  462. esphome/components/qr_code/qr_code.cpp +5 -3
  463. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  464. esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
  465. esphome/components/rc522/rc522.cpp +5 -5
  466. esphome/components/rdm6300/rdm6300.cpp +1 -0
  467. esphome/components/remote_receiver/__init__.py +10 -2
  468. esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
  469. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
  470. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
  471. esphome/components/remote_transmitter/__init__.py +10 -2
  472. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
  473. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
  474. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
  475. esphome/components/resistance/resistance_sensor.cpp +6 -3
  476. esphome/components/restart/button/restart_button.cpp +1 -1
  477. esphome/components/restart/switch/restart_switch.cpp +1 -1
  478. esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
  479. esphome/components/rp2040/__init__.py +7 -0
  480. esphome/components/rp2040/core.cpp +8 -1
  481. esphome/components/rp2040/gpio.cpp +26 -9
  482. esphome/components/rp2040/preferences.cpp +3 -3
  483. esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
  484. esphome/components/rp2040_pio_led_strip/light.py +1 -1
  485. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
  486. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
  487. esphome/components/rtttl/rtttl.cpp +11 -9
  488. esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
  489. esphome/components/safe_mode/safe_mode.cpp +9 -8
  490. esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
  491. esphome/components/scd30/scd30.cpp +11 -8
  492. esphome/components/scd4x/scd4x.cpp +12 -8
  493. esphome/components/sdl/display.py +40 -0
  494. esphome/components/sdl/sdl_esphome.cpp +2 -2
  495. esphome/components/sdl/sdl_esphome.h +8 -0
  496. esphome/components/sdm_meter/sdm_meter.cpp +5 -2
  497. esphome/components/sdp3x/sdp3x.cpp +11 -11
  498. esphome/components/sds011/sds011.cpp +5 -6
  499. esphome/components/sds011/sds011.h +4 -1
  500. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
  501. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
  502. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
  503. esphome/components/selec_meter/selec_meter.cpp +5 -2
  504. esphome/components/select/__init__.py +1 -0
  505. esphome/components/sen0321/sen0321.cpp +2 -2
  506. esphome/components/sen21231/sen21231.cpp +1 -1
  507. esphome/components/sen5x/sen5x.cpp +10 -7
  508. esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
  509. esphome/components/sensirion_common/i2c_sensirion.h +1 -0
  510. esphome/components/sensor/__init__.py +11 -1
  511. esphome/components/sensor/filter.h +1 -1
  512. esphome/components/sensor/sensor.h +9 -5
  513. esphome/components/servo/servo.cpp +12 -9
  514. esphome/components/servo/servo.h +1 -1
  515. esphome/components/sfa30/sfa30.cpp +1 -1
  516. esphome/components/sgp30/sgp30.cpp +10 -8
  517. esphome/components/sgp4x/sgp4x.cpp +49 -61
  518. esphome/components/sgp4x/sgp4x.h +0 -1
  519. esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
  520. esphome/components/sht3xd/sht3xd.cpp +1 -1
  521. esphome/components/sht4x/sht4x.cpp +2 -2
  522. esphome/components/shtcx/shtcx.cpp +13 -16
  523. esphome/components/shutdown/button/shutdown_button.cpp +1 -1
  524. esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
  525. esphome/components/sim800l/sim800l.cpp +2 -2
  526. esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
  527. esphome/components/sm16716/sm16716.cpp +1 -1
  528. esphome/components/sm2135/sm2135.cpp +1 -1
  529. esphome/components/sm2235/sm2235.cpp +5 -3
  530. esphome/components/sm2335/sm2335.cpp +5 -3
  531. esphome/components/sml/sml.cpp +1 -1
  532. esphome/components/sn74hc165/sn74hc165.cpp +1 -2
  533. esphome/components/sn74hc595/sn74hc595.cpp +1 -2
  534. esphome/components/sntp/sntp_component.cpp +1 -1
  535. esphome/components/socket/__init__.py +2 -0
  536. esphome/components/socket/bsd_sockets_impl.cpp +51 -7
  537. esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
  538. esphome/components/socket/lwip_sockets_impl.cpp +51 -7
  539. esphome/components/socket/socket.cpp +31 -0
  540. esphome/components/socket/socket.h +27 -1
  541. esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
  542. esphome/components/sonoff_d1/sonoff_d1.h +2 -2
  543. esphome/components/sound_level/sound_level.cpp +4 -2
  544. esphome/components/speaker/media_player/__init__.py +3 -0
  545. esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
  546. esphome/components/speaker/media_player/speaker_media_player.h +6 -0
  547. esphome/components/spi/__init__.py +10 -2
  548. esphome/components/spi/spi.cpp +4 -4
  549. esphome/components/spi_device/spi_device.cpp +1 -2
  550. esphome/components/sprinkler/sprinkler.cpp +9 -6
  551. esphome/components/sps30/sps30.cpp +16 -15
  552. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  553. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
  554. esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
  555. esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
  556. esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
  557. esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
  558. esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
  559. esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
  560. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
  561. esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
  562. esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
  563. esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
  564. esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
  565. esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
  566. esphome/components/st7567_base/st7567_base.cpp +3 -3
  567. esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
  568. esphome/components/st7567_spi/st7567_spi.cpp +1 -1
  569. esphome/components/st7701s/st7701s.cpp +4 -2
  570. esphome/components/st7735/st7735.cpp +3 -3
  571. esphome/components/st7789v/st7789v.cpp +10 -7
  572. esphome/components/st7920/st7920.cpp +6 -4
  573. esphome/components/statsd/statsd.cpp +9 -5
  574. esphome/components/status_led/light/status_led_light.cpp +1 -1
  575. esphome/components/status_led/status_led.cpp +1 -1
  576. esphome/components/stepper/stepper.h +5 -3
  577. esphome/components/sts3x/sts3x.cpp +2 -2
  578. esphome/components/switch/__init__.py +1 -0
  579. esphome/components/switch/switch.cpp +18 -12
  580. esphome/components/switch/switch.h +1 -1
  581. esphome/components/sx1509/__init__.py +53 -20
  582. esphome/components/sx1509/sx1509.cpp +29 -5
  583. esphome/components/sx1509/sx1509.h +9 -1
  584. esphome/components/t6615/t6615.cpp +1 -0
  585. esphome/components/tc74/tc74.cpp +1 -1
  586. esphome/components/tca9548a/tca9548a.cpp +1 -1
  587. esphome/components/tca9555/tca9555.cpp +2 -2
  588. esphome/components/tcs34725/tcs34725.cpp +4 -4
  589. esphome/components/tee501/tee501.cpp +3 -2
  590. esphome/components/tem3200/tem3200.cpp +5 -6
  591. esphome/components/template/alarm_control_panel/__init__.py +6 -0
  592. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +38 -12
  593. esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +3 -1
  594. esphome/components/template/cover/template_cover.cpp +1 -1
  595. esphome/components/template/select/template_select.cpp +6 -4
  596. esphome/components/template/text/template_text.cpp +2 -3
  597. esphome/components/template/valve/template_valve.cpp +5 -3
  598. esphome/components/text/__init__.py +10 -11
  599. esphome/components/text_sensor/__init__.py +1 -0
  600. esphome/components/thermostat/thermostat_climate.cpp +67 -43
  601. esphome/components/time/__init__.py +1 -2
  602. esphome/components/time_based/time_based_cover.cpp +4 -2
  603. esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
  604. esphome/components/tm1621/tm1621.cpp +3 -3
  605. esphome/components/tm1637/tm1637.cpp +9 -7
  606. esphome/components/tm1638/tm1638.cpp +7 -5
  607. esphome/components/tm1651/tm1651.cpp +2 -2
  608. esphome/components/tmp102/tmp102.cpp +1 -3
  609. esphome/components/tmp102/tmp102.h +0 -3
  610. esphome/components/tmp1075/tmp1075.cpp +12 -9
  611. esphome/components/tmp117/tmp117.cpp +2 -2
  612. esphome/components/tof10120/tof10120_sensor.cpp +2 -2
  613. esphome/components/tormatic/tormatic_cover.cpp +4 -2
  614. esphome/components/tsl2561/tsl2561.cpp +7 -5
  615. esphome/components/tsl2591/tsl2591.cpp +25 -27
  616. esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
  617. esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
  618. esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
  619. esphome/components/tuya/select/tuya_select.cpp +5 -3
  620. esphome/components/tx20/tx20.cpp +3 -3
  621. esphome/components/uart/__init__.py +4 -5
  622. esphome/components/uart/button/uart_button.cpp +1 -1
  623. esphome/components/uart/switch/uart_switch.cpp +2 -2
  624. esphome/components/uart/uart.cpp +2 -2
  625. esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
  626. esphome/components/uart/uart_component_esp8266.cpp +9 -7
  627. esphome/components/uart/uart_component_esp_idf.cpp +9 -7
  628. esphome/components/uart/uart_component_host.cpp +11 -8
  629. esphome/components/uart/uart_component_libretiny.cpp +8 -6
  630. esphome/components/uart/uart_component_rp2040.cpp +8 -6
  631. esphome/components/udp/udp_component.cpp +9 -5
  632. esphome/components/ufire_ec/ufire_ec.cpp +5 -3
  633. esphome/components/ufire_ise/ufire_ise.cpp +1 -1
  634. esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
  635. esphome/components/update/__init__.py +1 -0
  636. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
  637. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
  638. esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
  639. esphome/components/usb_host/__init__.py +64 -0
  640. esphome/components/usb_host/usb_host.h +116 -0
  641. esphome/components/usb_host/usb_host_client.cpp +394 -0
  642. esphome/components/usb_host/usb_host_component.cpp +35 -0
  643. esphome/components/usb_uart/__init__.py +134 -0
  644. esphome/components/usb_uart/ch34x.cpp +80 -0
  645. esphome/components/usb_uart/cp210x.cpp +126 -0
  646. esphome/components/usb_uart/usb_uart.cpp +328 -0
  647. esphome/components/usb_uart/usb_uart.h +151 -0
  648. esphome/components/valve/__init__.py +1 -0
  649. esphome/components/veml3235/veml3235.cpp +13 -9
  650. esphome/components/veml7700/veml7700.cpp +10 -6
  651. esphome/components/voice_assistant/voice_assistant.cpp +7 -7
  652. esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
  653. esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
  654. esphome/components/web_server/server_index_v2.h +632 -630
  655. esphome/components/web_server/server_index_v3.h +411 -409
  656. esphome/components/web_server/web_server.cpp +5 -3
  657. esphome/components/web_server_base/web_server_base.cpp +1 -1
  658. esphome/components/web_server_idf/utils.cpp +1 -1
  659. esphome/components/web_server_idf/web_server_idf.cpp +1 -1
  660. esphome/components/weikai/__init__.py +2 -0
  661. esphome/components/weikai/weikai.cpp +23 -21
  662. esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
  663. esphome/components/weikai_spi/weikai_spi.cpp +11 -6
  664. esphome/components/wiegand/wiegand.cpp +1 -1
  665. esphome/components/wifi/wifi_component.cpp +50 -37
  666. esphome/components/wifi/wifi_component.h +7 -4
  667. esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
  668. esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
  669. esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
  670. esphome/components/wireguard/wireguard.cpp +21 -21
  671. esphome/components/wl_134/text_sensor.py +1 -2
  672. esphome/components/wled/wled_light_effect.cpp +1 -1
  673. esphome/components/x9c/x9c.cpp +5 -3
  674. esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
  675. esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
  676. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
  677. esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
  678. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
  679. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
  680. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
  681. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
  682. esphome/components/xl9535/xl9535.cpp +2 -2
  683. esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
  684. esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
  685. esphome/config.py +3 -2
  686. esphome/config_validation.py +46 -17
  687. esphome/const.py +10 -1
  688. esphome/core/__init__.py +37 -18
  689. esphome/core/application.cpp +188 -5
  690. esphome/core/application.h +110 -0
  691. esphome/core/component.h +13 -0
  692. esphome/core/config.py +12 -0
  693. esphome/core/defines.h +10 -2
  694. esphome/core/hal.h +5 -0
  695. esphome/core/helpers.cpp +1 -1
  696. esphome/core/helpers.h +4 -4
  697. esphome/core/log.h +2 -0
  698. esphome/core/log_const_en.h +4 -0
  699. esphome/core/scheduler.cpp +2 -2
  700. esphome/coroutine.py +3 -4
  701. esphome/cpp_generator.py +32 -32
  702. esphome/dashboard/core.py +2 -2
  703. esphome/dashboard/web_server.py +2 -2
  704. esphome/git.py +4 -4
  705. esphome/helpers.py +5 -6
  706. esphome/loader.py +8 -7
  707. esphome/log.py +7 -1
  708. esphome/platformio_api.py +2 -3
  709. esphome/storage_json.py +13 -5
  710. esphome/types.py +12 -13
  711. esphome/util.py +1 -2
  712. esphome/writer.py +5 -3
  713. esphome/yaml_util.py +6 -1
  714. esphome/zeroconf.py +1 -1
  715. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/METADATA +12 -11
  716. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/RECORD +720 -667
  717. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/WHEEL +1 -1
  718. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/entry_points.txt +0 -0
  719. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/licenses/LICENSE +0 -0
  720. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,218 @@
1
+ #pragma once
2
+
3
+ #include "esphome/components/openthread/openthread.h"
4
+ #include "esphome/components/text_sensor/text_sensor.h"
5
+ #include "esphome/core/component.h"
6
+ #ifdef USE_OPENTHREAD
7
+
8
+ namespace esphome {
9
+ namespace openthread_info {
10
+
11
+ using esphome::openthread::InstanceLock;
12
+
13
+ class OpenThreadInstancePollingComponent : public PollingComponent {
14
+ public:
15
+ void update() override {
16
+ auto lock = InstanceLock::try_acquire(10);
17
+ if (!lock) {
18
+ return;
19
+ }
20
+
21
+ this->update_instance(lock->get_instance());
22
+ }
23
+ float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
24
+
25
+ protected:
26
+ virtual void update_instance(otInstance *instance) = 0;
27
+ };
28
+
29
+ class IPAddressOpenThreadInfo : public PollingComponent, public text_sensor::TextSensor {
30
+ public:
31
+ void update() override {
32
+ std::optional<otIp6Address> address = openthread::global_openthread_component->get_omr_address();
33
+ if (!address) {
34
+ return;
35
+ }
36
+
37
+ char address_as_string[40];
38
+ otIp6AddressToString(&*address, address_as_string, 40);
39
+ std::string ip = address_as_string;
40
+
41
+ if (this->last_ip_ != ip) {
42
+ this->last_ip_ = ip;
43
+ this->publish_state(this->last_ip_);
44
+ }
45
+ }
46
+ float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
47
+ void dump_config() override;
48
+
49
+ protected:
50
+ std::string last_ip_;
51
+ };
52
+
53
+ class RoleOpenThreadInfo : public OpenThreadInstancePollingComponent, public text_sensor::TextSensor {
54
+ public:
55
+ void update_instance(otInstance *instance) override {
56
+ otDeviceRole role = otThreadGetDeviceRole(instance);
57
+
58
+ if (this->last_role_ != role) {
59
+ this->last_role_ = role;
60
+ this->publish_state(otThreadDeviceRoleToString(this->last_role_));
61
+ }
62
+ }
63
+ void dump_config() override;
64
+
65
+ protected:
66
+ otDeviceRole last_role_;
67
+ };
68
+
69
+ class Rloc16OpenThreadInfo : public OpenThreadInstancePollingComponent, public text_sensor::TextSensor {
70
+ public:
71
+ void update_instance(otInstance *instance) override {
72
+ uint16_t rloc16 = otThreadGetRloc16(instance);
73
+ if (this->last_rloc16_ != rloc16) {
74
+ this->last_rloc16_ = rloc16;
75
+ char buf[5];
76
+ snprintf(buf, sizeof(buf), "%04x", rloc16);
77
+ this->publish_state(buf);
78
+ }
79
+ }
80
+ float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
81
+ void dump_config() override;
82
+
83
+ protected:
84
+ uint16_t last_rloc16_;
85
+ };
86
+
87
+ class ExtAddrOpenThreadInfo : public OpenThreadInstancePollingComponent, public text_sensor::TextSensor {
88
+ public:
89
+ void update_instance(otInstance *instance) override {
90
+ const auto *extaddr = otLinkGetExtendedAddress(instance);
91
+ if (!std::equal(this->last_extaddr_.begin(), this->last_extaddr_.end(), extaddr->m8)) {
92
+ std::copy(extaddr->m8, extaddr->m8 + 8, this->last_extaddr_.begin());
93
+ this->publish_state(format_hex(extaddr->m8, 8));
94
+ }
95
+ }
96
+ float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
97
+ void dump_config() override;
98
+
99
+ protected:
100
+ std::array<uint8_t, 8> last_extaddr_{};
101
+ };
102
+
103
+ class Eui64OpenThreadInfo : public OpenThreadInstancePollingComponent, public text_sensor::TextSensor {
104
+ public:
105
+ void update_instance(otInstance *instance) override {
106
+ otExtAddress addr;
107
+ otLinkGetFactoryAssignedIeeeEui64(instance, &addr);
108
+
109
+ if (!std::equal(this->last_eui64_.begin(), this->last_eui64_.end(), addr.m8)) {
110
+ std::copy(addr.m8, addr.m8 + 8, this->last_eui64_.begin());
111
+ this->publish_state(format_hex(this->last_eui64_.begin(), 8));
112
+ }
113
+ }
114
+ float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
115
+ void dump_config() override;
116
+
117
+ protected:
118
+ std::array<uint8_t, 8> last_eui64_{};
119
+ };
120
+
121
+ class ChannelOpenThreadInfo : public OpenThreadInstancePollingComponent, public text_sensor::TextSensor {
122
+ public:
123
+ void update_instance(otInstance *instance) override {
124
+ uint8_t channel = otLinkGetChannel(instance);
125
+ if (this->last_channel_ != channel) {
126
+ this->last_channel_ = channel;
127
+ this->publish_state(std::to_string(this->last_channel_));
128
+ }
129
+ }
130
+ float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
131
+ void dump_config() override;
132
+
133
+ protected:
134
+ uint8_t last_channel_;
135
+ };
136
+
137
+ class DatasetOpenThreadInfo : public OpenThreadInstancePollingComponent {
138
+ public:
139
+ void update_instance(otInstance *instance) override {
140
+ otOperationalDataset dataset;
141
+ if (otDatasetGetActive(instance, &dataset) != OT_ERROR_NONE) {
142
+ return;
143
+ }
144
+
145
+ this->update_dataset(&dataset);
146
+ }
147
+
148
+ protected:
149
+ virtual void update_dataset(otOperationalDataset *dataset) = 0;
150
+ };
151
+
152
+ class NetworkNameOpenThreadInfo : public DatasetOpenThreadInfo, public text_sensor::TextSensor {
153
+ public:
154
+ void update_dataset(otOperationalDataset *dataset) override {
155
+ if (this->last_network_name_ != dataset->mNetworkName.m8) {
156
+ this->last_network_name_ = dataset->mNetworkName.m8;
157
+ this->publish_state(this->last_network_name_);
158
+ }
159
+ }
160
+ float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
161
+ void dump_config() override;
162
+
163
+ protected:
164
+ std::string last_network_name_;
165
+ };
166
+
167
+ class NetworkKeyOpenThreadInfo : public DatasetOpenThreadInfo, public text_sensor::TextSensor {
168
+ public:
169
+ void update_dataset(otOperationalDataset *dataset) override {
170
+ if (!std::equal(this->last_key_.begin(), this->last_key_.end(), dataset->mNetworkKey.m8)) {
171
+ std::copy(dataset->mNetworkKey.m8, dataset->mNetworkKey.m8 + 16, this->last_key_.begin());
172
+ this->publish_state(format_hex(dataset->mNetworkKey.m8, 16));
173
+ }
174
+ }
175
+ float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
176
+ void dump_config() override;
177
+
178
+ protected:
179
+ std::array<uint8_t, 16> last_key_{};
180
+ };
181
+
182
+ class PanIdOpenThreadInfo : public DatasetOpenThreadInfo, public text_sensor::TextSensor {
183
+ public:
184
+ void update_dataset(otOperationalDataset *dataset) override {
185
+ uint16_t panid = dataset->mPanId;
186
+ if (this->last_panid_ != panid) {
187
+ this->last_panid_ = panid;
188
+ char buf[5];
189
+ snprintf(buf, sizeof(buf), "%04x", panid);
190
+ this->publish_state(buf);
191
+ }
192
+ }
193
+ float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
194
+ void dump_config() override;
195
+
196
+ protected:
197
+ uint16_t last_panid_;
198
+ };
199
+
200
+ class ExtPanIdOpenThreadInfo : public DatasetOpenThreadInfo, public text_sensor::TextSensor {
201
+ public:
202
+ void update_dataset(otOperationalDataset *dataset) override {
203
+ if (!std::equal(this->last_extpanid_.begin(), this->last_extpanid_.end(), dataset->mExtendedPanId.m8)) {
204
+ std::copy(dataset->mExtendedPanId.m8, dataset->mExtendedPanId.m8 + 8, this->last_extpanid_.begin());
205
+ this->publish_state(format_hex(this->last_extpanid_.begin(), 8));
206
+ }
207
+ }
208
+
209
+ float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
210
+ void dump_config() override;
211
+
212
+ protected:
213
+ std::array<uint8_t, 8> last_extpanid_{};
214
+ };
215
+
216
+ } // namespace openthread_info
217
+ } // namespace esphome
218
+ #endif
@@ -0,0 +1,105 @@
1
+ import esphome.codegen as cg
2
+ from esphome.components import text_sensor
3
+ from esphome.components.openthread.const import (
4
+ CONF_EXT_PAN_ID,
5
+ CONF_NETWORK_KEY,
6
+ CONF_NETWORK_NAME,
7
+ CONF_PAN_ID,
8
+ )
9
+ import esphome.config_validation as cv
10
+ from esphome.const import CONF_CHANNEL, CONF_IP_ADDRESS, ENTITY_CATEGORY_DIAGNOSTIC
11
+
12
+ CONF_ROLE = "role"
13
+ CONF_RLOC16 = "rloc16"
14
+ CONF_EUI64 = "eui64"
15
+ CONF_EXT_ADDR = "ext_addr"
16
+
17
+
18
+ DEPENDENCIES = ["openthread"]
19
+
20
+ openthread_info_ns = cg.esphome_ns.namespace("openthread_info")
21
+ IPAddressOpenThreadInfo = openthread_info_ns.class_(
22
+ "IPAddressOpenThreadInfo", text_sensor.TextSensor, cg.PollingComponent
23
+ )
24
+ RoleOpenThreadInfo = openthread_info_ns.class_(
25
+ "RoleOpenThreadInfo", text_sensor.TextSensor, cg.PollingComponent
26
+ )
27
+ Rloc16OpenThreadInfo = openthread_info_ns.class_(
28
+ "Rloc16OpenThreadInfo", text_sensor.TextSensor, cg.PollingComponent
29
+ )
30
+ ExtAddrOpenThreadInfo = openthread_info_ns.class_(
31
+ "ExtAddrOpenThreadInfo", text_sensor.TextSensor, cg.PollingComponent
32
+ )
33
+ Eui64OpenThreadInfo = openthread_info_ns.class_(
34
+ "Eui64OpenThreadInfo", text_sensor.TextSensor, cg.Component
35
+ )
36
+ ChannelOpenThreadInfo = openthread_info_ns.class_(
37
+ "ChannelOpenThreadInfo", text_sensor.TextSensor, cg.PollingComponent
38
+ )
39
+ NetworkNameOpenThreadInfo = openthread_info_ns.class_(
40
+ "NetworkNameOpenThreadInfo", text_sensor.TextSensor, cg.PollingComponent
41
+ )
42
+ NetworkKeyOpenThreadInfo = openthread_info_ns.class_(
43
+ "NetworkKeyOpenThreadInfo", text_sensor.TextSensor, cg.PollingComponent
44
+ )
45
+ PanIdOpenThreadInfo = openthread_info_ns.class_(
46
+ "PanIdOpenThreadInfo", text_sensor.TextSensor, cg.PollingComponent
47
+ )
48
+ ExtPanIdOpenThreadInfo = openthread_info_ns.class_(
49
+ "ExtPanIdOpenThreadInfo", text_sensor.TextSensor, cg.PollingComponent
50
+ )
51
+
52
+
53
+ CONFIG_SCHEMA = cv.Schema(
54
+ {
55
+ cv.Optional(CONF_IP_ADDRESS): text_sensor.text_sensor_schema(
56
+ IPAddressOpenThreadInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC
57
+ ),
58
+ cv.Optional(CONF_ROLE): text_sensor.text_sensor_schema(
59
+ RoleOpenThreadInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC
60
+ ).extend(cv.polling_component_schema("1s")),
61
+ cv.Optional(CONF_RLOC16): text_sensor.text_sensor_schema(
62
+ Rloc16OpenThreadInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC
63
+ ).extend(cv.polling_component_schema("1s")),
64
+ cv.Optional(CONF_EXT_ADDR): text_sensor.text_sensor_schema(
65
+ ExtAddrOpenThreadInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC
66
+ ).extend(cv.polling_component_schema("1s")),
67
+ cv.Optional(CONF_EUI64): text_sensor.text_sensor_schema(
68
+ Eui64OpenThreadInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC
69
+ ).extend(cv.polling_component_schema("1h")),
70
+ cv.Optional(CONF_CHANNEL): text_sensor.text_sensor_schema(
71
+ ChannelOpenThreadInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC
72
+ ).extend(cv.polling_component_schema("1s")),
73
+ cv.Optional(CONF_NETWORK_NAME): text_sensor.text_sensor_schema(
74
+ NetworkNameOpenThreadInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC
75
+ ).extend(cv.polling_component_schema("1s")),
76
+ cv.Optional(CONF_NETWORK_KEY): text_sensor.text_sensor_schema(
77
+ NetworkKeyOpenThreadInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC
78
+ ).extend(cv.polling_component_schema("1s")),
79
+ cv.Optional(CONF_PAN_ID): text_sensor.text_sensor_schema( # noqa: F821
80
+ PanIdOpenThreadInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC
81
+ ).extend(cv.polling_component_schema("1s")),
82
+ cv.Optional(CONF_EXT_PAN_ID): text_sensor.text_sensor_schema(
83
+ ExtPanIdOpenThreadInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC
84
+ ).extend(cv.polling_component_schema("1s")),
85
+ }
86
+ )
87
+
88
+
89
+ async def setup_conf(config: dict, key: str):
90
+ if conf := config.get(key):
91
+ var = await text_sensor.new_text_sensor(conf)
92
+ await cg.register_component(var, conf)
93
+
94
+
95
+ async def to_code(config):
96
+ await setup_conf(config, CONF_IP_ADDRESS)
97
+ await setup_conf(config, CONF_ROLE)
98
+ await setup_conf(config, CONF_RLOC16)
99
+ await setup_conf(config, CONF_EXT_ADDR)
100
+ await setup_conf(config, CONF_EUI64)
101
+ await setup_conf(config, CONF_CHANNEL)
102
+ await setup_conf(config, CONF_NETWORK_NAME)
103
+ await setup_conf(config, CONF_NETWORK_KEY)
104
+ await setup_conf(config, CONF_PAN_ID)
105
+ await setup_conf(config, CONF_EXT_PAN_ID)
@@ -1,6 +1,6 @@
1
1
  #include "float_output.h"
2
- #include "esphome/core/log.h"
3
2
  #include "esphome/core/helpers.h"
3
+ #include "esphome/core/log.h"
4
4
 
5
5
  namespace esphome {
6
6
  namespace output {
@@ -8,7 +8,7 @@ static const char *const TAG = "output.switch";
8
8
 
9
9
  void OutputSwitch::dump_config() { LOG_SWITCH("", "Output Switch", this); }
10
10
  void OutputSwitch::setup() {
11
- ESP_LOGCONFIG(TAG, "Setting up Output Switch '%s'...", this->name_.c_str());
11
+ ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
12
12
 
13
13
  bool initial_state = this->get_initial_state_with_restore_mode().value_or(false);
14
14
 
@@ -474,10 +474,12 @@ void PacketTransport::process_(const std::vector<uint8_t> &data) {
474
474
  }
475
475
 
476
476
  void PacketTransport::dump_config() {
477
- ESP_LOGCONFIG(TAG, "Packet Transport:");
478
- ESP_LOGCONFIG(TAG, " Platform: %s", this->platform_name_);
479
- ESP_LOGCONFIG(TAG, " Encrypted: %s", YESNO(this->is_encrypted_()));
480
- ESP_LOGCONFIG(TAG, " Ping-pong: %s", YESNO(this->ping_pong_enable_));
477
+ ESP_LOGCONFIG(TAG,
478
+ "Packet Transport:\n"
479
+ " Platform: %s\n"
480
+ " Encrypted: %s\n"
481
+ " Ping-pong: %s",
482
+ this->platform_name_, YESNO(this->is_encrypted_()), YESNO(this->ping_pong_enable_));
481
483
  #ifdef USE_SENSOR
482
484
  for (auto sensor : this->sensors_)
483
485
  ESP_LOGCONFIG(TAG, " Sensor: %s", sensor.id);
@@ -24,7 +24,7 @@ enum PCA6416AGPIORegisters {
24
24
  static const char *const TAG = "pca6416a";
25
25
 
26
26
  void PCA6416AComponent::setup() {
27
- ESP_LOGCONFIG(TAG, "Setting up PCA6416A...");
27
+ ESP_LOGCONFIG(TAG, "Running setup");
28
28
  // Test to see if device exists
29
29
  uint8_t value;
30
30
  if (!this->read_register_(PCA6416A_INPUT0, &value)) {
@@ -60,7 +60,7 @@ void PCA6416AComponent::dump_config() {
60
60
  }
61
61
  LOG_I2C_DEVICE(this)
62
62
  if (this->is_failed()) {
63
- ESP_LOGE(TAG, "Communication with PCA6416A failed!");
63
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
64
64
  }
65
65
  }
66
66
 
@@ -13,7 +13,7 @@ const uint8_t CONFIG_REG = 3;
13
13
  static const char *const TAG = "pca9554";
14
14
 
15
15
  void PCA9554Component::setup() {
16
- ESP_LOGCONFIG(TAG, "Setting up PCA9554/PCA9554A...");
16
+ ESP_LOGCONFIG(TAG, "Running setup");
17
17
  this->reg_width_ = (this->pin_count_ + 7) / 8;
18
18
  // Test to see if device exists
19
19
  if (!this->read_inputs_()) {
@@ -45,11 +45,13 @@ void PCA9554Component::loop() {
45
45
  }
46
46
 
47
47
  void PCA9554Component::dump_config() {
48
- ESP_LOGCONFIG(TAG, "PCA9554:");
49
- ESP_LOGCONFIG(TAG, " I/O Pins: %d", this->pin_count_);
48
+ ESP_LOGCONFIG(TAG,
49
+ "PCA9554:\n"
50
+ " I/O Pins: %d",
51
+ this->pin_count_);
50
52
  LOG_I2C_DEVICE(this)
51
53
  if (this->is_failed()) {
52
- ESP_LOGE(TAG, "Communication with PCA9554 failed!");
54
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
53
55
  }
54
56
  }
55
57
 
@@ -1,7 +1,7 @@
1
1
  #include "pca9685_output.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 pca9685 {
@@ -26,9 +26,9 @@ static const uint8_t PCA9685_MODE1_AUTOINC = 0b00100000;
26
26
  static const uint8_t PCA9685_MODE1_SLEEP = 0b00010000;
27
27
 
28
28
  void PCA9685Output::setup() {
29
- ESP_LOGCONFIG(TAG, "Setting up PCA9685OutputComponent...");
29
+ ESP_LOGCONFIG(TAG, "Running setup");
30
30
 
31
- ESP_LOGV(TAG, " Resetting devices...");
31
+ ESP_LOGV(TAG, " Resetting devices");
32
32
  if (!this->write_bytes(PCA9685_REGISTER_SOFTWARE_RESET, nullptr, 0)) {
33
33
  this->mark_failed();
34
34
  return;
@@ -83,13 +83,17 @@ void PCA9685Output::setup() {
83
83
  }
84
84
 
85
85
  void PCA9685Output::dump_config() {
86
- ESP_LOGCONFIG(TAG, "PCA9685:");
87
- ESP_LOGCONFIG(TAG, " Mode: 0x%02X", this->mode_);
86
+ ESP_LOGCONFIG(TAG,
87
+ "PCA9685:\n"
88
+ " Mode: 0x%02X",
89
+ this->mode_);
88
90
  if (this->extclk_) {
89
91
  ESP_LOGCONFIG(TAG, " EXTCLK: enabled");
90
92
  } else {
91
- ESP_LOGCONFIG(TAG, " EXTCLK: disabled");
92
- ESP_LOGCONFIG(TAG, " Frequency: %.0f Hz", this->frequency_);
93
+ ESP_LOGCONFIG(TAG,
94
+ " EXTCLK: disabled\n"
95
+ " Frequency: %.0f Hz",
96
+ this->frequency_);
93
97
  }
94
98
  if (this->is_failed()) {
95
99
  ESP_LOGE(TAG, "Setting up PCA9685 failed!");
@@ -1,7 +1,7 @@
1
1
  #include "pcd_8544.h"
2
- #include "esphome/core/log.h"
3
2
  #include "esphome/core/application.h"
4
3
  #include "esphome/core/helpers.h"
4
+ #include "esphome/core/log.h"
5
5
 
6
6
  namespace esphome {
7
7
  namespace pcd8544 {
@@ -10,7 +10,7 @@ namespace pcf85063 {
10
10
  static const char *const TAG = "pcf85063";
11
11
 
12
12
  void PCF85063Component::setup() {
13
- ESP_LOGCONFIG(TAG, "Setting up PCF85063...");
13
+ ESP_LOGCONFIG(TAG, "Running setup");
14
14
  if (!this->read_rtc_()) {
15
15
  this->mark_failed();
16
16
  }
@@ -22,7 +22,7 @@ void PCF85063Component::dump_config() {
22
22
  ESP_LOGCONFIG(TAG, "PCF85063:");
23
23
  LOG_I2C_DEVICE(this);
24
24
  if (this->is_failed()) {
25
- ESP_LOGE(TAG, "Communication with PCF85063 failed!");
25
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
26
26
  }
27
27
  ESP_LOGCONFIG(TAG, " Timezone: '%s'", this->timezone_.c_str());
28
28
  }
@@ -10,7 +10,7 @@ namespace pcf8563 {
10
10
  static const char *const TAG = "PCF8563";
11
11
 
12
12
  void PCF8563Component::setup() {
13
- ESP_LOGCONFIG(TAG, "Setting up PCF8563...");
13
+ ESP_LOGCONFIG(TAG, "Running setup");
14
14
  if (!this->read_rtc_()) {
15
15
  this->mark_failed();
16
16
  }
@@ -22,7 +22,7 @@ void PCF8563Component::dump_config() {
22
22
  ESP_LOGCONFIG(TAG, "PCF8563:");
23
23
  LOG_I2C_DEVICE(this);
24
24
  if (this->is_failed()) {
25
- ESP_LOGE(TAG, "Communication with PCF8563 failed!");
25
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
26
26
  }
27
27
  ESP_LOGCONFIG(TAG, " Timezone: '%s'", this->timezone_.c_str());
28
28
  }
@@ -7,7 +7,7 @@ namespace pcf8574 {
7
7
  static const char *const TAG = "pcf8574";
8
8
 
9
9
  void PCF8574Component::setup() {
10
- ESP_LOGCONFIG(TAG, "Setting up PCF8574...");
10
+ ESP_LOGCONFIG(TAG, "Running setup");
11
11
  if (!this->read_gpio_()) {
12
12
  ESP_LOGE(TAG, "PCF8574 not available under 0x%02X", this->address_);
13
13
  this->mark_failed();
@@ -22,7 +22,7 @@ void PCF8574Component::dump_config() {
22
22
  LOG_I2C_DEVICE(this)
23
23
  ESP_LOGCONFIG(TAG, " Is PCF8575: %s", YESNO(this->pcf8575_));
24
24
  if (this->is_failed()) {
25
- ESP_LOGE(TAG, "Communication with PCF8574 failed!");
25
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
26
26
  }
27
27
  }
28
28
  bool PCF8574Component::digital_read(uint8_t pin) {
@@ -73,15 +73,18 @@ climate::ClimateTraits PIDClimate::traits() {
73
73
  }
74
74
  void PIDClimate::dump_config() {
75
75
  LOG_CLIMATE("", "PID Climate", this);
76
- ESP_LOGCONFIG(TAG, " Control Parameters:");
77
- ESP_LOGCONFIG(TAG, " kp: %.5f, ki: %.5f, kd: %.5f, output samples: %d", controller_.kp_, controller_.ki_,
78
- controller_.kd_, controller_.output_samples_);
76
+ ESP_LOGCONFIG(TAG,
77
+ " Control Parameters:\n"
78
+ " kp: %.5f, ki: %.5f, kd: %.5f, output samples: %d",
79
+ controller_.kp_, controller_.ki_, controller_.kd_, controller_.output_samples_);
79
80
 
80
81
  if (controller_.threshold_low_ == 0 && controller_.threshold_high_ == 0) {
81
82
  ESP_LOGCONFIG(TAG, " Deadband disabled.");
82
83
  } else {
83
- ESP_LOGCONFIG(TAG, " Deadband Parameters:");
84
- ESP_LOGCONFIG(TAG, " threshold: %0.5f to %0.5f, multipliers(kp: %.5f, ki: %.5f, kd: %.5f), output samples: %d",
84
+ ESP_LOGCONFIG(TAG,
85
+ " Deadband Parameters:\n"
86
+ " threshold: %0.5f to %0.5f, multipliers(kp: %.5f, ki: %.5f, kd: %.5f), "
87
+ "output samples: %d",
85
88
  controller_.threshold_low_, controller_.threshold_high_, controller_.kp_multiplier_,
86
89
  controller_.ki_multiplier_, controller_.kd_multiplier_, controller_.deadband_output_samples_);
87
90
  }
@@ -1,8 +1,8 @@
1
1
  #pragma once
2
2
 
3
+ #include "esphome/core/automation.h"
3
4
  #include "esphome/core/component.h"
4
5
  #include "esphome/core/helpers.h"
5
- #include "esphome/core/automation.h"
6
6
  #include "esphome/components/climate/climate.h"
7
7
  #include "esphome/components/sensor/sensor.h"
8
8
  #include "esphome/components/output/float_output.h"
@@ -1,6 +1,6 @@
1
1
  #include "pid_climate_sensor.h"
2
- #include "esphome/core/log.h"
3
2
  #include "esphome/core/helpers.h"
3
+ #include "esphome/core/log.h"
4
4
 
5
5
  namespace esphome {
6
6
  namespace pid {
@@ -1,6 +1,6 @@
1
1
  #include "pipsolar_output.h"
2
- #include "esphome/core/log.h"
3
2
  #include "esphome/core/helpers.h"
3
+ #include "esphome/core/log.h"
4
4
 
5
5
  namespace esphome {
6
6
  namespace pipsolar {
@@ -1,6 +1,6 @@
1
1
  #include "pipsolar.h"
2
- #include "esphome/core/log.h"
3
2
  #include "esphome/core/helpers.h"
3
+ #include "esphome/core/log.h"
4
4
 
5
5
  namespace esphome {
6
6
  namespace pipsolar {
@@ -861,8 +861,8 @@ void Pipsolar::switch_command(const std::string &command) {
861
861
  queue_command_(command.c_str(), command.length());
862
862
  }
863
863
  void Pipsolar::dump_config() {
864
- ESP_LOGCONFIG(TAG, "Pipsolar:");
865
- ESP_LOGCONFIG(TAG, "used commands:");
864
+ ESP_LOGCONFIG(TAG, "Pipsolar:\n"
865
+ "used commands:");
866
866
  for (auto &used_polling_command : this->used_polling_commands_) {
867
867
  if (used_polling_command.length != 0) {
868
868
  ESP_LOGCONFIG(TAG, "%s", used_polling_command.command);
@@ -55,8 +55,8 @@ uint8_t PM1006Component::pm1006_checksum_(const uint8_t *command_data, uint8_t l
55
55
  }
56
56
 
57
57
  optional<bool> PM1006Component::check_byte_() const {
58
- uint8_t index = this->data_index_;
59
- uint8_t byte = this->data_[index];
58
+ const uint8_t index = this->data_index_;
59
+ const uint8_t byte = this->data_[index];
60
60
 
61
61
  // index 0..2 are the fixed header
62
62
  if (index < sizeof(PM1006_RESPONSE_HEADER)) {
@@ -86,7 +86,7 @@ optional<bool> PM1006Component::check_byte_() const {
86
86
  }
87
87
 
88
88
  void PM1006Component::parse_data_() {
89
- const int pm_2_5_concentration = this->get_16_bit_uint_(5);
89
+ const uint16_t pm_2_5_concentration = this->get_16_bit_uint_(5);
90
90
 
91
91
  ESP_LOGD(TAG, "Got PM2.5 Concentration: %d µg/m³", pm_2_5_concentration);
92
92
 
@@ -95,9 +95,5 @@ void PM1006Component::parse_data_() {
95
95
  }
96
96
  }
97
97
 
98
- uint16_t PM1006Component::get_16_bit_uint_(uint8_t start_index) const {
99
- return encode_uint16(this->data_[start_index], this->data_[start_index + 1]);
100
- }
101
-
102
98
  } // namespace pm1006
103
99
  } // namespace esphome
@@ -1,6 +1,7 @@
1
1
  #pragma once
2
2
 
3
3
  #include "esphome/core/component.h"
4
+ #include "esphome/core/helpers.h"
4
5
  #include "esphome/components/sensor/sensor.h"
5
6
  #include "esphome/components/uart/uart.h"
6
7
 
@@ -22,8 +23,10 @@ class PM1006Component : public PollingComponent, public uart::UARTDevice {
22
23
  protected:
23
24
  optional<bool> check_byte_() const;
24
25
  void parse_data_();
25
- uint16_t get_16_bit_uint_(uint8_t start_index) const;
26
26
  uint8_t pm1006_checksum_(const uint8_t *command_data, uint8_t length) const;
27
+ uint16_t get_16_bit_uint_(uint8_t start_index) const {
28
+ return encode_uint16(this->data_[start_index], this->data_[start_index + 1]);
29
+ }
27
30
 
28
31
  sensor::Sensor *pm_2_5_sensor_{nullptr};
29
32