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
@@ -32,7 +32,7 @@ static const uint8_t LCD_LINE2 = 0x88;
32
32
  static const uint8_t LCD_LINE3 = 0x98;
33
33
 
34
34
  void ST7920::setup() {
35
- ESP_LOGCONFIG(TAG, "Setting up ST7920...");
35
+ ESP_LOGCONFIG(TAG, "Running setup");
36
36
  this->dump_config();
37
37
  this->spi_setup();
38
38
  this->init_internal_(this->get_buffer_length_());
@@ -95,8 +95,10 @@ void ST7920::fill(Color color) { memset(this->buffer_, color.is_on() ? 0xFF : 0x
95
95
  void ST7920::dump_config() {
96
96
  LOG_DISPLAY("", "ST7920", this);
97
97
  LOG_PIN(" CS Pin: ", this->cs_);
98
- ESP_LOGCONFIG(TAG, " Height: %d", this->height_);
99
- ESP_LOGCONFIG(TAG, " Width: %d", this->width_);
98
+ ESP_LOGCONFIG(TAG,
99
+ " Height: %d\n"
100
+ " Width: %d",
101
+ this->height_, this->width_);
100
102
  }
101
103
 
102
104
  float ST7920::get_setup_priority() const { return setup_priority::PROCESSOR; }
@@ -129,7 +131,7 @@ void HOT ST7920::draw_absolute_pixel_internal(int x, int y, Color color) {
129
131
  }
130
132
 
131
133
  void ST7920::display_init_() {
132
- ESP_LOGD(TAG, "Initializing display...");
134
+ ESP_LOGD(TAG, "Initializing display");
133
135
  this->command_(LCD_BASIC); // 8bit mode
134
136
  this->command_(LCD_BASIC); // 8bit mode
135
137
  this->command_(LCD_CLS); // clear screen
@@ -38,17 +38,21 @@ StatsdComponent::~StatsdComponent() {
38
38
  }
39
39
 
40
40
  void StatsdComponent::dump_config() {
41
- ESP_LOGCONFIG(TAG, "statsD:");
42
- ESP_LOGCONFIG(TAG, " host: %s", this->host_);
43
- ESP_LOGCONFIG(TAG, " port: %d", this->port_);
41
+ ESP_LOGCONFIG(TAG,
42
+ "statsD:\n"
43
+ " host: %s\n"
44
+ " port: %d",
45
+ this->host_, this->port_);
44
46
  if (this->prefix_) {
45
47
  ESP_LOGCONFIG(TAG, " prefix: %s", this->prefix_);
46
48
  }
47
49
 
48
50
  ESP_LOGCONFIG(TAG, " metrics:");
49
51
  for (sensors_t s : this->sensors_) {
50
- ESP_LOGCONFIG(TAG, " - name: %s", s.name);
51
- ESP_LOGCONFIG(TAG, " type: %d", s.type);
52
+ ESP_LOGCONFIG(TAG,
53
+ " - name: %s\n"
54
+ " type: %d",
55
+ s.name, s.type);
52
56
  }
53
57
  }
54
58
 
@@ -53,7 +53,7 @@ void StatusLEDLightOutput::write_state(light::LightState *state) {
53
53
  }
54
54
 
55
55
  void StatusLEDLightOutput::setup() {
56
- ESP_LOGCONFIG(TAG, "Setting up Status LED...");
56
+ ESP_LOGCONFIG(TAG, "Running setup");
57
57
 
58
58
  if (this->pin_ != nullptr) {
59
59
  this->pin_->setup();
@@ -11,7 +11,7 @@ StatusLED *global_status_led = nullptr; // NOLINT(cppcoreguidelines-avoid-non-c
11
11
 
12
12
  StatusLED::StatusLED(GPIOPin *pin) : pin_(pin) { global_status_led = this; }
13
13
  void StatusLED::pre_setup() {
14
- ESP_LOGCONFIG(TAG, "Setting up Status LED...");
14
+ ESP_LOGCONFIG(TAG, "Running setup");
15
15
  this->pin_->setup();
16
16
  this->pin_->digital_write(false);
17
17
  }
@@ -7,9 +7,11 @@ namespace esphome {
7
7
  namespace stepper {
8
8
 
9
9
  #define LOG_STEPPER(this) \
10
- ESP_LOGCONFIG(TAG, " Acceleration: %.0f steps/s^2", this->acceleration_); \
11
- ESP_LOGCONFIG(TAG, " Deceleration: %.0f steps/s^2", this->deceleration_); \
12
- ESP_LOGCONFIG(TAG, " Max Speed: %.0f steps/s", this->max_speed_);
10
+ ESP_LOGCONFIG(TAG, \
11
+ " Acceleration: %.0f steps/s^2\n" \
12
+ " Deceleration: %.0f steps/s^2\n" \
13
+ " Max Speed: %.0f steps/s", \
14
+ this->acceleration_, this->deceleration_, this->max_speed_);
13
15
 
14
16
  class Stepper {
15
17
  public:
@@ -18,7 +18,7 @@ static const uint16_t STS3X_COMMAND_HEATER_DISABLE = 0x3066;
18
18
  static const uint16_t STS3X_COMMAND_FETCH_DATA = 0xE000;
19
19
 
20
20
  void STS3XComponent::setup() {
21
- ESP_LOGCONFIG(TAG, "Setting up STS3x...");
21
+ ESP_LOGCONFIG(TAG, "Running setup");
22
22
  if (!this->write_command(STS3X_COMMAND_READ_SERIAL_NUMBER)) {
23
23
  this->mark_failed();
24
24
  return;
@@ -36,7 +36,7 @@ void STS3XComponent::dump_config() {
36
36
  ESP_LOGCONFIG(TAG, "STS3x:");
37
37
  LOG_I2C_DEVICE(this);
38
38
  if (this->is_failed()) {
39
- ESP_LOGE(TAG, "Communication with ST3x failed!");
39
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
40
40
  }
41
41
  LOG_UPDATE_INTERVAL(this);
42
42
 
@@ -159,6 +159,7 @@ async def register_switch(var, config):
159
159
  if not CORE.has_id(config[CONF_ID]):
160
160
  var = cg.Pvariable(config[CONF_ID], var)
161
161
  cg.add(cg.App.register_switch(var))
162
+ CORE.register_platform_component("switch", var)
162
163
  await setup_switch_core_(var, config)
163
164
 
164
165
 
@@ -65,7 +65,24 @@ bool Switch::is_inverted() const { return this->inverted_; }
65
65
 
66
66
  void log_switch(const char *tag, const char *prefix, const char *type, Switch *obj) {
67
67
  if (obj != nullptr) {
68
- ESP_LOGCONFIG(tag, "%s%s '%s'", prefix, type, obj->get_name().c_str());
68
+ // Prepare restore mode string
69
+ const LogString *onoff = LOG_STR(""), *inverted = onoff, *restore;
70
+ if (obj->restore_mode & RESTORE_MODE_DISABLED_MASK) {
71
+ restore = LOG_STR("disabled");
72
+ } else {
73
+ onoff = obj->restore_mode & RESTORE_MODE_ON_MASK ? LOG_STR("ON") : LOG_STR("OFF");
74
+ inverted = obj->restore_mode & RESTORE_MODE_INVERTED_MASK ? LOG_STR("inverted ") : LOG_STR("");
75
+ restore = obj->restore_mode & RESTORE_MODE_PERSISTENT_MASK ? LOG_STR("restore defaults to") : LOG_STR("always");
76
+ }
77
+
78
+ // Build the base message with mandatory fields
79
+ ESP_LOGCONFIG(tag,
80
+ "%s%s '%s'\n"
81
+ "%s Restore Mode: %s%s %s",
82
+ prefix, type, obj->get_name().c_str(), prefix, LOG_STR_ARG(inverted), LOG_STR_ARG(restore),
83
+ LOG_STR_ARG(onoff));
84
+
85
+ // Add optional fields separately
69
86
  if (!obj->get_icon().empty()) {
70
87
  ESP_LOGCONFIG(tag, "%s Icon: '%s'", prefix, obj->get_icon().c_str());
71
88
  }
@@ -78,17 +95,6 @@ void log_switch(const char *tag, const char *prefix, const char *type, Switch *o
78
95
  if (!obj->get_device_class().empty()) {
79
96
  ESP_LOGCONFIG(tag, "%s Device Class: '%s'", prefix, obj->get_device_class().c_str());
80
97
  }
81
- const LogString *onoff = LOG_STR(""), *inverted = onoff, *restore;
82
- if (obj->restore_mode & RESTORE_MODE_DISABLED_MASK) {
83
- restore = LOG_STR("disabled");
84
- } else {
85
- onoff = obj->restore_mode & RESTORE_MODE_ON_MASK ? LOG_STR("ON") : LOG_STR("OFF");
86
- inverted = obj->restore_mode & RESTORE_MODE_INVERTED_MASK ? LOG_STR("inverted ") : LOG_STR("");
87
- restore = obj->restore_mode & RESTORE_MODE_PERSISTENT_MASK ? LOG_STR("restore defaults to") : LOG_STR("always");
88
- }
89
-
90
- ESP_LOGCONFIG(tag, "%s Restore Mode: %s%s %s", prefix, LOG_STR_ARG(inverted), LOG_STR_ARG(restore),
91
- LOG_STR_ARG(onoff));
92
98
  }
93
99
  }
94
100
 
@@ -2,8 +2,8 @@
2
2
 
3
3
  #include "esphome/core/component.h"
4
4
  #include "esphome/core/entity_base.h"
5
- #include "esphome/core/preferences.h"
6
5
  #include "esphome/core/helpers.h"
6
+ #include "esphome/core/preferences.h"
7
7
 
8
8
  namespace esphome {
9
9
  namespace switch_ {
@@ -1,6 +1,6 @@
1
- from esphome import pins
1
+ from esphome import automation, pins
2
2
  import esphome.codegen as cg
3
- from esphome.components import i2c
3
+ from esphome.components import i2c, key_provider
4
4
  import esphome.config_validation as cv
5
5
  from esphome.const import (
6
6
  CONF_ID,
@@ -8,13 +8,16 @@ from esphome.const import (
8
8
  CONF_INVERTED,
9
9
  CONF_MODE,
10
10
  CONF_NUMBER,
11
+ CONF_ON_KEY,
11
12
  CONF_OPEN_DRAIN,
12
13
  CONF_OUTPUT,
13
14
  CONF_PULLDOWN,
14
15
  CONF_PULLUP,
16
+ CONF_TRIGGER_ID,
15
17
  )
16
18
 
17
19
  CONF_KEYPAD = "keypad"
20
+ CONF_KEYS = "keys"
18
21
  CONF_KEY_ROWS = "key_rows"
19
22
  CONF_KEY_COLUMNS = "key_columns"
20
23
  CONF_SLEEP_TIME = "sleep_time"
@@ -22,22 +25,47 @@ CONF_SCAN_TIME = "scan_time"
22
25
  CONF_DEBOUNCE_TIME = "debounce_time"
23
26
  CONF_SX1509_ID = "sx1509_id"
24
27
 
28
+ AUTO_LOAD = ["key_provider"]
25
29
  DEPENDENCIES = ["i2c"]
26
30
  MULTI_CONF = True
27
31
 
28
32
  sx1509_ns = cg.esphome_ns.namespace("sx1509")
29
33
 
30
- SX1509Component = sx1509_ns.class_("SX1509Component", cg.Component, i2c.I2CDevice)
34
+ SX1509Component = sx1509_ns.class_(
35
+ "SX1509Component", cg.Component, i2c.I2CDevice, key_provider.KeyProvider
36
+ )
31
37
  SX1509GPIOPin = sx1509_ns.class_("SX1509GPIOPin", cg.GPIOPin)
38
+ SX1509KeyTrigger = sx1509_ns.class_(
39
+ "SX1509KeyTrigger", automation.Trigger.template(cg.uint8)
40
+ )
32
41
 
33
- KEYPAD_SCHEMA = cv.Schema(
34
- {
35
- cv.Required(CONF_KEY_ROWS): cv.int_range(min=1, max=8),
36
- cv.Required(CONF_KEY_COLUMNS): cv.int_range(min=1, max=8),
37
- cv.Optional(CONF_SLEEP_TIME): cv.int_range(min=128, max=8192),
38
- cv.Optional(CONF_SCAN_TIME): cv.int_range(min=1, max=128),
39
- cv.Optional(CONF_DEBOUNCE_TIME): cv.int_range(min=1, max=64),
40
- }
42
+
43
+ def check_keys(config):
44
+ if CONF_KEYS in config:
45
+ if len(config[CONF_KEYS]) != config[CONF_KEY_ROWS] * config[CONF_KEY_COLUMNS]:
46
+ raise cv.Invalid(
47
+ "The number of key codes must equal the number of rows * columns"
48
+ )
49
+ return config
50
+
51
+
52
+ KEYPAD_SCHEMA = cv.All(
53
+ cv.Schema(
54
+ {
55
+ cv.Required(CONF_KEY_ROWS): cv.int_range(min=2, max=8),
56
+ cv.Required(CONF_KEY_COLUMNS): cv.int_range(min=1, max=8),
57
+ cv.Optional(CONF_SLEEP_TIME): cv.int_range(min=128, max=8192),
58
+ cv.Optional(CONF_SCAN_TIME): cv.int_range(min=1, max=128),
59
+ cv.Optional(CONF_DEBOUNCE_TIME): cv.int_range(min=1, max=64),
60
+ cv.Optional(CONF_KEYS): cv.string,
61
+ cv.Optional(CONF_ON_KEY): automation.validate_automation(
62
+ {
63
+ cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SX1509KeyTrigger),
64
+ }
65
+ ),
66
+ }
67
+ ),
68
+ check_keys,
41
69
  )
42
70
 
43
71
  CONFIG_SCHEMA = (
@@ -56,17 +84,22 @@ async def to_code(config):
56
84
  var = cg.new_Pvariable(config[CONF_ID])
57
85
  await cg.register_component(var, config)
58
86
  await i2c.register_i2c_device(var, config)
59
- if CONF_KEYPAD in config:
60
- keypad = config[CONF_KEYPAD]
61
- cg.add(var.set_rows_cols(keypad[CONF_KEY_ROWS], keypad[CONF_KEY_COLUMNS]))
87
+ if conf := config.get(CONF_KEYPAD):
88
+ cg.add(var.set_rows_cols(conf[CONF_KEY_ROWS], conf[CONF_KEY_COLUMNS]))
62
89
  if (
63
- CONF_SLEEP_TIME in keypad
64
- and CONF_SCAN_TIME in keypad
65
- and CONF_DEBOUNCE_TIME in keypad
90
+ CONF_SLEEP_TIME in conf
91
+ and CONF_SCAN_TIME in conf
92
+ and CONF_DEBOUNCE_TIME in conf
66
93
  ):
67
- cg.add(var.set_sleep_time(keypad[CONF_SLEEP_TIME]))
68
- cg.add(var.set_scan_time(keypad[CONF_SCAN_TIME]))
69
- cg.add(var.set_debounce_time(keypad[CONF_DEBOUNCE_TIME]))
94
+ cg.add(var.set_sleep_time(conf[CONF_SLEEP_TIME]))
95
+ cg.add(var.set_scan_time(conf[CONF_SCAN_TIME]))
96
+ cg.add(var.set_debounce_time(conf[CONF_DEBOUNCE_TIME]))
97
+ if keys := conf.get(CONF_KEYS):
98
+ cg.add(var.set_keys(keys))
99
+ for tconf in conf.get(CONF_ON_KEY, []):
100
+ trigger = cg.new_Pvariable(tconf[CONF_TRIGGER_ID])
101
+ cg.add(var.register_key_trigger(trigger))
102
+ await automation.build_automation(trigger, [(cg.uint8, "x")], tconf)
70
103
 
71
104
 
72
105
  def validate_mode(value):
@@ -8,9 +8,9 @@ namespace sx1509 {
8
8
  static const char *const TAG = "sx1509";
9
9
 
10
10
  void SX1509Component::setup() {
11
- ESP_LOGCONFIG(TAG, "Setting up SX1509Component...");
11
+ ESP_LOGCONFIG(TAG, "Running setup");
12
12
 
13
- ESP_LOGV(TAG, " Resetting devices...");
13
+ ESP_LOGV(TAG, " Resetting devices");
14
14
  if (!this->write_byte(REG_RESET, 0x12)) {
15
15
  this->mark_failed();
16
16
  return;
@@ -48,6 +48,30 @@ void SX1509Component::loop() {
48
48
  uint16_t key_data = this->read_key_data();
49
49
  for (auto *binary_sensor : this->keypad_binary_sensors_)
50
50
  binary_sensor->process(key_data);
51
+ if (this->keys_.empty())
52
+ return;
53
+ if (key_data == 0) {
54
+ this->last_key_ = 0;
55
+ return;
56
+ }
57
+ int row, col;
58
+ for (row = 0; row < 7; row++) {
59
+ if (key_data & (1 << row))
60
+ break;
61
+ }
62
+ for (col = 8; col < 15; col++) {
63
+ if (key_data & (1 << col))
64
+ break;
65
+ }
66
+ col -= 8;
67
+ uint8_t key = this->keys_[row * this->cols_ + col];
68
+ if (key == this->last_key_)
69
+ return;
70
+ this->last_key_ = key;
71
+ ESP_LOGV(TAG, "row %d, col %d, key '%c'", row, col, key);
72
+ for (auto &trigger : this->key_triggers_)
73
+ trigger->trigger(key);
74
+ this->send_key_(key);
51
75
  }
52
76
  }
53
77
 
@@ -230,9 +254,9 @@ void SX1509Component::setup_keypad_() {
230
254
  scan_time_bits &= 0b111; // Scan time is bits 2:0
231
255
  temp_byte = sleep_time_ | scan_time_bits;
232
256
  this->write_byte(REG_KEY_CONFIG_1, temp_byte);
233
- rows_ = (rows_ - 1) & 0b111; // 0 = off, 0b001 = 2 rows, 0b111 = 8 rows, etc.
234
- cols_ = (cols_ - 1) & 0b111; // 0b000 = 1 column, ob111 = 8 columns, etc.
235
- this->write_byte(REG_KEY_CONFIG_2, (rows_ << 3) | cols_);
257
+ temp_byte = ((this->rows_ - 1) & 0b111) << 3; // 0 = off, 0b001 = 2 rows, 0b111 = 8 rows, etc.
258
+ temp_byte |= (this->cols_ - 1) & 0b111; // 0b000 = 1 column, ob111 = 8 columns, etc.
259
+ this->write_byte(REG_KEY_CONFIG_2, temp_byte);
236
260
  }
237
261
 
238
262
  uint16_t SX1509Component::read_key_data() {
@@ -1,6 +1,7 @@
1
1
  #pragma once
2
2
 
3
3
  #include "esphome/components/i2c/i2c.h"
4
+ #include "esphome/components/key_provider/key_provider.h"
4
5
  #include "esphome/core/component.h"
5
6
  #include "esphome/core/hal.h"
6
7
  #include "sx1509_gpio_pin.h"
@@ -27,7 +28,9 @@ class SX1509Processor {
27
28
  virtual void process(uint16_t data){};
28
29
  };
29
30
 
30
- class SX1509Component : public Component, public i2c::I2CDevice {
31
+ class SX1509KeyTrigger : public Trigger<uint8_t> {};
32
+
33
+ class SX1509Component : public Component, public i2c::I2CDevice, public key_provider::KeyProvider {
31
34
  public:
32
35
  SX1509Component() = default;
33
36
 
@@ -47,12 +50,14 @@ class SX1509Component : public Component, public i2c::I2CDevice {
47
50
  this->cols_ = cols;
48
51
  this->has_keypad_ = true;
49
52
  };
53
+ void set_keys(std::string keys) { this->keys_ = std::move(keys); };
50
54
  void set_sleep_time(uint16_t sleep_time) { this->sleep_time_ = sleep_time; };
51
55
  void set_scan_time(uint8_t scan_time) { this->scan_time_ = scan_time; };
52
56
  void set_debounce_time(uint8_t debounce_time = 1) { this->debounce_time_ = debounce_time; };
53
57
  void register_keypad_binary_sensor(SX1509Processor *binary_sensor) {
54
58
  this->keypad_binary_sensors_.push_back(binary_sensor);
55
59
  }
60
+ void register_key_trigger(SX1509KeyTrigger *trig) { this->key_triggers_.push_back(trig); };
56
61
  void setup_led_driver(uint8_t pin);
57
62
 
58
63
  protected:
@@ -65,10 +70,13 @@ class SX1509Component : public Component, public i2c::I2CDevice {
65
70
  bool has_keypad_ = false;
66
71
  uint8_t rows_ = 0;
67
72
  uint8_t cols_ = 0;
73
+ std::string keys_;
68
74
  uint16_t sleep_time_ = 128;
69
75
  uint8_t scan_time_ = 1;
70
76
  uint8_t debounce_time_ = 1;
77
+ uint8_t last_key_ = 0;
71
78
  std::vector<SX1509Processor *> keypad_binary_sensors_;
79
+ std::vector<SX1509KeyTrigger *> key_triggers_;
72
80
 
73
81
  uint32_t last_loop_timestamp_ = 0;
74
82
  const uint32_t min_loop_period_ = 15; // ms
@@ -1,4 +1,5 @@
1
1
  #include "t6615.h"
2
+ #include "esphome/core/helpers.h"
2
3
  #include "esphome/core/log.h"
3
4
 
4
5
  namespace esphome {
@@ -15,7 +15,7 @@ static const uint8_t TC74_DATA_READY_MASK = 0x40;
15
15
  // It is possible the "Data Ready" bit will not be set if the TC74 has not been powered on for at least 250ms, so it not
16
16
  // being set does not constitute a failure.
17
17
  void TC74Component::setup() {
18
- ESP_LOGCONFIG(TAG, "Setting up TC74...");
18
+ ESP_LOGCONFIG(TAG, "Running setup");
19
19
  uint8_t config_reg;
20
20
  if (this->read_register(TC74_REGISTER_CONFIGURATION, &config_reg, 1) != i2c::ERROR_OK) {
21
21
  this->mark_failed();
@@ -24,7 +24,7 @@ i2c::ErrorCode TCA9548AChannel::writev(uint8_t address, i2c::WriteBuffer *buffer
24
24
  }
25
25
 
26
26
  void TCA9548AComponent::setup() {
27
- ESP_LOGCONFIG(TAG, "Setting up TCA9548A...");
27
+ ESP_LOGCONFIG(TAG, "Running setup");
28
28
  uint8_t status = 0;
29
29
  if (this->read(&status, 1) != i2c::ERROR_OK) {
30
30
  ESP_LOGE(TAG, "TCA9548A failed");
@@ -16,7 +16,7 @@ namespace tca9555 {
16
16
  static const char *const TAG = "tca9555";
17
17
 
18
18
  void TCA9555Component::setup() {
19
- ESP_LOGCONFIG(TAG, "Setting up TCA9555...");
19
+ ESP_LOGCONFIG(TAG, "Running setup");
20
20
  if (!this->read_gpio_modes_()) {
21
21
  this->mark_failed();
22
22
  return;
@@ -30,7 +30,7 @@ void TCA9555Component::dump_config() {
30
30
  ESP_LOGCONFIG(TAG, "TCA9555:");
31
31
  LOG_I2C_DEVICE(this)
32
32
  if (this->is_failed()) {
33
- ESP_LOGE(TAG, "Communication with TCA9555 failed!");
33
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
34
34
  }
35
35
  }
36
36
  void TCA9555Component::pin_mode(uint8_t pin, gpio::Flags flags) {
@@ -1,8 +1,8 @@
1
1
  #include "tcs34725.h"
2
- #include "esphome/core/log.h"
3
2
  #include "esphome/core/hal.h"
4
- #include <algorithm>
5
3
  #include "esphome/core/helpers.h"
4
+ #include "esphome/core/log.h"
5
+ #include <algorithm>
6
6
 
7
7
  namespace esphome {
8
8
  namespace tcs34725 {
@@ -18,7 +18,7 @@ static const uint8_t TCS34725_REGISTER_ENABLE = TCS34725_COMMAND_BIT | 0x00;
18
18
  static const uint8_t TCS34725_REGISTER_CRGBDATAL = TCS34725_COMMAND_BIT | 0x14;
19
19
 
20
20
  void TCS34725Component::setup() {
21
- ESP_LOGCONFIG(TAG, "Setting up TCS34725...");
21
+ ESP_LOGCONFIG(TAG, "Running setup");
22
22
  uint8_t id;
23
23
  if (this->read_register(TCS34725_REGISTER_ID, &id, 1) != i2c::ERROR_OK) {
24
24
  this->mark_failed();
@@ -46,7 +46,7 @@ void TCS34725Component::dump_config() {
46
46
  ESP_LOGCONFIG(TAG, "TCS34725:");
47
47
  LOG_I2C_DEVICE(this);
48
48
  if (this->is_failed()) {
49
- ESP_LOGE(TAG, "Communication with TCS34725 failed!");
49
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
50
50
  }
51
51
  LOG_UPDATE_INTERVAL(this);
52
52
 
@@ -1,4 +1,5 @@
1
1
  #include "tee501.h"
2
+ #include "esphome/core/helpers.h"
2
3
  #include "esphome/core/log.h"
3
4
 
4
5
  namespace esphome {
@@ -7,7 +8,7 @@ namespace tee501 {
7
8
  static const char *const TAG = "tee501";
8
9
 
9
10
  void TEE501Component::setup() {
10
- ESP_LOGCONFIG(TAG, "Setting up TEE501...");
11
+ ESP_LOGCONFIG(TAG, "Running setup");
11
12
  uint8_t address[] = {0x70, 0x29};
12
13
  this->write(address, 2, false);
13
14
  uint8_t identification[9];
@@ -25,7 +26,7 @@ void TEE501Component::dump_config() {
25
26
  LOG_I2C_DEVICE(this);
26
27
  switch (this->error_code_) {
27
28
  case COMMUNICATION_FAILED:
28
- ESP_LOGE(TAG, "Communication with TEE501 failed!");
29
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
29
30
  break;
30
31
  case CRC_CHECK_FAILED:
31
32
  ESP_LOGE(TAG, "The crc check failed");
@@ -1,7 +1,7 @@
1
1
  #include "tem3200.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 tem3200 {
@@ -16,7 +16,7 @@ enum ErrorCode {
16
16
  };
17
17
 
18
18
  void TEM3200Component::setup() {
19
- ESP_LOGCONFIG(TAG, "Setting up TEM3200...");
19
+ ESP_LOGCONFIG(TAG, "Running setup");
20
20
 
21
21
  uint8_t status(NONE);
22
22
  uint16_t raw_temperature(0);
@@ -24,7 +24,7 @@ void TEM3200Component::setup() {
24
24
 
25
25
  i2c::ErrorCode err = this->read_(status, raw_temperature, raw_pressure);
26
26
  if (err != i2c::ERROR_OK) {
27
- ESP_LOGCONFIG(TAG, " I2C Communication Failed...");
27
+ ESP_LOGCONFIG(TAG, ESP_LOG_MSG_COMM_FAIL);
28
28
  this->mark_failed();
29
29
  return;
30
30
  }
@@ -43,7 +43,6 @@ void TEM3200Component::setup() {
43
43
  this->status_set_warning();
44
44
  break;
45
45
  }
46
- ESP_LOGCONFIG(TAG, " Success...");
47
46
  }
48
47
 
49
48
  void TEM3200Component::dump_config() {
@@ -115,7 +114,7 @@ void TEM3200Component::update() {
115
114
  i2c::ErrorCode err = this->read_(status, raw_temperature, raw_pressure);
116
115
 
117
116
  if (err != i2c::ERROR_OK) {
118
- ESP_LOGW(TAG, "I2C Communication Failed");
117
+ ESP_LOGW(TAG, ESP_LOG_MSG_COMM_FAIL);
119
118
  this->status_set_warning();
120
119
  return;
121
120
  }
@@ -10,6 +10,7 @@ CODEOWNERS = ["@grahambrown11", "@hwstar"]
10
10
  CONF_CODES = "codes"
11
11
  CONF_BYPASS_ARMED_HOME = "bypass_armed_home"
12
12
  CONF_BYPASS_ARMED_NIGHT = "bypass_armed_night"
13
+ CONF_BYPASS_AUTO = "bypass_auto"
13
14
  CONF_CHIME = "chime"
14
15
  CONF_TRIGGER_MODE = "trigger_mode"
15
16
  CONF_REQUIRES_CODE_TO_ARM = "requires_code_to_arm"
@@ -23,6 +24,7 @@ CONF_TRIGGER_TIME = "trigger_time"
23
24
  FLAG_NORMAL = "normal"
24
25
  FLAG_BYPASS_ARMED_HOME = "bypass_armed_home"
25
26
  FLAG_BYPASS_ARMED_NIGHT = "bypass_armed_night"
27
+ FLAG_BYPASS_AUTO = "bypass_auto"
26
28
  FLAG_CHIME = "chime"
27
29
 
28
30
  BinarySensorFlags = {
@@ -30,6 +32,7 @@ BinarySensorFlags = {
30
32
  FLAG_BYPASS_ARMED_HOME: 1 << 1,
31
33
  FLAG_BYPASS_ARMED_NIGHT: 1 << 2,
32
34
  FLAG_CHIME: 1 << 3,
35
+ FLAG_BYPASS_AUTO: 1 << 4,
33
36
  }
34
37
 
35
38
 
@@ -68,6 +71,7 @@ TEMPLATE_ALARM_CONTROL_PANEL_BINARY_SENSOR_SCHEMA = cv.maybe_simple_value(
68
71
  cv.Required(CONF_INPUT): cv.use_id(binary_sensor.BinarySensor),
69
72
  cv.Optional(CONF_BYPASS_ARMED_HOME, default=False): cv.boolean,
70
73
  cv.Optional(CONF_BYPASS_ARMED_NIGHT, default=False): cv.boolean,
74
+ cv.Optional(CONF_BYPASS_AUTO, default=False): cv.boolean,
71
75
  cv.Optional(CONF_CHIME, default=False): cv.boolean,
72
76
  cv.Optional(CONF_TRIGGER_MODE, default="DELAYED"): cv.enum(
73
77
  ALARM_SENSOR_TYPES, upper=True, space="_"
@@ -143,6 +147,8 @@ async def to_code(config):
143
147
  if sensor[CONF_BYPASS_ARMED_NIGHT]:
144
148
  flags |= BinarySensorFlags[FLAG_BYPASS_ARMED_NIGHT]
145
149
  supports_arm_night = True
150
+ if sensor[CONF_BYPASS_AUTO]:
151
+ flags |= BinarySensorFlags[FLAG_BYPASS_AUTO]
146
152
  if sensor[CONF_CHIME]:
147
153
  flags |= BinarySensorFlags[FLAG_CHIME]
148
154
  cg.add(var.add_sensor(bs, flags, sensor[CONF_TRIGGER_MODE]))