esphome 2024.12.4__py3-none-any.whl → 2025.2.0b1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (355) hide show
  1. esphome/__main__.py +16 -3
  2. esphome/components/adc/__init__.py +17 -11
  3. esphome/components/adc/adc_sensor.h +17 -0
  4. esphome/components/adc/adc_sensor_common.cpp +55 -0
  5. esphome/components/adc/adc_sensor_esp32.cpp +8 -5
  6. esphome/components/adc/adc_sensor_esp8266.cpp +10 -6
  7. esphome/components/adc/adc_sensor_libretiny.cpp +11 -6
  8. esphome/components/adc/adc_sensor_rp2040.cpp +13 -10
  9. esphome/components/adc/sensor.py +9 -3
  10. esphome/components/ads1115/ads1115.cpp +56 -7
  11. esphome/components/ads1115/ads1115.h +13 -1
  12. esphome/components/ads1115/sensor/__init__.py +16 -0
  13. esphome/components/ads1115/sensor/ads1115_sensor.cpp +2 -1
  14. esphome/components/ads1115/sensor/ads1115_sensor.h +2 -0
  15. esphome/components/animation/__init__.py +23 -261
  16. esphome/components/animation/animation.cpp +2 -2
  17. esphome/components/animation/animation.h +2 -1
  18. esphome/components/api/api_pb2.cpp +14 -0
  19. esphome/components/api/api_pb2.h +1 -0
  20. esphome/components/audio/__init__.py +112 -0
  21. esphome/components/audio/audio.cpp +67 -0
  22. esphome/components/audio/audio.h +125 -7
  23. esphome/components/audio/audio_decoder.cpp +361 -0
  24. esphome/components/audio/audio_decoder.h +135 -0
  25. esphome/components/audio/audio_reader.cpp +308 -0
  26. esphome/components/audio/audio_reader.h +85 -0
  27. esphome/components/audio/audio_resampler.cpp +159 -0
  28. esphome/components/audio/audio_resampler.h +101 -0
  29. esphome/components/audio/audio_transfer_buffer.cpp +165 -0
  30. esphome/components/audio/audio_transfer_buffer.h +139 -0
  31. esphome/components/audio_adc/__init__.py +41 -0
  32. esphome/components/audio_adc/audio_adc.h +17 -0
  33. esphome/components/audio_adc/automation.h +23 -0
  34. esphome/components/bk72xx/__init__.py +1 -0
  35. esphome/components/ble_client/ble_client.cpp +1 -2
  36. esphome/components/ble_client/sensor/__init__.py +1 -1
  37. esphome/components/ble_client/text_sensor/__init__.py +1 -1
  38. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +5 -0
  39. esphome/components/bluetooth_proxy/bluetooth_connection.h +1 -0
  40. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +5 -0
  41. esphome/components/ch422g/ch422g.h +2 -0
  42. esphome/components/climate/__init__.py +1 -1
  43. esphome/components/climate_ir/climate_ir.cpp +2 -1
  44. esphome/components/coolix/coolix.cpp +2 -1
  45. esphome/components/custom/__init__.py +0 -3
  46. esphome/components/custom/binary_sensor/__init__.py +2 -28
  47. esphome/components/custom/climate/__init__.py +2 -27
  48. esphome/components/custom/cover/__init__.py +2 -27
  49. esphome/components/custom/light/__init__.py +2 -27
  50. esphome/components/custom/output/__init__.py +2 -58
  51. esphome/components/custom/sensor/__init__.py +2 -24
  52. esphome/components/custom/switch/__init__.py +2 -24
  53. esphome/components/custom/text_sensor/__init__.py +2 -29
  54. esphome/components/custom_component/__init__.py +3 -27
  55. esphome/components/daly_bms/daly_bms.cpp +6 -0
  56. esphome/components/daly_bms/daly_bms.h +2 -0
  57. esphome/components/daly_bms/sensor.py +6 -0
  58. esphome/components/debug/debug_component.cpp +4 -0
  59. esphome/components/debug/debug_component.h +14 -0
  60. esphome/components/debug/debug_esp32.cpp +154 -74
  61. esphome/components/dfplayer/dfplayer.cpp +15 -2
  62. esphome/components/dfrobot_sen0395/dfrobot_sen0395.cpp +2 -1
  63. esphome/components/dht/dht.cpp +2 -1
  64. esphome/components/display/__init__.py +18 -5
  65. esphome/components/display/display.cpp +2 -1
  66. esphome/components/display/rect.cpp +2 -1
  67. esphome/components/es7210/__init__.py +0 -0
  68. esphome/components/es7210/audio_adc.py +51 -0
  69. esphome/components/es7210/es7210.cpp +228 -0
  70. esphome/components/es7210/es7210.h +62 -0
  71. esphome/components/es7210/es7210_const.h +129 -0
  72. esphome/components/es7243e/__init__.py +0 -0
  73. esphome/components/es7243e/audio_adc.py +34 -0
  74. esphome/components/es7243e/es7243e.cpp +125 -0
  75. esphome/components/es7243e/es7243e.h +37 -0
  76. esphome/components/es7243e/es7243e_const.h +54 -0
  77. esphome/components/es8156/__init__.py +0 -0
  78. esphome/components/es8156/audio_dac.py +27 -0
  79. esphome/components/es8156/es8156.cpp +87 -0
  80. esphome/components/es8156/es8156.h +51 -0
  81. esphome/components/es8156/es8156_const.h +68 -0
  82. esphome/components/es8311/audio_dac.py +1 -2
  83. esphome/components/esp32/__init__.py +1 -0
  84. esphome/components/esp32/core.cpp +5 -1
  85. esphome/components/esp32/gpio.h +2 -0
  86. esphome/components/esp32_ble/__init__.py +39 -0
  87. esphome/components/esp32_ble/queue.h +4 -4
  88. esphome/components/esp32_ble_client/ble_client_base.cpp +46 -0
  89. esphome/components/esp32_ble_client/ble_client_base.h +2 -0
  90. esphome/components/esp32_ble_server/__init__.py +582 -12
  91. esphome/components/esp32_ble_server/ble_characteristic.cpp +48 -60
  92. esphome/components/esp32_ble_server/ble_characteristic.h +24 -17
  93. esphome/components/esp32_ble_server/ble_descriptor.cpp +21 -9
  94. esphome/components/esp32_ble_server/ble_descriptor.h +17 -6
  95. esphome/components/esp32_ble_server/ble_server.cpp +62 -67
  96. esphome/components/esp32_ble_server/ble_server.h +28 -32
  97. esphome/components/esp32_ble_server/ble_server_automations.cpp +77 -0
  98. esphome/components/esp32_ble_server/ble_server_automations.h +115 -0
  99. esphome/components/esp32_ble_server/ble_service.cpp +17 -15
  100. esphome/components/esp32_ble_server/ble_service.h +10 -14
  101. esphome/components/esp32_ble_tracker/__init__.py +6 -39
  102. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +33 -10
  103. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +8 -4
  104. esphome/components/esp32_improv/__init__.py +2 -8
  105. esphome/components/esp32_improv/esp32_improv_component.cpp +21 -20
  106. esphome/components/esp32_improv/esp32_improv_component.h +3 -4
  107. esphome/components/esp32_rmt/__init__.py +28 -3
  108. esphome/components/esp32_rmt_led_strip/led_strip.cpp +73 -6
  109. esphome/components/esp32_rmt_led_strip/led_strip.h +21 -3
  110. esphome/components/esp32_rmt_led_strip/light.py +72 -7
  111. esphome/components/esp32_touch/esp32_touch.cpp +5 -0
  112. esphome/components/esp8266/__init__.py +1 -0
  113. esphome/components/esp8266/gpio.h +1 -0
  114. esphome/components/ethernet/__init__.py +10 -10
  115. esphome/components/event/event.cpp +4 -2
  116. esphome/components/event/event.h +2 -0
  117. esphome/components/event_emitter/__init__.py +5 -0
  118. esphome/components/event_emitter/event_emitter.cpp +14 -0
  119. esphome/components/event_emitter/event_emitter.h +63 -0
  120. esphome/components/gcja5/gcja5.cpp +2 -1
  121. esphome/components/haier/haier_base.cpp +2 -1
  122. esphome/components/haier/hon_climate.cpp +2 -1
  123. esphome/components/heatpumpir/heatpumpir.cpp +2 -1
  124. esphome/components/host/__init__.py +1 -0
  125. esphome/components/host/gpio.h +1 -0
  126. esphome/components/http_request/http_request.h +2 -2
  127. esphome/components/http_request/http_request_arduino.cpp +1 -1
  128. esphome/components/http_request/http_request_idf.cpp +1 -1
  129. esphome/components/i2c/i2c_bus_esp_idf.cpp +4 -0
  130. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +7 -5
  131. esphome/components/i2s_audio/speaker/__init__.py +53 -6
  132. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +92 -46
  133. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +8 -0
  134. esphome/components/ili9xxx/display.py +29 -11
  135. esphome/components/ili9xxx/ili9xxx_display.cpp +2 -5
  136. esphome/components/ili9xxx/ili9xxx_display.h +2 -1
  137. esphome/components/image/__init__.py +443 -255
  138. esphome/components/image/image.cpp +115 -61
  139. esphome/components/image/image.h +15 -24
  140. esphome/components/json/json_util.cpp +8 -34
  141. esphome/components/libretiny/__init__.py +1 -0
  142. esphome/components/libretiny/gpio_arduino.h +1 -0
  143. esphome/components/light/light_color_values.h +1 -1
  144. esphome/components/logger/__init__.py +43 -7
  145. esphome/components/logger/logger.cpp +16 -11
  146. esphome/components/logger/logger.h +11 -7
  147. esphome/components/logger/select/__init__.py +29 -0
  148. esphome/components/logger/select/logger_level_select.cpp +27 -0
  149. esphome/components/logger/select/logger_level_select.h +15 -0
  150. esphome/components/lvgl/__init__.py +96 -73
  151. esphome/components/lvgl/automation.py +39 -7
  152. esphome/components/lvgl/defines.py +8 -2
  153. esphome/components/lvgl/lvgl_esphome.cpp +8 -15
  154. esphome/components/lvgl/lvgl_esphome.h +20 -5
  155. esphome/components/lvgl/schemas.py +25 -14
  156. esphome/components/lvgl/trigger.py +27 -3
  157. esphome/components/lvgl/widgets/dropdown.py +1 -1
  158. esphome/components/lvgl/widgets/keyboard.py +8 -1
  159. esphome/components/lvgl/widgets/meter.py +2 -1
  160. esphome/components/lvgl/widgets/msgbox.py +1 -1
  161. esphome/components/lvgl/widgets/obj.py +1 -12
  162. esphome/components/lvgl/widgets/page.py +37 -2
  163. esphome/components/lvgl/widgets/tabview.py +1 -1
  164. esphome/components/max6956/max6956.h +2 -0
  165. esphome/components/mcp23016/mcp23016.h +2 -0
  166. esphome/components/mcp23xxx_base/mcp23xxx_base.h +2 -0
  167. esphome/components/mdns/__init__.py +1 -1
  168. esphome/components/media_player/__init__.py +37 -8
  169. esphome/components/media_player/automation.h +11 -2
  170. esphome/components/media_player/media_player.cpp +8 -0
  171. esphome/components/media_player/media_player.h +8 -4
  172. esphome/components/micronova/switch/micronova_switch.cpp +4 -2
  173. esphome/components/midea/ac_automations.h +3 -1
  174. esphome/components/midea/air_conditioner.cpp +7 -5
  175. esphome/components/midea/air_conditioner.h +1 -1
  176. esphome/components/midea/climate.py +4 -2
  177. esphome/components/midea/ir_transmitter.h +36 -5
  178. esphome/components/mixer/__init__.py +0 -0
  179. esphome/components/mixer/speaker/__init__.py +172 -0
  180. esphome/components/mixer/speaker/automation.h +19 -0
  181. esphome/components/mixer/speaker/mixer_speaker.cpp +624 -0
  182. esphome/components/mixer/speaker/mixer_speaker.h +207 -0
  183. esphome/components/mpr121/mpr121.h +2 -0
  184. esphome/components/mqtt/__init__.py +1 -1
  185. esphome/components/mqtt/mqtt_client.cpp +7 -1
  186. esphome/components/mqtt/mqtt_client.h +1 -1
  187. esphome/components/mqtt/mqtt_climate.cpp +2 -2
  188. esphome/components/network/ip_address.h +2 -0
  189. esphome/components/nextion/automation.h +17 -0
  190. esphome/components/nextion/display.py +42 -17
  191. esphome/components/nextion/nextion.cpp +4 -10
  192. esphome/components/nextion/nextion.h +89 -82
  193. esphome/components/nextion/nextion_commands.cpp +10 -10
  194. esphome/components/ntc/sensor.py +2 -4
  195. esphome/components/online_image/__init__.py +98 -46
  196. esphome/components/online_image/bmp_image.cpp +101 -0
  197. esphome/components/online_image/bmp_image.h +40 -0
  198. esphome/components/online_image/image_decoder.cpp +28 -2
  199. esphome/components/online_image/image_decoder.h +24 -15
  200. esphome/components/online_image/jpeg_image.cpp +90 -0
  201. esphome/components/online_image/jpeg_image.h +34 -0
  202. esphome/components/online_image/online_image.cpp +112 -53
  203. esphome/components/online_image/online_image.h +24 -7
  204. esphome/components/online_image/png_image.cpp +7 -3
  205. esphome/components/online_image/png_image.h +2 -1
  206. esphome/components/opentherm/__init__.py +73 -7
  207. esphome/components/opentherm/automation.h +25 -0
  208. esphome/components/opentherm/const.py +1 -0
  209. esphome/components/opentherm/generate.py +39 -6
  210. esphome/components/opentherm/hub.cpp +117 -79
  211. esphome/components/opentherm/hub.h +31 -15
  212. esphome/components/opentherm/opentherm.cpp +47 -23
  213. esphome/components/opentherm/opentherm.h +27 -6
  214. esphome/components/opentherm/opentherm_macros.h +11 -0
  215. esphome/components/opentherm/schema.py +78 -1
  216. esphome/components/opentherm/validate.py +7 -2
  217. esphome/components/pca6416a/pca6416a.h +2 -0
  218. esphome/components/pca9554/pca9554.h +2 -0
  219. esphome/components/pcf8574/pcf8574.h +2 -0
  220. esphome/components/preferences/__init__.py +2 -4
  221. esphome/components/preferences/syncer.h +10 -3
  222. esphome/components/prometheus/prometheus_handler.cpp +313 -0
  223. esphome/components/prometheus/prometheus_handler.h +48 -7
  224. esphome/components/psram/psram.cpp +8 -1
  225. esphome/components/pulse_counter/pulse_counter_sensor.cpp +14 -9
  226. esphome/components/pulse_counter/pulse_counter_sensor.h +4 -4
  227. esphome/components/pulse_meter/pulse_meter_sensor.cpp +2 -0
  228. esphome/components/qspi_dbi/__init__.py +3 -0
  229. esphome/components/qspi_dbi/display.py +74 -47
  230. esphome/components/qspi_dbi/models.py +245 -2
  231. esphome/components/qspi_dbi/qspi_dbi.cpp +9 -16
  232. esphome/components/qspi_dbi/qspi_dbi.h +2 -2
  233. esphome/components/remote_base/__init__.py +77 -25
  234. esphome/components/remote_base/remote_base.cpp +1 -1
  235. esphome/components/remote_base/remote_base.h +20 -2
  236. esphome/components/remote_base/toto_protocol.cpp +100 -0
  237. esphome/components/remote_base/toto_protocol.h +45 -0
  238. esphome/components/remote_receiver/__init__.py +55 -10
  239. esphome/components/remote_receiver/remote_receiver.h +36 -3
  240. esphome/components/remote_receiver/remote_receiver_esp32.cpp +145 -6
  241. esphome/components/remote_transmitter/__init__.py +62 -4
  242. esphome/components/remote_transmitter/remote_transmitter.h +21 -2
  243. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +140 -4
  244. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +3 -3
  245. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +3 -3
  246. esphome/components/resampler/__init__.py +0 -0
  247. esphome/components/resampler/speaker/__init__.py +103 -0
  248. esphome/components/resampler/speaker/resampler_speaker.cpp +318 -0
  249. esphome/components/resampler/speaker/resampler_speaker.h +107 -0
  250. esphome/components/resistance/resistance_sensor.h +2 -3
  251. esphome/components/resistance/sensor.py +2 -9
  252. esphome/components/rotary_encoder/rotary_encoder.cpp +8 -4
  253. esphome/components/rp2040/__init__.py +1 -0
  254. esphome/components/rp2040/gpio.h +1 -0
  255. esphome/components/rtl87xx/__init__.py +2 -0
  256. esphome/components/sdl/binary_sensor.py +270 -0
  257. esphome/components/sdl/sdl_esphome.cpp +16 -0
  258. esphome/components/sdl/sdl_esphome.h +9 -0
  259. esphome/components/seeed_mr60bha2/binary_sensor.py +25 -0
  260. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +26 -2
  261. esphome/components/seeed_mr60bha2/seeed_mr60bha2.h +9 -20
  262. esphome/components/seeed_mr60bha2/sensor.py +9 -1
  263. esphome/components/sn74hc165/sn74hc165.h +3 -0
  264. esphome/components/sn74hc595/sn74hc595.h +3 -0
  265. esphome/components/speaker/__init__.py +5 -4
  266. esphome/components/speaker/media_player/__init__.py +458 -0
  267. esphome/components/speaker/media_player/audio_pipeline.cpp +568 -0
  268. esphome/components/speaker/media_player/audio_pipeline.h +159 -0
  269. esphome/components/speaker/media_player/automation.h +26 -0
  270. esphome/components/speaker/media_player/speaker_media_player.cpp +577 -0
  271. esphome/components/speaker/media_player/speaker_media_player.h +160 -0
  272. esphome/components/speaker/speaker.h +20 -0
  273. esphome/components/spi/__init__.py +1 -5
  274. esphome/components/spi/spi.cpp +7 -1
  275. esphome/components/spi/spi.h +21 -2
  276. esphome/components/spi_led_strip/light.py +3 -5
  277. esphome/components/spi_led_strip/spi_led_strip.cpp +67 -0
  278. esphome/components/spi_led_strip/spi_led_strip.h +8 -60
  279. esphome/components/sprinkler/sprinkler.cpp +3 -1
  280. esphome/components/sx1509/sx1509_gpio_pin.h +2 -0
  281. esphome/components/tca9555/tca9555.h +2 -0
  282. esphome/components/toshiba/toshiba.cpp +2 -1
  283. esphome/components/tuya/light/tuya_light.cpp +4 -2
  284. esphome/components/uart/uart_component_esp32_arduino.cpp +2 -2
  285. esphome/components/uart/uart_component_esp_idf.cpp +2 -2
  286. esphome/components/udp/__init__.py +8 -2
  287. esphome/components/udp/udp_component.cpp +25 -56
  288. esphome/components/udp/udp_component.h +3 -0
  289. esphome/components/uponor_smatrix/sensor/__init__.py +14 -4
  290. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +5 -0
  291. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.h +1 -0
  292. esphome/components/uptime/text_sensor/__init__.py +19 -0
  293. esphome/components/uptime/text_sensor/uptime_text_sensor.cpp +63 -0
  294. esphome/components/uptime/text_sensor/uptime_text_sensor.h +25 -0
  295. esphome/components/voice_assistant/voice_assistant.cpp +24 -14
  296. esphome/components/voice_assistant/voice_assistant.h +8 -0
  297. esphome/components/waveshare_epaper/display.py +22 -1
  298. esphome/components/waveshare_epaper/waveshare_213v3.cpp +9 -3
  299. esphome/components/waveshare_epaper/waveshare_epaper.cpp +1155 -44
  300. esphome/components/waveshare_epaper/waveshare_epaper.h +208 -7
  301. esphome/components/web_server/web_server.cpp +28 -6
  302. esphome/components/weikai/weikai.h +2 -0
  303. esphome/components/wifi/__init__.py +6 -6
  304. esphome/components/wifi/wifi_component.cpp +1 -1
  305. esphome/components/wifi/wifi_component_esp32_arduino.cpp +30 -1
  306. esphome/components/wireguard/__init__.py +2 -2
  307. esphome/components/xl9535/xl9535.h +2 -0
  308. esphome/components/xxtea/__init__.py +3 -0
  309. esphome/components/xxtea/xxtea.cpp +46 -0
  310. esphome/components/xxtea/xxtea.h +26 -0
  311. esphome/components/yashima/yashima.cpp +2 -1
  312. esphome/config.py +9 -5
  313. esphome/config_validation.py +55 -17
  314. esphome/const.py +7 -10
  315. esphome/core/__init__.py +6 -13
  316. esphome/core/base_automation.h +1 -0
  317. esphome/core/config.py +57 -72
  318. esphome/core/defines.h +9 -1
  319. esphome/core/gpio.h +7 -0
  320. esphome/core/helpers.cpp +19 -15
  321. esphome/core/helpers.h +57 -8
  322. esphome/core/log.h +9 -7
  323. esphome/cpp_generator.py +2 -2
  324. esphome/espota2.py +3 -2
  325. esphome/loader.py +12 -4
  326. esphome/log.py +5 -7
  327. esphome/yaml_util.py +2 -2
  328. {esphome-2024.12.4.dist-info → esphome-2025.2.0b1.dist-info}/METADATA +12 -7
  329. {esphome-2024.12.4.dist-info → esphome-2025.2.0b1.dist-info}/RECORD +338 -289
  330. esphome/components/custom/binary_sensor/custom_binary_sensor.cpp +0 -16
  331. esphome/components/custom/binary_sensor/custom_binary_sensor.h +0 -26
  332. esphome/components/custom/climate/custom_climate.h +0 -22
  333. esphome/components/custom/cover/custom_cover.h +0 -21
  334. esphome/components/custom/light/custom_light_output.h +0 -24
  335. esphome/components/custom/output/custom_output.h +0 -37
  336. esphome/components/custom/sensor/custom_sensor.cpp +0 -16
  337. esphome/components/custom/sensor/custom_sensor.h +0 -24
  338. esphome/components/custom/switch/custom_switch.cpp +0 -16
  339. esphome/components/custom/switch/custom_switch.h +0 -24
  340. esphome/components/custom/text_sensor/custom_text_sensor.cpp +0 -16
  341. esphome/components/custom/text_sensor/custom_text_sensor.h +0 -26
  342. esphome/components/custom_component/custom_component.h +0 -28
  343. esphome/components/esp32_ble_server/ble_2901.cpp +0 -18
  344. esphome/components/esp32_ble_server/ble_2901.h +0 -19
  345. esphome/components/resistance_sampler/__init__.py +0 -6
  346. esphome/components/resistance_sampler/resistance_sampler.h +0 -10
  347. esphome/components/uptime/{sensor.py → sensor/__init__.py} +3 -3
  348. /esphome/components/uptime/{uptime_seconds_sensor.cpp → sensor/uptime_seconds_sensor.cpp} +0 -0
  349. /esphome/components/uptime/{uptime_seconds_sensor.h → sensor/uptime_seconds_sensor.h} +0 -0
  350. /esphome/components/uptime/{uptime_timestamp_sensor.cpp → sensor/uptime_timestamp_sensor.cpp} +0 -0
  351. /esphome/components/uptime/{uptime_timestamp_sensor.h → sensor/uptime_timestamp_sensor.h} +0 -0
  352. {esphome-2024.12.4.dist-info → esphome-2025.2.0b1.dist-info}/LICENSE +0 -0
  353. {esphome-2024.12.4.dist-info → esphome-2025.2.0b1.dist-info}/WHEEL +0 -0
  354. {esphome-2024.12.4.dist-info → esphome-2025.2.0b1.dist-info}/entry_points.txt +0 -0
  355. {esphome-2024.12.4.dist-info → esphome-2025.2.0b1.dist-info}/top_level.txt +0 -0
@@ -1,61 +1,5 @@
1
- import esphome.codegen as cg
2
1
  import esphome.config_validation as cv
3
- from esphome.components import output
4
- from esphome.const import CONF_ID, CONF_LAMBDA, CONF_OUTPUTS, CONF_TYPE, CONF_BINARY
5
- from .. import custom_ns
6
2
 
7
- CustomBinaryOutputConstructor = custom_ns.class_("CustomBinaryOutputConstructor")
8
- CustomFloatOutputConstructor = custom_ns.class_("CustomFloatOutputConstructor")
9
-
10
- CONF_FLOAT = "float"
11
-
12
- CONFIG_SCHEMA = cv.typed_schema(
13
- {
14
- CONF_BINARY: cv.Schema(
15
- {
16
- cv.GenerateID(): cv.declare_id(CustomBinaryOutputConstructor),
17
- cv.Required(CONF_LAMBDA): cv.returning_lambda,
18
- cv.Required(CONF_OUTPUTS): cv.ensure_list(
19
- output.BINARY_OUTPUT_SCHEMA.extend(
20
- {
21
- cv.GenerateID(): cv.declare_id(output.BinaryOutput),
22
- }
23
- )
24
- ),
25
- }
26
- ),
27
- CONF_FLOAT: cv.Schema(
28
- {
29
- cv.GenerateID(): cv.declare_id(CustomFloatOutputConstructor),
30
- cv.Required(CONF_LAMBDA): cv.returning_lambda,
31
- cv.Required(CONF_OUTPUTS): cv.ensure_list(
32
- output.FLOAT_OUTPUT_SCHEMA.extend(
33
- {
34
- cv.GenerateID(): cv.declare_id(output.FloatOutput),
35
- }
36
- )
37
- ),
38
- }
39
- ),
40
- },
41
- lower=True,
3
+ CONFIG_SCHEMA = cv.invalid(
4
+ 'The "custom" component has been removed. Consider conversion to an external component.\nhttps://esphome.io/guides/contributing#a-note-about-custom-components'
42
5
  )
43
-
44
-
45
- async def to_code(config):
46
- type = config[CONF_TYPE]
47
- if type == "binary":
48
- ret_type = output.BinaryOutputPtr
49
- klass = CustomBinaryOutputConstructor
50
- else:
51
- ret_type = output.FloatOutputPtr
52
- klass = CustomFloatOutputConstructor
53
- template_ = await cg.process_lambda(
54
- config[CONF_LAMBDA], [], return_type=cg.std_vector.template(ret_type)
55
- )
56
-
57
- rhs = klass(template_)
58
- custom = cg.variable(config[CONF_ID], rhs)
59
- for i, conf in enumerate(config[CONF_OUTPUTS]):
60
- out = cg.Pvariable(conf[CONF_ID], custom.get_output(i))
61
- await output.register_output(out, conf)
@@ -1,27 +1,5 @@
1
- import esphome.codegen as cg
2
1
  import esphome.config_validation as cv
3
- from esphome.components import sensor
4
- from esphome.const import CONF_ID, CONF_LAMBDA, CONF_SENSORS
5
- from .. import custom_ns
6
2
 
7
- CustomSensorConstructor = custom_ns.class_("CustomSensorConstructor")
8
-
9
- CONFIG_SCHEMA = cv.Schema(
10
- {
11
- cv.GenerateID(): cv.declare_id(CustomSensorConstructor),
12
- cv.Required(CONF_LAMBDA): cv.returning_lambda,
13
- cv.Required(CONF_SENSORS): cv.ensure_list(sensor.sensor_schema()),
14
- }
3
+ CONFIG_SCHEMA = cv.invalid(
4
+ 'The "custom" component has been removed. Consider conversion to an external component.\nhttps://esphome.io/guides/contributing#a-note-about-custom-components'
15
5
  )
16
-
17
-
18
- async def to_code(config):
19
- template_ = await cg.process_lambda(
20
- config[CONF_LAMBDA], [], return_type=cg.std_vector.template(sensor.SensorPtr)
21
- )
22
-
23
- rhs = CustomSensorConstructor(template_)
24
- var = cg.variable(config[CONF_ID], rhs)
25
- for i, conf in enumerate(config[CONF_SENSORS]):
26
- sens = cg.Pvariable(conf[CONF_ID], var.get_sensor(i))
27
- await sensor.register_sensor(sens, conf)
@@ -1,27 +1,5 @@
1
- import esphome.codegen as cg
2
1
  import esphome.config_validation as cv
3
- from esphome.components import switch
4
- from esphome.const import CONF_ID, CONF_LAMBDA, CONF_SWITCHES
5
- from .. import custom_ns
6
2
 
7
- CustomSwitchConstructor = custom_ns.class_("CustomSwitchConstructor")
8
-
9
- CONFIG_SCHEMA = cv.Schema(
10
- {
11
- cv.GenerateID(): cv.declare_id(CustomSwitchConstructor),
12
- cv.Required(CONF_LAMBDA): cv.returning_lambda,
13
- cv.Required(CONF_SWITCHES): cv.ensure_list(switch.switch_schema(switch.Switch)),
14
- }
3
+ CONFIG_SCHEMA = cv.invalid(
4
+ 'The "custom" component has been removed. Consider conversion to an external component.\nhttps://esphome.io/guides/contributing#a-note-about-custom-components'
15
5
  )
16
-
17
-
18
- async def to_code(config):
19
- template_ = await cg.process_lambda(
20
- config[CONF_LAMBDA], [], return_type=cg.std_vector.template(switch.SwitchPtr)
21
- )
22
-
23
- rhs = CustomSwitchConstructor(template_)
24
- var = cg.variable(config[CONF_ID], rhs)
25
- for i, conf in enumerate(config[CONF_SWITCHES]):
26
- switch_ = cg.Pvariable(conf[CONF_ID], var.get_switch(i))
27
- await switch.register_switch(switch_, conf)
@@ -1,32 +1,5 @@
1
- import esphome.codegen as cg
2
1
  import esphome.config_validation as cv
3
- from esphome.components import text_sensor
4
- from esphome.const import CONF_ID, CONF_LAMBDA, CONF_TEXT_SENSORS
5
- from .. import custom_ns
6
2
 
7
- CustomTextSensorConstructor = custom_ns.class_("CustomTextSensorConstructor")
8
-
9
- CONFIG_SCHEMA = cv.Schema(
10
- {
11
- cv.GenerateID(): cv.declare_id(CustomTextSensorConstructor),
12
- cv.Required(CONF_LAMBDA): cv.returning_lambda,
13
- cv.Required(CONF_TEXT_SENSORS): cv.ensure_list(
14
- text_sensor.text_sensor_schema()
15
- ),
16
- }
3
+ CONFIG_SCHEMA = cv.invalid(
4
+ 'The "custom" component has been removed. Consider conversion to an external component.\nhttps://esphome.io/guides/contributing#a-note-about-custom-components'
17
5
  )
18
-
19
-
20
- async def to_code(config):
21
- template_ = await cg.process_lambda(
22
- config[CONF_LAMBDA],
23
- [],
24
- return_type=cg.std_vector.template(text_sensor.TextSensorPtr),
25
- )
26
-
27
- rhs = CustomTextSensorConstructor(template_)
28
- var = cg.variable(config[CONF_ID], rhs)
29
-
30
- for i, conf in enumerate(config[CONF_TEXT_SENSORS]):
31
- text = cg.Pvariable(conf[CONF_ID], var.get_text_sensor(i))
32
- await text_sensor.register_text_sensor(text, conf)
@@ -1,31 +1,7 @@
1
- import esphome.codegen as cg
2
1
  import esphome.config_validation as cv
3
- from esphome.const import CONF_COMPONENTS, CONF_ID, CONF_LAMBDA
4
-
5
- custom_component_ns = cg.esphome_ns.namespace("custom_component")
6
- CustomComponentConstructor = custom_component_ns.class_("CustomComponentConstructor")
7
2
 
8
3
  MULTI_CONF = True
9
- CONFIG_SCHEMA = cv.Schema(
10
- {
11
- cv.GenerateID(): cv.declare_id(CustomComponentConstructor),
12
- cv.Required(CONF_LAMBDA): cv.returning_lambda,
13
- cv.Optional(CONF_COMPONENTS): cv.ensure_list(
14
- cv.Schema({cv.GenerateID(): cv.declare_id(cg.Component)}).extend(
15
- cv.COMPONENT_SCHEMA
16
- )
17
- ),
18
- }
19
- )
20
-
21
4
 
22
- async def to_code(config):
23
- template_ = await cg.process_lambda(
24
- config[CONF_LAMBDA], [], return_type=cg.std_vector.template(cg.ComponentPtr)
25
- )
26
-
27
- rhs = CustomComponentConstructor(template_)
28
- var = cg.variable(config[CONF_ID], rhs)
29
- for i, conf in enumerate(config.get(CONF_COMPONENTS, [])):
30
- comp = cg.Pvariable(conf[CONF_ID], var.get_component(i))
31
- await cg.register_component(comp, conf)
5
+ CONFIG_SCHEMA = cv.invalid(
6
+ 'The "custom" component has been removed. Consider conversion to an external component.\nhttps://esphome.io/guides/contributing#a-note-about-custom-components'
7
+ )
@@ -298,6 +298,12 @@ void DalyBmsComponent::decode_data_(std::vector<uint8_t> data) {
298
298
  if (this->cell_16_voltage_sensor_) {
299
299
  this->cell_16_voltage_sensor_->publish_state((float) encode_uint16(it[5], it[6]) / 1000);
300
300
  }
301
+ if (this->cell_17_voltage_sensor_) {
302
+ this->cell_17_voltage_sensor_->publish_state((float) encode_uint16(it[7], it[8]) / 1000);
303
+ }
304
+ if (this->cell_18_voltage_sensor_) {
305
+ this->cell_18_voltage_sensor_->publish_state((float) encode_uint16(it[9], it[10]) / 1000);
306
+ }
301
307
  break;
302
308
  }
303
309
  break;
@@ -54,6 +54,8 @@ class DalyBmsComponent : public PollingComponent, public uart::UARTDevice {
54
54
  SUB_SENSOR(cell_14_voltage)
55
55
  SUB_SENSOR(cell_15_voltage)
56
56
  SUB_SENSOR(cell_16_voltage)
57
+ SUB_SENSOR(cell_17_voltage)
58
+ SUB_SENSOR(cell_18_voltage)
57
59
  #endif
58
60
 
59
61
  #ifdef USE_TEXT_SENSOR
@@ -52,6 +52,8 @@ CONF_CELL_13_VOLTAGE = "cell_13_voltage"
52
52
  CONF_CELL_14_VOLTAGE = "cell_14_voltage"
53
53
  CONF_CELL_15_VOLTAGE = "cell_15_voltage"
54
54
  CONF_CELL_16_VOLTAGE = "cell_16_voltage"
55
+ CONF_CELL_17_VOLTAGE = "cell_17_voltage"
56
+ CONF_CELL_18_VOLTAGE = "cell_18_voltage"
55
57
  ICON_CURRENT_DC = "mdi:current-dc"
56
58
  ICON_BATTERY_OUTLINE = "mdi:battery-outline"
57
59
  ICON_THERMOMETER_CHEVRON_UP = "mdi:thermometer-chevron-up"
@@ -92,6 +94,8 @@ TYPES = [
92
94
  CONF_CELL_14_VOLTAGE,
93
95
  CONF_CELL_15_VOLTAGE,
94
96
  CONF_CELL_16_VOLTAGE,
97
+ CONF_CELL_17_VOLTAGE,
98
+ CONF_CELL_18_VOLTAGE,
95
99
  ]
96
100
 
97
101
  CELL_VOLTAGE_SCHEMA = sensor.sensor_schema(
@@ -212,6 +216,8 @@ CONFIG_SCHEMA = cv.All(
212
216
  cv.Optional(CONF_CELL_14_VOLTAGE): CELL_VOLTAGE_SCHEMA,
213
217
  cv.Optional(CONF_CELL_15_VOLTAGE): CELL_VOLTAGE_SCHEMA,
214
218
  cv.Optional(CONF_CELL_16_VOLTAGE): CELL_VOLTAGE_SCHEMA,
219
+ cv.Optional(CONF_CELL_17_VOLTAGE): CELL_VOLTAGE_SCHEMA,
220
+ cv.Optional(CONF_CELL_18_VOLTAGE): CELL_VOLTAGE_SCHEMA,
215
221
  }
216
222
  ).extend(cv.COMPONENT_SCHEMA)
217
223
  )
@@ -50,6 +50,10 @@ void DebugComponent::dump_config() {
50
50
  this->reset_reason_->publish_state(get_reset_reason_());
51
51
  }
52
52
  #endif // USE_TEXT_SENSOR
53
+
54
+ #ifdef USE_ESP32
55
+ this->log_partition_info_(); // Log partition information for ESP32
56
+ #endif // USE_ESP32
53
57
  }
54
58
 
55
59
  void DebugComponent::loop() {
@@ -55,6 +55,20 @@ class DebugComponent : public PollingComponent {
55
55
  #endif // USE_ESP32
56
56
  #endif // USE_SENSOR
57
57
 
58
+ #ifdef USE_ESP32
59
+ /**
60
+ * @brief Logs information about the device's partition table.
61
+ *
62
+ * This function iterates through the ESP32's partition table and logs details
63
+ * about each partition, including its name, type, subtype, starting address,
64
+ * and size. The information is useful for diagnosing issues related to flash
65
+ * memory or verifying the partition configuration dynamically at runtime.
66
+ *
67
+ * Only available when compiled for ESP32 platforms.
68
+ */
69
+ void log_partition_info_();
70
+ #endif // USE_ESP32
71
+
58
72
  #ifdef USE_TEXT_SENSOR
59
73
  text_sensor::TextSensor *device_info_{nullptr};
60
74
  text_sensor::TextSensor *reset_reason_{nullptr};
@@ -5,6 +5,7 @@
5
5
  #include <esp_heap_caps.h>
6
6
  #include <esp_system.h>
7
7
  #include <esp_chip_info.h>
8
+ #include <esp_partition.h>
8
9
 
9
10
  #if defined(USE_ESP32_VARIANT_ESP32)
10
11
  #include <esp32/rom/rtc.h>
@@ -28,111 +29,177 @@ namespace debug {
28
29
 
29
30
  static const char *const TAG = "debug";
30
31
 
32
+ void DebugComponent::log_partition_info_() {
33
+ ESP_LOGCONFIG(TAG, "Partition table:");
34
+ ESP_LOGCONFIG(TAG, " %-12s %-4s %-8s %-10s %-10s", "Name", "Type", "Subtype", "Address", "Size");
35
+ esp_partition_iterator_t it = esp_partition_find(ESP_PARTITION_TYPE_ANY, ESP_PARTITION_SUBTYPE_ANY, NULL);
36
+ while (it != NULL) {
37
+ const esp_partition_t *partition = esp_partition_get(it);
38
+ ESP_LOGCONFIG(TAG, " %-12s %-4d %-8d 0x%08" PRIX32 " 0x%08" PRIX32, partition->label, partition->type,
39
+ partition->subtype, partition->address, partition->size);
40
+ it = esp_partition_next(it);
41
+ }
42
+ esp_partition_iterator_release(it);
43
+ }
44
+
31
45
  std::string DebugComponent::get_reset_reason_() {
32
46
  std::string reset_reason;
33
- switch (rtc_get_reset_reason(0)) {
34
- case POWERON_RESET:
35
- reset_reason = "Power On Reset";
47
+ switch (esp_reset_reason()) {
48
+ case ESP_RST_POWERON:
49
+ reset_reason = "Reset due to power-on event";
50
+ break;
51
+ case ESP_RST_EXT:
52
+ reset_reason = "Reset by external pin";
53
+ break;
54
+ case ESP_RST_SW:
55
+ reset_reason = "Software reset via esp_restart";
56
+ break;
57
+ case ESP_RST_PANIC:
58
+ reset_reason = "Software reset due to exception/panic";
59
+ break;
60
+ case ESP_RST_INT_WDT:
61
+ reset_reason = "Reset (software or hardware) due to interrupt watchdog";
62
+ break;
63
+ case ESP_RST_TASK_WDT:
64
+ reset_reason = "Reset due to task watchdog";
65
+ break;
66
+ case ESP_RST_WDT:
67
+ reset_reason = "Reset due to other watchdogs";
68
+ break;
69
+ case ESP_RST_DEEPSLEEP:
70
+ reset_reason = "Reset after exiting deep sleep mode";
71
+ break;
72
+ case ESP_RST_BROWNOUT:
73
+ reset_reason = "Brownout reset (software or hardware)";
74
+ break;
75
+ case ESP_RST_SDIO:
76
+ reset_reason = "Reset over SDIO";
36
77
  break;
78
+ #ifdef USE_ESP32_VARIANT_ESP32
79
+ #if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 1, 4))
80
+ case ESP_RST_USB:
81
+ reset_reason = "Reset by USB peripheral";
82
+ break;
83
+ case ESP_RST_JTAG:
84
+ reset_reason = "Reset by JTAG";
85
+ break;
86
+ case ESP_RST_EFUSE:
87
+ reset_reason = "Reset due to efuse error";
88
+ break;
89
+ case ESP_RST_PWR_GLITCH:
90
+ reset_reason = "Reset due to power glitch detected";
91
+ break;
92
+ case ESP_RST_CPU_LOCKUP:
93
+ reset_reason = "Reset due to CPU lock up (double exception)";
94
+ break;
95
+ #endif // ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 1, 4)
96
+ #endif // USE_ESP32_VARIANT_ESP32
97
+ default: // Includes ESP_RST_UNKNOWN
98
+ switch (rtc_get_reset_reason(0)) {
99
+ case POWERON_RESET:
100
+ reset_reason = "Power On Reset";
101
+ break;
37
102
  #if defined(USE_ESP32_VARIANT_ESP32)
38
- case SW_RESET:
103
+ case SW_RESET:
39
104
  #elif defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || \
40
105
  defined(USE_ESP32_VARIANT_ESP32S3) || defined(USE_ESP32_VARIANT_ESP32C6)
41
- case RTC_SW_SYS_RESET:
106
+ case RTC_SW_SYS_RESET:
42
107
  #endif
43
- reset_reason = "Software Reset Digital Core";
44
- break;
108
+ reset_reason = "Software Reset Digital Core";
109
+ break;
45
110
  #if defined(USE_ESP32_VARIANT_ESP32)
46
- case OWDT_RESET:
47
- reset_reason = "Watch Dog Reset Digital Core";
48
- break;
111
+ case OWDT_RESET:
112
+ reset_reason = "Watch Dog Reset Digital Core";
113
+ break;
49
114
  #endif
50
- case DEEPSLEEP_RESET:
51
- reset_reason = "Deep Sleep Reset Digital Core";
52
- break;
115
+ case DEEPSLEEP_RESET:
116
+ reset_reason = "Deep Sleep Reset Digital Core";
117
+ break;
53
118
  #if defined(USE_ESP32_VARIANT_ESP32)
54
- case SDIO_RESET:
55
- reset_reason = "SLC Module Reset Digital Core";
56
- break;
119
+ case SDIO_RESET:
120
+ reset_reason = "SLC Module Reset Digital Core";
121
+ break;
57
122
  #endif
58
- case TG0WDT_SYS_RESET:
59
- reset_reason = "Timer Group 0 Watch Dog Reset Digital Core";
60
- break;
61
- case TG1WDT_SYS_RESET:
62
- reset_reason = "Timer Group 1 Watch Dog Reset Digital Core";
63
- break;
64
- case RTCWDT_SYS_RESET:
65
- reset_reason = "RTC Watch Dog Reset Digital Core";
66
- break;
123
+ case TG0WDT_SYS_RESET:
124
+ reset_reason = "Timer Group 0 Watch Dog Reset Digital Core";
125
+ break;
126
+ case TG1WDT_SYS_RESET:
127
+ reset_reason = "Timer Group 1 Watch Dog Reset Digital Core";
128
+ break;
129
+ case RTCWDT_SYS_RESET:
130
+ reset_reason = "RTC Watch Dog Reset Digital Core";
131
+ break;
67
132
  #if !defined(USE_ESP32_VARIANT_ESP32C6) && !defined(USE_ESP32_VARIANT_ESP32H2)
68
- case INTRUSION_RESET:
69
- reset_reason = "Intrusion Reset CPU";
70
- break;
133
+ case INTRUSION_RESET:
134
+ reset_reason = "Intrusion Reset CPU";
135
+ break;
71
136
  #endif
72
137
  #if defined(USE_ESP32_VARIANT_ESP32)
73
- case TGWDT_CPU_RESET:
74
- reset_reason = "Timer Group Reset CPU";
75
- break;
138
+ case TGWDT_CPU_RESET:
139
+ reset_reason = "Timer Group Reset CPU";
140
+ break;
76
141
  #elif defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || \
77
142
  defined(USE_ESP32_VARIANT_ESP32S3) || defined(USE_ESP32_VARIANT_ESP32C6)
78
- case TG0WDT_CPU_RESET:
79
- reset_reason = "Timer Group 0 Reset CPU";
80
- break;
143
+ case TG0WDT_CPU_RESET:
144
+ reset_reason = "Timer Group 0 Reset CPU";
145
+ break;
81
146
  #endif
82
147
  #if defined(USE_ESP32_VARIANT_ESP32)
83
- case SW_CPU_RESET:
148
+ case SW_CPU_RESET:
84
149
  #elif defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || \
85
150
  defined(USE_ESP32_VARIANT_ESP32S3) || defined(USE_ESP32_VARIANT_ESP32C6)
86
- case RTC_SW_CPU_RESET:
151
+ case RTC_SW_CPU_RESET:
87
152
  #endif
88
- reset_reason = "Software Reset CPU";
89
- break;
90
- case RTCWDT_CPU_RESET:
91
- reset_reason = "RTC Watch Dog Reset CPU";
92
- break;
153
+ reset_reason = "Software Reset CPU";
154
+ break;
155
+ case RTCWDT_CPU_RESET:
156
+ reset_reason = "RTC Watch Dog Reset CPU";
157
+ break;
93
158
  #if defined(USE_ESP32_VARIANT_ESP32)
94
- case EXT_CPU_RESET:
95
- reset_reason = "External CPU Reset";
96
- break;
159
+ case EXT_CPU_RESET:
160
+ reset_reason = "External CPU Reset";
161
+ break;
97
162
  #endif
98
- case RTCWDT_BROWN_OUT_RESET:
99
- reset_reason = "Voltage Unstable Reset";
100
- break;
101
- case RTCWDT_RTC_RESET:
102
- reset_reason = "RTC Watch Dog Reset Digital Core And RTC Module";
103
- break;
163
+ case RTCWDT_BROWN_OUT_RESET:
164
+ reset_reason = "Voltage Unstable Reset";
165
+ break;
166
+ case RTCWDT_RTC_RESET:
167
+ reset_reason = "RTC Watch Dog Reset Digital Core And RTC Module";
168
+ break;
104
169
  #if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) || \
105
170
  defined(USE_ESP32_VARIANT_ESP32C6)
106
- case TG1WDT_CPU_RESET:
107
- reset_reason = "Timer Group 1 Reset CPU";
108
- break;
109
- case SUPER_WDT_RESET:
110
- reset_reason = "Super Watchdog Reset Digital Core And RTC Module";
111
- break;
112
- case EFUSE_RESET:
113
- reset_reason = "eFuse Reset Digital Core";
114
- break;
171
+ case TG1WDT_CPU_RESET:
172
+ reset_reason = "Timer Group 1 Reset CPU";
173
+ break;
174
+ case SUPER_WDT_RESET:
175
+ reset_reason = "Super Watchdog Reset Digital Core And RTC Module";
176
+ break;
177
+ case EFUSE_RESET:
178
+ reset_reason = "eFuse Reset Digital Core";
179
+ break;
115
180
  #endif
116
181
  #if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3)
117
- case GLITCH_RTC_RESET:
118
- reset_reason = "Glitch Reset Digital Core And RTC Module";
119
- break;
182
+ case GLITCH_RTC_RESET:
183
+ reset_reason = "Glitch Reset Digital Core And RTC Module";
184
+ break;
120
185
  #endif
121
186
  #if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S3) || defined(USE_ESP32_VARIANT_ESP32C6)
122
- case USB_UART_CHIP_RESET:
123
- reset_reason = "USB UART Reset Digital Core";
124
- break;
125
- case USB_JTAG_CHIP_RESET:
126
- reset_reason = "USB JTAG Reset Digital Core";
127
- break;
187
+ case USB_UART_CHIP_RESET:
188
+ reset_reason = "USB UART Reset Digital Core";
189
+ break;
190
+ case USB_JTAG_CHIP_RESET:
191
+ reset_reason = "USB JTAG Reset Digital Core";
192
+ break;
128
193
  #endif
129
194
  #if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S3)
130
- case POWER_GLITCH_RESET:
131
- reset_reason = "Power Glitch Reset Digital Core And RTC Module";
132
- break;
195
+ case POWER_GLITCH_RESET:
196
+ reset_reason = "Power Glitch Reset Digital Core And RTC Module";
197
+ break;
133
198
  #endif
134
- default:
135
- reset_reason = "Unknown Reset Reason";
199
+ default:
200
+ reset_reason = "Unknown Reset Reason";
201
+ }
202
+ break;
136
203
  }
137
204
  ESP_LOGD(TAG, "Reset Reason: %s", reset_reason.c_str());
138
205
  return reset_reason;
@@ -223,6 +290,19 @@ void DebugComponent::get_device_info_(std::string &device_info) {
223
290
  device_info += " Cores:" + to_string(info.cores);
224
291
  device_info += " Revision:" + to_string(info.revision);
225
292
 
293
+ // Framework detection
294
+ device_info += "|Framework: ";
295
+ #ifdef USE_ARDUINO
296
+ ESP_LOGD(TAG, "Framework: Arduino");
297
+ device_info += "Arduino";
298
+ #elif defined(USE_ESP_IDF)
299
+ ESP_LOGD(TAG, "Framework: ESP-IDF");
300
+ device_info += "ESP-IDF";
301
+ #else
302
+ ESP_LOGW(TAG, "Framework: UNKNOWN");
303
+ device_info += "UNKNOWN";
304
+ #endif
305
+
226
306
  ESP_LOGD(TAG, "ESP-IDF Version: %s", esp_get_idf_version());
227
307
  device_info += "|ESP-IDF: ";
228
308
  device_info += esp_get_idf_version();
@@ -294,4 +374,4 @@ void DebugComponent::update_platform_() {
294
374
 
295
375
  } // namespace debug
296
376
  } // namespace esphome
297
- #endif
377
+ #endif // USE_ESP32
@@ -159,6 +159,15 @@ void DFPlayer::loop() {
159
159
  }
160
160
  break;
161
161
  case 9: // End byte
162
+ #ifdef ESPHOME_LOG_HAS_VERY_VERBOSE
163
+ char byte_sequence[100];
164
+ byte_sequence[0] = '\0';
165
+ for (size_t i = 0; i < this->read_pos_ + 1; ++i) {
166
+ snprintf(byte_sequence + strlen(byte_sequence), sizeof(byte_sequence) - strlen(byte_sequence), "%02X ",
167
+ this->read_buffer_[i]);
168
+ }
169
+ ESP_LOGVV(TAG, "Received byte sequence: %s", byte_sequence);
170
+ #endif
162
171
  if (byte != 0xEF) {
163
172
  ESP_LOGW(TAG, "Expected end byte 0xEF, got %#02x", byte);
164
173
  this->read_pos_ = 0;
@@ -238,13 +247,17 @@ void DFPlayer::loop() {
238
247
  this->ack_set_is_playing_ = false;
239
248
  this->ack_reset_is_playing_ = false;
240
249
  break;
250
+ case 0x3C:
251
+ ESP_LOGV(TAG, "Playback finished (USB drive)");
252
+ this->is_playing_ = false;
253
+ this->on_finished_playback_callback_.call();
241
254
  case 0x3D:
242
- ESP_LOGV(TAG, "Playback finished");
255
+ ESP_LOGV(TAG, "Playback finished (SD card)");
243
256
  this->is_playing_ = false;
244
257
  this->on_finished_playback_callback_.call();
245
258
  break;
246
259
  default:
247
- ESP_LOGV(TAG, "Received unknown cmd %#02x arg %#04x", cmd, argument);
260
+ ESP_LOGE(TAG, "Received unknown cmd %#02x arg %#04x", cmd, argument);
248
261
  }
249
262
  this->sent_cmd_ = 0;
250
263
  this->read_pos_ = 0;
@@ -118,8 +118,9 @@ std::unique_ptr<Command> CircularCommandQueue::dequeue() {
118
118
  if (front_ == rear_) {
119
119
  front_ = -1;
120
120
  rear_ = -1;
121
- } else
121
+ } else {
122
122
  front_ = (front_ + 1) % COMMAND_QUEUE_SIZE;
123
+ }
123
124
 
124
125
  return dequeued_cmd;
125
126
  }
@@ -157,8 +157,9 @@ bool HOT IRAM_ATTR DHT::read_sensor_(float *temperature, float *humidity, bool r
157
157
  if (bit == 0) {
158
158
  bit = 7;
159
159
  byte++;
160
- } else
160
+ } else {
161
161
  bit--;
162
+ }
162
163
  }
163
164
  }
164
165
  if (!report_errors && error_code != 0)