esphome 2025.9.3__py3-none-any.whl → 2025.10.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 (353) hide show
  1. esphome/__main__.py +103 -37
  2. esphome/address_cache.py +142 -0
  3. esphome/automation.py +130 -32
  4. esphome/build_gen/platformio.py +1 -3
  5. esphome/codegen.py +1 -0
  6. esphome/components/animation/animation.cpp +2 -2
  7. esphome/components/api/__init__.py +166 -3
  8. esphome/components/api/api_connection.cpp +84 -41
  9. esphome/components/api/api_connection.h +22 -16
  10. esphome/components/api/api_frame_helper.cpp +33 -19
  11. esphome/components/api/api_frame_helper.h +19 -4
  12. esphome/components/api/api_frame_helper_noise.cpp +41 -53
  13. esphome/components/api/api_frame_helper_noise.h +1 -1
  14. esphome/components/api/api_frame_helper_plaintext.cpp +22 -31
  15. esphome/components/api/api_frame_helper_plaintext.h +1 -1
  16. esphome/components/api/api_pb2.cpp +189 -15
  17. esphome/components/api/api_pb2.h +132 -20
  18. esphome/components/api/api_pb2_dump.cpp +97 -9
  19. esphome/components/api/api_pb2_service.cpp +118 -160
  20. esphome/components/api/api_pb2_service.h +31 -3
  21. esphome/components/api/api_server.cpp +68 -10
  22. esphome/components/api/api_server.h +32 -4
  23. esphome/components/api/custom_api_device.h +8 -8
  24. esphome/components/api/homeassistant_service.h +123 -6
  25. esphome/components/api/proto.h +6 -2
  26. esphome/components/api/user_services.h +2 -2
  27. esphome/components/as7341/sensor.py +1 -1
  28. esphome/components/audio/__init__.py +1 -1
  29. esphome/components/audio/audio.cpp +1 -1
  30. esphome/components/audio/audio_decoder.cpp +9 -9
  31. esphome/components/bl0906/bl0906.cpp +2 -2
  32. esphome/components/bl0942/bl0942.cpp +2 -2
  33. esphome/components/ble_client/__init__.py +1 -1
  34. esphome/components/bluetooth_proxy/__init__.py +4 -30
  35. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +11 -4
  36. esphome/components/bluetooth_proxy/bluetooth_connection.h +2 -2
  37. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +2 -2
  38. esphome/components/camera_encoder/__init__.py +2 -4
  39. esphome/components/camera_encoder/esp32_camera_jpeg_encoder.cpp +4 -2
  40. esphome/components/camera_encoder/esp32_camera_jpeg_encoder.h +3 -1
  41. esphome/components/canbus/canbus.cpp +7 -5
  42. esphome/components/canbus/canbus.h +7 -7
  43. esphome/components/captive_portal/__init__.py +18 -1
  44. esphome/components/captive_portal/captive_portal.cpp +40 -46
  45. esphome/components/captive_portal/captive_portal.h +20 -22
  46. esphome/components/captive_portal/dns_server_esp32_idf.cpp +205 -0
  47. esphome/components/captive_portal/dns_server_esp32_idf.h +27 -0
  48. esphome/components/ccs811/ccs811.cpp +1 -1
  49. esphome/components/climate/climate.cpp +10 -7
  50. esphome/components/cm1106/cm1106.cpp +1 -1
  51. esphome/components/copy/lock/copy_lock.cpp +1 -1
  52. esphome/components/cover/cover.cpp +1 -0
  53. esphome/components/daikin_arc/daikin_arc.cpp +19 -12
  54. esphome/components/dashboard_import/dashboard_import.cpp +1 -1
  55. esphome/components/dashboard_import/dashboard_import.h +1 -1
  56. esphome/components/deep_sleep/__init__.py +9 -2
  57. esphome/components/deep_sleep/deep_sleep_component.h +11 -9
  58. esphome/components/deep_sleep/deep_sleep_esp32.cpp +51 -27
  59. esphome/components/ektf2232/touchscreen/__init__.py +8 -5
  60. esphome/components/ektf2232/touchscreen/ektf2232.cpp +4 -4
  61. esphome/components/ektf2232/touchscreen/ektf2232.h +2 -2
  62. esphome/components/epaper_spi/__init__.py +1 -0
  63. esphome/components/epaper_spi/display.py +80 -0
  64. esphome/components/epaper_spi/epaper_spi.cpp +227 -0
  65. esphome/components/epaper_spi/epaper_spi.h +93 -0
  66. esphome/components/epaper_spi/epaper_spi_model_7p3in_spectra_e6.cpp +42 -0
  67. esphome/components/epaper_spi/epaper_spi_model_7p3in_spectra_e6.h +45 -0
  68. esphome/components/epaper_spi/epaper_spi_spectra_e6.cpp +135 -0
  69. esphome/components/epaper_spi/epaper_spi_spectra_e6.h +23 -0
  70. esphome/components/es7210/es7210.cpp +3 -3
  71. esphome/components/esp32/__init__.py +256 -340
  72. esphome/components/esp32/boards.py +81 -0
  73. esphome/components/esp32/preferences.cpp +23 -17
  74. esphome/components/esp32_ble/__init__.py +167 -44
  75. esphome/components/esp32_ble/ble.cpp +47 -3
  76. esphome/components/esp32_ble/ble.h +18 -0
  77. esphome/components/esp32_ble/ble_advertising.cpp +7 -3
  78. esphome/components/esp32_ble/ble_advertising.h +4 -0
  79. esphome/components/esp32_ble/ble_uuid.cpp +16 -42
  80. esphome/components/esp32_ble_beacon/__init__.py +3 -4
  81. esphome/components/esp32_ble_beacon/esp32_ble_beacon.cpp +0 -4
  82. esphome/components/esp32_ble_client/ble_client_base.cpp +14 -12
  83. esphome/components/esp32_ble_server/__init__.py +28 -14
  84. esphome/components/esp32_ble_server/ble_characteristic.cpp +67 -57
  85. esphome/components/esp32_ble_server/ble_characteristic.h +27 -16
  86. esphome/components/esp32_ble_server/ble_descriptor.cpp +4 -3
  87. esphome/components/esp32_ble_server/ble_descriptor.h +13 -9
  88. esphome/components/esp32_ble_server/ble_server.cpp +59 -24
  89. esphome/components/esp32_ble_server/ble_server.h +38 -20
  90. esphome/components/esp32_ble_server/ble_server_automations.cpp +49 -33
  91. esphome/components/esp32_ble_server/ble_server_automations.h +39 -24
  92. esphome/components/esp32_ble_tracker/__init__.py +25 -80
  93. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +2 -8
  94. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +0 -3
  95. esphome/components/esp32_camera/__init__.py +1 -3
  96. esphome/components/esp32_can/esp32_can.cpp +22 -4
  97. esphome/components/esp32_can/esp32_can.h +3 -0
  98. esphome/components/esp32_hosted/__init__.py +2 -1
  99. esphome/components/esp32_improv/esp32_improv_component.cpp +135 -65
  100. esphome/components/esp32_improv/esp32_improv_component.h +7 -1
  101. esphome/components/esp32_rmt_led_strip/led_strip.cpp +1 -1
  102. esphome/components/esp8266/__init__.py +3 -3
  103. esphome/components/esphome/ota/__init__.py +21 -2
  104. esphome/components/esphome/ota/ota_esphome.cpp +456 -146
  105. esphome/components/esphome/ota/ota_esphome.h +49 -2
  106. esphome/components/ethernet/__init__.py +39 -22
  107. esphome/components/ethernet/ethernet_component.cpp +28 -5
  108. esphome/components/ethernet/ethernet_component.h +5 -1
  109. esphome/components/external_components/__init__.py +8 -6
  110. esphome/components/fingerprint_grow/fingerprint_grow.cpp +1 -1
  111. esphome/components/fingerprint_grow/fingerprint_grow.h +2 -1
  112. esphome/components/font/__init__.py +5 -5
  113. esphome/components/graph/graph.cpp +1 -1
  114. esphome/components/graphical_display_menu/graphical_display_menu.cpp +3 -2
  115. esphome/components/haier/hon_climate.cpp +2 -2
  116. esphome/components/haier/hon_climate.h +1 -1
  117. esphome/components/hdc1080/hdc1080.cpp +42 -34
  118. esphome/components/hdc1080/hdc1080.h +1 -3
  119. esphome/components/homeassistant/number/homeassistant_number.cpp +2 -2
  120. esphome/components/homeassistant/switch/homeassistant_switch.cpp +2 -2
  121. esphome/components/http_request/__init__.py +3 -3
  122. esphome/components/htu21d/htu21d.cpp +13 -18
  123. esphome/components/htu21d/htu21d.h +1 -1
  124. esphome/components/i2s_audio/__init__.py +1 -2
  125. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +1 -1
  126. esphome/components/ili9xxx/ili9xxx_display.cpp +2 -2
  127. esphome/components/improv_serial/improv_serial_component.cpp +12 -15
  128. esphome/components/improv_serial/improv_serial_component.h +6 -8
  129. esphome/components/json/json_util.cpp +42 -44
  130. esphome/components/json/json_util.h +57 -0
  131. esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +2 -2
  132. esphome/components/key_collector/key_collector.h +4 -4
  133. esphome/components/libretiny/__init__.py +6 -6
  134. esphome/components/libretiny/preferences.cpp +23 -16
  135. esphome/components/light/light_call.cpp +98 -120
  136. esphome/components/light/light_call.h +17 -7
  137. esphome/components/lm75b/__init__.py +0 -0
  138. esphome/components/lm75b/lm75b.cpp +39 -0
  139. esphome/components/lm75b/lm75b.h +19 -0
  140. esphome/components/lm75b/sensor.py +34 -0
  141. esphome/components/lock/lock.h +12 -6
  142. esphome/components/logger/__init__.py +15 -27
  143. esphome/components/logger/logger.cpp +10 -20
  144. esphome/components/logger/logger.h +105 -62
  145. esphome/components/logger/logger_esp32.cpp +0 -48
  146. esphome/components/logger/logger_zephyr.cpp +2 -3
  147. esphome/components/logger/select/logger_level_select.cpp +6 -7
  148. esphome/components/logger/select/logger_level_select.h +7 -0
  149. esphome/components/ltr501/ltr501.cpp +7 -6
  150. esphome/components/ltr_als_ps/ltr_als_ps.cpp +7 -6
  151. esphome/components/matrix_keypad/matrix_keypad.h +4 -4
  152. esphome/components/max7219digit/max7219digit.cpp +1 -1
  153. esphome/components/mcp23xxx_base/mcp23xxx_base.h +3 -3
  154. esphome/components/mcp2515/mcp2515.cpp +31 -3
  155. esphome/components/mcp2515/mcp2515_defs.h +3 -1
  156. esphome/components/md5/md5.cpp +0 -26
  157. esphome/components/md5/md5.h +10 -20
  158. esphome/components/mdns/__init__.py +93 -19
  159. esphome/components/mdns/mdns_component.cpp +57 -94
  160. esphome/components/mdns/mdns_component.h +35 -11
  161. esphome/components/mdns/mdns_esp32.cpp +7 -13
  162. esphome/components/mdns/mdns_esp8266.cpp +7 -7
  163. esphome/components/mdns/mdns_libretiny.cpp +3 -4
  164. esphome/components/mdns/mdns_rp2040.cpp +3 -4
  165. esphome/components/mipi/__init__.py +1 -5
  166. esphome/components/mipi_dsi/models/waveshare.py +27 -36
  167. esphome/components/mipi_spi/display.py +24 -8
  168. esphome/components/mipi_spi/mipi_spi.h +3 -3
  169. esphome/components/mixer/speaker/mixer_speaker.cpp +3 -3
  170. esphome/components/mmc5603/mmc5603.cpp +3 -3
  171. esphome/components/modbus/modbus.cpp +27 -13
  172. esphome/components/modbus/modbus.h +5 -3
  173. esphome/components/modbus/modbus_definitions.h +86 -0
  174. esphome/components/modbus_controller/__init__.py +29 -1
  175. esphome/components/modbus_controller/const.py +4 -0
  176. esphome/components/modbus_controller/modbus_controller.cpp +38 -13
  177. esphome/components/modbus_controller/modbus_controller.h +18 -29
  178. esphome/components/mpr121/mpr121.cpp +41 -42
  179. esphome/components/mpr121/mpr121.h +0 -1
  180. esphome/components/nau7802/nau7802.cpp +2 -2
  181. esphome/components/network/__init__.py +7 -3
  182. esphome/components/nextion/display.py +4 -4
  183. esphome/components/nextion/nextion.cpp +8 -8
  184. esphome/components/number/__init__.py +2 -0
  185. esphome/components/number/number_call.cpp +23 -12
  186. esphome/components/number/number_call.h +5 -0
  187. esphome/components/online_image/bmp_image.cpp +2 -1
  188. esphome/components/online_image/jpeg_image.cpp +4 -2
  189. esphome/components/opentherm/opentherm.cpp +5 -5
  190. esphome/components/opentherm/opentherm.h +3 -3
  191. esphome/components/openthread/openthread.cpp +11 -10
  192. esphome/components/openthread/openthread.h +0 -1
  193. esphome/components/ota/ota_backend.h +1 -0
  194. esphome/components/packages/__init__.py +10 -8
  195. esphome/components/packet_transport/packet_transport.cpp +2 -0
  196. esphome/components/pid/pid_controller.cpp +1 -1
  197. esphome/components/prometheus/prometheus_handler.cpp +239 -239
  198. esphome/components/psram/__init__.py +32 -28
  199. esphome/components/qmc5883l/qmc5883l.cpp +15 -0
  200. esphome/components/qmc5883l/qmc5883l.h +3 -0
  201. esphome/components/qmc5883l/sensor.py +31 -12
  202. esphome/components/remote_base/gobox_protocol.cpp +3 -3
  203. esphome/components/remote_receiver/__init__.py +14 -2
  204. esphome/components/remote_receiver/{remote_receiver_esp8266.cpp → remote_receiver.cpp} +2 -2
  205. esphome/components/remote_receiver/remote_receiver.h +4 -0
  206. esphome/components/remote_receiver/remote_receiver_esp32.cpp +18 -1
  207. esphome/components/remote_transmitter/__init__.py +2 -2
  208. esphome/components/remote_transmitter/remote_transmitter.cpp +103 -0
  209. esphome/components/rp2040/__init__.py +11 -11
  210. esphome/components/rtttl/rtttl.cpp +2 -2
  211. esphome/components/scd30/sensor.py +1 -1
  212. esphome/components/script/__init__.py +1 -1
  213. esphome/components/script/script.h +7 -7
  214. esphome/components/select/select.cpp +5 -4
  215. esphome/components/select/select_call.cpp +1 -1
  216. esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
  217. esphome/components/sensor/__init__.py +2 -0
  218. esphome/components/sha256/__init__.py +22 -0
  219. esphome/components/sha256/sha256.cpp +116 -0
  220. esphome/components/sha256/sha256.h +60 -0
  221. esphome/components/socket/lwip_raw_tcp_impl.cpp +34 -6
  222. esphome/components/sonoff_d1/sonoff_d1.cpp +1 -1
  223. esphome/components/speaker/media_player/__init__.py +16 -3
  224. esphome/components/spi/__init__.py +0 -3
  225. esphome/components/split_buffer/__init__.py +5 -0
  226. esphome/components/split_buffer/split_buffer.cpp +133 -0
  227. esphome/components/split_buffer/split_buffer.h +40 -0
  228. esphome/components/sps30/sps30.cpp +14 -10
  229. esphome/components/sps30/sps30.h +2 -0
  230. esphome/components/st7567_i2c/st7567_i2c.cpp +3 -1
  231. esphome/components/st7789v/st7789v.cpp +3 -2
  232. esphome/components/statsd/statsd.cpp +1 -1
  233. esphome/components/substitutions/__init__.py +3 -1
  234. esphome/components/substitutions/jinja.py +13 -3
  235. esphome/components/sx126x/__init__.py +16 -0
  236. esphome/components/sx126x/sx126x.cpp +15 -1
  237. esphome/components/sx126x/sx126x.h +9 -1
  238. esphome/components/sx126x/sx126x_reg.h +2 -0
  239. esphome/components/text_sensor/text_sensor.cpp +16 -0
  240. esphome/components/text_sensor/text_sensor.h +3 -10
  241. esphome/components/tormatic/tormatic_cover.cpp +1 -1
  242. esphome/components/tuya/select/tuya_select.cpp +1 -1
  243. esphome/components/tuya/tuya.cpp +29 -4
  244. esphome/components/uart/__init__.py +37 -27
  245. esphome/components/uart/uart.h +6 -0
  246. esphome/components/uart/uart_component.cpp +8 -0
  247. esphome/components/uart/uart_component.h +28 -0
  248. esphome/components/uart/uart_component_esp_idf.cpp +64 -10
  249. esphome/components/uart/uart_component_esp_idf.h +5 -2
  250. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
  251. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +1 -1
  252. esphome/components/uponor_smatrix/uponor_smatrix.cpp +3 -3
  253. esphome/components/usb_host/__init__.py +12 -2
  254. esphome/components/usb_host/usb_host.h +89 -14
  255. esphome/components/usb_host/usb_host_client.cpp +157 -22
  256. esphome/components/usb_host/usb_host_component.cpp +1 -1
  257. esphome/components/usb_uart/__init__.py +0 -1
  258. esphome/components/usb_uart/ch34x.cpp +4 -4
  259. esphome/components/usb_uart/cp210x.cpp +3 -3
  260. esphome/components/usb_uart/usb_uart.cpp +88 -32
  261. esphome/components/usb_uart/usb_uart.h +30 -6
  262. esphome/components/valve/valve.cpp +1 -0
  263. esphome/components/veml7700/veml7700.cpp +7 -6
  264. esphome/components/version/version_text_sensor.cpp +2 -1
  265. esphome/components/voice_assistant/voice_assistant.cpp +3 -2
  266. esphome/components/waveshare_epaper/waveshare_epaper.cpp +4 -4
  267. esphome/components/web_server/list_entities.cpp +3 -4
  268. esphome/components/web_server/list_entities.h +8 -10
  269. esphome/components/web_server/ota/__init__.py +1 -1
  270. esphome/components/web_server/ota/ota_web_server.cpp +9 -3
  271. esphome/components/web_server/web_server.cpp +509 -404
  272. esphome/components/web_server/web_server.h +5 -6
  273. esphome/components/web_server/web_server_v1.cpp +21 -19
  274. esphome/components/web_server_base/__init__.py +5 -2
  275. esphome/components/web_server_base/web_server_base.h +27 -7
  276. esphome/components/web_server_idf/__init__.py +1 -1
  277. esphome/components/web_server_idf/multipart.cpp +2 -2
  278. esphome/components/web_server_idf/multipart.h +2 -2
  279. esphome/components/web_server_idf/utils.cpp +2 -2
  280. esphome/components/web_server_idf/utils.h +2 -2
  281. esphome/components/web_server_idf/web_server_idf.cpp +118 -26
  282. esphome/components/web_server_idf/web_server_idf.h +12 -10
  283. esphome/components/wifi/__init__.py +13 -11
  284. esphome/components/wifi/wifi_component.cpp +74 -56
  285. esphome/components/wifi/wifi_component.h +4 -4
  286. esphome/components/wifi/wifi_component_esp8266.cpp +1 -1
  287. esphome/components/wifi/wifi_component_esp_idf.cpp +24 -4
  288. esphome/components/wireguard/__init__.py +1 -1
  289. esphome/components/wts01/__init__.py +0 -0
  290. esphome/components/wts01/sensor.py +41 -0
  291. esphome/components/wts01/wts01.cpp +91 -0
  292. esphome/components/wts01/wts01.h +27 -0
  293. esphome/components/zephyr/__init__.py +5 -5
  294. esphome/components/zwave_proxy/__init__.py +43 -0
  295. esphome/components/zwave_proxy/zwave_proxy.cpp +346 -0
  296. esphome/components/zwave_proxy/zwave_proxy.h +93 -0
  297. esphome/config.py +79 -24
  298. esphome/config_validation.py +13 -15
  299. esphome/const.py +9 -2
  300. esphome/core/__init__.py +33 -22
  301. esphome/core/component.cpp +28 -18
  302. esphome/core/component_iterator.h +2 -1
  303. esphome/core/config.py +15 -15
  304. esphome/core/defines.h +21 -0
  305. esphome/core/entity_helpers.py +9 -6
  306. esphome/core/hash_base.h +56 -0
  307. esphome/core/helpers.cpp +19 -3
  308. esphome/core/helpers.h +26 -0
  309. esphome/core/scheduler.cpp +5 -21
  310. esphome/core/scheduler.h +19 -8
  311. esphome/core/string_ref.h +1 -1
  312. esphome/core/time.cpp +5 -5
  313. esphome/cpp_generator.py +4 -29
  314. esphome/dashboard/const.py +21 -4
  315. esphome/dashboard/core.py +10 -8
  316. esphome/dashboard/dns.py +15 -0
  317. esphome/dashboard/entries.py +15 -21
  318. esphome/dashboard/models.py +76 -0
  319. esphome/dashboard/settings.py +7 -7
  320. esphome/dashboard/status/mdns.py +46 -2
  321. esphome/dashboard/web_server.py +367 -93
  322. esphome/espota2.py +112 -32
  323. esphome/external_files.py +6 -7
  324. esphome/git.py +8 -0
  325. esphome/helpers.py +124 -77
  326. esphome/loader.py +8 -9
  327. esphome/pins.py +2 -2
  328. esphome/platformio_api.py +56 -18
  329. esphome/storage_json.py +26 -21
  330. esphome/types.py +30 -2
  331. esphome/util.py +32 -16
  332. esphome/vscode.py +8 -8
  333. esphome/wizard.py +10 -10
  334. esphome/writer.py +57 -15
  335. esphome/yaml_util.py +37 -31
  336. esphome/zeroconf.py +12 -3
  337. {esphome-2025.9.3.dist-info → esphome-2025.10.0.dist-info}/METADATA +12 -12
  338. {esphome-2025.9.3.dist-info → esphome-2025.10.0.dist-info}/RECORD +342 -322
  339. esphome/components/event_emitter/__init__.py +0 -5
  340. esphome/components/event_emitter/event_emitter.cpp +0 -14
  341. esphome/components/event_emitter/event_emitter.h +0 -63
  342. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +0 -125
  343. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +0 -107
  344. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +0 -110
  345. esphome/components/uart/uart_component_esp32_arduino.cpp +0 -214
  346. esphome/components/uart/uart_component_esp32_arduino.h +0 -60
  347. esphome/components/wifi/wifi_component_esp32_arduino.cpp +0 -860
  348. esphome/core/string_ref.cpp +0 -12
  349. esphome/dashboard/util/file.py +0 -63
  350. {esphome-2025.9.3.dist-info → esphome-2025.10.0.dist-info}/WHEEL +0 -0
  351. {esphome-2025.9.3.dist-info → esphome-2025.10.0.dist-info}/entry_points.txt +0 -0
  352. {esphome-2025.9.3.dist-info → esphome-2025.10.0.dist-info}/licenses/LICENSE +0 -0
  353. {esphome-2025.9.3.dist-info → esphome-2025.10.0.dist-info}/top_level.txt +0 -0
@@ -12,7 +12,7 @@
12
12
  #include "esphome/core/helpers.h"
13
13
  #include "esphome/core/log.h"
14
14
 
15
- #if defined(ESP32) || defined(USE_ESP_IDF)
15
+ #ifdef USE_ESP32
16
16
  #include "driver/timer.h"
17
17
  #endif
18
18
 
@@ -356,7 +356,7 @@ class OpenTherm {
356
356
  ISRInternalGPIOPin isr_in_pin_;
357
357
  ISRInternalGPIOPin isr_out_pin_;
358
358
 
359
- #if defined(ESP32) || defined(USE_ESP_IDF)
359
+ #ifdef USE_ESP32
360
360
  timer_group_t timer_group_;
361
361
  timer_idx_t timer_idx_;
362
362
  #endif
@@ -370,7 +370,7 @@ class OpenTherm {
370
370
  int32_t timeout_counter_; // <0 no timeout
371
371
  int32_t device_timeout_;
372
372
 
373
- #if defined(ESP32) || defined(USE_ESP_IDF)
373
+ #ifdef USE_ESP32
374
374
  esp_err_t timer_error_ = ESP_OK;
375
375
  TimerErrorType timer_error_type_ = TimerErrorType::NO_TIMER_ERROR;
376
376
 
@@ -143,11 +143,10 @@ void OpenThreadSrpComponent::setup() {
143
143
  return;
144
144
  }
145
145
 
146
- // Copy the mdns services to our local instance so that the c_str pointers remain valid for the lifetime of this
147
- // component
148
- this->mdns_services_ = this->mdns_->get_services();
149
- ESP_LOGD(TAG, "Setting up SRP services. count = %d\n", this->mdns_services_.size());
150
- for (const auto &service : this->mdns_services_) {
146
+ // Get mdns services and copy their data (strings are copied with strdup below)
147
+ const auto &mdns_services = this->mdns_->get_services();
148
+ ESP_LOGD(TAG, "Setting up SRP services. count = %d\n", mdns_services.size());
149
+ for (const auto &service : mdns_services) {
151
150
  otSrpClientBuffersServiceEntry *entry = otSrpClientBuffersAllocateService(instance);
152
151
  if (!entry) {
153
152
  ESP_LOGW(TAG, "Failed to allocate service entry");
@@ -156,7 +155,7 @@ void OpenThreadSrpComponent::setup() {
156
155
 
157
156
  // Set service name
158
157
  char *string = otSrpClientBuffersGetServiceEntryServiceNameString(entry, &size);
159
- std::string full_service = service.service_type + "." + service.proto;
158
+ std::string full_service = std::string(MDNS_STR_ARG(service.service_type)) + "." + MDNS_STR_ARG(service.proto);
160
159
  if (full_service.size() > size) {
161
160
  ESP_LOGW(TAG, "Service name too long: %s", full_service.c_str());
162
161
  continue;
@@ -181,10 +180,12 @@ void OpenThreadSrpComponent::setup() {
181
180
  entry->mService.mNumTxtEntries = service.txt_records.size();
182
181
  for (size_t i = 0; i < service.txt_records.size(); i++) {
183
182
  const auto &txt = service.txt_records[i];
184
- auto value = const_cast<TemplatableValue<std::string> &>(txt.value).value();
185
- txt_entries[i].mKey = strdup(txt.key.c_str());
186
- txt_entries[i].mValue = reinterpret_cast<const uint8_t *>(strdup(value.c_str()));
187
- txt_entries[i].mValueLength = value.size();
183
+ // Value is either a compile-time string literal in flash or a pointer to dynamic_txt_values_
184
+ // OpenThread SRP client expects the data to persist, so we strdup it
185
+ const char *value_str = MDNS_STR_ARG(txt.value);
186
+ txt_entries[i].mKey = MDNS_STR_ARG(txt.key);
187
+ txt_entries[i].mValue = reinterpret_cast<const uint8_t *>(strdup(value_str));
188
+ txt_entries[i].mValueLength = strlen(value_str);
188
189
  }
189
190
  entry->mService.mTxtEntries = txt_entries;
190
191
  entry->mService.mNumTxtEntries = service.txt_records.size();
@@ -57,7 +57,6 @@ class OpenThreadSrpComponent : public Component {
57
57
 
58
58
  protected:
59
59
  esphome::mdns::MDNSComponent *mdns_{nullptr};
60
- std::vector<esphome::mdns::MDNSService> mdns_services_;
61
60
  std::vector<std::unique_ptr<uint8_t[]>> memory_pool_;
62
61
  void *pool_alloc_(size_t size);
63
62
  };
@@ -14,6 +14,7 @@ namespace ota {
14
14
  enum OTAResponseTypes {
15
15
  OTA_RESPONSE_OK = 0x00,
16
16
  OTA_RESPONSE_REQUEST_AUTH = 0x01,
17
+ OTA_RESPONSE_REQUEST_SHA256_AUTH = 0x02,
17
18
 
18
19
  OTA_RESPONSE_HEADER_OK = 0x40,
19
20
  OTA_RESPONSE_AUTH_OK = 0x41,
@@ -106,11 +106,13 @@ CONFIG_SCHEMA = cv.Any(
106
106
  )
107
107
 
108
108
 
109
- def _process_base_package(config: dict) -> dict:
109
+ def _process_base_package(config: dict, skip_update: bool = False) -> dict:
110
+ # When skip_update is True, use NEVER_REFRESH to prevent updates
111
+ actual_refresh = git.NEVER_REFRESH if skip_update else config[CONF_REFRESH]
110
112
  repo_dir, revert = git.clone_or_update(
111
113
  url=config[CONF_URL],
112
114
  ref=config.get(CONF_REF),
113
- refresh=config[CONF_REFRESH],
115
+ refresh=actual_refresh,
114
116
  domain=DOMAIN,
115
117
  username=config.get(CONF_USERNAME),
116
118
  password=config.get(CONF_PASSWORD),
@@ -180,16 +182,16 @@ def _process_base_package(config: dict) -> dict:
180
182
  return {"packages": packages}
181
183
 
182
184
 
183
- def _process_package(package_config, config):
185
+ def _process_package(package_config, config, skip_update: bool = False):
184
186
  recursive_package = package_config
185
187
  if CONF_URL in package_config:
186
- package_config = _process_base_package(package_config)
188
+ package_config = _process_base_package(package_config, skip_update)
187
189
  if isinstance(package_config, dict):
188
- recursive_package = do_packages_pass(package_config)
190
+ recursive_package = do_packages_pass(package_config, skip_update)
189
191
  return merge_config(recursive_package, config)
190
192
 
191
193
 
192
- def do_packages_pass(config: dict):
194
+ def do_packages_pass(config: dict, skip_update: bool = False):
193
195
  if CONF_PACKAGES not in config:
194
196
  return config
195
197
  packages = config[CONF_PACKAGES]
@@ -198,10 +200,10 @@ def do_packages_pass(config: dict):
198
200
  if isinstance(packages, dict):
199
201
  for package_name, package_config in reversed(packages.items()):
200
202
  with cv.prepend_path(package_name):
201
- config = _process_package(package_config, config)
203
+ config = _process_package(package_config, config, skip_update)
202
204
  elif isinstance(packages, list):
203
205
  for package_config in reversed(packages):
204
- config = _process_package(package_config, config)
206
+ config = _process_package(package_config, config, skip_update)
205
207
  else:
206
208
  raise cv.Invalid(
207
209
  f"Packages must be a key to value mapping or list, got {type(packages)} instead"
@@ -270,6 +270,7 @@ void PacketTransport::add_binary_data_(uint8_t key, const char *id, bool data) {
270
270
  auto len = 1 + 1 + 1 + strlen(id);
271
271
  if (len + this->header_.size() + this->data_.size() > this->get_max_packet_size()) {
272
272
  this->flush_();
273
+ this->init_data_();
273
274
  }
274
275
  add(this->data_, key);
275
276
  add(this->data_, (uint8_t) data);
@@ -284,6 +285,7 @@ void PacketTransport::add_data_(uint8_t key, const char *id, uint32_t data) {
284
285
  auto len = 4 + 1 + 1 + strlen(id);
285
286
  if (len + this->header_.size() + this->data_.size() > this->get_max_packet_size()) {
286
287
  this->flush_();
288
+ this->init_data_();
287
289
  }
288
290
  add(this->data_, key);
289
291
  add(this->data_, data);
@@ -104,7 +104,7 @@ float PIDController::weighted_average_(std::deque<float> &list, float new_value,
104
104
  list.push_front(new_value);
105
105
 
106
106
  // keep only 'samples' readings, by popping off the back of the list
107
- while (list.size() > samples)
107
+ while (samples > 0 && list.size() > static_cast<size_t>(samples))
108
108
  list.pop_back();
109
109
 
110
110
  // calculate and return the average of all values in the list