esphome 2025.7.4__py3-none-any.whl → 2025.8.0b1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of esphome might be problematic. Click here for more details.

Files changed (754) hide show
  1. esphome/__main__.py +189 -82
  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 +488 -118
  73. esphome/components/atm90e32/atm90e32.h +44 -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 +387 -82
  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 +199 -58
  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 +40 -2
  149. esphome/components/esp32_ble/ble.cpp +12 -8
  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 +2 -4
  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 +0 -1
  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/sensor/__init__.py +1 -1
  501. esphome/components/pm2005/pm2005.cpp +0 -1
  502. esphome/components/pmsa003i/pmsa003i.cpp +0 -2
  503. esphome/components/pmwcs3/sensor.py +1 -2
  504. esphome/components/pn532/pn532.cpp +0 -2
  505. esphome/components/pn532_spi/pn532_spi.cpp +0 -2
  506. esphome/components/power_supply/power_supply.cpp +7 -10
  507. esphome/components/power_supply/power_supply.h +1 -1
  508. esphome/components/psram/__init__.py +2 -1
  509. esphome/components/pulse_counter/pulse_counter_sensor.cpp +0 -1
  510. esphome/components/pulse_counter/sensor.py +9 -6
  511. esphome/components/pylontech/pylontech.cpp +0 -1
  512. esphome/components/qmc5883l/qmc5883l.cpp +0 -1
  513. esphome/components/qmp6988/qmp6988.cpp +0 -2
  514. esphome/components/qspi_dbi/display.py +2 -3
  515. esphome/components/qspi_dbi/qspi_dbi.cpp +0 -2
  516. esphome/components/qwiic_pir/binary_sensor.py +2 -3
  517. esphome/components/qwiic_pir/qwiic_pir.cpp +0 -2
  518. esphome/components/rc522/rc522.cpp +9 -31
  519. esphome/components/rc522_spi/rc522_spi.cpp +0 -1
  520. esphome/components/remote_base/__init__.py +5 -6
  521. esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -1
  522. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +0 -1
  523. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +0 -1
  524. esphome/components/remote_transmitter/__init__.py +26 -0
  525. esphome/components/remote_transmitter/automation.h +18 -0
  526. esphome/components/remote_transmitter/remote_transmitter.h +2 -1
  527. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -1
  528. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +2 -0
  529. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +2 -0
  530. esphome/components/resampler/speaker/__init__.py +4 -5
  531. esphome/components/rf_bridge/__init__.py +4 -8
  532. esphome/components/rotary_encoder/rotary_encoder.cpp +0 -2
  533. esphome/components/rp2040/__init__.py +3 -1
  534. esphome/components/rp2040_pio_led_strip/led_strip.cpp +0 -2
  535. esphome/components/rp2040_pio_led_strip/light.py +1 -2
  536. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -5
  537. esphome/components/rpi_dpi_rgb/display.py +13 -15
  538. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -3
  539. esphome/components/runtime_stats/__init__.py +34 -0
  540. esphome/components/runtime_stats/runtime_stats.cpp +102 -0
  541. esphome/components/runtime_stats/runtime_stats.h +132 -0
  542. esphome/components/scd30/scd30.cpp +0 -2
  543. esphome/components/scd30/sensor.py +1 -2
  544. esphome/components/scd4x/scd4x.cpp +0 -1
  545. esphome/components/scd4x/sensor.py +1 -3
  546. esphome/components/sdl/display.py +3 -1
  547. esphome/components/sdl/sdl_esphome.cpp +0 -2
  548. esphome/components/sdp3x/sdp3x.cpp +0 -2
  549. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +0 -2
  550. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +0 -3
  551. esphome/components/select/__init__.py +2 -3
  552. esphome/components/select/select_traits.cpp +1 -1
  553. esphome/components/select/select_traits.h +1 -1
  554. esphome/components/sen0321/sen0321.cpp +0 -1
  555. esphome/components/sen5x/sen5x.cpp +0 -2
  556. esphome/components/sensor/__init__.py +36 -4
  557. esphome/components/sensor/filter.cpp +49 -10
  558. esphome/components/sensor/filter.h +22 -7
  559. esphome/components/sensor/sensor.cpp +0 -1
  560. esphome/components/sensor/sensor.h +0 -9
  561. esphome/components/sfa30/sfa30.cpp +0 -4
  562. esphome/components/sgp30/sgp30.cpp +0 -2
  563. esphome/components/sgp4x/sensor.py +1 -1
  564. esphome/components/sgp4x/sgp4x.cpp +0 -2
  565. esphome/components/shelly_dimmer/shelly_dimmer.cpp +0 -2
  566. esphome/components/sht3xd/sht3xd.cpp +0 -2
  567. esphome/components/sht4x/sht4x.cpp +0 -2
  568. esphome/components/shtcx/shtcx.cpp +0 -1
  569. esphome/components/sim800l/__init__.py +2 -4
  570. esphome/components/sm16716/sm16716.cpp +0 -1
  571. esphome/components/sm2135/sm2135.cpp +0 -1
  572. esphome/components/sm2235/sm2235.cpp +0 -1
  573. esphome/components/sm2335/sm2335.cpp +0 -1
  574. esphome/components/sn74hc165/sn74hc165.cpp +0 -1
  575. esphome/components/sn74hc595/sn74hc595.cpp +0 -1
  576. esphome/components/sntp/sntp_component.cpp +0 -1
  577. esphome/components/sound_level/sensor.py +1 -1
  578. esphome/components/speaker/media_player/__init__.py +21 -33
  579. esphome/components/speaker/media_player/audio_pipeline.cpp +4 -7
  580. esphome/components/spi/__init__.py +29 -13
  581. esphome/components/spi/spi.cpp +0 -2
  582. esphome/components/spi_device/spi_device.cpp +1 -4
  583. esphome/components/sprinkler/__init__.py +4 -4
  584. esphome/components/sps30/sps30.cpp +0 -1
  585. esphome/components/ssd1306_base/__init__.py +11 -11
  586. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  587. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +0 -1
  588. esphome/components/ssd1306_spi/ssd1306_spi.cpp +0 -1
  589. esphome/components/ssd1322_spi/ssd1322_spi.cpp +0 -1
  590. esphome/components/ssd1325_spi/ssd1325_spi.cpp +0 -1
  591. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +0 -1
  592. esphome/components/ssd1327_spi/ssd1327_spi.cpp +0 -1
  593. esphome/components/ssd1331_spi/ssd1331_spi.cpp +0 -1
  594. esphome/components/ssd1351_spi/ssd1351_spi.cpp +0 -1
  595. esphome/components/st7567_i2c/st7567_i2c.cpp +0 -1
  596. esphome/components/st7567_spi/st7567_spi.cpp +0 -1
  597. esphome/components/st7701s/display.py +10 -14
  598. esphome/components/st7701s/st7701s.cpp +0 -3
  599. esphome/components/st7735/st7735.cpp +0 -1
  600. esphome/components/st7789v/st7789v.cpp +0 -1
  601. esphome/components/st7920/st7920.cpp +0 -1
  602. esphome/components/status_led/light/status_led_light.cpp +0 -2
  603. esphome/components/status_led/status_led.cpp +0 -1
  604. esphome/components/stepper/__init__.py +2 -4
  605. esphome/components/sts3x/sts3x.cpp +0 -1
  606. esphome/components/substitutions/__init__.py +10 -16
  607. esphome/components/substitutions/jinja.py +24 -1
  608. esphome/components/sun/__init__.py +2 -3
  609. esphome/components/switch/__init__.py +31 -1
  610. esphome/components/switch/automation.h +24 -0
  611. esphome/components/switch/switch.cpp +8 -0
  612. esphome/components/switch/switch.h +8 -0
  613. esphome/components/sx126x/sx126x.cpp +0 -2
  614. esphome/components/sx127x/sx127x.cpp +0 -2
  615. esphome/components/sx1509/__init__.py +7 -5
  616. esphome/components/sx1509/output/sx1509_float_output.cpp +1 -1
  617. esphome/components/sx1509/sx1509.cpp +0 -2
  618. esphome/components/syslog/esphome_syslog.cpp +1 -1
  619. esphome/components/tc74/tc74.cpp +0 -1
  620. esphome/components/tca9548a/tca9548a.cpp +0 -1
  621. esphome/components/tca9555/tca9555.cpp +0 -1
  622. esphome/components/tcs34725/tcs34725.cpp +0 -1
  623. esphome/components/tee501/tee501.cpp +0 -1
  624. esphome/components/tem3200/tem3200.cpp +0 -2
  625. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +0 -1
  626. esphome/components/template/cover/template_cover.cpp +0 -1
  627. esphome/components/template/select/template_select.cpp +0 -1
  628. esphome/components/template/text/template_text.cpp +0 -2
  629. esphome/components/template/valve/template_valve.cpp +0 -1
  630. esphome/components/text/__init__.py +0 -1
  631. esphome/components/text/text_traits.h +2 -0
  632. esphome/components/text_sensor/__init__.py +2 -1
  633. esphome/components/text_sensor/text_sensor.cpp +0 -2
  634. esphome/components/text_sensor/text_sensor.h +0 -8
  635. esphome/components/thermostat/climate.py +4 -4
  636. esphome/components/time/__init__.py +7 -4
  637. esphome/components/time/real_time_clock.cpp +16 -3
  638. esphome/components/tlc59208f/tlc59208f_output.cpp +0 -2
  639. esphome/components/tlc5947/tlc5947.cpp +0 -2
  640. esphome/components/tlc5971/tlc5971.cpp +0 -2
  641. esphome/components/tm1621/tm1621.cpp +0 -2
  642. esphome/components/tm1637/tm1637.cpp +0 -2
  643. esphome/components/tm1638/tm1638.cpp +0 -2
  644. esphome/components/tm1651/__init__.py +45 -48
  645. esphome/components/tm1651/tm1651.cpp +213 -47
  646. esphome/components/tm1651/tm1651.h +37 -32
  647. esphome/components/tmp117/tmp117.cpp +0 -2
  648. esphome/components/tsl2561/tsl2561.cpp +0 -1
  649. esphome/components/tsl2591/tsl2591.cpp +0 -1
  650. esphome/components/tt21100/touchscreen/tt21100.cpp +0 -2
  651. esphome/components/ttp229_bsf/ttp229_bsf.cpp +0 -1
  652. esphome/components/ttp229_lsf/ttp229_lsf.cpp +0 -1
  653. esphome/components/tuya/climate/__init__.py +9 -10
  654. esphome/components/tuya/number/__init__.py +8 -6
  655. esphome/components/tx20/tx20.cpp +0 -1
  656. esphome/components/uart/uart_component_esp32_arduino.cpp +0 -1
  657. esphome/components/uart/uart_component_esp8266.cpp +0 -1
  658. esphome/components/uart/uart_component_esp_idf.cpp +0 -2
  659. esphome/components/uart/uart_component_libretiny.cpp +0 -2
  660. esphome/components/uart/uart_component_rp2040.cpp +0 -2
  661. esphome/components/udp/__init__.py +1 -1
  662. esphome/components/ufire_ec/sensor.py +1 -2
  663. esphome/components/ufire_ec/ufire_ec.cpp +0 -2
  664. esphome/components/ufire_ise/sensor.py +1 -2
  665. esphome/components/ufire_ise/ufire_ise.cpp +0 -2
  666. esphome/components/ultrasonic/ultrasonic_sensor.cpp +0 -1
  667. esphome/components/update/__init__.py +0 -1
  668. esphome/components/uptime/sensor/uptime_seconds_sensor.cpp +0 -1
  669. esphome/components/uptime/sensor/uptime_seconds_sensor.h +0 -2
  670. esphome/components/usb_host/usb_host_client.cpp +0 -1
  671. esphome/components/usb_host/usb_host_component.cpp +0 -1
  672. esphome/components/valve/__init__.py +0 -1
  673. esphome/components/veml3235/veml3235.cpp +0 -3
  674. esphome/components/veml7700/veml7700.cpp +0 -2
  675. esphome/components/version/version_text_sensor.cpp +0 -1
  676. esphome/components/version/version_text_sensor.h +0 -1
  677. esphome/components/vl53l0x/vl53l0x_sensor.cpp +0 -4
  678. esphome/components/voice_assistant/voice_assistant.cpp +9 -8
  679. esphome/components/web_server/__init__.py +13 -0
  680. esphome/components/web_server/web_server.cpp +187 -352
  681. esphome/components/web_server/web_server.h +61 -1
  682. esphome/components/web_server_base/__init__.py +1 -1
  683. esphome/components/web_server_base/web_server_base.cpp +2 -0
  684. esphome/components/web_server_base/web_server_base.h +6 -0
  685. esphome/components/web_server_idf/web_server_idf.cpp +10 -8
  686. esphome/components/web_server_idf/web_server_idf.h +2 -0
  687. esphome/components/weikai_i2c/weikai_i2c.cpp +1 -2
  688. esphome/components/weikai_spi/weikai_spi.cpp +1 -1
  689. esphome/components/wifi/__init__.py +8 -43
  690. esphome/components/wifi/wifi_component.cpp +100 -36
  691. esphome/components/wifi/wifi_component.h +5 -1
  692. esphome/components/wifi/wifi_component_esp32_arduino.cpp +30 -0
  693. esphome/components/wifi/wifi_component_esp_idf.cpp +30 -0
  694. esphome/components/wifi_info/wifi_info_text_sensor.h +0 -6
  695. esphome/components/wifi_signal/wifi_signal_sensor.h +0 -1
  696. esphome/components/wireguard/wireguard.cpp +0 -2
  697. esphome/components/x9c/x9c.cpp +0 -2
  698. esphome/components/xgzp68xx/xgzp68xx.cpp +0 -1
  699. esphome/components/xl9535/xl9535.cpp +0 -2
  700. esphome/components/zephyr/__init__.py +252 -0
  701. esphome/components/zephyr/const.py +16 -0
  702. esphome/components/zephyr/core.cpp +90 -0
  703. esphome/components/zephyr/gpio.cpp +120 -0
  704. esphome/components/zephyr/gpio.h +38 -0
  705. esphome/components/zephyr/pre_build.py.script +4 -0
  706. esphome/components/zephyr/preferences.cpp +156 -0
  707. esphome/components/zephyr/preferences.h +13 -0
  708. esphome/config.py +38 -16
  709. esphome/config_helpers.py +1 -2
  710. esphome/config_validation.py +8 -15
  711. esphome/const.py +26 -1
  712. esphome/core/__init__.py +88 -51
  713. esphome/core/application.cpp +75 -21
  714. esphome/core/application.h +106 -171
  715. esphome/core/color.h +10 -0
  716. esphome/core/component.cpp +41 -25
  717. esphome/core/component.h +9 -6
  718. esphome/core/component_iterator.cpp +61 -261
  719. esphome/core/component_iterator.h +15 -0
  720. esphome/core/config.py +26 -11
  721. esphome/core/defines.h +40 -2
  722. esphome/core/entity_base.h +18 -0
  723. esphome/core/entity_helpers.py +41 -6
  724. esphome/core/helpers.cpp +8 -15
  725. esphome/core/helpers.h +60 -6
  726. esphome/core/lock_free_queue.h +1 -1
  727. esphome/core/scheduler.cpp +277 -74
  728. esphome/core/scheduler.h +89 -27
  729. esphome/cpp_generator.py +2 -6
  730. esphome/cpp_helpers.py +1 -1
  731. esphome/dashboard/dashboard.py +2 -3
  732. esphome/dashboard/dns.py +2 -8
  733. esphome/dashboard/web_server.py +34 -19
  734. esphome/espota2.py +1 -4
  735. esphome/git.py +3 -1
  736. esphome/helpers.py +23 -4
  737. esphome/log.py +3 -1
  738. esphome/mqtt.py +3 -5
  739. esphome/platformio_api.py +7 -4
  740. esphome/types.py +12 -0
  741. esphome/util.py +20 -8
  742. esphome/voluptuous_schema.py +4 -3
  743. esphome/vscode.py +1 -2
  744. esphome/wizard.py +1 -4
  745. esphome/writer.py +5 -107
  746. esphome/yaml_util.py +7 -5
  747. {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/METADATA +12 -13
  748. {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/RECORD +753 -673
  749. esphome/components/mipi_spi/models/commands.py +0 -82
  750. /esphome/components/nfc/binary_sensor/{binary_sensor.h → nfc_binary_sensor.h} +0 -0
  751. {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/WHEEL +0 -0
  752. {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/entry_points.txt +0 -0
  753. {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/licenses/LICENSE +0 -0
  754. {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/top_level.txt +0 -0
@@ -89,9 +89,10 @@ def validate_(config):
89
89
  raise cv.Invalid("No sensors or binary sensors to encrypt")
90
90
  elif config[CONF_ROLLING_CODE_ENABLE]:
91
91
  raise cv.Invalid("Rolling code requires an encryption key")
92
- if config[CONF_PING_PONG_ENABLE]:
93
- if not any(CONF_ENCRYPTION in p for p in config.get(CONF_PROVIDERS) or ()):
94
- raise cv.Invalid("Ping-pong requires at least one encrypted provider")
92
+ if config[CONF_PING_PONG_ENABLE] and not any(
93
+ CONF_ENCRYPTION in p for p in config.get(CONF_PROVIDERS) or ()
94
+ ):
95
+ raise cv.Invalid("Ping-pong requires at least one encrypted provider")
95
96
  return config
96
97
 
97
98
 
@@ -24,7 +24,6 @@ enum PCA6416AGPIORegisters {
24
24
  static const char *const TAG = "pca6416a";
25
25
 
26
26
  void PCA6416AComponent::setup() {
27
- ESP_LOGCONFIG(TAG, "Running setup");
28
27
  // Test to see if device exists
29
28
  uint8_t value;
30
29
  if (!this->read_register_(PCA6416A_INPUT0, &value)) {
@@ -13,7 +13,6 @@ const uint8_t CONFIG_REG = 3;
13
13
  static const char *const TAG = "pca9554";
14
14
 
15
15
  void PCA9554Component::setup() {
16
- ESP_LOGCONFIG(TAG, "Running setup");
17
16
  this->reg_width_ = (this->pin_count_ + 7) / 8;
18
17
  // Test to see if device exists
19
18
  if (!this->read_inputs_()) {
@@ -26,8 +26,6 @@ static const uint8_t PCA9685_MODE1_AUTOINC = 0b00100000;
26
26
  static const uint8_t PCA9685_MODE1_SLEEP = 0b00010000;
27
27
 
28
28
  void PCA9685Output::setup() {
29
- ESP_LOGCONFIG(TAG, "Running setup");
30
-
31
29
  ESP_LOGV(TAG, " Resetting devices");
32
30
  if (!this->write_bytes(PCA9685_REGISTER_SOFTWARE_RESET, nullptr, 0)) {
33
31
  this->mark_failed();
@@ -10,7 +10,6 @@ namespace pcf85063 {
10
10
  static const char *const TAG = "pcf85063";
11
11
 
12
12
  void PCF85063Component::setup() {
13
- ESP_LOGCONFIG(TAG, "Running setup");
14
13
  if (!this->read_rtc_()) {
15
14
  this->mark_failed();
16
15
  }
@@ -10,7 +10,6 @@ namespace pcf8563 {
10
10
  static const char *const TAG = "PCF8563";
11
11
 
12
12
  void PCF8563Component::setup() {
13
- ESP_LOGCONFIG(TAG, "Running setup");
14
13
  if (!this->read_rtc_()) {
15
14
  this->mark_failed();
16
15
  }
@@ -7,7 +7,6 @@ namespace pcf8574 {
7
7
  static const char *const TAG = "pcf8574";
8
8
 
9
9
  void PCF8574Component::setup() {
10
- ESP_LOGCONFIG(TAG, "Running setup");
11
10
  if (!this->read_gpio_()) {
12
11
  ESP_LOGE(TAG, "PCF8574 not available under 0x%02X", this->address_);
13
12
  this->mark_failed();
@@ -18,7 +18,6 @@ static const uint8_t PI4IOE5V6408_REGISTER_INTERRUPT_STATUS = 0x13;
18
18
  static const char *const TAG = "pi4ioe5v6408";
19
19
 
20
20
  void PI4IOE5V6408Component::setup() {
21
- ESP_LOGCONFIG(TAG, "Running setup");
22
21
  if (this->reset_) {
23
22
  this->reg(PI4IOE5V6408_REGISTER_DEVICE_ID) |= 0b00000001;
24
23
  this->reg(PI4IOE5V6408_REGISTER_OUT_HIGH_IMPEDENCE) = 0b00000000;
@@ -273,7 +273,7 @@ CONFIG_SCHEMA = PIPSOLAR_COMPONENT_SCHEMA.extend(
273
273
  async def to_code(config):
274
274
  paren = await cg.get_variable(config[CONF_PIPSOLAR_ID])
275
275
 
276
- for type, _ in TYPES.items():
276
+ for type in TYPES:
277
277
  if type in config:
278
278
  conf = config[type]
279
279
  sens = await sensor.new_sensor(conf)
@@ -39,7 +39,6 @@ static const LogString *pm2005_get_measuring_mode_string(int status) {
39
39
  static inline uint16_t get_sensor_value(const uint8_t *data, uint8_t i) { return data[i] * 0x100 + data[i + 1]; }
40
40
 
41
41
  void PM2005Component::setup() {
42
- ESP_LOGCONFIG(TAG, "Running setup");
43
42
  if (this->sensor_type_ == PM2005) {
44
43
  this->situation_value_index_ = 3;
45
44
  this->pm_1_0_value_index_ = 4;
@@ -19,8 +19,6 @@ static const uint8_t START_CHARACTER_2 = 0x4D;
19
19
  static const uint8_t READ_DATA_RETRY_COUNT = 3;
20
20
 
21
21
  void PMSA003IComponent::setup() {
22
- ESP_LOGCONFIG(TAG, "Running setup");
23
-
24
22
  PM25AQIData data;
25
23
  bool successful_read = this->read_data_(&data);
26
24
 
@@ -114,8 +114,7 @@ PMWCS3_CALIBRATION_SCHEMA = cv.Schema(
114
114
  )
115
115
  async def pmwcs3_calibration_to_code(config, action_id, template_arg, args):
116
116
  parent = await cg.get_variable(config[CONF_ID])
117
- var = cg.new_Pvariable(action_id, template_arg, parent)
118
- return var
117
+ return cg.new_Pvariable(action_id, template_arg, parent)
119
118
 
120
119
 
121
120
  PMWCS3_NEW_I2C_ADDRESS_SCHEMA = cv.maybe_simple_value(
@@ -15,8 +15,6 @@ namespace pn532 {
15
15
  static const char *const TAG = "pn532";
16
16
 
17
17
  void PN532::setup() {
18
- ESP_LOGCONFIG(TAG, "Running setup");
19
-
20
18
  // Get version data
21
19
  if (!this->write_command_({PN532_COMMAND_VERSION_DATA})) {
22
20
  ESP_LOGW(TAG, "Error sending version command, trying again");
@@ -12,12 +12,10 @@ namespace pn532_spi {
12
12
  static const char *const TAG = "pn532_spi";
13
13
 
14
14
  void PN532Spi::setup() {
15
- ESP_LOGI(TAG, "PN532Spi setup started!");
16
15
  this->spi_setup();
17
16
 
18
17
  this->cs_->digital_write(false);
19
18
  delay(10);
20
- ESP_LOGI(TAG, "SPI setup finished!");
21
19
  PN532::setup();
22
20
  }
23
21
 
@@ -7,22 +7,19 @@ namespace power_supply {
7
7
  static const char *const TAG = "power_supply";
8
8
 
9
9
  void PowerSupply::setup() {
10
- ESP_LOGCONFIG(TAG, "Running setup");
11
-
12
10
  this->pin_->setup();
13
11
  this->pin_->digital_write(false);
14
12
  if (this->enable_on_boot_)
15
13
  this->request_high_power();
16
14
  }
17
15
  void PowerSupply::dump_config() {
18
- ESP_LOGCONFIG(TAG, "Power Supply:");
19
- LOG_PIN(" Pin: ", this->pin_);
20
16
  ESP_LOGCONFIG(TAG,
17
+ "Power Supply:\n"
21
18
  " Time to enable: %" PRIu32 " ms\n"
22
- " Keep on time: %.1f s",
23
- this->enable_time_, this->keep_on_time_ / 1000.0f);
24
- if (this->enable_on_boot_)
25
- ESP_LOGCONFIG(TAG, " Enabled at startup: True");
19
+ " Keep on time: %" PRIu32 " s\n"
20
+ " Enable at startup: %s",
21
+ this->enable_time_, this->keep_on_time_ / 1000u, YESNO(this->enable_on_boot_));
22
+ LOG_PIN(" Pin: ", this->pin_);
26
23
  }
27
24
 
28
25
  float PowerSupply::get_setup_priority() const { return setup_priority::IO; }
@@ -32,7 +29,7 @@ bool PowerSupply::is_enabled() const { return this->active_requests_ != 0; }
32
29
  void PowerSupply::request_high_power() {
33
30
  if (this->active_requests_ == 0) {
34
31
  this->cancel_timeout("power-supply-off");
35
- ESP_LOGD(TAG, "Enabling power supply.");
32
+ ESP_LOGV(TAG, "Enabling");
36
33
  this->pin_->digital_write(true);
37
34
  delay(this->enable_time_);
38
35
  }
@@ -47,7 +44,7 @@ void PowerSupply::unrequest_high_power() {
47
44
  this->active_requests_--;
48
45
  if (this->active_requests_ == 0) {
49
46
  this->set_timeout("power-supply-off", this->keep_on_time_, [this]() {
50
- ESP_LOGD(TAG, "Disabling power supply.");
47
+ ESP_LOGV(TAG, "Disabling");
51
48
  this->pin_->digital_write(false);
52
49
  });
53
50
  }
@@ -36,10 +36,10 @@ class PowerSupply : public Component {
36
36
 
37
37
  protected:
38
38
  GPIOPin *pin_;
39
- bool enable_on_boot_{false};
40
39
  uint32_t enable_time_;
41
40
  uint32_t keep_on_time_;
42
41
  int16_t active_requests_{0}; // use signed integer to make catching negative requests easier.
42
+ bool enable_on_boot_{false};
43
43
  };
44
44
 
45
45
  class PowerSupplyRequester {
@@ -28,12 +28,13 @@ from esphome.core import CORE
28
28
  import esphome.final_validate as fv
29
29
 
30
30
  CODEOWNERS = ["@esphome/core"]
31
+ DOMAIN = "psram"
31
32
 
32
33
  DEPENDENCIES = [PLATFORM_ESP32]
33
34
 
34
35
  _LOGGER = logging.getLogger(__name__)
35
36
 
36
- psram_ns = cg.esphome_ns.namespace("psram")
37
+ psram_ns = cg.esphome_ns.namespace(DOMAIN)
37
38
  PsramComponent = psram_ns.class_("PsramComponent", cg.Component)
38
39
 
39
40
  TYPE_QUAD = "quad"
@@ -156,7 +156,6 @@ pulse_counter_t HwPulseCounterStorage::read_raw_value() {
156
156
  #endif // HAS_PCNT
157
157
 
158
158
  void PulseCounterSensor::setup() {
159
- ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
160
159
  if (!this->storage_.pulse_counter_setup(this->pin_)) {
161
160
  this->mark_failed();
162
161
  return;
@@ -49,12 +49,15 @@ def validate_internal_filter(value):
49
49
  [CONF_USE_PCNT],
50
50
  )
51
51
 
52
- if CORE.is_esp32 and use_pcnt:
53
- if value.get(CONF_INTERNAL_FILTER).total_microseconds > 13:
54
- raise cv.Invalid(
55
- "Maximum internal filter value when using ESP32 hardware PCNT is 13us",
56
- [CONF_INTERNAL_FILTER],
57
- )
52
+ if (
53
+ CORE.is_esp32
54
+ and use_pcnt
55
+ and value.get(CONF_INTERNAL_FILTER).total_microseconds > 13
56
+ ):
57
+ raise cv.Invalid(
58
+ "Maximum internal filter value when using ESP32 hardware PCNT is 13us",
59
+ [CONF_INTERNAL_FILTER],
60
+ )
58
61
 
59
62
  return value
60
63
 
@@ -26,7 +26,6 @@ void PylontechComponent::dump_config() {
26
26
  }
27
27
 
28
28
  void PylontechComponent::setup() {
29
- ESP_LOGCONFIG(TAG, "Running setup");
30
29
  while (this->available() != 0) {
31
30
  this->read();
32
31
  }
@@ -24,7 +24,6 @@ static const uint8_t QMC5883L_REGISTER_CONTROL_2 = 0x0A;
24
24
  static const uint8_t QMC5883L_REGISTER_PERIOD = 0x0B;
25
25
 
26
26
  void QMC5883LComponent::setup() {
27
- ESP_LOGCONFIG(TAG, "Running setup");
28
27
  // Soft Reset
29
28
  if (!this->write_byte(QMC5883L_REGISTER_CONTROL_2, 1 << 7)) {
30
29
  this->error_code_ = COMMUNICATION_FAILED;
@@ -348,8 +348,6 @@ void QMP6988Component::calculate_pressure_() {
348
348
  }
349
349
 
350
350
  void QMP6988Component::setup() {
351
- ESP_LOGCONFIG(TAG, "Running setup");
352
-
353
351
  bool ret;
354
352
  ret = this->device_check_();
355
353
  if (!ret) {
@@ -73,9 +73,8 @@ def map_sequence(value):
73
73
 
74
74
  def _validate(config):
75
75
  chip = DriverChip.chips[config[CONF_MODEL]]
76
- if not chip.initsequence:
77
- if CONF_INIT_SEQUENCE not in config:
78
- raise cv.Invalid(f"{chip.name} model requires init_sequence")
76
+ if not chip.initsequence and CONF_INIT_SEQUENCE not in config:
77
+ raise cv.Invalid(f"{chip.name} model requires init_sequence")
79
78
  return config
80
79
 
81
80
 
@@ -6,7 +6,6 @@ namespace esphome {
6
6
  namespace qspi_dbi {
7
7
 
8
8
  void QspiDbi::setup() {
9
- ESP_LOGCONFIG(TAG, "Running setup");
10
9
  this->spi_setup();
11
10
  if (this->enable_pin_ != nullptr) {
12
11
  this->enable_pin_->setup();
@@ -113,7 +112,6 @@ void QspiDbi::write_init_sequence_() {
113
112
  }
114
113
  this->reset_params_(true);
115
114
  this->setup_complete_ = true;
116
- ESP_LOGCONFIG(TAG, "QSPI_DBI setup complete");
117
115
  }
118
116
 
119
117
  void QspiDbi::set_addr_window_(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) {
@@ -24,9 +24,8 @@ QwiicPIRComponent = qwiic_pir_ns.class_(
24
24
 
25
25
 
26
26
  def validate_no_debounce_unless_native(config):
27
- if CONF_DEBOUNCE in config:
28
- if config[CONF_DEBOUNCE_MODE] != "NATIVE":
29
- raise cv.Invalid("debounce can only be set if debounce_mode is NATIVE")
27
+ if CONF_DEBOUNCE in config and config[CONF_DEBOUNCE_MODE] != "NATIVE":
28
+ raise cv.Invalid("debounce can only be set if debounce_mode is NATIVE")
30
29
  return config
31
30
 
32
31
 
@@ -7,8 +7,6 @@ namespace qwiic_pir {
7
7
  static const char *const TAG = "qwiic_pir";
8
8
 
9
9
  void QwiicPIRComponent::setup() {
10
- ESP_LOGCONFIG(TAG, "Running setup");
11
-
12
10
  // Verify I2C communcation by reading and verifying the chip ID
13
11
  uint8_t chip_id;
14
12
  if (!this->read_byte(QWIIC_PIR_CHIP_ID, &chip_id)) {
@@ -1,4 +1,5 @@
1
1
  #include "rc522.h"
2
+ #include "esphome/core/helpers.h"
2
3
  #include "esphome/core/log.h"
3
4
 
4
5
  // Based on:
@@ -13,30 +14,6 @@ static const char *const TAG = "rc522";
13
14
 
14
15
  static const uint8_t RESET_COUNT = 5;
15
16
 
16
- std::string format_buffer(uint8_t *b, uint8_t len) {
17
- char buf[32];
18
- int offset = 0;
19
- for (uint8_t i = 0; i < len; i++) {
20
- const char *format = "%02X";
21
- if (i + 1 < len)
22
- format = "%02X-";
23
- offset += sprintf(buf + offset, format, b[i]);
24
- }
25
- return std::string(buf);
26
- }
27
-
28
- std::string format_uid(std::vector<uint8_t> &uid) {
29
- char buf[32];
30
- int offset = 0;
31
- for (size_t i = 0; i < uid.size(); i++) {
32
- const char *format = "%02X";
33
- if (i + 1 < uid.size())
34
- format = "%02X-";
35
- offset += sprintf(buf + offset, format, uid[i]);
36
- }
37
- return std::string(buf);
38
- }
39
-
40
17
  void RC522::setup() {
41
18
  state_ = STATE_SETUP;
42
19
  // Pull device out of power down / reset state.
@@ -215,7 +192,7 @@ void RC522::loop() {
215
192
  ESP_LOGV(TAG, "STATE_READ_SERIAL_DONE -> TIMEOUT (no tag present) %d", status);
216
193
  } else {
217
194
  ESP_LOGW(TAG, "Unexpected response. Read status is %d. Read bytes: %d (%s)", status, back_length_,
218
- format_buffer(buffer_, 9).c_str());
195
+ format_hex_pretty(buffer_, back_length_, '-', false).c_str());
219
196
  }
220
197
 
221
198
  state_ = STATE_DONE;
@@ -239,7 +216,7 @@ void RC522::loop() {
239
216
 
240
217
  std::vector<uint8_t> rfid_uid(std::begin(uid_buffer_), std::begin(uid_buffer_) + uid_idx_);
241
218
  uid_idx_ = 0;
242
- // ESP_LOGD(TAG, "Processing '%s'", format_uid(rfid_uid).c_str());
219
+ // ESP_LOGD(TAG, "Processing '%s'", format_hex_pretty(rfid_uid, '-', false).c_str());
243
220
  pcd_antenna_off_();
244
221
  state_ = STATE_INIT; // scan again on next update
245
222
  bool report = true;
@@ -260,13 +237,13 @@ void RC522::loop() {
260
237
  trigger->process(rfid_uid);
261
238
 
262
239
  if (report) {
263
- ESP_LOGD(TAG, "Found new tag '%s'", format_uid(rfid_uid).c_str());
240
+ ESP_LOGD(TAG, "Found new tag '%s'", format_hex_pretty(rfid_uid, '-', false).c_str());
264
241
  }
265
242
  break;
266
243
  }
267
244
  case STATE_DONE: {
268
245
  if (!this->current_uid_.empty()) {
269
- ESP_LOGV(TAG, "Tag '%s' removed", format_uid(this->current_uid_).c_str());
246
+ ESP_LOGV(TAG, "Tag '%s' removed", format_hex_pretty(this->current_uid_, '-', false).c_str());
270
247
  for (auto *trigger : this->triggers_ontagremoved_)
271
248
  trigger->process(this->current_uid_);
272
249
  }
@@ -361,7 +338,7 @@ void RC522::pcd_clear_register_bit_mask_(PcdRegister reg, ///< The register to
361
338
  * @return STATUS_OK on success, STATUS_??? otherwise.
362
339
  */
363
340
  void RC522::pcd_transceive_data_(uint8_t send_len) {
364
- ESP_LOGV(TAG, "PCD TRANSCEIVE: RX: %s", format_buffer(buffer_, send_len).c_str());
341
+ ESP_LOGV(TAG, "PCD TRANSCEIVE: RX: %s", format_hex_pretty(buffer_, send_len, '-', false).c_str());
365
342
  delayMicroseconds(1000); // we need 1 ms delay between antenna on and those communication commands
366
343
  send_len_ = send_len;
367
344
  // Prepare values for BitFramingReg
@@ -435,7 +412,8 @@ RC522::StatusCode RC522::await_transceive_() {
435
412
  error_reg_value); // TODO: is this always due to collissions?
436
413
  return STATUS_ERROR;
437
414
  }
438
- ESP_LOGV(TAG, "received %d bytes: %s", back_length_, format_buffer(buffer_ + send_len_, back_length_).c_str());
415
+ ESP_LOGV(TAG, "received %d bytes: %s", back_length_,
416
+ format_hex_pretty(buffer_ + send_len_, back_length_, '-', false).c_str());
439
417
 
440
418
  return STATUS_OK;
441
419
  }
@@ -499,7 +477,7 @@ bool RC522BinarySensor::process(std::vector<uint8_t> &data) {
499
477
  this->found_ = result;
500
478
  return result;
501
479
  }
502
- void RC522Trigger::process(std::vector<uint8_t> &data) { this->trigger(format_uid(data)); }
480
+ void RC522Trigger::process(std::vector<uint8_t> &data) { this->trigger(format_hex_pretty(data, '-', false)); }
503
481
 
504
482
  } // namespace rc522
505
483
  } // namespace esphome
@@ -10,7 +10,6 @@ namespace rc522_spi {
10
10
  static const char *const TAG = "rc522_spi";
11
11
 
12
12
  void RC522Spi::setup() {
13
- ESP_LOGI(TAG, "SPI Setup");
14
13
  this->spi_setup();
15
14
 
16
15
  RC522::setup();
@@ -1062,12 +1062,11 @@ def validate_raw_alternating(value):
1062
1062
  last_negative = None
1063
1063
  for i, val in enumerate(value):
1064
1064
  this_negative = val < 0
1065
- if i != 0:
1066
- if this_negative == last_negative:
1067
- raise cv.Invalid(
1068
- f"Values must alternate between being positive and negative, please see index {i} and {i + 1}",
1069
- [i],
1070
- )
1065
+ if i != 0 and this_negative == last_negative:
1066
+ raise cv.Invalid(
1067
+ f"Values must alternate between being positive and negative, please see index {i} and {i + 1}",
1068
+ [i],
1069
+ )
1071
1070
  last_negative = this_negative
1072
1071
  return value
1073
1072
 
@@ -38,7 +38,6 @@ static bool IRAM_ATTR HOT rmt_callback(rmt_channel_handle_t channel, const rmt_r
38
38
  }
39
39
 
40
40
  void RemoteReceiverComponent::setup() {
41
- ESP_LOGCONFIG(TAG, "Running setup");
42
41
  rmt_rx_channel_config_t channel;
43
42
  memset(&channel, 0, sizeof(channel));
44
43
  channel.clk_src = RMT_CLK_SRC_DEFAULT;
@@ -31,7 +31,6 @@ void IRAM_ATTR HOT RemoteReceiverComponentStore::gpio_intr(RemoteReceiverCompone
31
31
  }
32
32
 
33
33
  void RemoteReceiverComponent::setup() {
34
- ESP_LOGCONFIG(TAG, "Running setup");
35
34
  this->pin_->setup();
36
35
  auto &s = this->store_;
37
36
  s.filter_us = this->filter_us_;
@@ -31,7 +31,6 @@ void IRAM_ATTR HOT RemoteReceiverComponentStore::gpio_intr(RemoteReceiverCompone
31
31
  }
32
32
 
33
33
  void RemoteReceiverComponent::setup() {
34
- ESP_LOGCONFIG(TAG, "Running setup");
35
34
  this->pin_->setup();
36
35
  auto &s = this->store_;
37
36
  s.filter_us = this->filter_us_;
@@ -13,6 +13,7 @@ from esphome.const import (
13
13
  CONF_PIN,
14
14
  CONF_RMT_SYMBOLS,
15
15
  CONF_USE_DMA,
16
+ CONF_VALUE,
16
17
  PlatformFramework,
17
18
  )
18
19
  from esphome.core import CORE
@@ -22,11 +23,17 @@ AUTO_LOAD = ["remote_base"]
22
23
  CONF_EOT_LEVEL = "eot_level"
23
24
  CONF_ON_TRANSMIT = "on_transmit"
24
25
  CONF_ON_COMPLETE = "on_complete"
26
+ CONF_TRANSMITTER_ID = remote_base.CONF_TRANSMITTER_ID
25
27
 
26
28
  remote_transmitter_ns = cg.esphome_ns.namespace("remote_transmitter")
27
29
  RemoteTransmitterComponent = remote_transmitter_ns.class_(
28
30
  "RemoteTransmitterComponent", remote_base.RemoteTransmitterBase, cg.Component
29
31
  )
32
+ DigitalWriteAction = remote_transmitter_ns.class_(
33
+ "DigitalWriteAction",
34
+ automation.Action,
35
+ cg.Parented.template(RemoteTransmitterComponent),
36
+ )
30
37
 
31
38
  MULTI_CONF = True
32
39
  CONFIG_SCHEMA = cv.Schema(
@@ -63,6 +70,25 @@ CONFIG_SCHEMA = cv.Schema(
63
70
  }
64
71
  ).extend(cv.COMPONENT_SCHEMA)
65
72
 
73
+ DIGITAL_WRITE_ACTION_SCHEMA = cv.maybe_simple_value(
74
+ {
75
+ cv.GenerateID(CONF_TRANSMITTER_ID): cv.use_id(RemoteTransmitterComponent),
76
+ cv.Required(CONF_VALUE): cv.templatable(cv.boolean),
77
+ },
78
+ key=CONF_VALUE,
79
+ )
80
+
81
+
82
+ @automation.register_action(
83
+ "remote_transmitter.digital_write", DigitalWriteAction, DIGITAL_WRITE_ACTION_SCHEMA
84
+ )
85
+ async def digital_write_action_to_code(config, action_id, template_arg, args):
86
+ var = cg.new_Pvariable(action_id, template_arg)
87
+ await cg.register_parented(var, config[CONF_TRANSMITTER_ID])
88
+ template_ = await cg.templatable(config[CONF_VALUE], args, bool)
89
+ cg.add(var.set_value(template_))
90
+ return var
91
+
66
92
 
67
93
  async def to_code(config):
68
94
  pin = await cg.gpio_pin_expression(config[CONF_PIN])
@@ -0,0 +1,18 @@
1
+ #pragma once
2
+
3
+ #include "esphome/components/remote_transmitter/remote_transmitter.h"
4
+ #include "esphome/core/automation.h"
5
+ #include "esphome/core/component.h"
6
+ #include "esphome/core/helpers.h"
7
+
8
+ namespace esphome {
9
+ namespace remote_transmitter {
10
+
11
+ template<typename... Ts> class DigitalWriteAction : public Action<Ts...>, public Parented<RemoteTransmitterComponent> {
12
+ public:
13
+ TEMPLATABLE_VALUE(bool, value)
14
+ void play(Ts... x) override { this->parent_->digital_write(this->value_.value(x...)); }
15
+ };
16
+
17
+ } // namespace remote_transmitter
18
+ } // namespace esphome
@@ -30,10 +30,11 @@ class RemoteTransmitterComponent : public remote_base::RemoteTransmitterBase,
30
30
 
31
31
  void set_carrier_duty_percent(uint8_t carrier_duty_percent) { this->carrier_duty_percent_ = carrier_duty_percent; }
32
32
 
33
+ void digital_write(bool value);
34
+
33
35
  #if defined(USE_ESP32)
34
36
  void set_with_dma(bool with_dma) { this->with_dma_ = with_dma; }
35
37
  void set_eot_level(bool eot_level) { this->eot_level_ = eot_level; }
36
- void digital_write(bool value);
37
38
  #endif
38
39
 
39
40
  Trigger<> *get_transmit_trigger() const { return this->transmit_trigger_; };
@@ -11,7 +11,6 @@ namespace remote_transmitter {
11
11
  static const char *const TAG = "remote_transmitter";
12
12
 
13
13
  void RemoteTransmitterComponent::setup() {
14
- ESP_LOGCONFIG(TAG, "Running setup");
15
14
  this->inverted_ = this->pin_->is_inverted();
16
15
  this->configure_rmt_();
17
16
  }
@@ -73,6 +73,8 @@ void RemoteTransmitterComponent::space_(uint32_t usec) {
73
73
  this->target_time_ += usec;
74
74
  }
75
75
 
76
+ void RemoteTransmitterComponent::digital_write(bool value) { this->pin_->digital_write(value); }
77
+
76
78
  void RemoteTransmitterComponent::send_internal(uint32_t send_times, uint32_t send_wait) {
77
79
  ESP_LOGD(TAG, "Sending remote code");
78
80
  uint32_t on_time, off_time;
@@ -75,6 +75,8 @@ void RemoteTransmitterComponent::space_(uint32_t usec) {
75
75
  this->target_time_ += usec;
76
76
  }
77
77
 
78
+ void RemoteTransmitterComponent::digital_write(bool value) { this->pin_->digital_write(value); }
79
+
78
80
  void RemoteTransmitterComponent::send_internal(uint32_t send_times, uint32_t send_wait) {
79
81
  ESP_LOGD(TAG, "Sending remote code");
80
82
  uint32_t on_time, off_time;
@@ -90,11 +90,10 @@ async def to_code(config):
90
90
 
91
91
  if task_stack_in_psram := config.get(CONF_TASK_STACK_IN_PSRAM):
92
92
  cg.add(var.set_task_stack_in_psram(task_stack_in_psram))
93
- if task_stack_in_psram:
94
- if config[CONF_TASK_STACK_IN_PSRAM]:
95
- esp32.add_idf_sdkconfig_option(
96
- "CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY", True
97
- )
93
+ if task_stack_in_psram and config[CONF_TASK_STACK_IN_PSRAM]:
94
+ esp32.add_idf_sdkconfig_option(
95
+ "CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY", True
96
+ )
98
97
 
99
98
  cg.add(var.set_target_bits_per_sample(config[CONF_BITS_PER_SAMPLE]))
100
99
  cg.add(var.set_target_sample_rate(config[CONF_SAMPLE_RATE]))