esphome 2025.5.2__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 (750) 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 -1
  119. esphome/components/debug/debug_component.h +1 -1
  120. esphome/components/debug/debug_esp32.cpp +4 -2
  121. esphome/components/deep_sleep/deep_sleep_component.cpp +11 -5
  122. esphome/components/deep_sleep/deep_sleep_esp32.cpp +7 -5
  123. esphome/components/demo/__init__.py +206 -0
  124. esphome/components/demo/demo_alarm_control_panel.h +65 -0
  125. esphome/components/demo/demo_button.h +15 -0
  126. esphome/components/demo/demo_date.h +34 -0
  127. esphome/components/demo/demo_datetime.h +40 -0
  128. esphome/components/demo/demo_lock.h +17 -0
  129. esphome/components/demo/demo_select.h +15 -0
  130. esphome/components/demo/demo_text.h +18 -0
  131. esphome/components/demo/demo_time.h +34 -0
  132. esphome/components/demo/demo_valve.h +54 -0
  133. esphome/components/dfrobot_sen0395/commands.cpp +3 -3
  134. esphome/components/dht/dht.cpp +29 -50
  135. esphome/components/dht12/dht12.cpp +2 -2
  136. esphome/components/display/display.h +5 -3
  137. esphome/components/dps310/dps310.cpp +7 -5
  138. esphome/components/ds1307/ds1307.cpp +2 -2
  139. esphome/components/dsmr/dsmr.cpp +5 -3
  140. esphome/components/duty_cycle/duty_cycle_sensor.cpp +2 -2
  141. esphome/components/duty_time/duty_time_sensor.cpp +5 -3
  142. esphome/components/ee895/ee895.cpp +3 -3
  143. esphome/components/ektf2232/touchscreen/ektf2232.cpp +1 -1
  144. esphome/components/emc2101/emc2101.cpp +11 -9
  145. esphome/components/ens160_base/ens160_base.cpp +2 -2
  146. esphome/components/ens210/ens210.cpp +2 -2
  147. esphome/components/es7210/es7210.cpp +6 -4
  148. esphome/components/es7243e/es7243e.cpp +1 -1
  149. esphome/components/es8156/es8156.cpp +1 -1
  150. esphome/components/es8311/es8311.cpp +8 -6
  151. esphome/components/es8388/__init__.py +0 -0
  152. esphome/components/es8388/audio_dac.py +26 -0
  153. esphome/components/es8388/es8388.cpp +289 -0
  154. esphome/components/es8388/es8388.h +81 -0
  155. esphome/components/es8388/es8388_const.h +83 -0
  156. esphome/components/es8388/select/__init__.py +47 -0
  157. esphome/components/es8388/select/adc_input_mic_select.cpp +12 -0
  158. esphome/components/es8388/select/adc_input_mic_select.h +15 -0
  159. esphome/components/es8388/select/dac_output_select.cpp +12 -0
  160. esphome/components/es8388/select/dac_output_select.h +15 -0
  161. esphome/components/esp32/__init__.py +118 -23
  162. esphome/components/esp32/boards.py +208 -125
  163. esphome/components/esp32/const.py +6 -0
  164. esphome/components/esp32/gpio.py +14 -1
  165. esphome/components/esp32/gpio_esp32_c5.py +45 -0
  166. esphome/components/esp32/gpio_esp32_p4.py +43 -0
  167. esphome/components/esp32/preferences.cpp +7 -7
  168. esphome/components/esp32_ble/__init__.py +115 -0
  169. esphome/components/esp32_ble/ble.cpp +101 -54
  170. esphome/components/esp32_ble/ble.h +24 -5
  171. esphome/components/esp32_ble/ble_event.h +172 -32
  172. esphome/components/esp32_ble/ble_scan_result.h +24 -0
  173. esphome/components/esp32_ble/ble_uuid.h +1 -1
  174. esphome/components/esp32_ble/queue.h +53 -27
  175. esphome/components/esp32_ble_client/ble_client_base.cpp +4 -2
  176. esphome/components/esp32_ble_server/__init__.py +4 -1
  177. esphome/components/esp32_ble_server/ble_characteristic.cpp +1 -0
  178. esphome/components/esp32_ble_server/ble_server.h +0 -1
  179. esphome/components/esp32_ble_tracker/__init__.py +7 -2
  180. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +107 -75
  181. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +16 -16
  182. esphome/components/esp32_camera/esp32_camera.cpp +35 -27
  183. esphome/components/esp32_camera_web_server/camera_web_server.cpp +4 -2
  184. esphome/components/esp32_dac/esp32_dac.cpp +2 -2
  185. esphome/components/esp32_improv/__init__.py +5 -1
  186. esphome/components/esp32_improv/esp32_improv_component.cpp +2 -2
  187. esphome/components/esp32_rmt_led_strip/led_strip.cpp +11 -7
  188. esphome/components/esp32_rmt_led_strip/light.py +5 -1
  189. esphome/components/esp32_touch/esp32_touch.cpp +12 -8
  190. esphome/components/esp8266/preferences.cpp +6 -6
  191. esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
  192. esphome/components/esp_ldo/__init__.py +91 -0
  193. esphome/components/esp_ldo/esp_ldo.cpp +43 -0
  194. esphome/components/esp_ldo/esp_ldo.h +43 -0
  195. esphome/components/esphome/ota/ota_esphome.cpp +15 -8
  196. esphome/components/ethernet/ethernet_component.cpp +38 -26
  197. esphome/components/ethernet/ethernet_component.h +1 -1
  198. esphome/components/event/__init__.py +1 -0
  199. esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
  200. esphome/components/ezo/ezo.cpp +1 -1
  201. esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
  202. esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
  203. esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
  204. esphome/components/fan/__init__.py +1 -0
  205. esphome/components/fan/fan.cpp +30 -19
  206. esphome/components/fastled_base/fastled_light.cpp +7 -5
  207. esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
  208. esphome/components/fs3000/fs3000.cpp +1 -1
  209. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
  210. esphome/components/ft63x6/ft63x6.cpp +5 -3
  211. esphome/components/gcja5/gcja5.cpp +0 -12
  212. esphome/components/gcja5/gcja5.h +8 -3
  213. esphome/components/gdk101/gdk101.cpp +2 -2
  214. esphome/components/globals/globals_component.h +13 -10
  215. esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
  216. esphome/components/gp8403/gp8403.cpp +4 -2
  217. esphome/components/gp8403/output/gp8403_output.cpp +4 -2
  218. esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
  219. esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
  220. esphome/components/gpio/switch/gpio_switch.cpp +1 -1
  221. esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
  222. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
  223. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
  224. esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
  225. esphome/components/growatt_solar/growatt_solar.cpp +6 -3
  226. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
  227. esphome/components/haier/haier_base.cpp +2 -2
  228. esphome/components/haier/hon_climate.cpp +13 -6
  229. esphome/components/havells_solar/havells_solar.cpp +5 -2
  230. esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
  231. esphome/components/hdc1080/hdc1080.cpp +2 -2
  232. esphome/components/he60r/he60r.cpp +4 -2
  233. esphome/components/hlw8012/hlw8012.cpp +6 -4
  234. esphome/components/hm3301/hm3301.cpp +2 -2
  235. esphome/components/hmc5883l/hmc5883l.cpp +2 -2
  236. esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
  237. esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
  238. esphome/components/honeywellabp/honeywellabp.cpp +4 -2
  239. esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
  240. esphome/components/hte501/hte501.cpp +3 -2
  241. esphome/components/http_request/__init__.py +2 -2
  242. esphome/components/http_request/http_request.cpp +7 -5
  243. esphome/components/http_request/http_request_idf.cpp +4 -2
  244. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  245. esphome/components/htu21d/htu21d.cpp +2 -2
  246. esphome/components/htu31d/htu31d.cpp +2 -2
  247. esphome/components/hx711/hx711.cpp +2 -2
  248. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
  249. esphome/components/hyt271/hyt271.cpp +2 -2
  250. esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
  251. esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
  252. esphome/components/i2s_audio/__init__.py +2 -0
  253. esphome/components/i2s_audio/i2s_audio.cpp +3 -4
  254. esphome/components/i2s_audio/i2s_audio.h +1 -1
  255. esphome/components/i2s_audio/media_player/__init__.py +1 -1
  256. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
  257. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +48 -30
  258. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +2 -0
  259. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +29 -11
  260. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +1 -0
  261. esphome/components/iaqcore/iaqcore.cpp +3 -3
  262. esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
  263. esphome/components/ili9xxx/ili9xxx_display.h +1 -1
  264. esphome/components/image/image.cpp +1 -0
  265. esphome/components/ina219/ina219.cpp +2 -2
  266. esphome/components/ina226/ina226.cpp +8 -5
  267. esphome/components/ina260/ina260.cpp +1 -1
  268. esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
  269. esphome/components/ina3221/ina3221.cpp +2 -2
  270. esphome/components/inkplate6/display.py +12 -2
  271. esphome/components/inkplate6/inkplate.cpp +13 -9
  272. esphome/components/inkplate6/inkplate.h +7 -6
  273. esphome/components/integration/integration_sensor.cpp +1 -1
  274. esphome/components/internal_temperature/internal_temperature.cpp +4 -4
  275. esphome/components/json/json_util.cpp +4 -5
  276. esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
  277. esphome/components/key_collector/key_collector.cpp +4 -2
  278. esphome/components/kmeteriso/kmeteriso.cpp +4 -4
  279. esphome/components/kuntze/kuntze.cpp +4 -2
  280. esphome/components/lc709203f/__init__.py +1 -0
  281. esphome/components/lc709203f/lc709203f.cpp +299 -0
  282. esphome/components/lc709203f/lc709203f.h +55 -0
  283. esphome/components/lc709203f/sensor.py +93 -0
  284. esphome/components/lcd_base/lcd_display.cpp +2 -2
  285. esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
  286. esphome/components/lcd_menu/lcd_menu.cpp +6 -4
  287. esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
  288. esphome/components/ld2410/ld2410.cpp +6 -7
  289. esphome/components/ld2420/ld2420.cpp +9 -7
  290. esphome/components/ld2450/ld2450.cpp +6 -4
  291. esphome/components/ld2450/sensor.py +2 -2
  292. esphome/components/ledc/ledc_output.cpp +32 -28
  293. esphome/components/libretiny/const.py +1 -1
  294. esphome/components/libretiny/preferences.cpp +6 -7
  295. esphome/components/light/__init__.py +2 -1
  296. esphome/components/light/esp_hsv_color.h +1 -1
  297. esphome/components/light/light_state.cpp +9 -5
  298. esphome/components/light/light_state.h +15 -15
  299. esphome/components/light/light_transformer.h +1 -1
  300. esphome/components/lightwaverf/LwTx.cpp +1 -1
  301. esphome/components/lightwaverf/lightwaverf.cpp +1 -1
  302. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
  303. esphome/components/lock/__init__.py +1 -0
  304. esphome/components/lock/lock.h +1 -1
  305. esphome/components/logger/__init__.py +6 -0
  306. esphome/components/logger/logger.cpp +11 -20
  307. esphome/components/logger/logger.h +1 -2
  308. esphome/components/logger/logger_esp32.cpp +5 -5
  309. esphome/components/ltr390/ltr390.cpp +8 -5
  310. esphome/components/ltr501/ltr501.cpp +19 -14
  311. esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
  312. esphome/components/lvgl/__init__.py +2 -2
  313. esphome/components/lvgl/automation.py +5 -4
  314. esphome/components/lvgl/defines.py +0 -2
  315. esphome/components/lvgl/lv_validation.py +1 -3
  316. esphome/components/lvgl/lvcode.py +7 -8
  317. esphome/components/lvgl/lvgl_esphome.cpp +26 -10
  318. esphome/components/lvgl/schemas.py +22 -23
  319. esphome/components/lvgl/trigger.py +8 -3
  320. esphome/components/lvgl/widgets/__init__.py +2 -2
  321. esphome/components/lvgl/widgets/canvas.py +9 -3
  322. esphome/components/lvgl/widgets/line.py +2 -1
  323. esphome/components/lvgl/widgets/tabview.py +7 -0
  324. esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
  325. esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
  326. esphome/components/max17043/max17043.cpp +2 -2
  327. esphome/components/max31855/max31855.cpp +2 -1
  328. esphome/components/max31856/max31856.cpp +9 -11
  329. esphome/components/max31865/max31865.cpp +6 -4
  330. esphome/components/max44009/max44009.cpp +2 -2
  331. esphome/components/max6675/max6675.cpp +1 -1
  332. esphome/components/max6956/max6956.cpp +5 -3
  333. esphome/components/max7219/max7219.cpp +8 -6
  334. esphome/components/max7219digit/automation.h +52 -0
  335. esphome/components/max7219digit/display.py +93 -1
  336. esphome/components/max7219digit/max7219digit.cpp +16 -13
  337. esphome/components/max9611/max9611.cpp +9 -6
  338. esphome/components/mcp23008/mcp23008.cpp +1 -1
  339. esphome/components/mcp23016/mcp23016.cpp +1 -1
  340. esphome/components/mcp23017/mcp23017.cpp +1 -1
  341. esphome/components/mcp23s08/mcp23s08.cpp +1 -1
  342. esphome/components/mcp23s17/mcp23s17.cpp +1 -1
  343. esphome/components/mcp3008/mcp3008.cpp +1 -1
  344. esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
  345. esphome/components/mcp3204/mcp3204.cpp +1 -1
  346. esphome/components/mcp4461/mcp4461.cpp +2 -2
  347. esphome/components/mcp4725/mcp4725.cpp +2 -2
  348. esphome/components/mcp4728/mcp4728.cpp +2 -2
  349. esphome/components/mcp9600/mcp9600.cpp +1 -1
  350. esphome/components/mcp9808/mcp9808.cpp +4 -4
  351. esphome/components/mdns/mdns_component.cpp +8 -2
  352. esphome/components/mdns/mdns_component.h +3 -1
  353. esphome/components/mdns/mdns_esp32.cpp +2 -2
  354. esphome/components/media_player/__init__.py +1 -0
  355. esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
  356. esphome/components/micro_wake_word/streaming_model.cpp +10 -6
  357. esphome/components/micronova/micronova.h +2 -2
  358. esphome/components/mics_4514/mics_4514.cpp +2 -2
  359. esphome/components/midea/air_conditioner.cpp +7 -5
  360. esphome/components/midea_ir/midea_ir.cpp +1 -1
  361. esphome/components/mipi_spi/mipi_spi.cpp +24 -15
  362. esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
  363. esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
  364. esphome/components/mlx90614/mlx90614.cpp +4 -3
  365. esphome/components/mmc5603/mmc5603.cpp +2 -2
  366. esphome/components/mmc5983/mmc5983.cpp +1 -1
  367. esphome/components/modbus/modbus.cpp +7 -5
  368. esphome/components/modbus_controller/modbus_controller.cpp +6 -4
  369. esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
  370. esphome/components/modbus_controller/switch/__init__.py +6 -2
  371. esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
  372. esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
  373. esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
  374. esphome/components/mpr121/mpr121.cpp +2 -2
  375. esphome/components/mpu6050/mpu6050.cpp +6 -6
  376. esphome/components/mpu6886/mpu6886.cpp +6 -6
  377. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
  378. esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
  379. esphome/components/mqtt/mqtt_client.cpp +31 -24
  380. esphome/components/mqtt/mqtt_component.cpp +3 -3
  381. esphome/components/mqtt/mqtt_cover.cpp +8 -4
  382. esphome/components/mqtt/mqtt_fan.cpp +12 -6
  383. esphome/components/mqtt/mqtt_valve.cpp +4 -2
  384. esphome/components/ms5611/ms5611.cpp +2 -2
  385. esphome/components/ms8607/ms8607.cpp +2 -2
  386. esphome/components/msa3xx/msa3xx.cpp +16 -12
  387. esphome/components/my9231/my9231.cpp +7 -5
  388. esphome/components/nau7802/nau7802.cpp +6 -4
  389. esphome/components/neopixelbus/neopixelbus_light.h +2 -2
  390. esphome/components/network/ip_address.h +1 -1
  391. esphome/components/network/util.cpp +13 -0
  392. esphome/components/nextion/base_component.py +2 -0
  393. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +3 -4
  394. esphome/components/nextion/display.py +34 -22
  395. esphome/components/nextion/nextion.cpp +182 -143
  396. esphome/components/nextion/nextion.h +36 -0
  397. esphome/components/nextion/nextion_commands.cpp +3 -3
  398. esphome/components/nextion/nextion_upload_arduino.cpp +69 -69
  399. esphome/components/nextion/nextion_upload_idf.cpp +79 -80
  400. esphome/components/nextion/sensor/nextion_sensor.cpp +5 -5
  401. esphome/components/nextion/switch/nextion_switch.cpp +2 -2
  402. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +3 -3
  403. esphome/components/nfc/nci_message.h +1 -1
  404. esphome/components/nfc/ndef_record.h +1 -1
  405. esphome/components/nfc/ndef_record_text.h +1 -1
  406. esphome/components/nfc/ndef_record_uri.h +1 -1
  407. esphome/components/nfc/nfc.h +1 -1
  408. esphome/components/nfc/nfc_tag.h +1 -1
  409. esphome/components/noblex/noblex.cpp +1 -1
  410. esphome/components/npi19/npi19.cpp +5 -7
  411. esphome/components/number/__init__.py +11 -0
  412. esphome/components/number/number.cpp +1 -1
  413. esphome/components/number/number.h +0 -4
  414. esphome/components/online_image/__init__.py +13 -1
  415. esphome/components/online_image/online_image.cpp +26 -4
  416. esphome/components/online_image/online_image.h +21 -4
  417. esphome/components/opentherm/generate.py +3 -3
  418. esphome/components/opentherm/hub.cpp +11 -7
  419. esphome/components/opentherm/number/number.cpp +5 -3
  420. esphome/components/opentherm/opentherm.h +1 -1
  421. esphome/components/opentherm/schema.py +13 -13
  422. esphome/components/opentherm/validate.py +1 -1
  423. esphome/components/openthread/__init__.py +146 -0
  424. esphome/components/openthread/const.py +10 -0
  425. esphome/components/openthread/openthread.cpp +206 -0
  426. esphome/components/openthread/openthread.h +68 -0
  427. esphome/components/openthread/openthread_esp.cpp +164 -0
  428. esphome/components/openthread/tlv.py +58 -0
  429. esphome/components/openthread_info/__init__.py +0 -0
  430. esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
  431. esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
  432. esphome/components/openthread_info/text_sensor.py +105 -0
  433. esphome/components/output/float_output.cpp +1 -1
  434. esphome/components/output/switch/output_switch.cpp +1 -1
  435. esphome/components/packet_transport/packet_transport.cpp +6 -4
  436. esphome/components/pca6416a/pca6416a.cpp +2 -2
  437. esphome/components/pca9554/pca9554.cpp +6 -4
  438. esphome/components/pca9685/pca9685_output.cpp +12 -8
  439. esphome/components/pcd8544/pcd_8544.cpp +1 -1
  440. esphome/components/pcf85063/pcf85063.cpp +2 -2
  441. esphome/components/pcf8563/pcf8563.cpp +2 -2
  442. esphome/components/pcf8574/pcf8574.cpp +2 -2
  443. esphome/components/pid/pid_climate.cpp +8 -5
  444. esphome/components/pid/pid_climate.h +1 -1
  445. esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
  446. esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
  447. esphome/components/pipsolar/pipsolar.cpp +3 -3
  448. esphome/components/pm1006/pm1006.cpp +3 -7
  449. esphome/components/pm1006/pm1006.h +4 -1
  450. esphome/components/pm2005/pm2005.cpp +12 -13
  451. esphome/components/pm2005/sensor.py +1 -1
  452. esphome/components/pmsa003i/pmsa003i.cpp +2 -2
  453. esphome/components/pmsx003/pmsx003.cpp +0 -4
  454. esphome/components/pmsx003/pmsx003.h +5 -2
  455. esphome/components/pmwcs3/pmwcs3.cpp +9 -13
  456. esphome/components/pmwcs3/pmwcs3.h +0 -1
  457. esphome/components/pn532/pn532.cpp +7 -7
  458. esphome/components/pn532/pn532.h +1 -1
  459. esphome/components/pn532_spi/pn532_spi.cpp +1 -1
  460. esphome/components/pn7150/pn7150.cpp +4 -4
  461. esphome/components/pn7160/pn7160.cpp +4 -4
  462. esphome/components/power_supply/power_supply.cpp +6 -4
  463. esphome/components/power_supply/power_supply.h +1 -1
  464. esphome/components/prometheus/__init__.py +0 -1
  465. esphome/components/psram/__init__.py +59 -35
  466. esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
  467. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
  468. esphome/components/pylontech/pylontech.cpp +2 -2
  469. esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
  470. esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
  471. esphome/components/pzemac/pzemac.cpp +4 -2
  472. esphome/components/pzemdc/pzemdc.cpp +4 -2
  473. esphome/components/qmc5883l/qmc5883l.cpp +2 -2
  474. esphome/components/qmp6988/qmp6988.cpp +2 -2
  475. esphome/components/qmp6988/qmp6988.h +1 -1
  476. esphome/components/qr_code/qr_code.cpp +5 -3
  477. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  478. esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
  479. esphome/components/rc522/rc522.cpp +5 -5
  480. esphome/components/rdm6300/rdm6300.cpp +1 -0
  481. esphome/components/remote_receiver/__init__.py +10 -2
  482. esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
  483. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
  484. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
  485. esphome/components/remote_transmitter/__init__.py +10 -2
  486. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
  487. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
  488. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
  489. esphome/components/resistance/resistance_sensor.cpp +6 -3
  490. esphome/components/restart/button/restart_button.cpp +1 -1
  491. esphome/components/restart/switch/restart_switch.cpp +1 -1
  492. esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
  493. esphome/components/rp2040/__init__.py +7 -0
  494. esphome/components/rp2040/core.cpp +8 -1
  495. esphome/components/rp2040/preferences.cpp +3 -3
  496. esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
  497. esphome/components/rp2040_pio_led_strip/light.py +1 -1
  498. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
  499. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
  500. esphome/components/rtttl/rtttl.cpp +11 -9
  501. esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
  502. esphome/components/safe_mode/safe_mode.cpp +9 -8
  503. esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
  504. esphome/components/scd30/scd30.cpp +11 -8
  505. esphome/components/scd4x/scd4x.cpp +12 -8
  506. esphome/components/sdl/display.py +40 -0
  507. esphome/components/sdl/sdl_esphome.cpp +2 -2
  508. esphome/components/sdl/sdl_esphome.h +8 -0
  509. esphome/components/sdm_meter/sdm_meter.cpp +5 -2
  510. esphome/components/sdp3x/sdp3x.cpp +11 -11
  511. esphome/components/sds011/sds011.cpp +5 -6
  512. esphome/components/sds011/sds011.h +4 -1
  513. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
  514. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
  515. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
  516. esphome/components/selec_meter/selec_meter.cpp +5 -2
  517. esphome/components/select/__init__.py +1 -0
  518. esphome/components/select/select.cpp +1 -1
  519. esphome/components/select/select.h +0 -4
  520. esphome/components/sen0321/sen0321.cpp +2 -2
  521. esphome/components/sen21231/sen21231.cpp +1 -1
  522. esphome/components/sen5x/sen5x.cpp +10 -7
  523. esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
  524. esphome/components/sensirion_common/i2c_sensirion.h +1 -0
  525. esphome/components/sensor/__init__.py +11 -1
  526. esphome/components/sensor/filter.h +1 -1
  527. esphome/components/sensor/sensor.cpp +8 -4
  528. esphome/components/sensor/sensor.h +12 -11
  529. esphome/components/servo/servo.cpp +12 -9
  530. esphome/components/servo/servo.h +1 -1
  531. esphome/components/sfa30/sfa30.cpp +1 -1
  532. esphome/components/sgp30/sgp30.cpp +10 -8
  533. esphome/components/sgp4x/sgp4x.cpp +49 -61
  534. esphome/components/sgp4x/sgp4x.h +0 -1
  535. esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
  536. esphome/components/sht3xd/sht3xd.cpp +1 -1
  537. esphome/components/sht4x/sht4x.cpp +2 -2
  538. esphome/components/shtcx/shtcx.cpp +13 -16
  539. esphome/components/shutdown/button/shutdown_button.cpp +1 -1
  540. esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
  541. esphome/components/sim800l/sim800l.cpp +2 -2
  542. esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
  543. esphome/components/sm16716/sm16716.cpp +1 -1
  544. esphome/components/sm2135/sm2135.cpp +1 -1
  545. esphome/components/sm2235/sm2235.cpp +5 -3
  546. esphome/components/sm2335/sm2335.cpp +5 -3
  547. esphome/components/sml/sml.cpp +1 -1
  548. esphome/components/sn74hc165/sn74hc165.cpp +1 -2
  549. esphome/components/sn74hc595/sn74hc595.cpp +1 -2
  550. esphome/components/sntp/sntp_component.cpp +1 -1
  551. esphome/components/socket/__init__.py +2 -0
  552. esphome/components/socket/bsd_sockets_impl.cpp +51 -7
  553. esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
  554. esphome/components/socket/lwip_sockets_impl.cpp +51 -7
  555. esphome/components/socket/socket.cpp +31 -0
  556. esphome/components/socket/socket.h +27 -1
  557. esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
  558. esphome/components/sonoff_d1/sonoff_d1.h +2 -2
  559. esphome/components/sound_level/sound_level.cpp +4 -2
  560. esphome/components/speaker/media_player/__init__.py +3 -0
  561. esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
  562. esphome/components/speaker/media_player/speaker_media_player.h +6 -0
  563. esphome/components/spi/__init__.py +10 -2
  564. esphome/components/spi/spi.cpp +4 -4
  565. esphome/components/spi/spi_arduino.cpp +22 -9
  566. esphome/components/spi_device/spi_device.cpp +1 -2
  567. esphome/components/sprinkler/sprinkler.cpp +9 -6
  568. esphome/components/sps30/sps30.cpp +16 -15
  569. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  570. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
  571. esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
  572. esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
  573. esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
  574. esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
  575. esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
  576. esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
  577. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
  578. esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
  579. esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
  580. esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
  581. esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
  582. esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
  583. esphome/components/st7567_base/st7567_base.cpp +3 -3
  584. esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
  585. esphome/components/st7567_spi/st7567_spi.cpp +1 -1
  586. esphome/components/st7701s/st7701s.cpp +4 -2
  587. esphome/components/st7735/st7735.cpp +3 -3
  588. esphome/components/st7789v/st7789v.cpp +10 -7
  589. esphome/components/st7920/st7920.cpp +6 -4
  590. esphome/components/statsd/statsd.cpp +9 -5
  591. esphome/components/status_led/light/status_led_light.cpp +3 -3
  592. esphome/components/status_led/light/status_led_light.h +1 -1
  593. esphome/components/status_led/status_led.cpp +1 -1
  594. esphome/components/stepper/stepper.h +5 -3
  595. esphome/components/sts3x/sts3x.cpp +2 -2
  596. esphome/components/switch/__init__.py +1 -0
  597. esphome/components/switch/switch.cpp +18 -12
  598. esphome/components/switch/switch.h +14 -8
  599. esphome/components/sx1509/__init__.py +53 -20
  600. esphome/components/sx1509/sx1509.cpp +29 -5
  601. esphome/components/sx1509/sx1509.h +9 -1
  602. esphome/components/t6615/t6615.cpp +1 -0
  603. esphome/components/tc74/tc74.cpp +1 -1
  604. esphome/components/tca9548a/tca9548a.cpp +1 -1
  605. esphome/components/tca9555/tca9555.cpp +2 -2
  606. esphome/components/tcs34725/tcs34725.cpp +4 -4
  607. esphome/components/tee501/tee501.cpp +3 -2
  608. esphome/components/tem3200/tem3200.cpp +5 -6
  609. esphome/components/template/alarm_control_panel/__init__.py +6 -0
  610. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +43 -12
  611. esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +4 -1
  612. esphome/components/template/cover/template_cover.cpp +1 -1
  613. esphome/components/template/select/template_select.cpp +6 -4
  614. esphome/components/template/text/template_text.cpp +2 -3
  615. esphome/components/template/valve/template_valve.cpp +5 -3
  616. esphome/components/text/__init__.py +10 -11
  617. esphome/components/text/text.cpp +1 -1
  618. esphome/components/text/text.h +0 -4
  619. esphome/components/text_sensor/__init__.py +1 -0
  620. esphome/components/text_sensor/text_sensor.cpp +8 -4
  621. esphome/components/text_sensor/text_sensor.h +6 -6
  622. esphome/components/thermostat/thermostat_climate.cpp +67 -43
  623. esphome/components/time/__init__.py +1 -2
  624. esphome/components/time_based/time_based_cover.cpp +4 -2
  625. esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
  626. esphome/components/tm1621/tm1621.cpp +3 -3
  627. esphome/components/tm1637/tm1637.cpp +9 -7
  628. esphome/components/tm1638/tm1638.cpp +7 -5
  629. esphome/components/tm1651/tm1651.cpp +2 -2
  630. esphome/components/tmp102/tmp102.cpp +1 -3
  631. esphome/components/tmp102/tmp102.h +0 -3
  632. esphome/components/tmp1075/tmp1075.cpp +12 -9
  633. esphome/components/tmp117/tmp117.cpp +2 -2
  634. esphome/components/tof10120/tof10120_sensor.cpp +2 -2
  635. esphome/components/tormatic/tormatic_cover.cpp +4 -2
  636. esphome/components/tsl2561/tsl2561.cpp +7 -5
  637. esphome/components/tsl2591/tsl2591.cpp +25 -27
  638. esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
  639. esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
  640. esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
  641. esphome/components/tuya/select/tuya_select.cpp +5 -3
  642. esphome/components/tx20/tx20.cpp +3 -3
  643. esphome/components/uart/__init__.py +4 -5
  644. esphome/components/uart/button/uart_button.cpp +1 -1
  645. esphome/components/uart/switch/uart_switch.cpp +2 -2
  646. esphome/components/uart/uart.cpp +2 -2
  647. esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
  648. esphome/components/uart/uart_component_esp8266.cpp +9 -7
  649. esphome/components/uart/uart_component_esp_idf.cpp +9 -7
  650. esphome/components/uart/uart_component_host.cpp +11 -8
  651. esphome/components/uart/uart_component_libretiny.cpp +8 -6
  652. esphome/components/uart/uart_component_rp2040.cpp +8 -6
  653. esphome/components/udp/udp_component.cpp +9 -5
  654. esphome/components/ufire_ec/ufire_ec.cpp +5 -3
  655. esphome/components/ufire_ise/ufire_ise.cpp +1 -1
  656. esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
  657. esphome/components/update/__init__.py +1 -0
  658. esphome/components/update/update_entity.cpp +1 -1
  659. esphome/components/update/update_entity.h +0 -3
  660. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
  661. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
  662. esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
  663. esphome/components/uptime/sensor/uptime_timestamp_sensor.cpp +1 -1
  664. esphome/components/usb_host/__init__.py +64 -0
  665. esphome/components/usb_host/usb_host.h +116 -0
  666. esphome/components/usb_host/usb_host_client.cpp +394 -0
  667. esphome/components/usb_host/usb_host_component.cpp +35 -0
  668. esphome/components/usb_uart/__init__.py +134 -0
  669. esphome/components/usb_uart/ch34x.cpp +80 -0
  670. esphome/components/usb_uart/cp210x.cpp +126 -0
  671. esphome/components/usb_uart/usb_uart.cpp +328 -0
  672. esphome/components/usb_uart/usb_uart.h +151 -0
  673. esphome/components/valve/__init__.py +1 -0
  674. esphome/components/veml3235/veml3235.cpp +13 -9
  675. esphome/components/veml7700/veml7700.cpp +10 -6
  676. esphome/components/voice_assistant/voice_assistant.cpp +7 -7
  677. esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
  678. esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
  679. esphome/components/web_server/server_index_v2.h +632 -630
  680. esphome/components/web_server/server_index_v3.h +411 -409
  681. esphome/components/web_server/web_server.cpp +5 -3
  682. esphome/components/web_server_base/web_server_base.cpp +1 -1
  683. esphome/components/web_server_idf/__init__.py +0 -2
  684. esphome/components/web_server_idf/utils.cpp +1 -1
  685. esphome/components/web_server_idf/web_server_idf.cpp +7 -3
  686. esphome/components/web_server_idf/web_server_idf.h +7 -0
  687. esphome/components/weikai/__init__.py +2 -0
  688. esphome/components/weikai/weikai.cpp +24 -22
  689. esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
  690. esphome/components/weikai_spi/weikai_spi.cpp +11 -6
  691. esphome/components/wiegand/wiegand.cpp +1 -1
  692. esphome/components/wifi/wifi_component.cpp +50 -37
  693. esphome/components/wifi/wifi_component.h +7 -4
  694. esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
  695. esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
  696. esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
  697. esphome/components/wireguard/wireguard.cpp +21 -21
  698. esphome/components/wl_134/text_sensor.py +1 -2
  699. esphome/components/wled/wled_light_effect.cpp +1 -1
  700. esphome/components/x9c/x9c.cpp +5 -3
  701. esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
  702. esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
  703. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
  704. esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
  705. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
  706. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
  707. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
  708. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
  709. esphome/components/xl9535/xl9535.cpp +2 -2
  710. esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
  711. esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
  712. esphome/config.py +3 -2
  713. esphome/config_validation.py +46 -17
  714. esphome/const.py +10 -1
  715. esphome/core/__init__.py +37 -18
  716. esphome/core/application.cpp +197 -8
  717. esphome/core/application.h +116 -6
  718. esphome/core/component.cpp +36 -15
  719. esphome/core/component.h +43 -13
  720. esphome/core/config.py +12 -0
  721. esphome/core/defines.h +10 -2
  722. esphome/core/entity_base.cpp +4 -16
  723. esphome/core/entity_base.h +27 -13
  724. esphome/core/helpers.cpp +1 -1
  725. esphome/core/helpers.h +5 -5
  726. esphome/core/log.h +2 -0
  727. esphome/core/log_const_en.h +4 -0
  728. esphome/core/scheduler.cpp +2 -2
  729. esphome/coroutine.py +3 -4
  730. esphome/cpp_generator.py +32 -32
  731. esphome/dashboard/core.py +2 -2
  732. esphome/dashboard/web_server.py +2 -2
  733. esphome/git.py +4 -4
  734. esphome/helpers.py +5 -6
  735. esphome/loader.py +8 -7
  736. esphome/log.py +7 -1
  737. esphome/platformio_api.py +2 -3
  738. esphome/storage_json.py +13 -5
  739. esphome/types.py +12 -13
  740. esphome/util.py +1 -2
  741. esphome/wizard.py +0 -16
  742. esphome/writer.py +5 -3
  743. esphome/yaml_util.py +6 -1
  744. esphome/zeroconf.py +1 -1
  745. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/METADATA +12 -11
  746. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/RECORD +750 -696
  747. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/WHEEL +1 -1
  748. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/entry_points.txt +0 -0
  749. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/licenses/LICENSE +0 -0
  750. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/top_level.txt +0 -0
@@ -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_ {
@@ -21,7 +21,7 @@ const int RESTORE_MODE_PERSISTENT_MASK = 0x02;
21
21
  const int RESTORE_MODE_INVERTED_MASK = 0x04;
22
22
  const int RESTORE_MODE_DISABLED_MASK = 0x08;
23
23
 
24
- enum SwitchRestoreMode {
24
+ enum SwitchRestoreMode : uint8_t {
25
25
  SWITCH_ALWAYS_OFF = !RESTORE_MODE_ON_MASK,
26
26
  SWITCH_ALWAYS_ON = RESTORE_MODE_ON_MASK,
27
27
  SWITCH_RESTORE_DEFAULT_OFF = RESTORE_MODE_PERSISTENT_MASK,
@@ -49,12 +49,12 @@ class Switch : public EntityBase, public EntityBase_DeviceClass {
49
49
  */
50
50
  void publish_state(bool state);
51
51
 
52
- /// The current reported state of the binary sensor.
53
- bool state;
54
-
55
52
  /// Indicates whether or not state is to be retrieved from flash and how
56
53
  SwitchRestoreMode restore_mode{SWITCH_RESTORE_DEFAULT_OFF};
57
54
 
55
+ /// The current reported state of the binary sensor.
56
+ bool state;
57
+
58
58
  /** Turn this switch on. This is called by the front-end.
59
59
  *
60
60
  * For implementing switches, please override write_state.
@@ -123,10 +123,16 @@ class Switch : public EntityBase, public EntityBase_DeviceClass {
123
123
  */
124
124
  virtual void write_state(bool state) = 0;
125
125
 
126
- CallbackManager<void(bool)> state_callback_{};
127
- bool inverted_{false};
128
- Deduplicator<bool> publish_dedup_;
126
+ // Pointer first (4 bytes)
129
127
  ESPPreferenceObject rtc_;
128
+
129
+ // CallbackManager (12 bytes on 32-bit - contains vector)
130
+ CallbackManager<void(bool)> state_callback_{};
131
+
132
+ // Small types grouped together
133
+ Deduplicator<bool> publish_dedup_; // 2 bytes (bool has_value_ + bool last_value_)
134
+ bool inverted_{false}; // 1 byte
135
+ // Total: 3 bytes, 1 byte padding
130
136
  };
131
137
 
132
138
  #define LOG_SWITCH(prefix, type, obj) log_switch((TAG), (prefix), LOG_STR_LITERAL(type), (obj))
@@ -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]))
@@ -29,8 +29,10 @@ void TemplateAlarmControlPanel::add_sensor(binary_sensor::BinarySensor *sensor,
29
29
 
30
30
  void TemplateAlarmControlPanel::dump_config() {
31
31
  ESP_LOGCONFIG(TAG, "TemplateAlarmControlPanel:");
32
- ESP_LOGCONFIG(TAG, " Current State: %s", LOG_STR_ARG(alarm_control_panel_state_to_string(this->current_state_)));
33
- ESP_LOGCONFIG(TAG, " Number of Codes: %u", this->codes_.size());
32
+ ESP_LOGCONFIG(TAG,
33
+ " Current State: %s\n"
34
+ " Number of Codes: %u",
35
+ LOG_STR_ARG(alarm_control_panel_state_to_string(this->current_state_)), this->codes_.size());
34
36
  if (!this->codes_.empty())
35
37
  ESP_LOGCONFIG(TAG, " Requires Code To Arm: %s", YESNO(this->requires_code_to_arm_));
36
38
  ESP_LOGCONFIG(TAG, " Arming Away Time: %" PRIu32 "s", (this->arming_away_time_ / 1000));
@@ -38,18 +40,25 @@ void TemplateAlarmControlPanel::dump_config() {
38
40
  ESP_LOGCONFIG(TAG, " Arming Home Time: %" PRIu32 "s", (this->arming_home_time_ / 1000));
39
41
  if (this->arming_night_time_ != 0)
40
42
  ESP_LOGCONFIG(TAG, " Arming Night Time: %" PRIu32 "s", (this->arming_night_time_ / 1000));
41
- ESP_LOGCONFIG(TAG, " Pending Time: %" PRIu32 "s", (this->pending_time_ / 1000));
42
- ESP_LOGCONFIG(TAG, " Trigger Time: %" PRIu32 "s", (this->trigger_time_ / 1000));
43
- ESP_LOGCONFIG(TAG, " Supported Features: %" PRIu32, this->get_supported_features());
43
+ ESP_LOGCONFIG(TAG,
44
+ " Pending Time: %" PRIu32 "s\n"
45
+ " Trigger Time: %" PRIu32 "s\n"
46
+ " Supported Features: %" PRIu32,
47
+ (this->pending_time_ / 1000), (this->trigger_time_ / 1000), this->get_supported_features());
44
48
  #ifdef USE_BINARY_SENSOR
45
49
  for (auto sensor_info : this->sensor_map_) {
46
50
  ESP_LOGCONFIG(TAG, " Binary Sensor:");
47
- ESP_LOGCONFIG(TAG, " Name: %s", sensor_info.first->get_name().c_str());
48
- ESP_LOGCONFIG(TAG, " Armed home bypass: %s",
49
- TRUEFALSE(sensor_info.second.flags & BINARY_SENSOR_MODE_BYPASS_ARMED_HOME));
50
- ESP_LOGCONFIG(TAG, " Armed night bypass: %s",
51
- TRUEFALSE(sensor_info.second.flags & BINARY_SENSOR_MODE_BYPASS_ARMED_NIGHT));
52
- ESP_LOGCONFIG(TAG, " Chime mode: %s", TRUEFALSE(sensor_info.second.flags & BINARY_SENSOR_MODE_CHIME));
51
+ ESP_LOGCONFIG(TAG,
52
+ " Name: %s\n"
53
+ " Armed home bypass: %s\n"
54
+ " Armed night bypass: %s\n"
55
+ " Auto bypass: %s\n"
56
+ " Chime mode: %s",
57
+ sensor_info.first->get_name().c_str(),
58
+ TRUEFALSE(sensor_info.second.flags & BINARY_SENSOR_MODE_BYPASS_ARMED_HOME),
59
+ TRUEFALSE(sensor_info.second.flags & BINARY_SENSOR_MODE_BYPASS_ARMED_NIGHT),
60
+ TRUEFALSE(sensor_info.second.flags & BINARY_SENSOR_MODE_BYPASS_AUTO),
61
+ TRUEFALSE(sensor_info.second.flags & BINARY_SENSOR_MODE_CHIME));
53
62
  const char *sensor_type;
54
63
  switch (sensor_info.second.type) {
55
64
  case ALARM_SENSOR_TYPE_INSTANT:
@@ -71,7 +80,7 @@ void TemplateAlarmControlPanel::dump_config() {
71
80
  }
72
81
 
73
82
  void TemplateAlarmControlPanel::setup() {
74
- ESP_LOGCONFIG(TAG, "Setting up Template AlarmControlPanel '%s'...", this->name_.c_str());
83
+ ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
75
84
  switch (this->restore_mode_) {
76
85
  case ALARM_CONTROL_PANEL_ALWAYS_DISARMED:
77
86
  this->current_state_ = ACP_STATE_DISARMED;
@@ -101,6 +110,7 @@ void TemplateAlarmControlPanel::loop() {
101
110
  delay = this->arming_night_time_;
102
111
  }
103
112
  if ((millis() - this->last_update_) > delay) {
113
+ this->bypass_before_arming();
104
114
  this->publish_state(this->desired_state_);
105
115
  }
106
116
  return;
@@ -137,6 +147,11 @@ void TemplateAlarmControlPanel::loop() {
137
147
  }
138
148
  // Check for triggered sensors
139
149
  if (sensor_info.first->state) { // Sensor triggered?
150
+ // Skip if auto bypassed
151
+ if (std::count(this->bypassed_sensor_indicies_.begin(), this->bypassed_sensor_indicies_.end(),
152
+ sensor_info.second.store_index) == 1) {
153
+ continue;
154
+ }
140
155
  // Skip if bypass armed home
141
156
  if (this->current_state_ == ACP_STATE_ARMED_HOME &&
142
157
  (sensor_info.second.flags & BINARY_SENSOR_MODE_BYPASS_ARMED_HOME)) {
@@ -236,10 +251,23 @@ void TemplateAlarmControlPanel::arm_(optional<std::string> code, alarm_control_p
236
251
  if (delay > 0) {
237
252
  this->publish_state(ACP_STATE_ARMING);
238
253
  } else {
254
+ this->bypass_before_arming();
239
255
  this->publish_state(state);
240
256
  }
241
257
  }
242
258
 
259
+ void TemplateAlarmControlPanel::bypass_before_arming() {
260
+ #ifdef USE_BINARY_SENSOR
261
+ for (auto sensor_info : this->sensor_map_) {
262
+ // Check for sensors left on and set to bypass automatically and remove them from monitoring
263
+ if ((sensor_info.second.flags & BINARY_SENSOR_MODE_BYPASS_AUTO) && (sensor_info.first->state)) {
264
+ ESP_LOGW(TAG, "'%s' is left on and will be automatically bypassed", sensor_info.first->get_name().c_str());
265
+ this->bypassed_sensor_indicies_.push_back(sensor_info.second.store_index);
266
+ }
267
+ }
268
+ #endif
269
+ }
270
+
243
271
  void TemplateAlarmControlPanel::control(const AlarmControlPanelCall &call) {
244
272
  if (call.get_state()) {
245
273
  if (call.get_state() == ACP_STATE_ARMED_AWAY) {
@@ -255,6 +283,9 @@ void TemplateAlarmControlPanel::control(const AlarmControlPanelCall &call) {
255
283
  }
256
284
  this->desired_state_ = ACP_STATE_DISARMED;
257
285
  this->publish_state(ACP_STATE_DISARMED);
286
+ #ifdef USE_BINARY_SENSOR
287
+ this->bypassed_sensor_indicies_.clear();
288
+ #endif
258
289
  } else if (call.get_state() == ACP_STATE_TRIGGERED) {
259
290
  this->publish_state(ACP_STATE_TRIGGERED);
260
291
  } else if (call.get_state() == ACP_STATE_PENDING) {
@@ -22,6 +22,7 @@ enum BinarySensorFlags : uint16_t {
22
22
  BINARY_SENSOR_MODE_BYPASS_ARMED_HOME = 1 << 1,
23
23
  BINARY_SENSOR_MODE_BYPASS_ARMED_NIGHT = 1 << 2,
24
24
  BINARY_SENSOR_MODE_CHIME = 1 << 3,
25
+ BINARY_SENSOR_MODE_BYPASS_AUTO = 1 << 4,
25
26
  };
26
27
 
27
28
  enum AlarmSensorType : uint16_t {
@@ -59,6 +60,7 @@ class TemplateAlarmControlPanel : public alarm_control_panel::AlarmControlPanel,
59
60
  bool get_requires_code_to_arm() const override { return this->requires_code_to_arm_; }
60
61
  bool get_all_sensors_ready() { return this->sensors_ready_; };
61
62
  void set_restore_mode(TemplateAlarmControlPanelRestoreMode restore_mode) { this->restore_mode_ = restore_mode; }
63
+ void bypass_before_arming();
62
64
 
63
65
  #ifdef USE_BINARY_SENSOR
64
66
  /** Add a binary_sensor to the alarm_panel.
@@ -121,7 +123,8 @@ class TemplateAlarmControlPanel : public alarm_control_panel::AlarmControlPanel,
121
123
  #ifdef USE_BINARY_SENSOR
122
124
  // This maps a binary sensor to its type and attribute bits
123
125
  std::map<binary_sensor::BinarySensor *, SensorInfo> sensor_map_;
124
-
126
+ // a list of automatically bypassed sensors
127
+ std::vector<uint8_t> bypassed_sensor_indicies_;
125
128
  #endif
126
129
  TemplateAlarmControlPanelRestoreMode restore_mode_{};
127
130
 
@@ -16,7 +16,7 @@ TemplateCover::TemplateCover()
16
16
  position_trigger_(new Trigger<float>()),
17
17
  tilt_trigger_(new Trigger<float>()) {}
18
18
  void TemplateCover::setup() {
19
- ESP_LOGCONFIG(TAG, "Setting up template cover '%s'...", this->name_.c_str());
19
+ ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
20
20
  switch (this->restore_mode_) {
21
21
  case COVER_NO_RESTORE:
22
22
  break;
@@ -11,7 +11,7 @@ void TemplateSelect::setup() {
11
11
  return;
12
12
 
13
13
  std::string value;
14
- ESP_LOGD(TAG, "Setting up Template Select");
14
+ ESP_LOGD(TAG, "Setting up");
15
15
  if (!this->restore_value_) {
16
16
  value = this->initial_option_;
17
17
  ESP_LOGD(TAG, "State from initial: %s", value.c_str());
@@ -66,9 +66,11 @@ void TemplateSelect::dump_config() {
66
66
  LOG_UPDATE_INTERVAL(this);
67
67
  if (this->f_.has_value())
68
68
  return;
69
- ESP_LOGCONFIG(TAG, " Optimistic: %s", YESNO(this->optimistic_));
70
- ESP_LOGCONFIG(TAG, " Initial Option: %s", this->initial_option_.c_str());
71
- ESP_LOGCONFIG(TAG, " Restore Value: %s", YESNO(this->restore_value_));
69
+ ESP_LOGCONFIG(TAG,
70
+ " Optimistic: %s\n"
71
+ " Initial Option: %s\n"
72
+ " Restore Value: %s",
73
+ YESNO(this->optimistic_), this->initial_option_.c_str(), YESNO(this->restore_value_));
72
74
  }
73
75
 
74
76
  } // namespace template_
@@ -12,9 +12,8 @@ void TemplateText::setup() {
12
12
  return;
13
13
  }
14
14
 
15
- std::string value;
16
- ESP_LOGD(TAG, "Setting up Template Text Input");
17
- value = this->initial_value_;
15
+ ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
16
+ std::string value = this->initial_value_;
18
17
  if (!this->pref_) {
19
18
  ESP_LOGD(TAG, "State from initial: %s", value.c_str());
20
19
  } else {
@@ -16,7 +16,7 @@ TemplateValve::TemplateValve()
16
16
  position_trigger_(new Trigger<float>()) {}
17
17
 
18
18
  void TemplateValve::setup() {
19
- ESP_LOGCONFIG(TAG, "Setting up template valve '%s'...", this->name_.c_str());
19
+ ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
20
20
  switch (this->restore_mode_) {
21
21
  case VALVE_NO_RESTORE:
22
22
  break;
@@ -66,8 +66,10 @@ Trigger<> *TemplateValve::get_toggle_trigger() const { return this->toggle_trigg
66
66
 
67
67
  void TemplateValve::dump_config() {
68
68
  LOG_VALVE("", "Template Valve", this);
69
- ESP_LOGCONFIG(TAG, " Has position: %s", YESNO(this->has_position_));
70
- ESP_LOGCONFIG(TAG, " Optimistic: %s", YESNO(this->optimistic_));
69
+ ESP_LOGCONFIG(TAG,
70
+ " Has position: %s\n"
71
+ " Optimistic: %s",
72
+ YESNO(this->has_position_), YESNO(this->optimistic_));
71
73
  }
72
74
 
73
75
  void TemplateValve::control(const ValveCall &call) {