esphome 2025.7.4__py3-none-any.whl → 2025.8.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 (758) hide show
  1. esphome/__main__.py +190 -83
  2. esphome/automation.py +2 -4
  3. esphome/build_gen/__init__.py +0 -0
  4. esphome/build_gen/platformio.py +102 -0
  5. esphome/components/a4988/a4988.cpp +0 -1
  6. esphome/components/absolute_humidity/absolute_humidity.cpp +0 -2
  7. esphome/components/absolute_humidity/sensor.py +2 -2
  8. esphome/components/adc/__init__.py +123 -85
  9. esphome/components/adc/adc_sensor.h +98 -35
  10. esphome/components/adc/adc_sensor_common.cpp +10 -4
  11. esphome/components/adc/adc_sensor_esp32.cpp +291 -123
  12. esphome/components/adc/adc_sensor_esp8266.cpp +1 -4
  13. esphome/components/adc/adc_sensor_libretiny.cpp +1 -2
  14. esphome/components/adc/adc_sensor_rp2040.cpp +1 -2
  15. esphome/components/adc/adc_sensor_zephyr.cpp +207 -0
  16. esphome/components/adc/sensor.py +61 -27
  17. esphome/components/adc128s102/adc128s102.cpp +1 -4
  18. esphome/components/ade7880/sensor.py +75 -49
  19. esphome/components/ads1115/ads1115.cpp +0 -1
  20. esphome/components/ads1118/ads1118.cpp +0 -1
  21. esphome/components/ags10/ags10.cpp +0 -4
  22. esphome/components/aht10/aht10.cpp +0 -4
  23. esphome/components/aic3204/aic3204.cpp +0 -2
  24. esphome/components/airthings_wave_plus/__init__.py +1 -1
  25. esphome/components/airthings_wave_plus/airthings_wave_plus.cpp +22 -4
  26. esphome/components/airthings_wave_plus/airthings_wave_plus.h +10 -1
  27. esphome/components/airthings_wave_plus/sensor.py +55 -28
  28. esphome/components/alarm_control_panel/__init__.py +4 -9
  29. esphome/components/am2315c/am2315c.cpp +0 -2
  30. esphome/components/am2320/am2320.cpp +0 -1
  31. esphome/components/animation/__init__.py +14 -11
  32. esphome/components/apds9306/apds9306.cpp +0 -4
  33. esphome/components/apds9960/apds9960.cpp +0 -1
  34. esphome/components/api/__init__.py +29 -4
  35. esphome/components/api/api_connection.cpp +378 -401
  36. esphome/components/api/api_connection.h +112 -56
  37. esphome/components/api/api_frame_helper.cpp +69 -896
  38. esphome/components/api/api_frame_helper.h +31 -126
  39. esphome/components/api/api_frame_helper_noise.cpp +583 -0
  40. esphome/components/api/api_frame_helper_noise.h +68 -0
  41. esphome/components/api/api_frame_helper_plaintext.cpp +290 -0
  42. esphome/components/api/api_frame_helper_plaintext.h +53 -0
  43. esphome/components/api/api_noise_context.h +2 -4
  44. esphome/components/api/api_pb2.cpp +1601 -1808
  45. esphome/components/api/api_pb2.h +367 -323
  46. esphome/components/api/api_pb2_dump.cpp +1137 -3466
  47. esphome/components/api/api_pb2_includes.h +34 -0
  48. esphome/components/api/api_pb2_service.cpp +94 -105
  49. esphome/components/api/api_pb2_service.h +27 -16
  50. esphome/components/api/api_server.cpp +18 -17
  51. esphome/components/api/api_server.h +8 -5
  52. esphome/components/api/client.py +16 -8
  53. esphome/components/api/custom_api_device.h +68 -14
  54. esphome/components/api/homeassistant_service.h +24 -19
  55. esphome/components/api/list_entities.cpp +3 -5
  56. esphome/components/api/list_entities.h +2 -4
  57. esphome/components/api/proto.cpp +3 -5
  58. esphome/components/api/proto.h +239 -274
  59. esphome/components/api/subscribe_state.cpp +2 -4
  60. esphome/components/api/subscribe_state.h +2 -4
  61. esphome/components/api/user_services.cpp +2 -4
  62. esphome/components/api/user_services.h +8 -8
  63. esphome/components/as3935/as3935.cpp +0 -2
  64. esphome/components/as3935_spi/as3935_spi.cpp +0 -2
  65. esphome/components/as5600/__init__.py +1 -1
  66. esphome/components/as5600/as5600.cpp +0 -2
  67. esphome/components/as5600/sensor/__init__.py +0 -1
  68. esphome/components/as7341/as7341.cpp +0 -1
  69. esphome/components/async_tcp/__init__.py +1 -1
  70. esphome/components/at581x/at581x.cpp +1 -1
  71. esphome/components/atm90e26/atm90e26.cpp +0 -1
  72. esphome/components/atm90e32/atm90e32.cpp +475 -116
  73. esphome/components/atm90e32/atm90e32.h +43 -5
  74. esphome/components/audio/audio.h +2 -2
  75. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +0 -2
  76. esphome/components/beken_spi_led_strip/led_strip.cpp +0 -2
  77. esphome/components/bh1750/bh1750.cpp +0 -1
  78. esphome/components/binary_sensor/__init__.py +14 -12
  79. esphome/components/ble_client/__init__.py +4 -7
  80. esphome/components/bluetooth_proxy/__init__.py +40 -3
  81. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +392 -81
  82. esphome/components/bluetooth_proxy/bluetooth_connection.h +16 -5
  83. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +102 -311
  84. esphome/components/bluetooth_proxy/bluetooth_proxy.h +30 -14
  85. esphome/components/bme280_base/bme280_base.cpp +15 -16
  86. esphome/components/bme680/bme680.cpp +2 -3
  87. esphome/components/bme680_bsec/bme680_bsec.cpp +0 -2
  88. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +0 -2
  89. esphome/components/bmi160/bmi160.cpp +0 -1
  90. esphome/components/bmp085/bmp085.cpp +0 -1
  91. esphome/components/bmp280_base/bmp280_base.cpp +13 -14
  92. esphome/components/bmp3xx_base/bmp3xx_base.cpp +0 -1
  93. esphome/components/bmp581/bmp581.cpp +0 -2
  94. esphome/components/bp1658cj/bp1658cj.cpp +0 -1
  95. esphome/components/bp5758d/bp5758d.cpp +0 -1
  96. esphome/components/button/__init__.py +0 -1
  97. esphome/components/canbus/__init__.py +2 -3
  98. esphome/components/canbus/canbus.cpp +0 -1
  99. esphome/components/cap1188/cap1188.cpp +0 -2
  100. esphome/components/captive_portal/__init__.py +1 -1
  101. esphome/components/cd74hc4067/cd74hc4067.cpp +0 -2
  102. esphome/components/ch422g/ch422g.cpp +0 -1
  103. esphome/components/chsc6x/chsc6x_touchscreen.cpp +0 -3
  104. esphome/components/climate/__init__.py +0 -1
  105. esphome/components/climate/climate_traits.h +24 -0
  106. esphome/components/cm1106/cm1106.cpp +0 -1
  107. esphome/components/const/__init__.py +6 -0
  108. esphome/components/cover/__init__.py +0 -1
  109. esphome/components/cover/cover.cpp +9 -13
  110. esphome/components/cs5460a/cs5460a.cpp +0 -2
  111. esphome/components/cse7761/cse7761.cpp +0 -1
  112. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +0 -2
  113. esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +0 -2
  114. esphome/components/dac7678/dac7678_output.cpp +0 -2
  115. esphome/components/dallas_temp/dallas_temp.cpp +0 -1
  116. esphome/components/datetime/__init__.py +0 -2
  117. esphome/components/debug/__init__.py +15 -1
  118. esphome/components/debug/debug_zephyr.cpp +281 -0
  119. esphome/components/debug/sensor.py +2 -1
  120. esphome/components/deep_sleep/deep_sleep_component.cpp +0 -1
  121. esphome/components/deep_sleep/deep_sleep_esp32.cpp +20 -1
  122. esphome/components/dfrobot_sen0395/__init__.py +1 -2
  123. esphome/components/dht/dht.cpp +0 -1
  124. esphome/components/dht12/dht12.cpp +0 -1
  125. esphome/components/display/__init__.py +16 -3
  126. esphome/components/display_menu_base/__init__.py +1 -1
  127. esphome/components/dps310/dps310.cpp +0 -2
  128. esphome/components/ds1307/ds1307.cpp +0 -1
  129. esphome/components/ds2484/ds2484.cpp +0 -1
  130. esphome/components/duty_cycle/duty_cycle_sensor.cpp +0 -1
  131. esphome/components/ee895/ee895.cpp +0 -1
  132. esphome/components/ektf2232/touchscreen/ektf2232.cpp +0 -1
  133. esphome/components/emc2101/emc2101.cpp +0 -2
  134. esphome/components/ens160_base/ens160_base.cpp +0 -2
  135. esphome/components/ens210/ens210.cpp +0 -1
  136. esphome/components/es7210/es7210.cpp +0 -2
  137. esphome/components/es7243e/es7243e.cpp +0 -2
  138. esphome/components/es8156/es8156.cpp +0 -2
  139. esphome/components/es8311/es8311.cpp +0 -2
  140. esphome/components/es8388/es8388.cpp +0 -2
  141. esphome/components/esp32/__init__.py +203 -60
  142. esphome/components/esp32/boards.py +17 -0
  143. esphome/components/esp32/gpio.cpp +0 -1
  144. esphome/components/esp32/gpio.py +1 -2
  145. esphome/components/esp32/gpio_esp32_h2.py +2 -7
  146. esphome/components/esp32/gpio_esp32_p4.py +2 -7
  147. esphome/components/esp32/post_build.py.script +112 -61
  148. esphome/components/esp32_ble/__init__.py +41 -2
  149. esphome/components/esp32_ble/ble.cpp +14 -10
  150. esphome/components/esp32_ble/ble.h +18 -18
  151. esphome/components/esp32_ble/ble_advertising.cpp +5 -5
  152. esphome/components/esp32_ble/ble_advertising.h +7 -5
  153. esphome/components/esp32_ble/ble_event.h +139 -73
  154. esphome/components/esp32_ble/ble_scan_result.h +2 -4
  155. esphome/components/esp32_ble/ble_uuid.cpp +5 -5
  156. esphome/components/esp32_ble/ble_uuid.h +6 -5
  157. esphome/components/esp32_ble_beacon/__init__.py +4 -0
  158. esphome/components/esp32_ble_client/__init__.py +1 -1
  159. esphome/components/esp32_ble_client/ble_characteristic.cpp +4 -4
  160. esphome/components/esp32_ble_client/ble_characteristic.h +6 -4
  161. esphome/components/esp32_ble_client/ble_client_base.cpp +155 -104
  162. esphome/components/esp32_ble_client/ble_client_base.h +17 -6
  163. esphome/components/esp32_ble_client/ble_descriptor.h +6 -4
  164. esphome/components/esp32_ble_client/ble_service.cpp +4 -4
  165. esphome/components/esp32_ble_client/ble_service.h +6 -4
  166. esphome/components/esp32_ble_server/__init__.py +15 -12
  167. esphome/components/esp32_ble_tracker/__init__.py +79 -11
  168. esphome/components/esp32_ble_tracker/automation.h +4 -4
  169. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +264 -261
  170. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +103 -37
  171. esphome/components/esp32_camera/__init__.py +13 -1
  172. esphome/components/esp32_camera/esp32_camera.cpp +7 -2
  173. esphome/components/esp32_camera/esp32_camera.h +1 -0
  174. esphome/components/esp32_dac/esp32_dac.cpp +3 -19
  175. esphome/components/esp32_dac/esp32_dac.h +4 -8
  176. esphome/components/esp32_rmt_led_strip/led_strip.cpp +1 -6
  177. esphome/components/esp32_rmt_led_strip/light.py +1 -1
  178. esphome/components/esp32_touch/__init__.py +2 -3
  179. esphome/components/esp32_touch/esp32_touch.h +9 -6
  180. esphome/components/esp32_touch/esp32_touch_common.cpp +2 -0
  181. esphome/components/esp32_touch/esp32_touch_v1.cpp +7 -9
  182. esphome/components/esp32_touch/esp32_touch_v2.cpp +10 -6
  183. esphome/components/esp8266/__init__.py +3 -1
  184. esphome/components/esp8266_pwm/esp8266_pwm.cpp +0 -1
  185. esphome/components/esphome/ota/__init__.py +1 -2
  186. esphome/components/esphome/ota/ota_esphome.cpp +150 -77
  187. esphome/components/esphome/ota/ota_esphome.h +8 -1
  188. esphome/components/espnow/__init__.py +309 -0
  189. esphome/components/espnow/automation.h +175 -0
  190. esphome/components/espnow/espnow_component.cpp +468 -0
  191. esphome/components/espnow/espnow_component.h +183 -0
  192. esphome/components/espnow/espnow_err.h +19 -0
  193. esphome/components/espnow/espnow_packet.h +166 -0
  194. esphome/components/ethernet/__init__.py +7 -1
  195. esphome/components/ethernet/esp_eth_phy_jl1101.c +5 -0
  196. esphome/components/ethernet/ethernet_component.cpp +0 -1
  197. esphome/components/ethernet/ethernet_component.h +4 -0
  198. esphome/components/ethernet_info/ethernet_info_text_sensor.h +0 -3
  199. esphome/components/event/__init__.py +0 -1
  200. esphome/components/factory_reset/__init__.py +92 -0
  201. esphome/components/factory_reset/factory_reset.cpp +76 -0
  202. esphome/components/factory_reset/factory_reset.h +43 -0
  203. esphome/components/fan/__init__.py +0 -1
  204. esphome/components/fan/fan_traits.h +16 -0
  205. esphome/components/fastled_base/fastled_light.cpp +0 -1
  206. esphome/components/fastled_spi/light.py +1 -3
  207. esphome/components/fingerprint_grow/fingerprint_grow.cpp +0 -2
  208. esphome/components/font/__init__.py +9 -1
  209. esphome/components/fs3000/fs3000.cpp +0 -2
  210. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +0 -2
  211. esphome/components/ft63x6/ft63x6.cpp +0 -1
  212. esphome/components/gdk101/gdk101.cpp +0 -1
  213. esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +0 -1
  214. esphome/components/gl_r01_i2c/sensor.py +1 -1
  215. esphome/components/gpio/one_wire/gpio_one_wire.cpp +0 -1
  216. esphome/components/gpio/switch/gpio_switch.cpp +0 -2
  217. esphome/components/gpio_expander/cached_gpio.h +24 -15
  218. esphome/components/gps/__init__.py +6 -2
  219. esphome/components/gps/gps.cpp +50 -49
  220. esphome/components/gps/gps.h +4 -8
  221. esphome/components/gps/time/gps_time.cpp +3 -9
  222. esphome/components/gps/time/gps_time.h +4 -7
  223. esphome/components/graph/__init__.py +1 -1
  224. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +0 -1
  225. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +0 -1
  226. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +21 -12
  227. esphome/components/gt911/touchscreen/gt911_touchscreen.h +26 -2
  228. esphome/components/haier/climate.py +5 -10
  229. esphome/components/haier/haier_base.cpp +0 -1
  230. esphome/components/hbridge/switch/hbridge_switch.cpp +0 -2
  231. esphome/components/hdc1080/hdc1080.cpp +0 -2
  232. esphome/components/heatpumpir/climate.py +2 -2
  233. esphome/components/hlw8012/hlw8012.cpp +0 -1
  234. esphome/components/hm3301/hm3301.cpp +0 -1
  235. esphome/components/hmc5883l/hmc5883l.cpp +0 -1
  236. esphome/components/homeassistant/__init__.py +1 -0
  237. esphome/components/homeassistant/number/__init__.py +1 -0
  238. esphome/components/homeassistant/number/homeassistant_number.cpp +11 -7
  239. esphome/components/homeassistant/switch/__init__.py +1 -0
  240. esphome/components/homeassistant/switch/homeassistant_switch.cpp +9 -5
  241. esphome/components/honeywellabp/honeywellabp.cpp +1 -4
  242. esphome/components/host/__init__.py +2 -0
  243. esphome/components/hte501/hte501.cpp +0 -1
  244. esphome/components/http_request/__init__.py +2 -3
  245. esphome/components/http_request/http_request_idf.cpp +2 -2
  246. esphome/components/htu21d/htu21d.cpp +0 -2
  247. esphome/components/htu31d/htu31d.cpp +0 -2
  248. esphome/components/hx711/hx711.cpp +0 -1
  249. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +0 -1
  250. esphome/components/hydreon_rgxx/sensor.py +4 -5
  251. esphome/components/i2c/i2c_bus.h +1 -1
  252. esphome/components/i2c/i2c_bus_arduino.cpp +1 -2
  253. esphome/components/i2c/i2c_bus_esp_idf.cpp +192 -17
  254. esphome/components/i2c/i2c_bus_esp_idf.h +11 -1
  255. esphome/components/i2s_audio/__init__.py +6 -5
  256. esphome/components/i2s_audio/i2s_audio.cpp +0 -2
  257. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +1 -4
  258. esphome/components/i2s_audio/microphone/__init__.py +4 -6
  259. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +46 -19
  260. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +4 -3
  261. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +273 -269
  262. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +19 -34
  263. esphome/components/ili9xxx/display.py +4 -3
  264. esphome/components/ili9xxx/ili9xxx_display.cpp +0 -2
  265. esphome/components/image/__init__.py +123 -92
  266. esphome/components/improv_serial/__init__.py +7 -8
  267. esphome/components/ina219/ina219.cpp +0 -1
  268. esphome/components/ina226/ina226.cpp +0 -2
  269. esphome/components/ina260/ina260.cpp +0 -2
  270. esphome/components/ina2xx_base/__init__.py +2 -5
  271. esphome/components/ina2xx_base/ina2xx_base.cpp +0 -2
  272. esphome/components/ina3221/ina3221.cpp +0 -1
  273. esphome/components/internal_temperature/internal_temperature.cpp +0 -2
  274. esphome/components/interval/interval.h +5 -9
  275. esphome/components/json/__init__.py +1 -1
  276. esphome/components/kmeteriso/kmeteriso.cpp +0 -2
  277. esphome/components/lc709203f/lc709203f.cpp +0 -2
  278. esphome/components/lcd_gpio/display.py +1 -3
  279. esphome/components/lcd_gpio/gpio_lcd_display.cpp +0 -1
  280. esphome/components/lcd_pcf8574/pcf8574_display.cpp +0 -1
  281. esphome/components/ld2410/__init__.py +4 -6
  282. esphome/components/ld2410/binary_sensor.py +4 -0
  283. esphome/components/ld2410/ld2410.cpp +56 -100
  284. esphome/components/ld2410/ld2410.h +17 -15
  285. esphome/components/ld2410/sensor.py +24 -10
  286. esphome/components/ld2412/__init__.py +46 -0
  287. esphome/components/ld2412/binary_sensor.py +70 -0
  288. esphome/components/ld2412/button/__init__.py +74 -0
  289. esphome/components/ld2412/button/factory_reset_button.cpp +9 -0
  290. esphome/components/ld2412/button/factory_reset_button.h +18 -0
  291. esphome/components/ld2412/button/query_button.cpp +9 -0
  292. esphome/components/ld2412/button/query_button.h +18 -0
  293. esphome/components/ld2412/button/restart_button.cpp +9 -0
  294. esphome/components/ld2412/button/restart_button.h +18 -0
  295. esphome/components/ld2412/button/start_dynamic_background_correction_button.cpp +11 -0
  296. esphome/components/ld2412/button/start_dynamic_background_correction_button.h +18 -0
  297. esphome/components/ld2412/ld2412.cpp +861 -0
  298. esphome/components/ld2412/ld2412.h +141 -0
  299. esphome/components/ld2412/number/__init__.py +126 -0
  300. esphome/components/ld2412/number/gate_threshold_number.cpp +14 -0
  301. esphome/components/ld2412/number/gate_threshold_number.h +19 -0
  302. esphome/components/ld2412/number/light_threshold_number.cpp +12 -0
  303. esphome/components/ld2412/number/light_threshold_number.h +18 -0
  304. esphome/components/ld2412/number/max_distance_timeout_number.cpp +12 -0
  305. esphome/components/ld2412/number/max_distance_timeout_number.h +18 -0
  306. esphome/components/ld2412/select/__init__.py +82 -0
  307. esphome/components/ld2412/select/baud_rate_select.cpp +12 -0
  308. esphome/components/ld2412/select/baud_rate_select.h +18 -0
  309. esphome/components/ld2412/select/distance_resolution_select.cpp +12 -0
  310. esphome/components/ld2412/select/distance_resolution_select.h +18 -0
  311. esphome/components/ld2412/select/light_out_control_select.cpp +12 -0
  312. esphome/components/ld2412/select/light_out_control_select.h +18 -0
  313. esphome/components/ld2412/sensor.py +124 -0
  314. esphome/components/ld2412/switch/__init__.py +45 -0
  315. esphome/components/ld2412/switch/bluetooth_switch.cpp +12 -0
  316. esphome/components/ld2412/switch/bluetooth_switch.h +18 -0
  317. esphome/components/ld2412/switch/engineering_mode_switch.cpp +12 -0
  318. esphome/components/ld2412/switch/engineering_mode_switch.h +18 -0
  319. esphome/components/ld2412/text_sensor.py +34 -0
  320. esphome/components/ld2420/ld2420.cpp +0 -1
  321. esphome/components/ld2450/__init__.py +3 -4
  322. esphome/components/ld2450/binary_sensor.py +3 -0
  323. esphome/components/ld2450/ld2450.cpp +77 -165
  324. esphome/components/ld2450/ld2450.h +26 -54
  325. esphome/components/ld2450/sensor.py +120 -6
  326. esphome/components/ld2450/text_sensor.py +5 -4
  327. esphome/components/ld24xx/__init__.py +1 -0
  328. esphome/components/ld24xx/ld24xx.h +65 -0
  329. esphome/components/ledc/ledc_output.cpp +0 -1
  330. esphome/components/libretiny/__init__.py +2 -0
  331. esphome/components/light/__init__.py +0 -1
  332. esphome/components/light/effects.py +70 -45
  333. esphome/components/light/light_call.cpp +101 -66
  334. esphome/components/light/light_color_values.h +16 -11
  335. esphome/components/light/light_json_schema.cpp +46 -44
  336. esphome/components/light/light_state.cpp +8 -11
  337. esphome/components/light/light_traits.h +17 -0
  338. esphome/components/lightwaverf/lightwaverf.cpp +0 -2
  339. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +0 -1
  340. esphome/components/lock/__init__.py +0 -1
  341. esphome/components/logger/__init__.py +31 -9
  342. esphome/components/logger/logger.cpp +12 -7
  343. esphome/components/logger/logger.h +25 -14
  344. esphome/components/logger/logger_esp32.cpp +2 -7
  345. esphome/components/logger/logger_esp8266.cpp +2 -4
  346. esphome/components/logger/logger_host.cpp +2 -4
  347. esphome/components/logger/logger_libretiny.cpp +2 -4
  348. esphome/components/logger/logger_rp2040.cpp +2 -4
  349. esphome/components/logger/logger_zephyr.cpp +86 -0
  350. esphome/components/logger/select/logger_level_select.cpp +2 -4
  351. esphome/components/logger/select/logger_level_select.h +2 -4
  352. esphome/components/logger/task_log_buffer.cpp +2 -4
  353. esphome/components/logger/task_log_buffer.h +2 -4
  354. esphome/components/lps22/sensor.py +5 -5
  355. esphome/components/ltr390/ltr390.cpp +0 -2
  356. esphome/components/ltr501/ltr501.cpp +0 -1
  357. esphome/components/ltr_als_ps/ltr_als_ps.cpp +0 -1
  358. esphome/components/lvgl/__init__.py +14 -13
  359. esphome/components/lvgl/automation.py +2 -4
  360. esphome/components/lvgl/defines.py +0 -2
  361. esphome/components/lvgl/helpers.py +1 -1
  362. esphome/components/lvgl/lv_validation.py +7 -4
  363. esphome/components/lvgl/lvgl_esphome.cpp +2 -3
  364. esphome/components/lvgl/styles.py +2 -2
  365. esphome/components/lvgl/types.py +1 -1
  366. esphome/components/lvgl/widgets/__init__.py +2 -2
  367. esphome/components/lvgl/widgets/arc.py +14 -11
  368. esphome/components/lvgl/widgets/buttonmatrix.py +1 -1
  369. esphome/components/lvgl/widgets/qrcode.py +7 -7
  370. esphome/components/lvgl/widgets/spinner.py +6 -6
  371. esphome/components/lvgl/widgets/switch.py +2 -2
  372. esphome/components/lvgl/widgets/tabview.py +3 -3
  373. esphome/components/lvgl/widgets/tileview.py +15 -7
  374. esphome/components/m5stack_8angle/m5stack_8angle.cpp +0 -1
  375. esphome/components/matrix_keypad/__init__.py +4 -3
  376. esphome/components/max17043/max17043.cpp +0 -2
  377. esphome/components/max31855/max31855.cpp +1 -4
  378. esphome/components/max31856/max31856.cpp +0 -4
  379. esphome/components/max31865/max31865.cpp +0 -1
  380. esphome/components/max44009/max44009.cpp +0 -1
  381. esphome/components/max6675/max6675.cpp +1 -4
  382. esphome/components/max6956/max6956.cpp +0 -1
  383. esphome/components/max7219/max7219.cpp +0 -1
  384. esphome/components/max7219digit/display.py +1 -1
  385. esphome/components/max7219digit/max7219digit.cpp +0 -1
  386. esphome/components/max9611/max9611.cpp +0 -1
  387. esphome/components/mcp23008/__init__.py +1 -1
  388. esphome/components/mcp23008/mcp23008.cpp +0 -1
  389. esphome/components/mcp23016/mcp23016.cpp +0 -1
  390. esphome/components/mcp23017/__init__.py +1 -1
  391. esphome/components/mcp23017/mcp23017.cpp +0 -1
  392. esphome/components/mcp23s08/__init__.py +1 -1
  393. esphome/components/mcp23s08/mcp23s08.cpp +0 -1
  394. esphome/components/mcp23s17/__init__.py +1 -1
  395. esphome/components/mcp23s17/mcp23s17.cpp +0 -1
  396. esphome/components/mcp23x08_base/__init__.py +2 -0
  397. esphome/components/mcp23x08_base/mcp23x08_base.cpp +9 -7
  398. esphome/components/mcp23x08_base/mcp23x08_base.h +9 -4
  399. esphome/components/mcp23x17_base/__init__.py +2 -0
  400. esphome/components/mcp23x17_base/mcp23x17_base.cpp +20 -7
  401. esphome/components/mcp23x17_base/mcp23x17_base.h +9 -4
  402. esphome/components/mcp23xxx_base/__init__.py +11 -5
  403. esphome/components/mcp23xxx_base/mcp23xxx_base.cpp +15 -12
  404. esphome/components/mcp23xxx_base/mcp23xxx_base.h +8 -7
  405. esphome/components/mcp3008/mcp3008.cpp +1 -4
  406. esphome/components/mcp3204/mcp3204.cpp +1 -4
  407. esphome/components/mcp4461/mcp4461.cpp +0 -1
  408. esphome/components/mcp4725/mcp4725.cpp +0 -1
  409. esphome/components/mcp4728/mcp4728.cpp +0 -1
  410. esphome/components/mcp9600/mcp9600.cpp +0 -2
  411. esphome/components/mcp9808/mcp9808.cpp +0 -2
  412. esphome/components/mdns/__init__.py +3 -0
  413. esphome/components/mdns/mdns_component.cpp +2 -0
  414. esphome/components/mdns/mdns_component.h +4 -0
  415. esphome/components/media_player/__init__.py +40 -0
  416. esphome/components/media_player/automation.h +16 -0
  417. esphome/components/media_player/media_player.cpp +13 -0
  418. esphome/components/media_player/media_player.h +50 -3
  419. esphome/components/micro_wake_word/micro_wake_word.cpp +0 -3
  420. esphome/components/mics_4514/mics_4514.cpp +1 -6
  421. esphome/components/midea/ir_transmitter.h +4 -4
  422. esphome/components/mipi/__init__.py +416 -0
  423. esphome/components/mipi_dsi/__init__.py +5 -0
  424. esphome/components/mipi_dsi/display.py +233 -0
  425. esphome/components/mipi_dsi/mipi_dsi.cpp +379 -0
  426. esphome/components/mipi_dsi/mipi_dsi.h +123 -0
  427. esphome/components/mipi_dsi/models/__init__.py +0 -0
  428. esphome/components/mipi_dsi/models/guition.py +38 -0
  429. esphome/components/mipi_dsi/models/m5stack.py +57 -0
  430. esphome/components/mipi_dsi/models/waveshare.py +105 -0
  431. esphome/components/mipi_rgb/models/lilygo.py +0 -0
  432. esphome/components/mipi_spi/__init__.py +0 -9
  433. esphome/components/mipi_spi/display.py +220 -256
  434. esphome/components/mipi_spi/mipi_spi.cpp +1 -485
  435. esphome/components/mipi_spi/mipi_spi.h +556 -108
  436. esphome/components/mipi_spi/models/__init__.py +0 -65
  437. esphome/components/mipi_spi/models/adafruit.py +30 -0
  438. esphome/components/mipi_spi/models/amoled.py +41 -5
  439. esphome/components/mipi_spi/models/ili.py +5 -5
  440. esphome/components/mipi_spi/models/jc.py +1 -3
  441. esphome/components/mipi_spi/models/lilygo.py +1 -1
  442. esphome/components/mipi_spi/models/waveshare.py +16 -1
  443. esphome/components/mixer/speaker/__init__.py +4 -5
  444. esphome/components/mlx90393/sensor.py +7 -5
  445. esphome/components/mlx90393/sensor_mlx90393.cpp +0 -1
  446. esphome/components/mlx90614/mlx90614.cpp +0 -1
  447. esphome/components/mmc5603/mmc5603.cpp +0 -1
  448. esphome/components/mmc5983/mmc5983.cpp +0 -2
  449. esphome/components/mpl3115a2/mpl3115a2.cpp +0 -2
  450. esphome/components/mpr121/__init__.py +7 -6
  451. esphome/components/mpr121/mpr121.cpp +0 -1
  452. esphome/components/mpu6050/mpu6050.cpp +0 -1
  453. esphome/components/mpu6886/mpu6886.cpp +0 -1
  454. esphome/components/mqtt/__init__.py +1 -2
  455. esphome/components/mqtt/mqtt_button.cpp +1 -1
  456. esphome/components/mqtt/mqtt_client.cpp +0 -1
  457. esphome/components/mqtt/mqtt_component.cpp +8 -14
  458. esphome/components/mqtt/mqtt_component.h +0 -7
  459. esphome/components/mqtt/mqtt_sensor.cpp +0 -1
  460. esphome/components/mqtt/mqtt_sensor.h +0 -1
  461. esphome/components/mqtt/mqtt_text_sensor.cpp +0 -1
  462. esphome/components/mqtt/mqtt_text_sensor.h +0 -1
  463. esphome/components/ms5611/ms5611.cpp +0 -1
  464. esphome/components/ms8607/ms8607.cpp +0 -1
  465. esphome/components/msa3xx/msa3xx.cpp +0 -2
  466. esphome/components/my9231/my9231.cpp +0 -2
  467. esphome/components/nau7802/nau7802.cpp +0 -1
  468. esphome/components/neopixelbus/light.py +3 -0
  469. esphome/components/network/util.cpp +29 -0
  470. esphome/components/nextion/nextion.cpp +2 -2
  471. esphome/components/nfc/binary_sensor/{binary_sensor.cpp → nfc_binary_sensor.cpp} +1 -1
  472. esphome/components/npi19/npi19.cpp +0 -2
  473. esphome/components/nrf52/__init__.py +223 -0
  474. esphome/components/nrf52/boards.py +34 -0
  475. esphome/components/nrf52/const.py +18 -0
  476. esphome/components/nrf52/gpio.py +79 -0
  477. esphome/components/number/__init__.py +2 -1
  478. esphome/components/one_wire/__init__.py +1 -2
  479. esphome/components/one_wire/one_wire.cpp +0 -2
  480. esphome/components/one_wire/one_wire.h +0 -2
  481. esphome/components/opentherm/hub.cpp +0 -1
  482. esphome/components/opentherm/number/__init__.py +2 -2
  483. esphome/components/openthread/__init__.py +2 -3
  484. esphome/components/openthread/openthread.cpp +30 -13
  485. esphome/components/openthread/openthread.h +3 -0
  486. esphome/components/openthread/openthread_esp.cpp +3 -1
  487. esphome/components/opt3001/sensor.py +2 -6
  488. esphome/components/output/__init__.py +38 -0
  489. esphome/components/output/automation.h +24 -0
  490. esphome/components/output/switch/output_switch.cpp +0 -2
  491. esphome/components/packages/__init__.py +1 -2
  492. esphome/components/packet_transport/__init__.py +4 -3
  493. esphome/components/pca6416a/pca6416a.cpp +0 -1
  494. esphome/components/pca9554/pca9554.cpp +0 -1
  495. esphome/components/pca9685/pca9685_output.cpp +0 -2
  496. esphome/components/pcf85063/pcf85063.cpp +0 -1
  497. esphome/components/pcf8563/pcf8563.cpp +0 -1
  498. esphome/components/pcf8574/pcf8574.cpp +0 -1
  499. esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +0 -1
  500. esphome/components/pipsolar/pipsolar.cpp +54 -42
  501. esphome/components/pipsolar/pipsolar.h +5 -4
  502. esphome/components/pipsolar/sensor/__init__.py +1 -1
  503. esphome/components/pm2005/pm2005.cpp +0 -1
  504. esphome/components/pmsa003i/pmsa003i.cpp +0 -2
  505. esphome/components/pmwcs3/sensor.py +1 -2
  506. esphome/components/pn532/pn532.cpp +0 -2
  507. esphome/components/pn532_spi/pn532_spi.cpp +0 -2
  508. esphome/components/power_supply/power_supply.cpp +7 -10
  509. esphome/components/power_supply/power_supply.h +1 -1
  510. esphome/components/psram/__init__.py +6 -1
  511. esphome/components/pulse_counter/pulse_counter_sensor.cpp +0 -1
  512. esphome/components/pulse_counter/sensor.py +9 -6
  513. esphome/components/pylontech/pylontech.cpp +0 -1
  514. esphome/components/qmc5883l/qmc5883l.cpp +0 -1
  515. esphome/components/qmp6988/qmp6988.cpp +0 -2
  516. esphome/components/qspi_dbi/display.py +2 -3
  517. esphome/components/qspi_dbi/qspi_dbi.cpp +0 -2
  518. esphome/components/qwiic_pir/binary_sensor.py +2 -3
  519. esphome/components/qwiic_pir/qwiic_pir.cpp +0 -2
  520. esphome/components/rc522/rc522.cpp +9 -31
  521. esphome/components/rc522_spi/rc522_spi.cpp +0 -1
  522. esphome/components/remote_base/__init__.py +5 -6
  523. esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -1
  524. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +0 -1
  525. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +0 -1
  526. esphome/components/remote_transmitter/__init__.py +26 -0
  527. esphome/components/remote_transmitter/automation.h +18 -0
  528. esphome/components/remote_transmitter/remote_transmitter.h +2 -1
  529. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -1
  530. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +2 -0
  531. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +2 -0
  532. esphome/components/resampler/speaker/__init__.py +4 -5
  533. esphome/components/rf_bridge/__init__.py +4 -8
  534. esphome/components/rotary_encoder/rotary_encoder.cpp +0 -2
  535. esphome/components/rp2040/__init__.py +3 -1
  536. esphome/components/rp2040_pio_led_strip/led_strip.cpp +0 -2
  537. esphome/components/rp2040_pio_led_strip/light.py +1 -2
  538. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -5
  539. esphome/components/rpi_dpi_rgb/display.py +13 -15
  540. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -3
  541. esphome/components/runtime_stats/__init__.py +34 -0
  542. esphome/components/runtime_stats/runtime_stats.cpp +102 -0
  543. esphome/components/runtime_stats/runtime_stats.h +132 -0
  544. esphome/components/scd30/scd30.cpp +0 -2
  545. esphome/components/scd30/sensor.py +1 -2
  546. esphome/components/scd4x/scd4x.cpp +0 -1
  547. esphome/components/scd4x/sensor.py +1 -3
  548. esphome/components/sdl/display.py +3 -1
  549. esphome/components/sdl/sdl_esphome.cpp +0 -2
  550. esphome/components/sdp3x/sdp3x.cpp +0 -2
  551. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +0 -2
  552. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +0 -3
  553. esphome/components/select/__init__.py +2 -3
  554. esphome/components/select/select_traits.cpp +1 -1
  555. esphome/components/select/select_traits.h +1 -1
  556. esphome/components/sen0321/sen0321.cpp +0 -1
  557. esphome/components/sen5x/sen5x.cpp +0 -2
  558. esphome/components/senseair/senseair.cpp +7 -3
  559. esphome/components/senseair/senseair.h +11 -0
  560. esphome/components/sensor/__init__.py +36 -4
  561. esphome/components/sensor/filter.cpp +49 -10
  562. esphome/components/sensor/filter.h +22 -7
  563. esphome/components/sensor/sensor.cpp +0 -1
  564. esphome/components/sensor/sensor.h +0 -9
  565. esphome/components/sfa30/sfa30.cpp +0 -4
  566. esphome/components/sgp30/sgp30.cpp +0 -2
  567. esphome/components/sgp4x/sensor.py +1 -1
  568. esphome/components/sgp4x/sgp4x.cpp +0 -2
  569. esphome/components/shelly_dimmer/shelly_dimmer.cpp +0 -2
  570. esphome/components/sht3xd/sht3xd.cpp +0 -2
  571. esphome/components/sht4x/sht4x.cpp +0 -2
  572. esphome/components/shtcx/shtcx.cpp +0 -1
  573. esphome/components/sim800l/__init__.py +2 -4
  574. esphome/components/sm16716/sm16716.cpp +0 -1
  575. esphome/components/sm2135/sm2135.cpp +0 -1
  576. esphome/components/sm2235/sm2235.cpp +0 -1
  577. esphome/components/sm2335/sm2335.cpp +0 -1
  578. esphome/components/sn74hc165/sn74hc165.cpp +0 -1
  579. esphome/components/sn74hc595/sn74hc595.cpp +0 -1
  580. esphome/components/sntp/sntp_component.cpp +0 -1
  581. esphome/components/sound_level/sensor.py +1 -1
  582. esphome/components/speaker/media_player/__init__.py +21 -33
  583. esphome/components/speaker/media_player/audio_pipeline.cpp +4 -7
  584. esphome/components/spi/__init__.py +29 -13
  585. esphome/components/spi/spi.cpp +0 -2
  586. esphome/components/spi_device/spi_device.cpp +1 -4
  587. esphome/components/sprinkler/__init__.py +4 -4
  588. esphome/components/sps30/sps30.cpp +0 -1
  589. esphome/components/ssd1306_base/__init__.py +11 -11
  590. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  591. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +0 -1
  592. esphome/components/ssd1306_spi/ssd1306_spi.cpp +0 -1
  593. esphome/components/ssd1322_spi/ssd1322_spi.cpp +0 -1
  594. esphome/components/ssd1325_spi/ssd1325_spi.cpp +0 -1
  595. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +0 -1
  596. esphome/components/ssd1327_spi/ssd1327_spi.cpp +0 -1
  597. esphome/components/ssd1331_spi/ssd1331_spi.cpp +0 -1
  598. esphome/components/ssd1351_spi/ssd1351_spi.cpp +0 -1
  599. esphome/components/st7567_i2c/st7567_i2c.cpp +0 -1
  600. esphome/components/st7567_spi/st7567_spi.cpp +0 -1
  601. esphome/components/st7701s/display.py +10 -14
  602. esphome/components/st7701s/st7701s.cpp +0 -3
  603. esphome/components/st7735/st7735.cpp +0 -1
  604. esphome/components/st7789v/st7789v.cpp +0 -1
  605. esphome/components/st7920/st7920.cpp +0 -1
  606. esphome/components/status_led/light/status_led_light.cpp +0 -2
  607. esphome/components/status_led/status_led.cpp +0 -1
  608. esphome/components/stepper/__init__.py +2 -4
  609. esphome/components/sts3x/sts3x.cpp +0 -1
  610. esphome/components/substitutions/__init__.py +10 -16
  611. esphome/components/substitutions/jinja.py +24 -1
  612. esphome/components/sun/__init__.py +2 -3
  613. esphome/components/switch/__init__.py +31 -1
  614. esphome/components/switch/automation.h +24 -0
  615. esphome/components/switch/switch.cpp +8 -0
  616. esphome/components/switch/switch.h +8 -0
  617. esphome/components/sx126x/sx126x.cpp +0 -2
  618. esphome/components/sx127x/sx127x.cpp +0 -2
  619. esphome/components/sx1509/__init__.py +7 -5
  620. esphome/components/sx1509/output/sx1509_float_output.cpp +1 -1
  621. esphome/components/sx1509/sx1509.cpp +0 -2
  622. esphome/components/syslog/esphome_syslog.cpp +1 -1
  623. esphome/components/tc74/tc74.cpp +0 -1
  624. esphome/components/tca9548a/tca9548a.cpp +0 -1
  625. esphome/components/tca9555/tca9555.cpp +0 -1
  626. esphome/components/tcs34725/tcs34725.cpp +0 -1
  627. esphome/components/tee501/tee501.cpp +0 -1
  628. esphome/components/tem3200/tem3200.cpp +0 -2
  629. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +0 -1
  630. esphome/components/template/cover/template_cover.cpp +0 -1
  631. esphome/components/template/select/template_select.cpp +0 -1
  632. esphome/components/template/text/template_text.cpp +0 -2
  633. esphome/components/template/valve/template_valve.cpp +0 -1
  634. esphome/components/text/__init__.py +0 -1
  635. esphome/components/text/text_traits.h +2 -0
  636. esphome/components/text_sensor/__init__.py +2 -1
  637. esphome/components/text_sensor/text_sensor.cpp +0 -2
  638. esphome/components/text_sensor/text_sensor.h +0 -8
  639. esphome/components/thermostat/climate.py +4 -4
  640. esphome/components/time/__init__.py +7 -4
  641. esphome/components/time/real_time_clock.cpp +16 -3
  642. esphome/components/tlc59208f/tlc59208f_output.cpp +0 -2
  643. esphome/components/tlc5947/tlc5947.cpp +0 -2
  644. esphome/components/tlc5971/tlc5971.cpp +0 -2
  645. esphome/components/tm1621/tm1621.cpp +0 -2
  646. esphome/components/tm1637/tm1637.cpp +0 -2
  647. esphome/components/tm1638/tm1638.cpp +0 -2
  648. esphome/components/tm1651/__init__.py +45 -48
  649. esphome/components/tm1651/tm1651.cpp +213 -47
  650. esphome/components/tm1651/tm1651.h +37 -32
  651. esphome/components/tmp117/tmp117.cpp +0 -2
  652. esphome/components/tsl2561/tsl2561.cpp +0 -1
  653. esphome/components/tsl2591/tsl2591.cpp +0 -1
  654. esphome/components/tt21100/touchscreen/tt21100.cpp +0 -2
  655. esphome/components/ttp229_bsf/ttp229_bsf.cpp +0 -1
  656. esphome/components/ttp229_lsf/ttp229_lsf.cpp +0 -1
  657. esphome/components/tuya/climate/__init__.py +9 -10
  658. esphome/components/tuya/number/__init__.py +8 -6
  659. esphome/components/tx20/tx20.cpp +0 -1
  660. esphome/components/uart/uart_component_esp32_arduino.cpp +0 -1
  661. esphome/components/uart/uart_component_esp8266.cpp +0 -1
  662. esphome/components/uart/uart_component_esp_idf.cpp +0 -2
  663. esphome/components/uart/uart_component_libretiny.cpp +0 -2
  664. esphome/components/uart/uart_component_rp2040.cpp +0 -2
  665. esphome/components/udp/__init__.py +1 -1
  666. esphome/components/ufire_ec/sensor.py +1 -2
  667. esphome/components/ufire_ec/ufire_ec.cpp +0 -2
  668. esphome/components/ufire_ise/sensor.py +1 -2
  669. esphome/components/ufire_ise/ufire_ise.cpp +0 -2
  670. esphome/components/ultrasonic/ultrasonic_sensor.cpp +0 -1
  671. esphome/components/update/__init__.py +0 -1
  672. esphome/components/uptime/sensor/uptime_seconds_sensor.cpp +0 -1
  673. esphome/components/uptime/sensor/uptime_seconds_sensor.h +0 -2
  674. esphome/components/usb_host/usb_host_client.cpp +0 -1
  675. esphome/components/usb_host/usb_host_component.cpp +0 -1
  676. esphome/components/valve/__init__.py +0 -1
  677. esphome/components/veml3235/veml3235.cpp +0 -3
  678. esphome/components/veml7700/veml7700.cpp +0 -2
  679. esphome/components/version/version_text_sensor.cpp +0 -1
  680. esphome/components/version/version_text_sensor.h +0 -1
  681. esphome/components/vl53l0x/vl53l0x_sensor.cpp +0 -4
  682. esphome/components/voice_assistant/voice_assistant.cpp +9 -8
  683. esphome/components/web_server/__init__.py +13 -0
  684. esphome/components/web_server/web_server.cpp +188 -353
  685. esphome/components/web_server/web_server.h +61 -1
  686. esphome/components/web_server_base/__init__.py +1 -1
  687. esphome/components/web_server_base/web_server_base.cpp +2 -0
  688. esphome/components/web_server_base/web_server_base.h +6 -0
  689. esphome/components/web_server_idf/web_server_idf.cpp +10 -8
  690. esphome/components/web_server_idf/web_server_idf.h +2 -0
  691. esphome/components/weikai_i2c/weikai_i2c.cpp +1 -2
  692. esphome/components/weikai_spi/weikai_spi.cpp +1 -1
  693. esphome/components/wifi/__init__.py +17 -43
  694. esphome/components/wifi/wifi_component.cpp +100 -36
  695. esphome/components/wifi/wifi_component.h +5 -1
  696. esphome/components/wifi/wifi_component_esp32_arduino.cpp +30 -0
  697. esphome/components/wifi/wifi_component_esp_idf.cpp +30 -0
  698. esphome/components/wifi_info/wifi_info_text_sensor.h +0 -6
  699. esphome/components/wifi_signal/wifi_signal_sensor.h +0 -1
  700. esphome/components/wireguard/wireguard.cpp +0 -2
  701. esphome/components/x9c/x9c.cpp +0 -2
  702. esphome/components/xgzp68xx/xgzp68xx.cpp +0 -1
  703. esphome/components/xl9535/xl9535.cpp +0 -2
  704. esphome/components/zephyr/__init__.py +252 -0
  705. esphome/components/zephyr/const.py +16 -0
  706. esphome/components/zephyr/core.cpp +90 -0
  707. esphome/components/zephyr/gpio.cpp +120 -0
  708. esphome/components/zephyr/gpio.h +38 -0
  709. esphome/components/zephyr/pre_build.py.script +4 -0
  710. esphome/components/zephyr/preferences.cpp +156 -0
  711. esphome/components/zephyr/preferences.h +13 -0
  712. esphome/config.py +38 -16
  713. esphome/config_helpers.py +1 -2
  714. esphome/config_validation.py +12 -16
  715. esphome/const.py +26 -1
  716. esphome/core/__init__.py +92 -51
  717. esphome/core/application.cpp +75 -21
  718. esphome/core/application.h +106 -171
  719. esphome/core/color.h +10 -0
  720. esphome/core/component.cpp +41 -25
  721. esphome/core/component.h +9 -6
  722. esphome/core/component_iterator.cpp +61 -261
  723. esphome/core/component_iterator.h +15 -0
  724. esphome/core/config.py +26 -11
  725. esphome/core/defines.h +40 -2
  726. esphome/core/entity_base.h +18 -0
  727. esphome/core/entity_helpers.py +45 -10
  728. esphome/core/helpers.cpp +8 -15
  729. esphome/core/helpers.h +60 -6
  730. esphome/core/lock_free_queue.h +1 -1
  731. esphome/core/scheduler.cpp +311 -77
  732. esphome/core/scheduler.h +141 -28
  733. esphome/cpp_generator.py +2 -6
  734. esphome/cpp_helpers.py +1 -1
  735. esphome/dashboard/dashboard.py +2 -3
  736. esphome/dashboard/dns.py +2 -8
  737. esphome/dashboard/web_server.py +34 -19
  738. esphome/espota2.py +1 -4
  739. esphome/git.py +3 -1
  740. esphome/helpers.py +23 -4
  741. esphome/log.py +3 -1
  742. esphome/mqtt.py +3 -5
  743. esphome/platformio_api.py +7 -4
  744. esphome/types.py +12 -0
  745. esphome/util.py +20 -8
  746. esphome/voluptuous_schema.py +4 -3
  747. esphome/vscode.py +1 -2
  748. esphome/wizard.py +1 -4
  749. esphome/writer.py +16 -108
  750. esphome/yaml_util.py +7 -5
  751. {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/METADATA +13 -14
  752. {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/RECORD +757 -677
  753. esphome/components/mipi_spi/models/commands.py +0 -82
  754. /esphome/components/nfc/binary_sensor/{binary_sensor.h → nfc_binary_sensor.h} +0 -0
  755. {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/WHEEL +0 -0
  756. {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/entry_points.txt +0 -0
  757. {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/licenses/LICENSE +0 -0
  758. {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,4 @@
1
+ import contextlib
1
2
  import re
2
3
 
3
4
  from esphome import automation
@@ -41,12 +42,10 @@ ELEVATION_MAP = {
41
42
 
42
43
  def elevation(value):
43
44
  if isinstance(value, str):
44
- try:
45
+ with contextlib.suppress(cv.Invalid):
45
46
  value = ELEVATION_MAP[
46
47
  cv.one_of(*ELEVATION_MAP, lower=True, space="_")(value)
47
48
  ]
48
- except cv.Invalid:
49
- pass
50
49
  value = cv.angle(value)
51
50
  return cv.float_range(min=-180, max=180)(value)
52
51
 
@@ -10,9 +10,11 @@ from esphome.const import (
10
10
  CONF_ID,
11
11
  CONF_INVERTED,
12
12
  CONF_MQTT_ID,
13
+ CONF_ON_STATE,
13
14
  CONF_ON_TURN_OFF,
14
15
  CONF_ON_TURN_ON,
15
16
  CONF_RESTORE_MODE,
17
+ CONF_STATE,
16
18
  CONF_TRIGGER_ID,
17
19
  CONF_WEB_SERVER,
18
20
  DEVICE_CLASS_EMPTY,
@@ -48,12 +50,16 @@ RESTORE_MODES = {
48
50
  }
49
51
 
50
52
 
53
+ ControlAction = switch_ns.class_("ControlAction", automation.Action)
51
54
  ToggleAction = switch_ns.class_("ToggleAction", automation.Action)
52
55
  TurnOffAction = switch_ns.class_("TurnOffAction", automation.Action)
53
56
  TurnOnAction = switch_ns.class_("TurnOnAction", automation.Action)
54
57
  SwitchPublishAction = switch_ns.class_("SwitchPublishAction", automation.Action)
55
58
 
56
59
  SwitchCondition = switch_ns.class_("SwitchCondition", Condition)
60
+ SwitchStateTrigger = switch_ns.class_(
61
+ "SwitchStateTrigger", automation.Trigger.template(bool)
62
+ )
57
63
  SwitchTurnOnTrigger = switch_ns.class_(
58
64
  "SwitchTurnOnTrigger", automation.Trigger.template()
59
65
  )
@@ -75,6 +81,11 @@ _SWITCH_SCHEMA = (
75
81
  cv.Optional(CONF_RESTORE_MODE, default="ALWAYS_OFF"): cv.enum(
76
82
  RESTORE_MODES, upper=True, space="_"
77
83
  ),
84
+ cv.Optional(CONF_ON_STATE): automation.validate_automation(
85
+ {
86
+ cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SwitchStateTrigger),
87
+ }
88
+ ),
78
89
  cv.Optional(CONF_ON_TURN_ON): automation.validate_automation(
79
90
  {
80
91
  cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SwitchTurnOnTrigger),
@@ -138,6 +149,9 @@ async def setup_switch_core_(var, config):
138
149
 
139
150
  if (inverted := config.get(CONF_INVERTED)) is not None:
140
151
  cg.add(var.set_inverted(inverted))
152
+ for conf in config.get(CONF_ON_STATE, []):
153
+ trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
154
+ await automation.build_automation(trigger, [(bool, "x")], conf)
141
155
  for conf in config.get(CONF_ON_TURN_ON, []):
142
156
  trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
143
157
  await automation.build_automation(trigger, [], conf)
@@ -177,6 +191,23 @@ SWITCH_ACTION_SCHEMA = maybe_simple_id(
177
191
  cv.Required(CONF_ID): cv.use_id(Switch),
178
192
  }
179
193
  )
194
+ SWITCH_CONTROL_ACTION_SCHEMA = automation.maybe_simple_id(
195
+ {
196
+ cv.Required(CONF_ID): cv.use_id(Switch),
197
+ cv.Required(CONF_STATE): cv.templatable(cv.boolean),
198
+ }
199
+ )
200
+
201
+
202
+ @automation.register_action(
203
+ "switch.control", ControlAction, SWITCH_CONTROL_ACTION_SCHEMA
204
+ )
205
+ async def switch_control_to_code(config, action_id, template_arg, args):
206
+ paren = await cg.get_variable(config[CONF_ID])
207
+ var = cg.new_Pvariable(action_id, template_arg, paren)
208
+ template_ = await cg.templatable(config[CONF_STATE], args, bool)
209
+ cg.add(var.set_state(template_))
210
+ return var
180
211
 
181
212
 
182
213
  @automation.register_action("switch.toggle", ToggleAction, SWITCH_ACTION_SCHEMA)
@@ -202,4 +233,3 @@ async def switch_is_off_to_code(config, condition_id, template_arg, args):
202
233
  @coroutine_with_priority(100.0)
203
234
  async def to_code(config):
204
235
  cg.add_global(switch_ns.using)
205
- cg.add_define("USE_SWITCH")
@@ -37,6 +37,23 @@ template<typename... Ts> class ToggleAction : public Action<Ts...> {
37
37
  Switch *switch_;
38
38
  };
39
39
 
40
+ template<typename... Ts> class ControlAction : public Action<Ts...> {
41
+ public:
42
+ explicit ControlAction(Switch *a_switch) : switch_(a_switch) {}
43
+
44
+ TEMPLATABLE_VALUE(bool, state)
45
+
46
+ void play(Ts... x) override {
47
+ auto state = this->state_.optional_value(x...);
48
+ if (state.has_value()) {
49
+ this->switch_->control(*state);
50
+ }
51
+ }
52
+
53
+ protected:
54
+ Switch *switch_;
55
+ };
56
+
40
57
  template<typename... Ts> class SwitchCondition : public Condition<Ts...> {
41
58
  public:
42
59
  SwitchCondition(Switch *parent, bool state) : parent_(parent), state_(state) {}
@@ -47,6 +64,13 @@ template<typename... Ts> class SwitchCondition : public Condition<Ts...> {
47
64
  bool state_;
48
65
  };
49
66
 
67
+ class SwitchStateTrigger : public Trigger<bool> {
68
+ public:
69
+ SwitchStateTrigger(Switch *a_switch) {
70
+ a_switch->add_on_state_callback([this](bool state) { this->trigger(state); });
71
+ }
72
+ };
73
+
50
74
  class SwitchTurnOnTrigger : public Trigger<> {
51
75
  public:
52
76
  SwitchTurnOnTrigger(Switch *a_switch) {
@@ -8,6 +8,14 @@ static const char *const TAG = "switch";
8
8
 
9
9
  Switch::Switch() : state(false) {}
10
10
 
11
+ void Switch::control(bool target_state) {
12
+ ESP_LOGV(TAG, "'%s' Control: %s", this->get_name().c_str(), ONOFF(target_state));
13
+ if (target_state) {
14
+ this->turn_on();
15
+ } else {
16
+ this->turn_off();
17
+ }
18
+ }
11
19
  void Switch::turn_on() {
12
20
  ESP_LOGD(TAG, "'%s' Turning ON.", this->get_name().c_str());
13
21
  this->write_state(!this->inverted_);
@@ -55,6 +55,14 @@ class Switch : public EntityBase, public EntityBase_DeviceClass {
55
55
  /// The current reported state of the binary sensor.
56
56
  bool state;
57
57
 
58
+ /** Control this switch using a boolean state value.
59
+ *
60
+ * This method provides a unified interface for setting the switch state based on a boolean parameter.
61
+ * It automatically calls turn_on() when state is true or turn_off() when state is false.
62
+ *
63
+ * @param target_state The desired state: true to turn the switch ON, false to turn it OFF.
64
+ */
65
+ void control(bool target_state);
58
66
  /** Turn this switch on. This is called by the front-end.
59
67
  *
60
68
  * For implementing switches, please override write_state.
@@ -105,8 +105,6 @@ void SX126x::write_register_(uint16_t reg, uint8_t *data, uint8_t size) {
105
105
  }
106
106
 
107
107
  void SX126x::setup() {
108
- ESP_LOGCONFIG(TAG, "Running setup");
109
-
110
108
  // setup pins
111
109
  this->busy_pin_->setup();
112
110
  this->rst_pin_->setup();
@@ -50,8 +50,6 @@ void SX127x::write_fifo_(const std::vector<uint8_t> &packet) {
50
50
  }
51
51
 
52
52
  void SX127x::setup() {
53
- ESP_LOGCONFIG(TAG, "Running setup");
54
-
55
53
  // setup reset
56
54
  this->rst_pin_->setup();
57
55
 
@@ -41,11 +41,13 @@ SX1509KeyTrigger = sx1509_ns.class_(
41
41
 
42
42
 
43
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
- )
44
+ if (
45
+ CONF_KEYS in config
46
+ and len(config[CONF_KEYS]) != config[CONF_KEY_ROWS] * config[CONF_KEY_COLUMNS]
47
+ ):
48
+ raise cv.Invalid(
49
+ "The number of key codes must equal the number of rows * columns"
50
+ )
49
51
  return config
50
52
 
51
53
 
@@ -15,7 +15,7 @@ void SX1509FloatOutputChannel::write_state(float state) {
15
15
  }
16
16
 
17
17
  void SX1509FloatOutputChannel::setup() {
18
- ESP_LOGD(TAG, "setup pin %d", this->pin_);
18
+ ESP_LOGD(TAG, "Pin %d", this->pin_);
19
19
  this->parent_->pin_mode(this->pin_, gpio::FLAG_OUTPUT);
20
20
  this->parent_->setup_led_driver(this->pin_);
21
21
  this->turn_off();
@@ -8,8 +8,6 @@ namespace sx1509 {
8
8
  static const char *const TAG = "sx1509";
9
9
 
10
10
  void SX1509Component::setup() {
11
- ESP_LOGCONFIG(TAG, "Running setup");
12
-
13
11
  ESP_LOGV(TAG, " Resetting devices");
14
12
  if (!this->write_byte(REG_RESET, 0x12)) {
15
13
  this->mark_failed();
@@ -35,7 +35,7 @@ void Syslog::log_(const int level, const char *tag, const char *message, size_t
35
35
  severity = LOG_LEVEL_TO_SYSLOG_SEVERITY[level];
36
36
  }
37
37
  int pri = this->facility_ * 8 + severity;
38
- auto timestamp = this->time_->now().strftime("%b %d %H:%M:%S");
38
+ auto timestamp = this->time_->now().strftime("%b %e %H:%M:%S");
39
39
  size_t len = message_len;
40
40
  // remove color formatting
41
41
  if (this->strip_ && message[0] == 0x1B && len > 11) {
@@ -15,7 +15,6 @@ 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, "Running setup");
19
18
  uint8_t config_reg;
20
19
  if (this->read_register(TC74_REGISTER_CONFIGURATION, &config_reg, 1) != i2c::ERROR_OK) {
21
20
  this->mark_failed();
@@ -24,7 +24,6 @@ i2c::ErrorCode TCA9548AChannel::writev(uint8_t address, i2c::WriteBuffer *buffer
24
24
  }
25
25
 
26
26
  void TCA9548AComponent::setup() {
27
- ESP_LOGCONFIG(TAG, "Running setup");
28
27
  uint8_t status = 0;
29
28
  if (this->read(&status, 1) != i2c::ERROR_OK) {
30
29
  ESP_LOGE(TAG, "TCA9548A failed");
@@ -16,7 +16,6 @@ namespace tca9555 {
16
16
  static const char *const TAG = "tca9555";
17
17
 
18
18
  void TCA9555Component::setup() {
19
- ESP_LOGCONFIG(TAG, "Running setup");
20
19
  if (!this->read_gpio_modes_()) {
21
20
  this->mark_failed();
22
21
  return;
@@ -18,7 +18,6 @@ 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, "Running setup");
22
21
  uint8_t id;
23
22
  if (this->read_register(TCS34725_REGISTER_ID, &id, 1) != i2c::ERROR_OK) {
24
23
  this->mark_failed();
@@ -8,7 +8,6 @@ namespace tee501 {
8
8
  static const char *const TAG = "tee501";
9
9
 
10
10
  void TEE501Component::setup() {
11
- ESP_LOGCONFIG(TAG, "Running setup");
12
11
  uint8_t address[] = {0x70, 0x29};
13
12
  this->write(address, 2, false);
14
13
  uint8_t identification[9];
@@ -16,8 +16,6 @@ enum ErrorCode {
16
16
  };
17
17
 
18
18
  void TEM3200Component::setup() {
19
- ESP_LOGCONFIG(TAG, "Running setup");
20
-
21
19
  uint8_t status(NONE);
22
20
  uint16_t raw_temperature(0);
23
21
  uint16_t raw_pressure(0);
@@ -80,7 +80,6 @@ void TemplateAlarmControlPanel::dump_config() {
80
80
  }
81
81
 
82
82
  void TemplateAlarmControlPanel::setup() {
83
- ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
84
83
  switch (this->restore_mode_) {
85
84
  case ALARM_CONTROL_PANEL_ALWAYS_DISARMED:
86
85
  this->current_state_ = ACP_STATE_DISARMED;
@@ -16,7 +16,6 @@ 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, "Running setup for '%s'", this->name_.c_str());
20
19
  switch (this->restore_mode_) {
21
20
  case COVER_NO_RESTORE:
22
21
  break;
@@ -11,7 +11,6 @@ void TemplateSelect::setup() {
11
11
  return;
12
12
 
13
13
  std::string value;
14
- ESP_LOGD(TAG, "Setting up");
15
14
  if (!this->restore_value_) {
16
15
  value = this->initial_option_;
17
16
  ESP_LOGD(TAG, "State from initial: %s", value.c_str());
@@ -11,8 +11,6 @@ void TemplateText::setup() {
11
11
  if (this->f_.has_value())
12
12
  return;
13
13
  }
14
-
15
- ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
16
14
  std::string value = this->initial_value_;
17
15
  if (!this->pref_) {
18
16
  ESP_LOGD(TAG, "State from initial: %s", value.c_str());
@@ -16,7 +16,6 @@ TemplateValve::TemplateValve()
16
16
  position_trigger_(new Trigger<float>()) {}
17
17
 
18
18
  void TemplateValve::setup() {
19
- ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
20
19
  switch (this->restore_mode_) {
21
20
  case VALVE_NO_RESTORE:
22
21
  break;
@@ -151,7 +151,6 @@ async def new_text(
151
151
 
152
152
  @coroutine_with_priority(100.0)
153
153
  async def to_code(config):
154
- cg.add_define("USE_TEXT")
155
154
  cg.add_global(text_ns.using)
156
155
 
157
156
 
@@ -3,6 +3,7 @@
3
3
  #include <utility>
4
4
 
5
5
  #include "esphome/core/helpers.h"
6
+ #include "esphome/core/string_ref.h"
6
7
 
7
8
  namespace esphome {
8
9
  namespace text {
@@ -23,6 +24,7 @@ class TextTraits {
23
24
  // Set/get the pattern.
24
25
  void set_pattern(std::string pattern) { this->pattern_ = std::move(pattern); }
25
26
  std::string get_pattern() const { return this->pattern_; }
27
+ StringRef get_pattern_ref() const { return StringRef(this->pattern_); }
26
28
 
27
29
  // Set/get the frontend mode.
28
30
  void set_mode(TextMode mode) { this->mode_ = mode; }
@@ -162,6 +162,7 @@ def text_sensor_schema(
162
162
  device_class: str = cv.UNDEFINED,
163
163
  entity_category: str = cv.UNDEFINED,
164
164
  icon: str = cv.UNDEFINED,
165
+ filters: list = cv.UNDEFINED,
165
166
  ) -> cv.Schema:
166
167
  schema = {}
167
168
 
@@ -172,6 +173,7 @@ def text_sensor_schema(
172
173
  (CONF_ICON, icon, cv.icon),
173
174
  (CONF_DEVICE_CLASS, device_class, validate_device_class),
174
175
  (CONF_ENTITY_CATEGORY, entity_category, cv.entity_category),
176
+ (CONF_FILTERS, filters, validate_filters),
175
177
  ]:
176
178
  if default is not cv.UNDEFINED:
177
179
  schema[cv.Optional(key, default=default)] = validator
@@ -230,7 +232,6 @@ async def new_text_sensor(config, *args):
230
232
 
231
233
  @coroutine_with_priority(100.0)
232
234
  async def to_code(config):
233
- cg.add_define("USE_TEXT_SENSOR")
234
235
  cg.add_global(text_sensor_ns.using)
235
236
 
236
237
 
@@ -70,7 +70,5 @@ void TextSensor::internal_send_state_to_frontend(const std::string &state) {
70
70
  this->callback_.call(state);
71
71
  }
72
72
 
73
- std::string TextSensor::unique_id() { return ""; }
74
-
75
73
  } // namespace text_sensor
76
74
  } // namespace esphome
@@ -20,9 +20,6 @@ namespace text_sensor {
20
20
  if (!(obj)->get_icon().empty()) { \
21
21
  ESP_LOGCONFIG(TAG, "%s Icon: '%s'", prefix, (obj)->get_icon().c_str()); \
22
22
  } \
23
- if (!(obj)->unique_id().empty()) { \
24
- ESP_LOGV(TAG, "%s Unique ID: '%s'", prefix, (obj)->unique_id().c_str()); \
25
- } \
26
23
  }
27
24
 
28
25
  #define SUB_TEXT_SENSOR(name) \
@@ -64,11 +61,6 @@ class TextSensor : public EntityBase, public EntityBase_DeviceClass {
64
61
 
65
62
  // ========== INTERNAL METHODS ==========
66
63
  // (In most use cases you won't need these)
67
- /** Override this method to set the unique ID of this sensor.
68
- *
69
- * @deprecated Do not use for new sensors, a suitable unique ID is automatically generated (2023.4).
70
- */
71
- virtual std::string unique_id();
72
64
 
73
65
  void internal_send_state_to_frontend(const std::string &state);
74
66
 
@@ -477,11 +477,11 @@ def validate_thermostat(config):
477
477
  if (
478
478
  CONF_ON_BOOT_RESTORE_FROM in config
479
479
  and config[CONF_ON_BOOT_RESTORE_FROM] is OnBootRestoreFrom.DEFAULT_PRESET
480
+ and CONF_DEFAULT_PRESET not in config
480
481
  ):
481
- if CONF_DEFAULT_PRESET not in config:
482
- raise cv.Invalid(
483
- f"{CONF_DEFAULT_PRESET} must be defined to use {CONF_ON_BOOT_RESTORE_FROM} in DEFAULT_PRESET mode"
484
- )
482
+ raise cv.Invalid(
483
+ f"{CONF_DEFAULT_PRESET} must be defined to use {CONF_ON_BOOT_RESTORE_FROM} in DEFAULT_PRESET mode"
484
+ )
485
485
 
486
486
  if config[CONF_FAN_WITH_COOLING] is True and CONF_FAN_ONLY_ACTION not in config:
487
487
  raise cv.Invalid(
@@ -6,6 +6,7 @@ import tzlocal
6
6
  from esphome import automation
7
7
  from esphome.automation import Condition
8
8
  import esphome.codegen as cg
9
+ from esphome.components.zephyr import zephyr_add_prj_conf
9
10
  import esphome.config_validation as cv
10
11
  from esphome.const import (
11
12
  CONF_AT,
@@ -25,11 +26,11 @@ from esphome.const import (
25
26
  CONF_TIMEZONE,
26
27
  CONF_TRIGGER_ID,
27
28
  )
28
- from esphome.core import coroutine_with_priority
29
+ from esphome.core import CORE, coroutine_with_priority
29
30
 
30
31
  _LOGGER = logging.getLogger(__name__)
31
32
 
32
- CODEOWNERS = ["@OttoWinter"]
33
+ CODEOWNERS = ["@esphome/core"]
33
34
  IS_PLATFORM_COMPONENT = True
34
35
 
35
36
  time_ns = cg.esphome_ns.namespace("time")
@@ -235,7 +236,7 @@ def validate_time_at(value):
235
236
 
236
237
  def validate_cron_keys(value):
237
238
  if CONF_CRON in value:
238
- for key in value.keys():
239
+ for key in value:
239
240
  if key in CRON_KEYS:
240
241
  raise cv.Invalid(f"Cannot use option {key} when cron: is specified.")
241
242
  if CONF_AT in value:
@@ -245,7 +246,7 @@ def validate_cron_keys(value):
245
246
  value.update(cron_)
246
247
  return value
247
248
  if CONF_AT in value:
248
- for key in value.keys():
249
+ for key in value:
249
250
  if key in CRON_KEYS:
250
251
  raise cv.Invalid(f"Cannot use option {key} when at: is specified.")
251
252
  at_ = value[CONF_AT]
@@ -341,6 +342,8 @@ async def register_time(time_var, config):
341
342
 
342
343
  @coroutine_with_priority(100.0)
343
344
  async def to_code(config):
345
+ if CORE.using_zephyr:
346
+ zephyr_add_prj_conf("POSIX_CLOCK", True)
344
347
  cg.add_define("USE_TIME")
345
348
  cg.add_global(time_ns.using)
346
349
 
@@ -2,13 +2,15 @@
2
2
  #include "esphome/core/log.h"
3
3
  #ifdef USE_HOST
4
4
  #include <sys/time.h>
5
+ #elif defined(USE_ZEPHYR)
6
+ #include <zephyr/posix/time.h>
5
7
  #else
6
8
  #include "lwip/opt.h"
7
9
  #endif
8
10
  #ifdef USE_ESP8266
9
11
  #include "sys/time.h"
10
12
  #endif
11
- #ifdef USE_RP2040
13
+ #if defined(USE_RP2040) || defined(USE_ZEPHYR)
12
14
  #include <sys/time.h>
13
15
  #endif
14
16
  #include <cerrno>
@@ -22,11 +24,22 @@ static const char *const TAG = "time";
22
24
 
23
25
  RealTimeClock::RealTimeClock() = default;
24
26
  void RealTimeClock::synchronize_epoch_(uint32_t epoch) {
27
+ ESP_LOGVV(TAG, "Got epoch %" PRIu32, epoch);
25
28
  // Update UTC epoch time.
29
+ #ifdef USE_ZEPHYR
30
+ struct timespec ts;
31
+ ts.tv_nsec = 0;
32
+ ts.tv_sec = static_cast<time_t>(epoch);
33
+
34
+ int ret = clock_settime(CLOCK_REALTIME, &ts);
35
+
36
+ if (ret != 0) {
37
+ ESP_LOGW(TAG, "clock_settime() failed with code %d", ret);
38
+ }
39
+ #else
26
40
  struct timeval timev {
27
41
  .tv_sec = static_cast<time_t>(epoch), .tv_usec = 0,
28
42
  };
29
- ESP_LOGVV(TAG, "Got epoch %" PRIu32, epoch);
30
43
  struct timezone tz = {0, 0};
31
44
  int ret = settimeofday(&timev, &tz);
32
45
  if (ret == EINVAL) {
@@ -43,7 +56,7 @@ void RealTimeClock::synchronize_epoch_(uint32_t epoch) {
43
56
  if (ret != 0) {
44
57
  ESP_LOGW(TAG, "setimeofday() failed with code %d", ret);
45
58
  }
46
-
59
+ #endif
47
60
  auto time = this->now();
48
61
  ESP_LOGD(TAG, "Synchronized time: %04d-%02d-%02d %02d:%02d:%02d", time.year, time.month, time.day_of_month, time.hour,
49
62
  time.minute, time.second);
@@ -71,8 +71,6 @@ static const uint8_t LDR_PWM = 0x02;
71
71
  static const uint8_t LDR_GRPPWM = 0x03;
72
72
 
73
73
  void TLC59208FOutput::setup() {
74
- ESP_LOGCONFIG(TAG, "Running setup");
75
-
76
74
  ESP_LOGV(TAG, " Resetting all devices on the bus");
77
75
 
78
76
  // Reset all devices on the bus
@@ -19,8 +19,6 @@ void TLC5947::setup() {
19
19
  }
20
20
 
21
21
  this->pwm_amounts_.resize(this->num_chips_ * N_CHANNELS_PER_CHIP, 0);
22
-
23
- ESP_LOGCONFIG(TAG, "Done setting up TLC5947 output component.");
24
22
  }
25
23
  void TLC5947::dump_config() {
26
24
  ESP_LOGCONFIG(TAG, "TLC5947:");
@@ -13,8 +13,6 @@ void TLC5971::setup() {
13
13
  this->clock_pin_->digital_write(true);
14
14
 
15
15
  this->pwm_amounts_.resize(this->num_chips_ * N_CHANNELS_PER_CHIP, 0);
16
-
17
- ESP_LOGCONFIG(TAG, "Done setting up TLC5971 output component.");
18
16
  }
19
17
  void TLC5971::dump_config() {
20
18
  ESP_LOGCONFIG(TAG, "TLC5971:");
@@ -29,8 +29,6 @@ const uint8_t TM1621_DIGIT_ROW[2][12] = {{0x5F, 0x50, 0x3D, 0x79, 0x72, 0x6B, 0x
29
29
  {0xF5, 0x05, 0xB6, 0x97, 0x47, 0xD3, 0xF3, 0x85, 0xF7, 0xD7, 0x02, 0x00}};
30
30
 
31
31
  void TM1621Display::setup() {
32
- ESP_LOGCONFIG(TAG, "Running setup");
33
-
34
32
  this->cs_pin_->setup(); // OUTPUT
35
33
  this->cs_pin_->digital_write(true);
36
34
  this->data_pin_->setup(); // OUTPUT
@@ -125,8 +125,6 @@ const uint8_t TM1637_ASCII_TO_RAW[] PROGMEM = {
125
125
  0b01100011, // '~', ord 0x7E (degree symbol)
126
126
  };
127
127
  void TM1637Display::setup() {
128
- ESP_LOGCONFIG(TAG, "Running setup");
129
-
130
128
  this->clk_pin_->setup(); // OUTPUT
131
129
  this->clk_pin_->digital_write(false); // LOW
132
130
  this->dio_pin_->setup(); // OUTPUT
@@ -20,8 +20,6 @@ static const uint8_t TM1638_UNKNOWN_CHAR = 0b11111111;
20
20
  static const uint8_t TM1638_SHIFT_DELAY = 4; // clock pause between commands, default 4ms
21
21
 
22
22
  void TM1638Component::setup() {
23
- ESP_LOGCONFIG(TAG, "Running setup");
24
-
25
23
  this->clk_pin_->setup(); // OUTPUT
26
24
  this->dio_pin_->setup(); // OUTPUT
27
25
  this->stb_pin_->setup(); // OUTPUT