esphome 2025.5.1__py3-none-any.whl → 2025.6.0__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 (753) 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 +5 -0
  33. esphome/components/api/api_pb2.h +703 -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 -5
  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/gpio.cpp +10 -1
  191. esphome/components/esp8266/preferences.cpp +6 -6
  192. esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
  193. esphome/components/esp_ldo/__init__.py +91 -0
  194. esphome/components/esp_ldo/esp_ldo.cpp +43 -0
  195. esphome/components/esp_ldo/esp_ldo.h +43 -0
  196. esphome/components/esphome/ota/ota_esphome.cpp +15 -8
  197. esphome/components/ethernet/ethernet_component.cpp +38 -26
  198. esphome/components/ethernet/ethernet_component.h +1 -1
  199. esphome/components/event/__init__.py +1 -0
  200. esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
  201. esphome/components/ezo/ezo.cpp +1 -1
  202. esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
  203. esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
  204. esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
  205. esphome/components/fan/__init__.py +1 -0
  206. esphome/components/fan/fan.cpp +30 -19
  207. esphome/components/fastled_base/fastled_light.cpp +7 -5
  208. esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
  209. esphome/components/fs3000/fs3000.cpp +1 -1
  210. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
  211. esphome/components/ft63x6/ft63x6.cpp +5 -3
  212. esphome/components/gcja5/gcja5.cpp +0 -12
  213. esphome/components/gcja5/gcja5.h +8 -3
  214. esphome/components/gdk101/gdk101.cpp +2 -2
  215. esphome/components/globals/globals_component.h +13 -10
  216. esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
  217. esphome/components/gp8403/gp8403.cpp +4 -2
  218. esphome/components/gp8403/output/gp8403_output.cpp +4 -2
  219. esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
  220. esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
  221. esphome/components/gpio/switch/gpio_switch.cpp +1 -1
  222. esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
  223. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
  224. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
  225. esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
  226. esphome/components/growatt_solar/growatt_solar.cpp +6 -3
  227. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
  228. esphome/components/haier/haier_base.cpp +2 -2
  229. esphome/components/haier/hon_climate.cpp +13 -6
  230. esphome/components/havells_solar/havells_solar.cpp +5 -2
  231. esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
  232. esphome/components/hdc1080/hdc1080.cpp +2 -2
  233. esphome/components/he60r/he60r.cpp +4 -2
  234. esphome/components/hlw8012/hlw8012.cpp +6 -4
  235. esphome/components/hm3301/hm3301.cpp +2 -2
  236. esphome/components/hmc5883l/hmc5883l.cpp +2 -2
  237. esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
  238. esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
  239. esphome/components/honeywellabp/honeywellabp.cpp +4 -2
  240. esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
  241. esphome/components/hte501/hte501.cpp +3 -2
  242. esphome/components/http_request/__init__.py +2 -2
  243. esphome/components/http_request/http_request.cpp +7 -5
  244. esphome/components/http_request/http_request_idf.cpp +4 -2
  245. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  246. esphome/components/htu21d/htu21d.cpp +2 -2
  247. esphome/components/htu31d/htu31d.cpp +2 -2
  248. esphome/components/hx711/hx711.cpp +2 -2
  249. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
  250. esphome/components/hyt271/hyt271.cpp +2 -2
  251. esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
  252. esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
  253. esphome/components/i2s_audio/__init__.py +2 -0
  254. esphome/components/i2s_audio/i2s_audio.cpp +3 -4
  255. esphome/components/i2s_audio/i2s_audio.h +1 -1
  256. esphome/components/i2s_audio/media_player/__init__.py +1 -1
  257. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
  258. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +85 -77
  259. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +6 -0
  260. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +29 -11
  261. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +1 -0
  262. esphome/components/iaqcore/iaqcore.cpp +3 -3
  263. esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
  264. esphome/components/ili9xxx/ili9xxx_display.h +1 -1
  265. esphome/components/image/image.cpp +1 -0
  266. esphome/components/ina219/ina219.cpp +2 -2
  267. esphome/components/ina226/ina226.cpp +8 -5
  268. esphome/components/ina260/ina260.cpp +1 -1
  269. esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
  270. esphome/components/ina3221/ina3221.cpp +2 -2
  271. esphome/components/inkplate6/display.py +12 -2
  272. esphome/components/inkplate6/inkplate.cpp +13 -9
  273. esphome/components/inkplate6/inkplate.h +7 -6
  274. esphome/components/integration/integration_sensor.cpp +1 -1
  275. esphome/components/internal_temperature/internal_temperature.cpp +4 -4
  276. esphome/components/json/json_util.cpp +4 -5
  277. esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
  278. esphome/components/key_collector/key_collector.cpp +4 -2
  279. esphome/components/kmeteriso/kmeteriso.cpp +4 -4
  280. esphome/components/kuntze/kuntze.cpp +4 -2
  281. esphome/components/lc709203f/__init__.py +1 -0
  282. esphome/components/lc709203f/lc709203f.cpp +299 -0
  283. esphome/components/lc709203f/lc709203f.h +55 -0
  284. esphome/components/lc709203f/sensor.py +93 -0
  285. esphome/components/lcd_base/lcd_display.cpp +2 -2
  286. esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
  287. esphome/components/lcd_menu/lcd_menu.cpp +6 -4
  288. esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
  289. esphome/components/ld2410/ld2410.cpp +6 -7
  290. esphome/components/ld2420/ld2420.cpp +9 -7
  291. esphome/components/ld2450/ld2450.cpp +6 -4
  292. esphome/components/ld2450/sensor.py +2 -2
  293. esphome/components/ledc/ledc_output.cpp +32 -28
  294. esphome/components/libretiny/const.py +1 -1
  295. esphome/components/libretiny/preferences.cpp +6 -7
  296. esphome/components/light/__init__.py +2 -1
  297. esphome/components/light/esp_hsv_color.h +1 -1
  298. esphome/components/light/light_state.cpp +9 -5
  299. esphome/components/light/light_state.h +15 -15
  300. esphome/components/light/light_transformer.h +1 -1
  301. esphome/components/lightwaverf/LwTx.cpp +1 -1
  302. esphome/components/lightwaverf/lightwaverf.cpp +1 -1
  303. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
  304. esphome/components/lock/__init__.py +1 -0
  305. esphome/components/lock/lock.h +1 -1
  306. esphome/components/logger/__init__.py +6 -0
  307. esphome/components/logger/logger.cpp +11 -20
  308. esphome/components/logger/logger.h +5 -6
  309. esphome/components/logger/logger_esp32.cpp +5 -5
  310. esphome/components/ltr390/ltr390.cpp +8 -5
  311. esphome/components/ltr501/ltr501.cpp +19 -14
  312. esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
  313. esphome/components/lvgl/__init__.py +2 -2
  314. esphome/components/lvgl/automation.py +5 -4
  315. esphome/components/lvgl/defines.py +0 -2
  316. esphome/components/lvgl/lv_validation.py +1 -3
  317. esphome/components/lvgl/lvcode.py +7 -8
  318. esphome/components/lvgl/lvgl_esphome.cpp +26 -10
  319. esphome/components/lvgl/schemas.py +22 -23
  320. esphome/components/lvgl/trigger.py +8 -3
  321. esphome/components/lvgl/widgets/__init__.py +2 -2
  322. esphome/components/lvgl/widgets/canvas.py +9 -3
  323. esphome/components/lvgl/widgets/line.py +2 -1
  324. esphome/components/lvgl/widgets/tabview.py +7 -0
  325. esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
  326. esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
  327. esphome/components/max17043/max17043.cpp +2 -2
  328. esphome/components/max31855/max31855.cpp +2 -1
  329. esphome/components/max31856/max31856.cpp +9 -11
  330. esphome/components/max31865/max31865.cpp +6 -4
  331. esphome/components/max44009/max44009.cpp +2 -2
  332. esphome/components/max6675/max6675.cpp +1 -1
  333. esphome/components/max6956/max6956.cpp +5 -3
  334. esphome/components/max7219/max7219.cpp +8 -6
  335. esphome/components/max7219digit/automation.h +52 -0
  336. esphome/components/max7219digit/display.py +93 -1
  337. esphome/components/max7219digit/max7219digit.cpp +16 -13
  338. esphome/components/max9611/max9611.cpp +9 -6
  339. esphome/components/mcp23008/mcp23008.cpp +1 -1
  340. esphome/components/mcp23016/mcp23016.cpp +1 -1
  341. esphome/components/mcp23017/mcp23017.cpp +1 -1
  342. esphome/components/mcp23s08/mcp23s08.cpp +1 -1
  343. esphome/components/mcp23s17/mcp23s17.cpp +1 -1
  344. esphome/components/mcp3008/mcp3008.cpp +1 -1
  345. esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
  346. esphome/components/mcp3204/mcp3204.cpp +1 -1
  347. esphome/components/mcp4461/mcp4461.cpp +2 -2
  348. esphome/components/mcp4725/mcp4725.cpp +2 -2
  349. esphome/components/mcp4728/mcp4728.cpp +2 -2
  350. esphome/components/mcp9600/mcp9600.cpp +1 -1
  351. esphome/components/mcp9808/mcp9808.cpp +4 -4
  352. esphome/components/mdns/mdns_component.cpp +8 -2
  353. esphome/components/mdns/mdns_component.h +3 -1
  354. esphome/components/mdns/mdns_esp32.cpp +2 -2
  355. esphome/components/media_player/__init__.py +1 -0
  356. esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
  357. esphome/components/micro_wake_word/streaming_model.cpp +10 -6
  358. esphome/components/micronova/micronova.h +2 -2
  359. esphome/components/mics_4514/mics_4514.cpp +2 -2
  360. esphome/components/midea/air_conditioner.cpp +7 -5
  361. esphome/components/midea_ir/midea_ir.cpp +1 -1
  362. esphome/components/mipi_spi/mipi_spi.cpp +24 -15
  363. esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
  364. esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
  365. esphome/components/mlx90614/mlx90614.cpp +4 -3
  366. esphome/components/mmc5603/mmc5603.cpp +2 -2
  367. esphome/components/mmc5983/mmc5983.cpp +1 -1
  368. esphome/components/modbus/modbus.cpp +7 -5
  369. esphome/components/modbus_controller/modbus_controller.cpp +6 -4
  370. esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
  371. esphome/components/modbus_controller/switch/__init__.py +6 -2
  372. esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
  373. esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
  374. esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
  375. esphome/components/mpr121/mpr121.cpp +2 -2
  376. esphome/components/mpu6050/mpu6050.cpp +6 -6
  377. esphome/components/mpu6886/mpu6886.cpp +6 -6
  378. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
  379. esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
  380. esphome/components/mqtt/mqtt_client.cpp +31 -24
  381. esphome/components/mqtt/mqtt_component.cpp +3 -3
  382. esphome/components/mqtt/mqtt_cover.cpp +8 -4
  383. esphome/components/mqtt/mqtt_fan.cpp +12 -6
  384. esphome/components/mqtt/mqtt_valve.cpp +4 -2
  385. esphome/components/ms5611/ms5611.cpp +2 -2
  386. esphome/components/ms8607/ms8607.cpp +2 -2
  387. esphome/components/msa3xx/msa3xx.cpp +16 -12
  388. esphome/components/my9231/my9231.cpp +7 -5
  389. esphome/components/nau7802/nau7802.cpp +6 -4
  390. esphome/components/neopixelbus/neopixelbus_light.h +2 -2
  391. esphome/components/network/ip_address.h +1 -1
  392. esphome/components/network/util.cpp +13 -0
  393. esphome/components/nextion/base_component.py +2 -0
  394. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +3 -4
  395. esphome/components/nextion/display.py +34 -22
  396. esphome/components/nextion/nextion.cpp +182 -143
  397. esphome/components/nextion/nextion.h +36 -0
  398. esphome/components/nextion/nextion_commands.cpp +3 -3
  399. esphome/components/nextion/nextion_upload_arduino.cpp +69 -69
  400. esphome/components/nextion/nextion_upload_idf.cpp +79 -80
  401. esphome/components/nextion/sensor/nextion_sensor.cpp +5 -5
  402. esphome/components/nextion/switch/nextion_switch.cpp +2 -2
  403. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +3 -3
  404. esphome/components/nfc/nci_message.h +1 -1
  405. esphome/components/nfc/ndef_record.h +1 -1
  406. esphome/components/nfc/ndef_record_text.h +1 -1
  407. esphome/components/nfc/ndef_record_uri.h +1 -1
  408. esphome/components/nfc/nfc.h +1 -1
  409. esphome/components/nfc/nfc_tag.h +1 -1
  410. esphome/components/noblex/noblex.cpp +1 -1
  411. esphome/components/npi19/npi19.cpp +5 -7
  412. esphome/components/number/__init__.py +11 -0
  413. esphome/components/number/number.cpp +1 -1
  414. esphome/components/number/number.h +0 -4
  415. esphome/components/online_image/__init__.py +13 -1
  416. esphome/components/online_image/online_image.cpp +26 -4
  417. esphome/components/online_image/online_image.h +21 -4
  418. esphome/components/opentherm/generate.py +3 -3
  419. esphome/components/opentherm/hub.cpp +11 -7
  420. esphome/components/opentherm/number/number.cpp +5 -3
  421. esphome/components/opentherm/opentherm.h +1 -1
  422. esphome/components/opentherm/schema.py +13 -13
  423. esphome/components/opentherm/validate.py +1 -1
  424. esphome/components/openthread/__init__.py +146 -0
  425. esphome/components/openthread/const.py +10 -0
  426. esphome/components/openthread/openthread.cpp +206 -0
  427. esphome/components/openthread/openthread.h +68 -0
  428. esphome/components/openthread/openthread_esp.cpp +164 -0
  429. esphome/components/openthread/tlv.py +58 -0
  430. esphome/components/openthread_info/__init__.py +0 -0
  431. esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
  432. esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
  433. esphome/components/openthread_info/text_sensor.py +105 -0
  434. esphome/components/output/float_output.cpp +1 -1
  435. esphome/components/output/switch/output_switch.cpp +1 -1
  436. esphome/components/packet_transport/packet_transport.cpp +6 -4
  437. esphome/components/pca6416a/pca6416a.cpp +2 -2
  438. esphome/components/pca9554/pca9554.cpp +6 -4
  439. esphome/components/pca9685/pca9685_output.cpp +12 -8
  440. esphome/components/pcd8544/pcd_8544.cpp +1 -1
  441. esphome/components/pcf85063/pcf85063.cpp +2 -2
  442. esphome/components/pcf8563/pcf8563.cpp +2 -2
  443. esphome/components/pcf8574/pcf8574.cpp +2 -2
  444. esphome/components/pid/pid_climate.cpp +8 -5
  445. esphome/components/pid/pid_climate.h +1 -1
  446. esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
  447. esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
  448. esphome/components/pipsolar/pipsolar.cpp +3 -3
  449. esphome/components/pm1006/pm1006.cpp +3 -7
  450. esphome/components/pm1006/pm1006.h +4 -1
  451. esphome/components/pm2005/pm2005.cpp +12 -13
  452. esphome/components/pm2005/sensor.py +1 -1
  453. esphome/components/pmsa003i/pmsa003i.cpp +2 -2
  454. esphome/components/pmsx003/pmsx003.cpp +0 -4
  455. esphome/components/pmsx003/pmsx003.h +5 -2
  456. esphome/components/pmwcs3/pmwcs3.cpp +9 -13
  457. esphome/components/pmwcs3/pmwcs3.h +0 -1
  458. esphome/components/pn532/pn532.cpp +7 -7
  459. esphome/components/pn532/pn532.h +1 -1
  460. esphome/components/pn532_spi/pn532_spi.cpp +1 -1
  461. esphome/components/pn7150/pn7150.cpp +4 -4
  462. esphome/components/pn7160/pn7160.cpp +4 -4
  463. esphome/components/power_supply/power_supply.cpp +6 -4
  464. esphome/components/power_supply/power_supply.h +1 -1
  465. esphome/components/prometheus/__init__.py +0 -1
  466. esphome/components/psram/__init__.py +59 -35
  467. esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
  468. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
  469. esphome/components/pylontech/pylontech.cpp +2 -2
  470. esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
  471. esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
  472. esphome/components/pzemac/pzemac.cpp +4 -2
  473. esphome/components/pzemdc/pzemdc.cpp +4 -2
  474. esphome/components/qmc5883l/qmc5883l.cpp +2 -2
  475. esphome/components/qmp6988/qmp6988.cpp +2 -2
  476. esphome/components/qmp6988/qmp6988.h +1 -1
  477. esphome/components/qr_code/qr_code.cpp +5 -3
  478. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  479. esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
  480. esphome/components/rc522/rc522.cpp +5 -5
  481. esphome/components/rdm6300/rdm6300.cpp +1 -0
  482. esphome/components/remote_receiver/__init__.py +10 -2
  483. esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
  484. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
  485. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
  486. esphome/components/remote_transmitter/__init__.py +10 -2
  487. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
  488. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
  489. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
  490. esphome/components/resistance/resistance_sensor.cpp +6 -3
  491. esphome/components/restart/button/restart_button.cpp +1 -1
  492. esphome/components/restart/switch/restart_switch.cpp +1 -1
  493. esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
  494. esphome/components/rp2040/__init__.py +7 -0
  495. esphome/components/rp2040/core.cpp +8 -1
  496. esphome/components/rp2040/gpio.cpp +26 -9
  497. esphome/components/rp2040/preferences.cpp +3 -3
  498. esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
  499. esphome/components/rp2040_pio_led_strip/light.py +1 -1
  500. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
  501. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
  502. esphome/components/rtttl/rtttl.cpp +11 -9
  503. esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
  504. esphome/components/safe_mode/safe_mode.cpp +9 -8
  505. esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
  506. esphome/components/scd30/scd30.cpp +11 -8
  507. esphome/components/scd4x/scd4x.cpp +12 -8
  508. esphome/components/sdl/display.py +40 -0
  509. esphome/components/sdl/sdl_esphome.cpp +2 -2
  510. esphome/components/sdl/sdl_esphome.h +8 -0
  511. esphome/components/sdm_meter/sdm_meter.cpp +5 -2
  512. esphome/components/sdp3x/sdp3x.cpp +11 -11
  513. esphome/components/sds011/sds011.cpp +5 -6
  514. esphome/components/sds011/sds011.h +4 -1
  515. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
  516. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
  517. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
  518. esphome/components/selec_meter/selec_meter.cpp +5 -2
  519. esphome/components/select/__init__.py +1 -0
  520. esphome/components/select/select.cpp +1 -1
  521. esphome/components/select/select.h +0 -4
  522. esphome/components/sen0321/sen0321.cpp +2 -2
  523. esphome/components/sen21231/sen21231.cpp +1 -1
  524. esphome/components/sen5x/sen5x.cpp +10 -7
  525. esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
  526. esphome/components/sensirion_common/i2c_sensirion.h +1 -0
  527. esphome/components/sensor/__init__.py +11 -1
  528. esphome/components/sensor/filter.h +1 -1
  529. esphome/components/sensor/sensor.cpp +8 -4
  530. esphome/components/sensor/sensor.h +12 -11
  531. esphome/components/servo/servo.cpp +12 -9
  532. esphome/components/servo/servo.h +1 -1
  533. esphome/components/sfa30/sfa30.cpp +1 -1
  534. esphome/components/sgp30/sgp30.cpp +10 -8
  535. esphome/components/sgp4x/sgp4x.cpp +49 -61
  536. esphome/components/sgp4x/sgp4x.h +0 -1
  537. esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
  538. esphome/components/sht3xd/sht3xd.cpp +1 -1
  539. esphome/components/sht4x/sht4x.cpp +2 -2
  540. esphome/components/shtcx/shtcx.cpp +13 -16
  541. esphome/components/shutdown/button/shutdown_button.cpp +1 -1
  542. esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
  543. esphome/components/sim800l/sim800l.cpp +2 -2
  544. esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
  545. esphome/components/sm16716/sm16716.cpp +1 -1
  546. esphome/components/sm2135/sm2135.cpp +1 -1
  547. esphome/components/sm2235/sm2235.cpp +5 -3
  548. esphome/components/sm2335/sm2335.cpp +5 -3
  549. esphome/components/sml/sml.cpp +1 -1
  550. esphome/components/sn74hc165/sn74hc165.cpp +1 -2
  551. esphome/components/sn74hc595/sn74hc595.cpp +1 -2
  552. esphome/components/sntp/sntp_component.cpp +1 -1
  553. esphome/components/socket/__init__.py +2 -0
  554. esphome/components/socket/bsd_sockets_impl.cpp +51 -7
  555. esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
  556. esphome/components/socket/lwip_sockets_impl.cpp +51 -7
  557. esphome/components/socket/socket.cpp +31 -0
  558. esphome/components/socket/socket.h +27 -1
  559. esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
  560. esphome/components/sonoff_d1/sonoff_d1.h +2 -2
  561. esphome/components/sound_level/sound_level.cpp +4 -2
  562. esphome/components/speaker/media_player/__init__.py +3 -0
  563. esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
  564. esphome/components/speaker/media_player/speaker_media_player.h +6 -0
  565. esphome/components/spi/__init__.py +10 -2
  566. esphome/components/spi/spi.cpp +4 -4
  567. esphome/components/spi/spi_arduino.cpp +22 -9
  568. esphome/components/spi_device/spi_device.cpp +1 -2
  569. esphome/components/sprinkler/sprinkler.cpp +9 -6
  570. esphome/components/sps30/sps30.cpp +16 -15
  571. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  572. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
  573. esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
  574. esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
  575. esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
  576. esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
  577. esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
  578. esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
  579. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
  580. esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
  581. esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
  582. esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
  583. esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
  584. esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
  585. esphome/components/st7567_base/st7567_base.cpp +3 -3
  586. esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
  587. esphome/components/st7567_spi/st7567_spi.cpp +1 -1
  588. esphome/components/st7701s/st7701s.cpp +4 -2
  589. esphome/components/st7735/st7735.cpp +3 -3
  590. esphome/components/st7789v/st7789v.cpp +10 -7
  591. esphome/components/st7920/st7920.cpp +6 -4
  592. esphome/components/statsd/statsd.cpp +9 -5
  593. esphome/components/status_led/light/status_led_light.cpp +3 -3
  594. esphome/components/status_led/light/status_led_light.h +1 -1
  595. esphome/components/status_led/status_led.cpp +1 -1
  596. esphome/components/stepper/stepper.h +5 -3
  597. esphome/components/sts3x/sts3x.cpp +2 -2
  598. esphome/components/switch/__init__.py +1 -0
  599. esphome/components/switch/switch.cpp +18 -12
  600. esphome/components/switch/switch.h +14 -8
  601. esphome/components/sx1509/__init__.py +53 -20
  602. esphome/components/sx1509/sx1509.cpp +29 -5
  603. esphome/components/sx1509/sx1509.h +9 -1
  604. esphome/components/t6615/t6615.cpp +1 -0
  605. esphome/components/tc74/tc74.cpp +1 -1
  606. esphome/components/tca9548a/tca9548a.cpp +1 -1
  607. esphome/components/tca9555/tca9555.cpp +2 -2
  608. esphome/components/tcs34725/tcs34725.cpp +4 -4
  609. esphome/components/tee501/tee501.cpp +3 -2
  610. esphome/components/tem3200/tem3200.cpp +5 -6
  611. esphome/components/template/alarm_control_panel/__init__.py +6 -0
  612. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +43 -12
  613. esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +4 -1
  614. esphome/components/template/cover/template_cover.cpp +1 -1
  615. esphome/components/template/select/template_select.cpp +6 -4
  616. esphome/components/template/text/template_text.cpp +2 -3
  617. esphome/components/template/valve/template_valve.cpp +5 -3
  618. esphome/components/text/__init__.py +10 -11
  619. esphome/components/text/text.cpp +1 -1
  620. esphome/components/text/text.h +0 -4
  621. esphome/components/text_sensor/__init__.py +1 -0
  622. esphome/components/text_sensor/text_sensor.cpp +8 -4
  623. esphome/components/text_sensor/text_sensor.h +6 -6
  624. esphome/components/thermostat/thermostat_climate.cpp +67 -43
  625. esphome/components/time/__init__.py +1 -2
  626. esphome/components/time_based/time_based_cover.cpp +4 -2
  627. esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
  628. esphome/components/tm1621/tm1621.cpp +3 -3
  629. esphome/components/tm1637/tm1637.cpp +9 -7
  630. esphome/components/tm1638/tm1638.cpp +7 -5
  631. esphome/components/tm1651/tm1651.cpp +2 -2
  632. esphome/components/tmp102/tmp102.cpp +1 -3
  633. esphome/components/tmp102/tmp102.h +0 -3
  634. esphome/components/tmp1075/tmp1075.cpp +12 -9
  635. esphome/components/tmp117/tmp117.cpp +2 -2
  636. esphome/components/tof10120/tof10120_sensor.cpp +2 -2
  637. esphome/components/tormatic/tormatic_cover.cpp +4 -2
  638. esphome/components/tsl2561/tsl2561.cpp +7 -5
  639. esphome/components/tsl2591/tsl2591.cpp +25 -27
  640. esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
  641. esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
  642. esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
  643. esphome/components/tuya/select/tuya_select.cpp +5 -3
  644. esphome/components/tx20/tx20.cpp +3 -3
  645. esphome/components/uart/__init__.py +4 -5
  646. esphome/components/uart/button/uart_button.cpp +1 -1
  647. esphome/components/uart/switch/uart_switch.cpp +2 -2
  648. esphome/components/uart/uart.cpp +2 -2
  649. esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
  650. esphome/components/uart/uart_component_esp8266.cpp +9 -7
  651. esphome/components/uart/uart_component_esp_idf.cpp +9 -7
  652. esphome/components/uart/uart_component_host.cpp +11 -8
  653. esphome/components/uart/uart_component_libretiny.cpp +8 -6
  654. esphome/components/uart/uart_component_rp2040.cpp +8 -6
  655. esphome/components/udp/udp_component.cpp +9 -5
  656. esphome/components/ufire_ec/ufire_ec.cpp +5 -3
  657. esphome/components/ufire_ise/ufire_ise.cpp +1 -1
  658. esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
  659. esphome/components/update/__init__.py +1 -0
  660. esphome/components/update/update_entity.cpp +1 -1
  661. esphome/components/update/update_entity.h +0 -3
  662. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
  663. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
  664. esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
  665. esphome/components/uptime/sensor/uptime_timestamp_sensor.cpp +1 -1
  666. esphome/components/usb_host/__init__.py +64 -0
  667. esphome/components/usb_host/usb_host.h +116 -0
  668. esphome/components/usb_host/usb_host_client.cpp +394 -0
  669. esphome/components/usb_host/usb_host_component.cpp +35 -0
  670. esphome/components/usb_uart/__init__.py +134 -0
  671. esphome/components/usb_uart/ch34x.cpp +80 -0
  672. esphome/components/usb_uart/cp210x.cpp +126 -0
  673. esphome/components/usb_uart/usb_uart.cpp +328 -0
  674. esphome/components/usb_uart/usb_uart.h +151 -0
  675. esphome/components/valve/__init__.py +1 -0
  676. esphome/components/veml3235/veml3235.cpp +13 -9
  677. esphome/components/veml7700/veml7700.cpp +10 -6
  678. esphome/components/voice_assistant/voice_assistant.cpp +7 -7
  679. esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
  680. esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
  681. esphome/components/web_server/server_index_v2.h +632 -630
  682. esphome/components/web_server/server_index_v3.h +411 -409
  683. esphome/components/web_server/web_server.cpp +5 -3
  684. esphome/components/web_server_base/web_server_base.cpp +1 -1
  685. esphome/components/web_server_idf/__init__.py +0 -2
  686. esphome/components/web_server_idf/utils.cpp +1 -1
  687. esphome/components/web_server_idf/web_server_idf.cpp +7 -3
  688. esphome/components/web_server_idf/web_server_idf.h +7 -0
  689. esphome/components/weikai/__init__.py +2 -0
  690. esphome/components/weikai/weikai.cpp +24 -22
  691. esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
  692. esphome/components/weikai_spi/weikai_spi.cpp +11 -6
  693. esphome/components/wiegand/wiegand.cpp +1 -1
  694. esphome/components/wifi/wifi_component.cpp +50 -37
  695. esphome/components/wifi/wifi_component.h +7 -4
  696. esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
  697. esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
  698. esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
  699. esphome/components/wireguard/wireguard.cpp +21 -21
  700. esphome/components/wl_134/text_sensor.py +1 -2
  701. esphome/components/wled/wled_light_effect.cpp +1 -1
  702. esphome/components/x9c/x9c.cpp +5 -3
  703. esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
  704. esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
  705. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
  706. esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
  707. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
  708. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
  709. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
  710. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
  711. esphome/components/xl9535/xl9535.cpp +2 -2
  712. esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
  713. esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
  714. esphome/config.py +3 -2
  715. esphome/config_validation.py +46 -17
  716. esphome/const.py +10 -1
  717. esphome/core/__init__.py +37 -18
  718. esphome/core/application.cpp +197 -8
  719. esphome/core/application.h +116 -6
  720. esphome/core/component.cpp +36 -15
  721. esphome/core/component.h +43 -13
  722. esphome/core/config.py +12 -0
  723. esphome/core/defines.h +10 -2
  724. esphome/core/entity_base.cpp +4 -16
  725. esphome/core/entity_base.h +27 -13
  726. esphome/core/hal.h +5 -0
  727. esphome/core/helpers.cpp +1 -1
  728. esphome/core/helpers.h +5 -5
  729. esphome/core/log.h +2 -0
  730. esphome/core/log_const_en.h +4 -0
  731. esphome/core/scheduler.cpp +2 -2
  732. esphome/coroutine.py +3 -4
  733. esphome/cpp_generator.py +32 -32
  734. esphome/dashboard/core.py +2 -2
  735. esphome/dashboard/web_server.py +2 -2
  736. esphome/git.py +4 -4
  737. esphome/helpers.py +5 -6
  738. esphome/loader.py +8 -7
  739. esphome/log.py +7 -1
  740. esphome/platformio_api.py +2 -3
  741. esphome/storage_json.py +13 -5
  742. esphome/types.py +12 -13
  743. esphome/util.py +1 -2
  744. esphome/wizard.py +0 -16
  745. esphome/writer.py +5 -3
  746. esphome/yaml_util.py +6 -1
  747. esphome/zeroconf.py +1 -1
  748. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/METADATA +12 -11
  749. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/RECORD +753 -699
  750. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/WHEEL +1 -1
  751. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/entry_points.txt +0 -0
  752. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/licenses/LICENSE +0 -0
  753. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/top_level.txt +0 -0
@@ -72,22 +72,22 @@ void BMP581Component::dump_config() {
72
72
  case NONE:
73
73
  break;
74
74
  case ERROR_COMMUNICATION_FAILED:
75
- ESP_LOGE(TAG, " Communication with BMP581 failed!");
75
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
76
76
  break;
77
77
  case ERROR_WRONG_CHIP_ID:
78
- ESP_LOGE(TAG, " BMP581 has wrong chip ID - please verify you are using a BMP 581");
78
+ ESP_LOGE(TAG, "Unknown chip ID");
79
79
  break;
80
80
  case ERROR_SENSOR_RESET:
81
- ESP_LOGE(TAG, " BMP581 failed to reset");
81
+ ESP_LOGE(TAG, "Reset failed");
82
82
  break;
83
83
  case ERROR_SENSOR_STATUS:
84
- ESP_LOGE(TAG, " BMP581 sensor status failed, there were NVM problems");
84
+ ESP_LOGE(TAG, "Get status failed");
85
85
  break;
86
86
  case ERROR_PRIME_IIR_FAILED:
87
- ESP_LOGE(TAG, " BMP581's IIR Filter failed to prime with an initial measurement");
87
+ ESP_LOGE(TAG, "IIR Filter failed to prime with initial measurement");
88
88
  break;
89
89
  default:
90
- ESP_LOGE(TAG, " BMP581 error code %d", (int) this->error_code_);
90
+ ESP_LOGE(TAG, "Error %d", (int) this->error_code_);
91
91
  break;
92
92
  }
93
93
 
@@ -98,14 +98,20 @@ void BMP581Component::dump_config() {
98
98
 
99
99
  if (this->temperature_sensor_) {
100
100
  LOG_SENSOR(" ", "Temperature", this->temperature_sensor_);
101
- ESP_LOGCONFIG(TAG, " IIR Filter: %s", LOG_STR_ARG(iir_filter_to_str(this->iir_temperature_level_)));
102
- ESP_LOGCONFIG(TAG, " Oversampling: %s", LOG_STR_ARG(oversampling_to_str(this->temperature_oversampling_)));
101
+ ESP_LOGCONFIG(TAG,
102
+ " IIR Filter: %s\n"
103
+ " Oversampling: %s",
104
+ LOG_STR_ARG(iir_filter_to_str(this->iir_temperature_level_)),
105
+ LOG_STR_ARG(oversampling_to_str(this->temperature_oversampling_)));
103
106
  }
104
107
 
105
108
  if (this->pressure_sensor_) {
106
109
  LOG_SENSOR(" ", "Pressure", this->pressure_sensor_);
107
- ESP_LOGCONFIG(TAG, " IIR Filter: %s", LOG_STR_ARG(iir_filter_to_str(this->iir_pressure_level_)));
108
- ESP_LOGCONFIG(TAG, " Oversampling: %s", LOG_STR_ARG(oversampling_to_str(this->pressure_oversampling_)));
110
+ ESP_LOGCONFIG(TAG,
111
+ " IIR Filter: %s\n"
112
+ " Oversampling: %s",
113
+ LOG_STR_ARG(iir_filter_to_str(this->iir_pressure_level_)),
114
+ LOG_STR_ARG(oversampling_to_str(this->pressure_oversampling_)));
109
115
  }
110
116
  }
111
117
 
@@ -122,7 +128,7 @@ void BMP581Component::setup() {
122
128
  */
123
129
 
124
130
  this->error_code_ = NONE;
125
- ESP_LOGCONFIG(TAG, "Setting up BMP581...");
131
+ ESP_LOGCONFIG(TAG, "Running setup");
126
132
 
127
133
  ////////////////////
128
134
  // 1) Soft reboot //
@@ -130,7 +136,7 @@ void BMP581Component::setup() {
130
136
 
131
137
  // Power-On-Reboot bit is asserted if sensor successfully reset
132
138
  if (!this->reset_()) {
133
- ESP_LOGE(TAG, "BMP581 failed to reset");
139
+ ESP_LOGE(TAG, "Reset failed");
134
140
 
135
141
  this->error_code_ = ERROR_SENSOR_RESET;
136
142
  this->mark_failed();
@@ -146,7 +152,7 @@ void BMP581Component::setup() {
146
152
 
147
153
  // read chip id from sensor
148
154
  if (!this->read_byte(BMP581_CHIP_ID, &chip_id)) {
149
- ESP_LOGE(TAG, "Failed to read chip id");
155
+ ESP_LOGE(TAG, "Read chip ID failed");
150
156
 
151
157
  this->error_code_ = ERROR_COMMUNICATION_FAILED;
152
158
  this->mark_failed();
@@ -156,7 +162,7 @@ void BMP581Component::setup() {
156
162
 
157
163
  // verify id
158
164
  if (chip_id != BMP581_ASIC_ID) {
159
- ESP_LOGE(TAG, "Unknown chip ID, is this a BMP581?");
165
+ ESP_LOGE(TAG, "Unknown chip ID");
160
166
 
161
167
  this->error_code_ = ERROR_WRONG_CHIP_ID;
162
168
  this->mark_failed();
@@ -179,7 +185,7 @@ void BMP581Component::setup() {
179
185
 
180
186
  // verify status_nvm_rdy bit (it is asserted if boot was successful)
181
187
  if (!(this->status_.bit.status_nvm_rdy)) {
182
- ESP_LOGE(TAG, "NVM not ready after boot");
188
+ ESP_LOGE(TAG, "NVM not ready");
183
189
 
184
190
  this->error_code_ = ERROR_SENSOR_STATUS;
185
191
  this->mark_failed();
@@ -189,7 +195,7 @@ void BMP581Component::setup() {
189
195
 
190
196
  // verify status_nvm_err bit (it is asserted if an error is detected)
191
197
  if (this->status_.bit.status_nvm_err) {
192
- ESP_LOGE(TAG, "NVM error detected on boot");
198
+ ESP_LOGE(TAG, "NVM error detected");
193
199
 
194
200
  this->error_code_ = ERROR_SENSOR_STATUS;
195
201
  this->mark_failed();
@@ -254,7 +260,7 @@ void BMP581Component::setup() {
254
260
  }
255
261
 
256
262
  if (!this->prime_iir_filter_()) {
257
- ESP_LOGE(TAG, "Failed to prime the IIR filter with an intiial measurement");
263
+ ESP_LOGE(TAG, "Failed to prime the IIR filter with an initial measurement");
258
264
 
259
265
  this->error_code_ = ERROR_PRIME_IIR_FAILED;
260
266
  this->mark_failed();
@@ -286,10 +292,10 @@ void BMP581Component::update() {
286
292
  // 1) Request a measurement //
287
293
  //////////////////////////////
288
294
 
289
- ESP_LOGVV(TAG, "Requesting a measurement from sensor");
295
+ ESP_LOGVV(TAG, "Requesting measurement");
290
296
 
291
297
  if (!this->start_measurement_()) {
292
- ESP_LOGW(TAG, "Failed to request forced measurement of sensor");
298
+ ESP_LOGW(TAG, "Requesting forced measurement failed");
293
299
  this->status_set_warning();
294
300
 
295
301
  return;
@@ -299,7 +305,7 @@ void BMP581Component::update() {
299
305
  // 2) Wait for measurement to finish (based on oversampling rates) //
300
306
  //////////////////////////////////////////////////////////////////////
301
307
 
302
- ESP_LOGVV(TAG, "Measurement is expected to take %d ms to complete", this->conversion_time_);
308
+ ESP_LOGVV(TAG, "Measurement should take %d ms", this->conversion_time_);
303
309
 
304
310
  this->set_timeout("measurement", this->conversion_time_, [this]() {
305
311
  float temperature = 0.0;
@@ -311,14 +317,14 @@ void BMP581Component::update() {
311
317
 
312
318
  if (this->pressure_sensor_) {
313
319
  if (!this->read_temperature_and_pressure_(temperature, pressure)) {
314
- ESP_LOGW(TAG, "Failed to read temperature and pressure measurements, skipping update");
320
+ ESP_LOGW(TAG, "Failed to read temperature and pressure; skipping update");
315
321
  this->status_set_warning();
316
322
 
317
323
  return;
318
324
  }
319
325
  } else {
320
326
  if (!this->read_temperature_(temperature)) {
321
- ESP_LOGW(TAG, "Failed to read temperature measurement, skipping update");
327
+ ESP_LOGW(TAG, "Failed to read temperature; skipping update");
322
328
  this->status_set_warning();
323
329
 
324
330
  return;
@@ -349,7 +355,7 @@ bool BMP581Component::check_data_readiness_() {
349
355
  // - returns data readiness state
350
356
 
351
357
  if (this->odr_config_.bit.pwr_mode == STANDBY_MODE) {
352
- ESP_LOGD(TAG, "Data is not ready, sensor is in standby mode");
358
+ ESP_LOGD(TAG, "Data not ready, sensor is in standby mode");
353
359
  return false;
354
360
  }
355
361
 
@@ -443,7 +449,7 @@ bool BMP581Component::read_temperature_(float &temperature) {
443
449
  // - the measured temperature (in degrees Celsius)
444
450
 
445
451
  if (!this->check_data_readiness_()) {
446
- ESP_LOGW(TAG, "Data from sensor isn't ready, skipping this update");
452
+ ESP_LOGW(TAG, "Data not ready, skipping this update");
447
453
  this->status_set_warning();
448
454
 
449
455
  return false;
@@ -451,7 +457,7 @@ bool BMP581Component::read_temperature_(float &temperature) {
451
457
 
452
458
  uint8_t data[3];
453
459
  if (!this->read_bytes(BMP581_MEASUREMENT_DATA, &data[0], 3)) {
454
- ESP_LOGW(TAG, "Failed to read sensor's measurement data");
460
+ ESP_LOGW(TAG, "Failed to read measurement");
455
461
  this->status_set_warning();
456
462
 
457
463
  return false;
@@ -472,7 +478,7 @@ bool BMP581Component::read_temperature_and_pressure_(float &temperature, float &
472
478
  // - the measured pressure (in Pa)
473
479
 
474
480
  if (!this->check_data_readiness_()) {
475
- ESP_LOGW(TAG, "Data from sensor isn't ready, skipping this update");
481
+ ESP_LOGW(TAG, "Data not ready, skipping this update");
476
482
  this->status_set_warning();
477
483
 
478
484
  return false;
@@ -480,7 +486,7 @@ bool BMP581Component::read_temperature_and_pressure_(float &temperature, float &
480
486
 
481
487
  uint8_t data[6];
482
488
  if (!this->read_bytes(BMP581_MEASUREMENT_DATA, &data[0], 6)) {
483
- ESP_LOGW(TAG, "Failed to read sensor's measurement data");
489
+ ESP_LOGW(TAG, "Failed to read measurement");
484
490
  this->status_set_warning();
485
491
 
486
492
  return false;
@@ -15,7 +15,7 @@ static const uint8_t BP1658CJ_ADDR_START_5CH = 0x30;
15
15
  static const uint8_t BP1658CJ_DELAY = 2;
16
16
 
17
17
  void BP1658CJ::setup() {
18
- ESP_LOGCONFIG(TAG, "Setting up BP1658CJ Output Component...");
18
+ ESP_LOGCONFIG(TAG, "Running setup");
19
19
  this->data_pin_->setup();
20
20
  this->data_pin_->digital_write(false);
21
21
  this->clock_pin_->setup();
@@ -26,8 +26,10 @@ void BP1658CJ::dump_config() {
26
26
  ESP_LOGCONFIG(TAG, "BP1658CJ:");
27
27
  LOG_PIN(" Data Pin: ", this->data_pin_);
28
28
  LOG_PIN(" Clock Pin: ", this->clock_pin_);
29
- ESP_LOGCONFIG(TAG, " Color Channels Max Power: %u", this->max_power_color_channels_);
30
- ESP_LOGCONFIG(TAG, " White Channels Max Power: %u", this->max_power_white_channels_);
29
+ ESP_LOGCONFIG(TAG,
30
+ " Color Channels Max Power: %u\n"
31
+ " White Channels Max Power: %u",
32
+ this->max_power_color_channels_, this->max_power_white_channels_);
31
33
  }
32
34
 
33
35
  void BP1658CJ::loop() {
@@ -20,7 +20,7 @@ static const uint8_t BP5758D_ALL_DATA_CHANNEL_ENABLEMENT = 0b00011111;
20
20
  static const uint8_t BP5758D_DELAY = 2;
21
21
 
22
22
  void BP5758D::setup() {
23
- ESP_LOGCONFIG(TAG, "Setting up BP5758D Output Component...");
23
+ ESP_LOGCONFIG(TAG, "Running setup");
24
24
  this->data_pin_->setup();
25
25
  this->data_pin_->digital_write(false);
26
26
  delayMicroseconds(BP5758D_DELAY);
@@ -108,6 +108,7 @@ async def register_button(var, config):
108
108
  if not CORE.has_id(config[CONF_ID]):
109
109
  var = cg.Pvariable(config[CONF_ID], var)
110
110
  cg.add(cg.App.register_button(var))
111
+ CORE.register_platform_component("button", var)
111
112
  await setup_button_core_(var, config)
112
113
 
113
114
 
@@ -7,7 +7,7 @@ namespace canbus {
7
7
  static const char *const TAG = "canbus";
8
8
 
9
9
  void Canbus::setup() {
10
- ESP_LOGCONFIG(TAG, "Setting up Canbus...");
10
+ ESP_LOGCONFIG(TAG, "Running setup");
11
11
  if (!this->setup_internal()) {
12
12
  ESP_LOGE(TAG, "setup error!");
13
13
  this->mark_failed();
@@ -8,7 +8,7 @@ namespace cap1188 {
8
8
  static const char *const TAG = "cap1188";
9
9
 
10
10
  void CAP1188Component::setup() {
11
- ESP_LOGCONFIG(TAG, "Setting up CAP1188...");
11
+ ESP_LOGCONFIG(TAG, "Running setup");
12
12
 
13
13
  // Reset device using the reset pin
14
14
  if (this->reset_pin_ != nullptr) {
@@ -52,9 +52,11 @@ void CAP1188Component::dump_config() {
52
52
  ESP_LOGCONFIG(TAG, "CAP1188:");
53
53
  LOG_I2C_DEVICE(this);
54
54
  LOG_PIN(" Reset Pin: ", this->reset_pin_);
55
- ESP_LOGCONFIG(TAG, " Product ID: 0x%x", this->cap1188_product_id_);
56
- ESP_LOGCONFIG(TAG, " Manufacture ID: 0x%x", this->cap1188_manufacture_id_);
57
- ESP_LOGCONFIG(TAG, " Revision ID: 0x%x", this->cap1188_revision_);
55
+ ESP_LOGCONFIG(TAG,
56
+ " Product ID: 0x%x\n"
57
+ " Manufacture ID: 0x%x\n"
58
+ " Revision ID: 0x%x",
59
+ this->cap1188_product_id_, this->cap1188_manufacture_id_, this->cap1188_revision_);
58
60
 
59
61
  switch (this->error_code_) {
60
62
  case COMMUNICATION_FAILED:
@@ -29,7 +29,7 @@ void CaptivePortal::handle_config(AsyncWebServerRequest *request) {
29
29
  void CaptivePortal::handle_wifisave(AsyncWebServerRequest *request) {
30
30
  std::string ssid = request->arg("ssid").c_str();
31
31
  std::string psk = request->arg("psk").c_str();
32
- ESP_LOGI(TAG, "Captive Portal Requested WiFi Settings Change:");
32
+ ESP_LOGI(TAG, "Requested WiFi Settings Change:");
33
33
  ESP_LOGI(TAG, " SSID='%s'", ssid.c_str());
34
34
  ESP_LOGI(TAG, " Password=" LOG_SECRET("'%s'"), psk.c_str());
35
35
  wifi::global_wifi_component->save_wifi_sta(ssid, psk);
@@ -1,6 +1,7 @@
1
1
  #include "ccs811.h"
2
- #include "esphome/core/log.h"
3
2
  #include "esphome/core/hal.h"
3
+ #include "esphome/core/helpers.h"
4
+ #include "esphome/core/log.h"
4
5
 
5
6
  namespace esphome {
6
7
  namespace ccs811 {
@@ -163,7 +164,7 @@ void CCS811Component::dump_config() {
163
164
  if (this->is_failed()) {
164
165
  switch (this->error_code_) {
165
166
  case COMMUNICATION_FAILED:
166
- ESP_LOGW(TAG, "Communication failed! Is the sensor connected?");
167
+ ESP_LOGW(TAG, ESP_LOG_MSG_COMM_FAIL);
167
168
  break;
168
169
  case INVALID_ID:
169
170
  ESP_LOGW(TAG, "Sensor reported an invalid ID. Is this a CCS811?");
@@ -10,7 +10,7 @@ static const char *const TAG = "cd74hc4067";
10
10
  float CD74HC4067Component::get_setup_priority() const { return setup_priority::DATA; }
11
11
 
12
12
  void CD74HC4067Component::setup() {
13
- ESP_LOGCONFIG(TAG, "Setting up CD74HC4067...");
13
+ ESP_LOGCONFIG(TAG, "Running setup");
14
14
 
15
15
  this->pin_s0_->setup();
16
16
  this->pin_s1_->setup();
@@ -14,7 +14,7 @@ static const uint8_t CH422G_REG_OUT_UPPER = 0x23; // write reg for output bit
14
14
  static const char *const TAG = "ch422g";
15
15
 
16
16
  void CH422GComponent::setup() {
17
- ESP_LOGCONFIG(TAG, "Setting up CH422G...");
17
+ ESP_LOGCONFIG(TAG, "Running setup");
18
18
  // set outputs before mode
19
19
  this->write_outputs_();
20
20
  // Set mode and check for errors
@@ -37,7 +37,7 @@ void CH422GComponent::dump_config() {
37
37
  ESP_LOGCONFIG(TAG, "CH422G:");
38
38
  LOG_I2C_DEVICE(this)
39
39
  if (this->is_failed()) {
40
- ESP_LOGE(TAG, "Communication with CH422G failed!");
40
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
41
41
  }
42
42
  }
43
43
 
@@ -4,7 +4,7 @@ namespace esphome {
4
4
  namespace chsc6x {
5
5
 
6
6
  void CHSC6XTouchscreen::setup() {
7
- ESP_LOGCONFIG(TAG, "Setting up CHSC6X Touchscreen...");
7
+ ESP_LOGCONFIG(TAG, "Running setup");
8
8
  if (this->interrupt_pin_ != nullptr) {
9
9
  this->interrupt_pin_->setup();
10
10
  this->attach_interrupt_(this->interrupt_pin_, gpio::INTERRUPT_FALLING_EDGE);
@@ -38,9 +38,11 @@ void CHSC6XTouchscreen::dump_config() {
38
38
  ESP_LOGCONFIG(TAG, "CHSC6X Touchscreen:");
39
39
  LOG_I2C_DEVICE(this);
40
40
  LOG_PIN(" Interrupt Pin: ", this->interrupt_pin_);
41
- ESP_LOGCONFIG(TAG, " Touch timeout: %d", this->touch_timeout_);
42
- ESP_LOGCONFIG(TAG, " x_raw_max_: %d", this->x_raw_max_);
43
- ESP_LOGCONFIG(TAG, " y_raw_max_: %d", this->y_raw_max_);
41
+ ESP_LOGCONFIG(TAG,
42
+ " Touch timeout: %d\n"
43
+ " x_raw_max_: %d\n"
44
+ " y_raw_max_: %d",
45
+ this->touch_timeout_, this->x_raw_max_, this->y_raw_max_);
44
46
  }
45
47
 
46
48
  } // namespace chsc6x
@@ -443,6 +443,7 @@ async def register_climate(var, config):
443
443
  if not CORE.has_id(config[CONF_ID]):
444
444
  var = cg.Pvariable(config[CONF_ID], var)
445
445
  cg.add(cg.App.register_climate(var))
446
+ CORE.register_platform_component("climate", var)
446
447
  await setup_climate_core_(var, config)
447
448
 
448
449
 
@@ -569,17 +569,22 @@ bool Climate::set_custom_preset_(const std::string &preset) {
569
569
  void Climate::dump_traits_(const char *tag) {
570
570
  auto traits = this->get_traits();
571
571
  ESP_LOGCONFIG(tag, "ClimateTraits:");
572
- ESP_LOGCONFIG(tag, " [x] Visual settings:");
573
- ESP_LOGCONFIG(tag, " - Min temperature: %.1f", traits.get_visual_min_temperature());
574
- ESP_LOGCONFIG(tag, " - Max temperature: %.1f", traits.get_visual_max_temperature());
575
- ESP_LOGCONFIG(tag, " - Temperature step:");
576
- ESP_LOGCONFIG(tag, " Target: %.1f", traits.get_visual_target_temperature_step());
572
+ ESP_LOGCONFIG(tag,
573
+ " [x] Visual settings:\n"
574
+ " - Min temperature: %.1f\n"
575
+ " - Max temperature: %.1f\n"
576
+ " - Temperature step:\n"
577
+ " Target: %.1f",
578
+ traits.get_visual_min_temperature(), traits.get_visual_max_temperature(),
579
+ traits.get_visual_target_temperature_step());
577
580
  if (traits.get_supports_current_temperature()) {
578
581
  ESP_LOGCONFIG(tag, " Current: %.1f", traits.get_visual_current_temperature_step());
579
582
  }
580
583
  if (traits.get_supports_target_humidity() || traits.get_supports_current_humidity()) {
581
- ESP_LOGCONFIG(tag, " - Min humidity: %.0f", traits.get_visual_min_humidity());
582
- ESP_LOGCONFIG(tag, " - Max humidity: %.0f", traits.get_visual_max_humidity());
584
+ ESP_LOGCONFIG(tag,
585
+ " - Min humidity: %.0f\n"
586
+ " - Max humidity: %.0f",
587
+ traits.get_visual_min_humidity(), traits.get_visual_max_humidity());
583
588
  }
584
589
  if (traits.get_supports_two_point_target_temperature()) {
585
590
  ESP_LOGCONFIG(tag, " [x] Supports two-point target temperature");
@@ -3,8 +3,8 @@
3
3
  #include "esphome/core/component.h"
4
4
  #include "esphome/core/entity_base.h"
5
5
  #include "esphome/core/helpers.h"
6
- #include "esphome/core/preferences.h"
7
6
  #include "esphome/core/log.h"
7
+ #include "esphome/core/preferences.h"
8
8
  #include "climate_mode.h"
9
9
  #include "climate_traits.h"
10
10
 
@@ -75,10 +75,13 @@ void ClimateIR::control(const climate::ClimateCall &call) {
75
75
  }
76
76
  void ClimateIR::dump_config() {
77
77
  LOG_CLIMATE("", "IR Climate", this);
78
- ESP_LOGCONFIG(TAG, " Min. Temperature: %.1f°C", this->minimum_temperature_);
79
- ESP_LOGCONFIG(TAG, " Max. Temperature: %.1f°C", this->maximum_temperature_);
80
- ESP_LOGCONFIG(TAG, " Supports HEAT: %s", YESNO(this->supports_heat_));
81
- ESP_LOGCONFIG(TAG, " Supports COOL: %s", YESNO(this->supports_cool_));
78
+ ESP_LOGCONFIG(TAG,
79
+ " Min. Temperature: %.1f°C\n"
80
+ " Max. Temperature: %.1f°C\n"
81
+ " Supports HEAT: %s\n"
82
+ " Supports COOL: %s",
83
+ this->minimum_temperature_, this->maximum_temperature_, YESNO(this->supports_heat_),
84
+ YESNO(this->supports_cool_));
82
85
  }
83
86
 
84
87
  } // namespace climate_ir
@@ -0,0 +1 @@
1
+ """CM1106 component for ESPHome."""
@@ -0,0 +1,112 @@
1
+ #include "cm1106.h"
2
+ #include "esphome/core/log.h"
3
+
4
+ #include <cinttypes>
5
+
6
+ namespace esphome {
7
+ namespace cm1106 {
8
+
9
+ static const char *const TAG = "cm1106";
10
+ static const uint8_t C_M1106_CMD_GET_CO2[4] = {0x11, 0x01, 0x01, 0xED};
11
+ static const uint8_t C_M1106_CMD_SET_CO2_CALIB[6] = {0x11, 0x03, 0x03, 0x00, 0x00, 0x00};
12
+ static const uint8_t C_M1106_CMD_SET_CO2_CALIB_RESPONSE[4] = {0x16, 0x01, 0x03, 0xE6};
13
+
14
+ uint8_t cm1106_checksum(const uint8_t *response, size_t len) {
15
+ uint8_t crc = 0;
16
+ for (int i = 0; i < len - 1; i++) {
17
+ crc -= response[i];
18
+ }
19
+ return crc;
20
+ }
21
+
22
+ void CM1106Component::setup() {
23
+ ESP_LOGCONFIG(TAG, "Running setup");
24
+ uint8_t response[8] = {0};
25
+ if (!this->cm1106_write_command_(C_M1106_CMD_GET_CO2, sizeof(C_M1106_CMD_GET_CO2), response, sizeof(response))) {
26
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
27
+ this->mark_failed();
28
+ return;
29
+ }
30
+ }
31
+
32
+ void CM1106Component::update() {
33
+ uint8_t response[8] = {0};
34
+ if (!this->cm1106_write_command_(C_M1106_CMD_GET_CO2, sizeof(C_M1106_CMD_GET_CO2), response, sizeof(response))) {
35
+ ESP_LOGW(TAG, "Reading data from CM1106 failed!");
36
+ this->status_set_warning();
37
+ return;
38
+ }
39
+
40
+ if (response[0] != 0x16 || response[1] != 0x05 || response[2] != 0x01) {
41
+ ESP_LOGW(TAG, "Got wrong UART response from CM1106: %02X %02X %02X %02X", response[0], response[1], response[2],
42
+ response[3]);
43
+ this->status_set_warning();
44
+ return;
45
+ }
46
+
47
+ uint8_t checksum = cm1106_checksum(response, sizeof(response));
48
+ if (response[7] != checksum) {
49
+ ESP_LOGW(TAG, "CM1106 Checksum doesn't match: 0x%02X!=0x%02X", response[7], checksum);
50
+ this->status_set_warning();
51
+ return;
52
+ }
53
+
54
+ this->status_clear_warning();
55
+
56
+ uint16_t ppm = response[3] << 8 | response[4];
57
+ ESP_LOGD(TAG, "CM1106 Received CO₂=%uppm DF3=%02X DF4=%02X", ppm, response[5], response[6]);
58
+ if (this->co2_sensor_ != nullptr)
59
+ this->co2_sensor_->publish_state(ppm);
60
+ }
61
+
62
+ void CM1106Component::calibrate_zero(uint16_t ppm) {
63
+ uint8_t cmd[6];
64
+ memcpy(cmd, C_M1106_CMD_SET_CO2_CALIB, sizeof(cmd));
65
+ cmd[3] = ppm >> 8;
66
+ cmd[4] = ppm & 0xFF;
67
+ uint8_t response[4] = {0};
68
+
69
+ if (!this->cm1106_write_command_(cmd, sizeof(cmd), response, sizeof(response))) {
70
+ ESP_LOGW(TAG, "Reading data from CM1106 failed!");
71
+ this->status_set_warning();
72
+ return;
73
+ }
74
+
75
+ // check if correct response received
76
+ if (memcmp(response, C_M1106_CMD_SET_CO2_CALIB_RESPONSE, sizeof(response)) != 0) {
77
+ ESP_LOGW(TAG, "Got wrong UART response from CM1106: %02X %02X %02X %02X", response[0], response[1], response[2],
78
+ response[3]);
79
+ this->status_set_warning();
80
+ return;
81
+ }
82
+
83
+ this->status_clear_warning();
84
+ ESP_LOGD(TAG, "CM1106 Successfully calibrated sensor to %uppm", ppm);
85
+ }
86
+
87
+ bool CM1106Component::cm1106_write_command_(const uint8_t *command, size_t command_len, uint8_t *response,
88
+ size_t response_len) {
89
+ // Empty RX Buffer
90
+ while (this->available())
91
+ this->read();
92
+ this->write_array(command, command_len - 1);
93
+ this->write_byte(cm1106_checksum(command, command_len));
94
+ this->flush();
95
+
96
+ if (response == nullptr)
97
+ return true;
98
+
99
+ return this->read_array(response, response_len);
100
+ }
101
+
102
+ void CM1106Component::dump_config() {
103
+ ESP_LOGCONFIG(TAG, "CM1106:");
104
+ LOG_SENSOR(" ", "CO2", this->co2_sensor_);
105
+ this->check_uart_settings(9600);
106
+ if (this->is_failed()) {
107
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
108
+ }
109
+ }
110
+
111
+ } // namespace cm1106
112
+ } // namespace esphome
@@ -0,0 +1,40 @@
1
+ #pragma once
2
+
3
+ #include "esphome/core/component.h"
4
+ #include "esphome/core/automation.h"
5
+ #include "esphome/components/sensor/sensor.h"
6
+ #include "esphome/components/uart/uart.h"
7
+
8
+ namespace esphome {
9
+ namespace cm1106 {
10
+
11
+ class CM1106Component : public PollingComponent, public uart::UARTDevice {
12
+ public:
13
+ float get_setup_priority() const override { return esphome::setup_priority::DATA; }
14
+
15
+ void setup() override;
16
+ void update() override;
17
+ void dump_config() override;
18
+
19
+ void calibrate_zero(uint16_t ppm);
20
+
21
+ void set_co2_sensor(sensor::Sensor *co2_sensor) { this->co2_sensor_ = co2_sensor; }
22
+
23
+ protected:
24
+ sensor::Sensor *co2_sensor_{nullptr};
25
+
26
+ bool cm1106_write_command_(const uint8_t *command, size_t command_len, uint8_t *response, size_t response_len);
27
+ };
28
+
29
+ template<typename... Ts> class CM1106CalibrateZeroAction : public Action<Ts...> {
30
+ public:
31
+ CM1106CalibrateZeroAction(CM1106Component *cm1106) : cm1106_(cm1106) {}
32
+
33
+ void play(Ts... x) override { this->cm1106_->calibrate_zero(400); }
34
+
35
+ protected:
36
+ CM1106Component *cm1106_;
37
+ };
38
+
39
+ } // namespace cm1106
40
+ } // namespace esphome
@@ -0,0 +1,72 @@
1
+ """CM1106 Sensor component for ESPHome."""
2
+
3
+ import esphome.codegen as cg
4
+ import esphome.config_validation as cv
5
+ from esphome import automation
6
+ from esphome.automation import maybe_simple_id
7
+ from esphome.components import sensor, uart
8
+ from esphome.const import (
9
+ CONF_CO2,
10
+ CONF_ID,
11
+ DEVICE_CLASS_CARBON_DIOXIDE,
12
+ ICON_MOLECULE_CO2,
13
+ STATE_CLASS_MEASUREMENT,
14
+ UNIT_PARTS_PER_MILLION,
15
+ )
16
+
17
+ DEPENDENCIES = ["uart"]
18
+ CODEOWNERS = ["@andrewjswan"]
19
+
20
+ cm1106_ns = cg.esphome_ns.namespace("cm1106")
21
+ CM1106Component = cm1106_ns.class_(
22
+ "CM1106Component", cg.PollingComponent, uart.UARTDevice
23
+ )
24
+ CM1106CalibrateZeroAction = cm1106_ns.class_(
25
+ "CM1106CalibrateZeroAction",
26
+ automation.Action,
27
+ )
28
+
29
+ CONFIG_SCHEMA = (
30
+ cv.Schema(
31
+ {
32
+ cv.GenerateID(): cv.declare_id(CM1106Component),
33
+ cv.Optional(CONF_CO2): sensor.sensor_schema(
34
+ unit_of_measurement=UNIT_PARTS_PER_MILLION,
35
+ icon=ICON_MOLECULE_CO2,
36
+ accuracy_decimals=0,
37
+ device_class=DEVICE_CLASS_CARBON_DIOXIDE,
38
+ state_class=STATE_CLASS_MEASUREMENT,
39
+ ),
40
+ },
41
+ )
42
+ .extend(cv.polling_component_schema("60s"))
43
+ .extend(uart.UART_DEVICE_SCHEMA)
44
+ )
45
+
46
+
47
+ async def to_code(config) -> None:
48
+ """Code generation entry point."""
49
+ var = cg.new_Pvariable(config[CONF_ID])
50
+ await cg.register_component(var, config)
51
+ await uart.register_uart_device(var, config)
52
+ if co2_config := config.get(CONF_CO2):
53
+ sens = await sensor.new_sensor(co2_config)
54
+ cg.add(var.set_co2_sensor(sens))
55
+
56
+
57
+ CALIBRATION_ACTION_SCHEMA = maybe_simple_id(
58
+ {
59
+ cv.GenerateID(): cv.use_id(CM1106Component),
60
+ },
61
+ )
62
+
63
+
64
+ @automation.register_action(
65
+ "cm1106.calibrate_zero",
66
+ CM1106CalibrateZeroAction,
67
+ CALIBRATION_ACTION_SCHEMA,
68
+ )
69
+ async def cm1106_calibration_to_code(config, action_id, template_arg, args) -> None:
70
+ """Service code generation entry point."""
71
+ paren = await cg.get_variable(config[CONF_ID])
72
+ return cg.new_Pvariable(action_id, template_arg, paren)
@@ -3,3 +3,4 @@
3
3
  CODEOWNERS = ["@esphome/core"]
4
4
 
5
5
  CONF_DRAW_ROUNDING = "draw_rounding"
6
+ CONF_REQUEST_HEADERS = "request_headers"