esphome 2025.5.2__py3-none-any.whl → 2025.6.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (750) hide show
  1. esphome/__main__.py +20 -14
  2. esphome/components/a4988/a4988.cpp +1 -1
  3. esphome/components/absolute_humidity/absolute_humidity.cpp +6 -4
  4. esphome/components/ac_dimmer/ac_dimmer.cpp +4 -2
  5. esphome/components/adc/adc_sensor_esp32.cpp +5 -3
  6. esphome/components/adc/adc_sensor_esp8266.cpp +5 -3
  7. esphome/components/adc/adc_sensor_libretiny.cpp +5 -3
  8. esphome/components/adc/adc_sensor_rp2040.cpp +5 -3
  9. esphome/components/adc128s102/adc128s102.cpp +1 -1
  10. esphome/components/ade7880/ade7880.cpp +28 -17
  11. esphome/components/ade7953_base/ade7953_base.cpp +12 -9
  12. esphome/components/ade7953_i2c/ade7953_i2c.cpp +1 -1
  13. esphome/components/ade7953_spi/ade7953_spi.cpp +1 -1
  14. esphome/components/ads1115/ads1115.cpp +3 -5
  15. esphome/components/ads1118/ads1118.cpp +2 -1
  16. esphome/components/ags10/ags10.cpp +3 -2
  17. esphome/components/aht10/aht10.cpp +27 -29
  18. esphome/components/aic3204/aic3204.cpp +2 -2
  19. esphome/components/alarm_control_panel/__init__.py +1 -0
  20. esphome/components/am2315c/am2315c.cpp +2 -2
  21. esphome/components/am2320/am2320.cpp +2 -2
  22. esphome/components/am43/am43_base.h +1 -1
  23. esphome/components/am43/cover/am43_cover.cpp +4 -2
  24. esphome/components/analog_threshold/analog_threshold_binary_sensor.cpp +4 -2
  25. esphome/components/apds9306/apds9306.cpp +8 -5
  26. esphome/components/apds9960/apds9960.cpp +2 -2
  27. esphome/components/api/__init__.py +5 -0
  28. esphome/components/api/api_connection.cpp +753 -379
  29. esphome/components/api/api_connection.h +341 -283
  30. esphome/components/api/api_frame_helper.cpp +349 -344
  31. esphome/components/api/api_frame_helper.h +121 -94
  32. esphome/components/api/api_pb2.cpp +5 -0
  33. esphome/components/api/api_pb2.h +703 -227
  34. esphome/components/api/api_pb2_service.cpp +12 -688
  35. esphome/components/api/api_pb2_service.h +53 -207
  36. esphome/components/api/api_server.cpp +71 -29
  37. esphome/components/api/api_server.h +9 -0
  38. esphome/components/api/client.py +5 -4
  39. esphome/components/api/homeassistant_service.h +1 -1
  40. esphome/components/api/list_entities.cpp +1 -1
  41. esphome/components/api/proto.cpp +1 -0
  42. esphome/components/api/proto.h +5 -4
  43. esphome/components/api/subscribe_state.cpp +8 -16
  44. esphome/components/as3935/as3935.cpp +3 -3
  45. esphome/components/as5600/as5600.cpp +9 -7
  46. esphome/components/as7341/as7341.cpp +7 -5
  47. esphome/components/at581x/at581x.cpp +13 -10
  48. esphome/components/atm90e26/atm90e26.cpp +2 -2
  49. esphome/components/atm90e32/atm90e32.cpp +3 -3
  50. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +5 -3
  51. esphome/components/bang_bang/bang_bang_climate.cpp +8 -5
  52. esphome/components/bedjet/bedjet_hub.cpp +6 -4
  53. esphome/components/beken_spi_led_strip/led_strip.cpp +11 -7
  54. esphome/components/bh1750/bh1750.cpp +2 -2
  55. esphome/components/binary_sensor/__init__.py +1 -0
  56. esphome/components/binary_sensor/automation.cpp +1 -2
  57. esphome/components/bl0906/bl0906.cpp +1 -1
  58. esphome/components/bl0942/bl0942.cpp +11 -8
  59. esphome/components/bl0942/sensor.py +1 -1
  60. esphome/components/ble_client/__init__.py +5 -1
  61. esphome/components/ble_client/output/ble_binary_output.cpp +6 -3
  62. esphome/components/ble_client/sensor/ble_sensor.cpp +9 -6
  63. esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +8 -5
  64. esphome/components/bluetooth_proxy/__init__.py +5 -1
  65. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +5 -5
  66. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +18 -16
  67. esphome/components/bluetooth_proxy/bluetooth_proxy.h +1 -1
  68. esphome/components/bme280_base/bme280_base.cpp +5 -6
  69. esphome/components/bme680/bme680.cpp +3 -3
  70. esphome/components/bme680/sensor.py +2 -2
  71. esphome/components/bme680_bsec/bme680_bsec.cpp +11 -7
  72. esphome/components/bme680_bsec/sensor.py +7 -3
  73. esphome/components/bme68x_bsec2/__init__.py +6 -5
  74. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +17 -13
  75. esphome/components/bme68x_bsec2/sensor.py +4 -4
  76. esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +1 -0
  77. esphome/components/bmi160/bmi160.cpp +11 -11
  78. esphome/components/bmp085/bmp085.cpp +2 -2
  79. esphome/components/bmp280_base/bmp280_base.cpp +3 -3
  80. esphome/components/bmp3xx_base/bmp3xx_base.cpp +13 -13
  81. esphome/components/bmp581/bmp581.cpp +33 -27
  82. esphome/components/bp1658cj/bp1658cj.cpp +5 -3
  83. esphome/components/bp5758d/bp5758d.cpp +1 -1
  84. esphome/components/button/__init__.py +1 -0
  85. esphome/components/canbus/canbus.cpp +1 -1
  86. esphome/components/cap1188/cap1188.cpp +6 -4
  87. esphome/components/captive_portal/captive_portal.cpp +1 -1
  88. esphome/components/ccs811/ccs811.cpp +3 -2
  89. esphome/components/cd74hc4067/cd74hc4067.cpp +1 -1
  90. esphome/components/ch422g/ch422g.cpp +2 -2
  91. esphome/components/chsc6x/chsc6x_touchscreen.cpp +6 -4
  92. esphome/components/climate/__init__.py +1 -0
  93. esphome/components/climate/climate.cpp +12 -7
  94. esphome/components/climate/climate.h +1 -1
  95. esphome/components/climate_ir/climate_ir.cpp +7 -4
  96. esphome/components/cm1106/__init__.py +1 -0
  97. esphome/components/cm1106/cm1106.cpp +112 -0
  98. esphome/components/cm1106/cm1106.h +40 -0
  99. esphome/components/cm1106/sensor.py +72 -0
  100. esphome/components/const/__init__.py +1 -0
  101. esphome/components/cover/__init__.py +1 -0
  102. esphome/components/cs5460a/cs5460a.cpp +16 -11
  103. esphome/components/cse7761/cse7761.cpp +2 -2
  104. esphome/components/cse7766/cse7766.cpp +0 -5
  105. esphome/components/cse7766/cse7766.h +5 -1
  106. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +1 -1
  107. esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +6 -3
  108. esphome/components/current_based/current_based_cover.cpp +4 -2
  109. esphome/components/dac7678/dac7678_output.cpp +4 -4
  110. esphome/components/dallas_temp/dallas_temp.cpp +2 -3
  111. esphome/components/daly_bms/daly_bms.cpp +2 -1
  112. esphome/components/dashboard_import/__init__.py +1 -2
  113. esphome/components/datetime/__init__.py +3 -1
  114. esphome/components/datetime/date_entity.cpp +5 -5
  115. esphome/components/datetime/datetime_base.h +0 -5
  116. esphome/components/datetime/datetime_entity.cpp +8 -8
  117. esphome/components/datetime/time_entity.cpp +4 -4
  118. esphome/components/debug/debug_component.cpp +1 -1
  119. esphome/components/debug/debug_component.h +1 -1
  120. esphome/components/debug/debug_esp32.cpp +4 -2
  121. esphome/components/deep_sleep/deep_sleep_component.cpp +11 -5
  122. esphome/components/deep_sleep/deep_sleep_esp32.cpp +7 -5
  123. esphome/components/demo/__init__.py +206 -0
  124. esphome/components/demo/demo_alarm_control_panel.h +65 -0
  125. esphome/components/demo/demo_button.h +15 -0
  126. esphome/components/demo/demo_date.h +34 -0
  127. esphome/components/demo/demo_datetime.h +40 -0
  128. esphome/components/demo/demo_lock.h +17 -0
  129. esphome/components/demo/demo_select.h +15 -0
  130. esphome/components/demo/demo_text.h +18 -0
  131. esphome/components/demo/demo_time.h +34 -0
  132. esphome/components/demo/demo_valve.h +54 -0
  133. esphome/components/dfrobot_sen0395/commands.cpp +3 -3
  134. esphome/components/dht/dht.cpp +29 -50
  135. esphome/components/dht12/dht12.cpp +2 -2
  136. esphome/components/display/display.h +5 -3
  137. esphome/components/dps310/dps310.cpp +7 -5
  138. esphome/components/ds1307/ds1307.cpp +2 -2
  139. esphome/components/dsmr/dsmr.cpp +5 -3
  140. esphome/components/duty_cycle/duty_cycle_sensor.cpp +2 -2
  141. esphome/components/duty_time/duty_time_sensor.cpp +5 -3
  142. esphome/components/ee895/ee895.cpp +3 -3
  143. esphome/components/ektf2232/touchscreen/ektf2232.cpp +1 -1
  144. esphome/components/emc2101/emc2101.cpp +11 -9
  145. esphome/components/ens160_base/ens160_base.cpp +2 -2
  146. esphome/components/ens210/ens210.cpp +2 -2
  147. esphome/components/es7210/es7210.cpp +6 -4
  148. esphome/components/es7243e/es7243e.cpp +1 -1
  149. esphome/components/es8156/es8156.cpp +1 -1
  150. esphome/components/es8311/es8311.cpp +8 -6
  151. esphome/components/es8388/__init__.py +0 -0
  152. esphome/components/es8388/audio_dac.py +26 -0
  153. esphome/components/es8388/es8388.cpp +289 -0
  154. esphome/components/es8388/es8388.h +81 -0
  155. esphome/components/es8388/es8388_const.h +83 -0
  156. esphome/components/es8388/select/__init__.py +47 -0
  157. esphome/components/es8388/select/adc_input_mic_select.cpp +12 -0
  158. esphome/components/es8388/select/adc_input_mic_select.h +15 -0
  159. esphome/components/es8388/select/dac_output_select.cpp +12 -0
  160. esphome/components/es8388/select/dac_output_select.h +15 -0
  161. esphome/components/esp32/__init__.py +118 -23
  162. esphome/components/esp32/boards.py +208 -125
  163. esphome/components/esp32/const.py +6 -0
  164. esphome/components/esp32/gpio.py +14 -1
  165. esphome/components/esp32/gpio_esp32_c5.py +45 -0
  166. esphome/components/esp32/gpio_esp32_p4.py +43 -0
  167. esphome/components/esp32/preferences.cpp +7 -7
  168. esphome/components/esp32_ble/__init__.py +115 -0
  169. esphome/components/esp32_ble/ble.cpp +101 -54
  170. esphome/components/esp32_ble/ble.h +24 -5
  171. esphome/components/esp32_ble/ble_event.h +172 -32
  172. esphome/components/esp32_ble/ble_scan_result.h +24 -0
  173. esphome/components/esp32_ble/ble_uuid.h +1 -1
  174. esphome/components/esp32_ble/queue.h +53 -27
  175. esphome/components/esp32_ble_client/ble_client_base.cpp +4 -2
  176. esphome/components/esp32_ble_server/__init__.py +4 -1
  177. esphome/components/esp32_ble_server/ble_characteristic.cpp +1 -0
  178. esphome/components/esp32_ble_server/ble_server.h +0 -1
  179. esphome/components/esp32_ble_tracker/__init__.py +7 -2
  180. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +107 -75
  181. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +16 -16
  182. esphome/components/esp32_camera/esp32_camera.cpp +35 -27
  183. esphome/components/esp32_camera_web_server/camera_web_server.cpp +4 -2
  184. esphome/components/esp32_dac/esp32_dac.cpp +2 -2
  185. esphome/components/esp32_improv/__init__.py +5 -1
  186. esphome/components/esp32_improv/esp32_improv_component.cpp +2 -2
  187. esphome/components/esp32_rmt_led_strip/led_strip.cpp +11 -7
  188. esphome/components/esp32_rmt_led_strip/light.py +5 -1
  189. esphome/components/esp32_touch/esp32_touch.cpp +12 -8
  190. esphome/components/esp8266/preferences.cpp +6 -6
  191. esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
  192. esphome/components/esp_ldo/__init__.py +91 -0
  193. esphome/components/esp_ldo/esp_ldo.cpp +43 -0
  194. esphome/components/esp_ldo/esp_ldo.h +43 -0
  195. esphome/components/esphome/ota/ota_esphome.cpp +15 -8
  196. esphome/components/ethernet/ethernet_component.cpp +38 -26
  197. esphome/components/ethernet/ethernet_component.h +1 -1
  198. esphome/components/event/__init__.py +1 -0
  199. esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
  200. esphome/components/ezo/ezo.cpp +1 -1
  201. esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
  202. esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
  203. esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
  204. esphome/components/fan/__init__.py +1 -0
  205. esphome/components/fan/fan.cpp +30 -19
  206. esphome/components/fastled_base/fastled_light.cpp +7 -5
  207. esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
  208. esphome/components/fs3000/fs3000.cpp +1 -1
  209. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
  210. esphome/components/ft63x6/ft63x6.cpp +5 -3
  211. esphome/components/gcja5/gcja5.cpp +0 -12
  212. esphome/components/gcja5/gcja5.h +8 -3
  213. esphome/components/gdk101/gdk101.cpp +2 -2
  214. esphome/components/globals/globals_component.h +13 -10
  215. esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
  216. esphome/components/gp8403/gp8403.cpp +4 -2
  217. esphome/components/gp8403/output/gp8403_output.cpp +4 -2
  218. esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
  219. esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
  220. esphome/components/gpio/switch/gpio_switch.cpp +1 -1
  221. esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
  222. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
  223. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
  224. esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
  225. esphome/components/growatt_solar/growatt_solar.cpp +6 -3
  226. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
  227. esphome/components/haier/haier_base.cpp +2 -2
  228. esphome/components/haier/hon_climate.cpp +13 -6
  229. esphome/components/havells_solar/havells_solar.cpp +5 -2
  230. esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
  231. esphome/components/hdc1080/hdc1080.cpp +2 -2
  232. esphome/components/he60r/he60r.cpp +4 -2
  233. esphome/components/hlw8012/hlw8012.cpp +6 -4
  234. esphome/components/hm3301/hm3301.cpp +2 -2
  235. esphome/components/hmc5883l/hmc5883l.cpp +2 -2
  236. esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
  237. esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
  238. esphome/components/honeywellabp/honeywellabp.cpp +4 -2
  239. esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
  240. esphome/components/hte501/hte501.cpp +3 -2
  241. esphome/components/http_request/__init__.py +2 -2
  242. esphome/components/http_request/http_request.cpp +7 -5
  243. esphome/components/http_request/http_request_idf.cpp +4 -2
  244. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  245. esphome/components/htu21d/htu21d.cpp +2 -2
  246. esphome/components/htu31d/htu31d.cpp +2 -2
  247. esphome/components/hx711/hx711.cpp +2 -2
  248. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
  249. esphome/components/hyt271/hyt271.cpp +2 -2
  250. esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
  251. esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
  252. esphome/components/i2s_audio/__init__.py +2 -0
  253. esphome/components/i2s_audio/i2s_audio.cpp +3 -4
  254. esphome/components/i2s_audio/i2s_audio.h +1 -1
  255. esphome/components/i2s_audio/media_player/__init__.py +1 -1
  256. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
  257. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +48 -30
  258. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +2 -0
  259. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +29 -11
  260. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +1 -0
  261. esphome/components/iaqcore/iaqcore.cpp +3 -3
  262. esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
  263. esphome/components/ili9xxx/ili9xxx_display.h +1 -1
  264. esphome/components/image/image.cpp +1 -0
  265. esphome/components/ina219/ina219.cpp +2 -2
  266. esphome/components/ina226/ina226.cpp +8 -5
  267. esphome/components/ina260/ina260.cpp +1 -1
  268. esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
  269. esphome/components/ina3221/ina3221.cpp +2 -2
  270. esphome/components/inkplate6/display.py +12 -2
  271. esphome/components/inkplate6/inkplate.cpp +13 -9
  272. esphome/components/inkplate6/inkplate.h +7 -6
  273. esphome/components/integration/integration_sensor.cpp +1 -1
  274. esphome/components/internal_temperature/internal_temperature.cpp +4 -4
  275. esphome/components/json/json_util.cpp +4 -5
  276. esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
  277. esphome/components/key_collector/key_collector.cpp +4 -2
  278. esphome/components/kmeteriso/kmeteriso.cpp +4 -4
  279. esphome/components/kuntze/kuntze.cpp +4 -2
  280. esphome/components/lc709203f/__init__.py +1 -0
  281. esphome/components/lc709203f/lc709203f.cpp +299 -0
  282. esphome/components/lc709203f/lc709203f.h +55 -0
  283. esphome/components/lc709203f/sensor.py +93 -0
  284. esphome/components/lcd_base/lcd_display.cpp +2 -2
  285. esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
  286. esphome/components/lcd_menu/lcd_menu.cpp +6 -4
  287. esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
  288. esphome/components/ld2410/ld2410.cpp +6 -7
  289. esphome/components/ld2420/ld2420.cpp +9 -7
  290. esphome/components/ld2450/ld2450.cpp +6 -4
  291. esphome/components/ld2450/sensor.py +2 -2
  292. esphome/components/ledc/ledc_output.cpp +32 -28
  293. esphome/components/libretiny/const.py +1 -1
  294. esphome/components/libretiny/preferences.cpp +6 -7
  295. esphome/components/light/__init__.py +2 -1
  296. esphome/components/light/esp_hsv_color.h +1 -1
  297. esphome/components/light/light_state.cpp +9 -5
  298. esphome/components/light/light_state.h +15 -15
  299. esphome/components/light/light_transformer.h +1 -1
  300. esphome/components/lightwaverf/LwTx.cpp +1 -1
  301. esphome/components/lightwaverf/lightwaverf.cpp +1 -1
  302. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
  303. esphome/components/lock/__init__.py +1 -0
  304. esphome/components/lock/lock.h +1 -1
  305. esphome/components/logger/__init__.py +6 -0
  306. esphome/components/logger/logger.cpp +11 -20
  307. esphome/components/logger/logger.h +1 -2
  308. esphome/components/logger/logger_esp32.cpp +5 -5
  309. esphome/components/ltr390/ltr390.cpp +8 -5
  310. esphome/components/ltr501/ltr501.cpp +19 -14
  311. esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
  312. esphome/components/lvgl/__init__.py +2 -2
  313. esphome/components/lvgl/automation.py +5 -4
  314. esphome/components/lvgl/defines.py +0 -2
  315. esphome/components/lvgl/lv_validation.py +1 -3
  316. esphome/components/lvgl/lvcode.py +7 -8
  317. esphome/components/lvgl/lvgl_esphome.cpp +26 -10
  318. esphome/components/lvgl/schemas.py +22 -23
  319. esphome/components/lvgl/trigger.py +8 -3
  320. esphome/components/lvgl/widgets/__init__.py +2 -2
  321. esphome/components/lvgl/widgets/canvas.py +9 -3
  322. esphome/components/lvgl/widgets/line.py +2 -1
  323. esphome/components/lvgl/widgets/tabview.py +7 -0
  324. esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
  325. esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
  326. esphome/components/max17043/max17043.cpp +2 -2
  327. esphome/components/max31855/max31855.cpp +2 -1
  328. esphome/components/max31856/max31856.cpp +9 -11
  329. esphome/components/max31865/max31865.cpp +6 -4
  330. esphome/components/max44009/max44009.cpp +2 -2
  331. esphome/components/max6675/max6675.cpp +1 -1
  332. esphome/components/max6956/max6956.cpp +5 -3
  333. esphome/components/max7219/max7219.cpp +8 -6
  334. esphome/components/max7219digit/automation.h +52 -0
  335. esphome/components/max7219digit/display.py +93 -1
  336. esphome/components/max7219digit/max7219digit.cpp +16 -13
  337. esphome/components/max9611/max9611.cpp +9 -6
  338. esphome/components/mcp23008/mcp23008.cpp +1 -1
  339. esphome/components/mcp23016/mcp23016.cpp +1 -1
  340. esphome/components/mcp23017/mcp23017.cpp +1 -1
  341. esphome/components/mcp23s08/mcp23s08.cpp +1 -1
  342. esphome/components/mcp23s17/mcp23s17.cpp +1 -1
  343. esphome/components/mcp3008/mcp3008.cpp +1 -1
  344. esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
  345. esphome/components/mcp3204/mcp3204.cpp +1 -1
  346. esphome/components/mcp4461/mcp4461.cpp +2 -2
  347. esphome/components/mcp4725/mcp4725.cpp +2 -2
  348. esphome/components/mcp4728/mcp4728.cpp +2 -2
  349. esphome/components/mcp9600/mcp9600.cpp +1 -1
  350. esphome/components/mcp9808/mcp9808.cpp +4 -4
  351. esphome/components/mdns/mdns_component.cpp +8 -2
  352. esphome/components/mdns/mdns_component.h +3 -1
  353. esphome/components/mdns/mdns_esp32.cpp +2 -2
  354. esphome/components/media_player/__init__.py +1 -0
  355. esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
  356. esphome/components/micro_wake_word/streaming_model.cpp +10 -6
  357. esphome/components/micronova/micronova.h +2 -2
  358. esphome/components/mics_4514/mics_4514.cpp +2 -2
  359. esphome/components/midea/air_conditioner.cpp +7 -5
  360. esphome/components/midea_ir/midea_ir.cpp +1 -1
  361. esphome/components/mipi_spi/mipi_spi.cpp +24 -15
  362. esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
  363. esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
  364. esphome/components/mlx90614/mlx90614.cpp +4 -3
  365. esphome/components/mmc5603/mmc5603.cpp +2 -2
  366. esphome/components/mmc5983/mmc5983.cpp +1 -1
  367. esphome/components/modbus/modbus.cpp +7 -5
  368. esphome/components/modbus_controller/modbus_controller.cpp +6 -4
  369. esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
  370. esphome/components/modbus_controller/switch/__init__.py +6 -2
  371. esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
  372. esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
  373. esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
  374. esphome/components/mpr121/mpr121.cpp +2 -2
  375. esphome/components/mpu6050/mpu6050.cpp +6 -6
  376. esphome/components/mpu6886/mpu6886.cpp +6 -6
  377. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
  378. esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
  379. esphome/components/mqtt/mqtt_client.cpp +31 -24
  380. esphome/components/mqtt/mqtt_component.cpp +3 -3
  381. esphome/components/mqtt/mqtt_cover.cpp +8 -4
  382. esphome/components/mqtt/mqtt_fan.cpp +12 -6
  383. esphome/components/mqtt/mqtt_valve.cpp +4 -2
  384. esphome/components/ms5611/ms5611.cpp +2 -2
  385. esphome/components/ms8607/ms8607.cpp +2 -2
  386. esphome/components/msa3xx/msa3xx.cpp +16 -12
  387. esphome/components/my9231/my9231.cpp +7 -5
  388. esphome/components/nau7802/nau7802.cpp +6 -4
  389. esphome/components/neopixelbus/neopixelbus_light.h +2 -2
  390. esphome/components/network/ip_address.h +1 -1
  391. esphome/components/network/util.cpp +13 -0
  392. esphome/components/nextion/base_component.py +2 -0
  393. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +3 -4
  394. esphome/components/nextion/display.py +34 -22
  395. esphome/components/nextion/nextion.cpp +182 -143
  396. esphome/components/nextion/nextion.h +36 -0
  397. esphome/components/nextion/nextion_commands.cpp +3 -3
  398. esphome/components/nextion/nextion_upload_arduino.cpp +69 -69
  399. esphome/components/nextion/nextion_upload_idf.cpp +79 -80
  400. esphome/components/nextion/sensor/nextion_sensor.cpp +5 -5
  401. esphome/components/nextion/switch/nextion_switch.cpp +2 -2
  402. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +3 -3
  403. esphome/components/nfc/nci_message.h +1 -1
  404. esphome/components/nfc/ndef_record.h +1 -1
  405. esphome/components/nfc/ndef_record_text.h +1 -1
  406. esphome/components/nfc/ndef_record_uri.h +1 -1
  407. esphome/components/nfc/nfc.h +1 -1
  408. esphome/components/nfc/nfc_tag.h +1 -1
  409. esphome/components/noblex/noblex.cpp +1 -1
  410. esphome/components/npi19/npi19.cpp +5 -7
  411. esphome/components/number/__init__.py +11 -0
  412. esphome/components/number/number.cpp +1 -1
  413. esphome/components/number/number.h +0 -4
  414. esphome/components/online_image/__init__.py +13 -1
  415. esphome/components/online_image/online_image.cpp +26 -4
  416. esphome/components/online_image/online_image.h +21 -4
  417. esphome/components/opentherm/generate.py +3 -3
  418. esphome/components/opentherm/hub.cpp +11 -7
  419. esphome/components/opentherm/number/number.cpp +5 -3
  420. esphome/components/opentherm/opentherm.h +1 -1
  421. esphome/components/opentherm/schema.py +13 -13
  422. esphome/components/opentherm/validate.py +1 -1
  423. esphome/components/openthread/__init__.py +146 -0
  424. esphome/components/openthread/const.py +10 -0
  425. esphome/components/openthread/openthread.cpp +206 -0
  426. esphome/components/openthread/openthread.h +68 -0
  427. esphome/components/openthread/openthread_esp.cpp +164 -0
  428. esphome/components/openthread/tlv.py +58 -0
  429. esphome/components/openthread_info/__init__.py +0 -0
  430. esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
  431. esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
  432. esphome/components/openthread_info/text_sensor.py +105 -0
  433. esphome/components/output/float_output.cpp +1 -1
  434. esphome/components/output/switch/output_switch.cpp +1 -1
  435. esphome/components/packet_transport/packet_transport.cpp +6 -4
  436. esphome/components/pca6416a/pca6416a.cpp +2 -2
  437. esphome/components/pca9554/pca9554.cpp +6 -4
  438. esphome/components/pca9685/pca9685_output.cpp +12 -8
  439. esphome/components/pcd8544/pcd_8544.cpp +1 -1
  440. esphome/components/pcf85063/pcf85063.cpp +2 -2
  441. esphome/components/pcf8563/pcf8563.cpp +2 -2
  442. esphome/components/pcf8574/pcf8574.cpp +2 -2
  443. esphome/components/pid/pid_climate.cpp +8 -5
  444. esphome/components/pid/pid_climate.h +1 -1
  445. esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
  446. esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
  447. esphome/components/pipsolar/pipsolar.cpp +3 -3
  448. esphome/components/pm1006/pm1006.cpp +3 -7
  449. esphome/components/pm1006/pm1006.h +4 -1
  450. esphome/components/pm2005/pm2005.cpp +12 -13
  451. esphome/components/pm2005/sensor.py +1 -1
  452. esphome/components/pmsa003i/pmsa003i.cpp +2 -2
  453. esphome/components/pmsx003/pmsx003.cpp +0 -4
  454. esphome/components/pmsx003/pmsx003.h +5 -2
  455. esphome/components/pmwcs3/pmwcs3.cpp +9 -13
  456. esphome/components/pmwcs3/pmwcs3.h +0 -1
  457. esphome/components/pn532/pn532.cpp +7 -7
  458. esphome/components/pn532/pn532.h +1 -1
  459. esphome/components/pn532_spi/pn532_spi.cpp +1 -1
  460. esphome/components/pn7150/pn7150.cpp +4 -4
  461. esphome/components/pn7160/pn7160.cpp +4 -4
  462. esphome/components/power_supply/power_supply.cpp +6 -4
  463. esphome/components/power_supply/power_supply.h +1 -1
  464. esphome/components/prometheus/__init__.py +0 -1
  465. esphome/components/psram/__init__.py +59 -35
  466. esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
  467. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
  468. esphome/components/pylontech/pylontech.cpp +2 -2
  469. esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
  470. esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
  471. esphome/components/pzemac/pzemac.cpp +4 -2
  472. esphome/components/pzemdc/pzemdc.cpp +4 -2
  473. esphome/components/qmc5883l/qmc5883l.cpp +2 -2
  474. esphome/components/qmp6988/qmp6988.cpp +2 -2
  475. esphome/components/qmp6988/qmp6988.h +1 -1
  476. esphome/components/qr_code/qr_code.cpp +5 -3
  477. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  478. esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
  479. esphome/components/rc522/rc522.cpp +5 -5
  480. esphome/components/rdm6300/rdm6300.cpp +1 -0
  481. esphome/components/remote_receiver/__init__.py +10 -2
  482. esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
  483. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
  484. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
  485. esphome/components/remote_transmitter/__init__.py +10 -2
  486. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
  487. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
  488. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
  489. esphome/components/resistance/resistance_sensor.cpp +6 -3
  490. esphome/components/restart/button/restart_button.cpp +1 -1
  491. esphome/components/restart/switch/restart_switch.cpp +1 -1
  492. esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
  493. esphome/components/rp2040/__init__.py +7 -0
  494. esphome/components/rp2040/core.cpp +8 -1
  495. esphome/components/rp2040/preferences.cpp +3 -3
  496. esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
  497. esphome/components/rp2040_pio_led_strip/light.py +1 -1
  498. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
  499. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
  500. esphome/components/rtttl/rtttl.cpp +11 -9
  501. esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
  502. esphome/components/safe_mode/safe_mode.cpp +9 -8
  503. esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
  504. esphome/components/scd30/scd30.cpp +11 -8
  505. esphome/components/scd4x/scd4x.cpp +12 -8
  506. esphome/components/sdl/display.py +40 -0
  507. esphome/components/sdl/sdl_esphome.cpp +2 -2
  508. esphome/components/sdl/sdl_esphome.h +8 -0
  509. esphome/components/sdm_meter/sdm_meter.cpp +5 -2
  510. esphome/components/sdp3x/sdp3x.cpp +11 -11
  511. esphome/components/sds011/sds011.cpp +5 -6
  512. esphome/components/sds011/sds011.h +4 -1
  513. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
  514. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
  515. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
  516. esphome/components/selec_meter/selec_meter.cpp +5 -2
  517. esphome/components/select/__init__.py +1 -0
  518. esphome/components/select/select.cpp +1 -1
  519. esphome/components/select/select.h +0 -4
  520. esphome/components/sen0321/sen0321.cpp +2 -2
  521. esphome/components/sen21231/sen21231.cpp +1 -1
  522. esphome/components/sen5x/sen5x.cpp +10 -7
  523. esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
  524. esphome/components/sensirion_common/i2c_sensirion.h +1 -0
  525. esphome/components/sensor/__init__.py +11 -1
  526. esphome/components/sensor/filter.h +1 -1
  527. esphome/components/sensor/sensor.cpp +8 -4
  528. esphome/components/sensor/sensor.h +12 -11
  529. esphome/components/servo/servo.cpp +12 -9
  530. esphome/components/servo/servo.h +1 -1
  531. esphome/components/sfa30/sfa30.cpp +1 -1
  532. esphome/components/sgp30/sgp30.cpp +10 -8
  533. esphome/components/sgp4x/sgp4x.cpp +49 -61
  534. esphome/components/sgp4x/sgp4x.h +0 -1
  535. esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
  536. esphome/components/sht3xd/sht3xd.cpp +1 -1
  537. esphome/components/sht4x/sht4x.cpp +2 -2
  538. esphome/components/shtcx/shtcx.cpp +13 -16
  539. esphome/components/shutdown/button/shutdown_button.cpp +1 -1
  540. esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
  541. esphome/components/sim800l/sim800l.cpp +2 -2
  542. esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
  543. esphome/components/sm16716/sm16716.cpp +1 -1
  544. esphome/components/sm2135/sm2135.cpp +1 -1
  545. esphome/components/sm2235/sm2235.cpp +5 -3
  546. esphome/components/sm2335/sm2335.cpp +5 -3
  547. esphome/components/sml/sml.cpp +1 -1
  548. esphome/components/sn74hc165/sn74hc165.cpp +1 -2
  549. esphome/components/sn74hc595/sn74hc595.cpp +1 -2
  550. esphome/components/sntp/sntp_component.cpp +1 -1
  551. esphome/components/socket/__init__.py +2 -0
  552. esphome/components/socket/bsd_sockets_impl.cpp +51 -7
  553. esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
  554. esphome/components/socket/lwip_sockets_impl.cpp +51 -7
  555. esphome/components/socket/socket.cpp +31 -0
  556. esphome/components/socket/socket.h +27 -1
  557. esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
  558. esphome/components/sonoff_d1/sonoff_d1.h +2 -2
  559. esphome/components/sound_level/sound_level.cpp +4 -2
  560. esphome/components/speaker/media_player/__init__.py +3 -0
  561. esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
  562. esphome/components/speaker/media_player/speaker_media_player.h +6 -0
  563. esphome/components/spi/__init__.py +10 -2
  564. esphome/components/spi/spi.cpp +4 -4
  565. esphome/components/spi/spi_arduino.cpp +22 -9
  566. esphome/components/spi_device/spi_device.cpp +1 -2
  567. esphome/components/sprinkler/sprinkler.cpp +9 -6
  568. esphome/components/sps30/sps30.cpp +16 -15
  569. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  570. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
  571. esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
  572. esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
  573. esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
  574. esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
  575. esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
  576. esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
  577. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
  578. esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
  579. esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
  580. esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
  581. esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
  582. esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
  583. esphome/components/st7567_base/st7567_base.cpp +3 -3
  584. esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
  585. esphome/components/st7567_spi/st7567_spi.cpp +1 -1
  586. esphome/components/st7701s/st7701s.cpp +4 -2
  587. esphome/components/st7735/st7735.cpp +3 -3
  588. esphome/components/st7789v/st7789v.cpp +10 -7
  589. esphome/components/st7920/st7920.cpp +6 -4
  590. esphome/components/statsd/statsd.cpp +9 -5
  591. esphome/components/status_led/light/status_led_light.cpp +3 -3
  592. esphome/components/status_led/light/status_led_light.h +1 -1
  593. esphome/components/status_led/status_led.cpp +1 -1
  594. esphome/components/stepper/stepper.h +5 -3
  595. esphome/components/sts3x/sts3x.cpp +2 -2
  596. esphome/components/switch/__init__.py +1 -0
  597. esphome/components/switch/switch.cpp +18 -12
  598. esphome/components/switch/switch.h +14 -8
  599. esphome/components/sx1509/__init__.py +53 -20
  600. esphome/components/sx1509/sx1509.cpp +29 -5
  601. esphome/components/sx1509/sx1509.h +9 -1
  602. esphome/components/t6615/t6615.cpp +1 -0
  603. esphome/components/tc74/tc74.cpp +1 -1
  604. esphome/components/tca9548a/tca9548a.cpp +1 -1
  605. esphome/components/tca9555/tca9555.cpp +2 -2
  606. esphome/components/tcs34725/tcs34725.cpp +4 -4
  607. esphome/components/tee501/tee501.cpp +3 -2
  608. esphome/components/tem3200/tem3200.cpp +5 -6
  609. esphome/components/template/alarm_control_panel/__init__.py +6 -0
  610. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +43 -12
  611. esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +4 -1
  612. esphome/components/template/cover/template_cover.cpp +1 -1
  613. esphome/components/template/select/template_select.cpp +6 -4
  614. esphome/components/template/text/template_text.cpp +2 -3
  615. esphome/components/template/valve/template_valve.cpp +5 -3
  616. esphome/components/text/__init__.py +10 -11
  617. esphome/components/text/text.cpp +1 -1
  618. esphome/components/text/text.h +0 -4
  619. esphome/components/text_sensor/__init__.py +1 -0
  620. esphome/components/text_sensor/text_sensor.cpp +8 -4
  621. esphome/components/text_sensor/text_sensor.h +6 -6
  622. esphome/components/thermostat/thermostat_climate.cpp +67 -43
  623. esphome/components/time/__init__.py +1 -2
  624. esphome/components/time_based/time_based_cover.cpp +4 -2
  625. esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
  626. esphome/components/tm1621/tm1621.cpp +3 -3
  627. esphome/components/tm1637/tm1637.cpp +9 -7
  628. esphome/components/tm1638/tm1638.cpp +7 -5
  629. esphome/components/tm1651/tm1651.cpp +2 -2
  630. esphome/components/tmp102/tmp102.cpp +1 -3
  631. esphome/components/tmp102/tmp102.h +0 -3
  632. esphome/components/tmp1075/tmp1075.cpp +12 -9
  633. esphome/components/tmp117/tmp117.cpp +2 -2
  634. esphome/components/tof10120/tof10120_sensor.cpp +2 -2
  635. esphome/components/tormatic/tormatic_cover.cpp +4 -2
  636. esphome/components/tsl2561/tsl2561.cpp +7 -5
  637. esphome/components/tsl2591/tsl2591.cpp +25 -27
  638. esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
  639. esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
  640. esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
  641. esphome/components/tuya/select/tuya_select.cpp +5 -3
  642. esphome/components/tx20/tx20.cpp +3 -3
  643. esphome/components/uart/__init__.py +4 -5
  644. esphome/components/uart/button/uart_button.cpp +1 -1
  645. esphome/components/uart/switch/uart_switch.cpp +2 -2
  646. esphome/components/uart/uart.cpp +2 -2
  647. esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
  648. esphome/components/uart/uart_component_esp8266.cpp +9 -7
  649. esphome/components/uart/uart_component_esp_idf.cpp +9 -7
  650. esphome/components/uart/uart_component_host.cpp +11 -8
  651. esphome/components/uart/uart_component_libretiny.cpp +8 -6
  652. esphome/components/uart/uart_component_rp2040.cpp +8 -6
  653. esphome/components/udp/udp_component.cpp +9 -5
  654. esphome/components/ufire_ec/ufire_ec.cpp +5 -3
  655. esphome/components/ufire_ise/ufire_ise.cpp +1 -1
  656. esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
  657. esphome/components/update/__init__.py +1 -0
  658. esphome/components/update/update_entity.cpp +1 -1
  659. esphome/components/update/update_entity.h +0 -3
  660. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
  661. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
  662. esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
  663. esphome/components/uptime/sensor/uptime_timestamp_sensor.cpp +1 -1
  664. esphome/components/usb_host/__init__.py +64 -0
  665. esphome/components/usb_host/usb_host.h +116 -0
  666. esphome/components/usb_host/usb_host_client.cpp +394 -0
  667. esphome/components/usb_host/usb_host_component.cpp +35 -0
  668. esphome/components/usb_uart/__init__.py +134 -0
  669. esphome/components/usb_uart/ch34x.cpp +80 -0
  670. esphome/components/usb_uart/cp210x.cpp +126 -0
  671. esphome/components/usb_uart/usb_uart.cpp +328 -0
  672. esphome/components/usb_uart/usb_uart.h +151 -0
  673. esphome/components/valve/__init__.py +1 -0
  674. esphome/components/veml3235/veml3235.cpp +13 -9
  675. esphome/components/veml7700/veml7700.cpp +10 -6
  676. esphome/components/voice_assistant/voice_assistant.cpp +7 -7
  677. esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
  678. esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
  679. esphome/components/web_server/server_index_v2.h +632 -630
  680. esphome/components/web_server/server_index_v3.h +411 -409
  681. esphome/components/web_server/web_server.cpp +5 -3
  682. esphome/components/web_server_base/web_server_base.cpp +1 -1
  683. esphome/components/web_server_idf/__init__.py +0 -2
  684. esphome/components/web_server_idf/utils.cpp +1 -1
  685. esphome/components/web_server_idf/web_server_idf.cpp +7 -3
  686. esphome/components/web_server_idf/web_server_idf.h +7 -0
  687. esphome/components/weikai/__init__.py +2 -0
  688. esphome/components/weikai/weikai.cpp +24 -22
  689. esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
  690. esphome/components/weikai_spi/weikai_spi.cpp +11 -6
  691. esphome/components/wiegand/wiegand.cpp +1 -1
  692. esphome/components/wifi/wifi_component.cpp +50 -37
  693. esphome/components/wifi/wifi_component.h +7 -4
  694. esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
  695. esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
  696. esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
  697. esphome/components/wireguard/wireguard.cpp +21 -21
  698. esphome/components/wl_134/text_sensor.py +1 -2
  699. esphome/components/wled/wled_light_effect.cpp +1 -1
  700. esphome/components/x9c/x9c.cpp +5 -3
  701. esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
  702. esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
  703. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
  704. esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
  705. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
  706. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
  707. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
  708. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
  709. esphome/components/xl9535/xl9535.cpp +2 -2
  710. esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
  711. esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
  712. esphome/config.py +3 -2
  713. esphome/config_validation.py +46 -17
  714. esphome/const.py +10 -1
  715. esphome/core/__init__.py +37 -18
  716. esphome/core/application.cpp +197 -8
  717. esphome/core/application.h +116 -6
  718. esphome/core/component.cpp +36 -15
  719. esphome/core/component.h +43 -13
  720. esphome/core/config.py +12 -0
  721. esphome/core/defines.h +10 -2
  722. esphome/core/entity_base.cpp +4 -16
  723. esphome/core/entity_base.h +27 -13
  724. esphome/core/helpers.cpp +1 -1
  725. esphome/core/helpers.h +5 -5
  726. esphome/core/log.h +2 -0
  727. esphome/core/log_const_en.h +4 -0
  728. esphome/core/scheduler.cpp +2 -2
  729. esphome/coroutine.py +3 -4
  730. esphome/cpp_generator.py +32 -32
  731. esphome/dashboard/core.py +2 -2
  732. esphome/dashboard/web_server.py +2 -2
  733. esphome/git.py +4 -4
  734. esphome/helpers.py +5 -6
  735. esphome/loader.py +8 -7
  736. esphome/log.py +7 -1
  737. esphome/platformio_api.py +2 -3
  738. esphome/storage_json.py +13 -5
  739. esphome/types.py +12 -13
  740. esphome/util.py +1 -2
  741. esphome/wizard.py +0 -16
  742. esphome/writer.py +5 -3
  743. esphome/yaml_util.py +6 -1
  744. esphome/zeroconf.py +1 -1
  745. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/METADATA +12 -11
  746. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/RECORD +750 -696
  747. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/WHEEL +1 -1
  748. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/entry_points.txt +0 -0
  749. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/licenses/LICENSE +0 -0
  750. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/top_level.txt +0 -0
@@ -37,7 +37,7 @@ bool Nextion::send_command_(const std::string &command) {
37
37
  }
38
38
  #endif // USE_NEXTION_COMMAND_SPACING
39
39
 
40
- ESP_LOGN(TAG, "send_command %s", command.c_str());
40
+ ESP_LOGN(TAG, "cmd: %s", command.c_str());
41
41
 
42
42
  this->write_str(command.c_str());
43
43
  const uint8_t to_send[3] = {0xFF, 0xFF, 0xFF};
@@ -57,7 +57,7 @@ bool Nextion::check_connect_() {
57
57
  // Check if the handshake should be skipped for the Nextion connection
58
58
  if (this->skip_connection_handshake_) {
59
59
  // Log the connection status without handshake
60
- ESP_LOGW(TAG, "Nextion display set as connected without performing handshake");
60
+ ESP_LOGW(TAG, "Connected (no handshake)");
61
61
  // Set the connection status to true
62
62
  this->is_connected_ = true;
63
63
  // Return true indicating the connection is set
@@ -88,27 +88,27 @@ bool Nextion::check_connect_() {
88
88
  this->recv_ret_string_(response, 0, false);
89
89
  if (!response.empty() && response[0] == 0x1A) {
90
90
  // Swallow invalid variable name responses that may be caused by the above commands
91
- ESP_LOGD(TAG, "0x1A error ignored during setup");
91
+ ESP_LOGD(TAG, "0x1A error ignored (setup)");
92
92
  return false;
93
93
  }
94
94
  if (response.empty() || response.find("comok") == std::string::npos) {
95
95
  #ifdef NEXTION_PROTOCOL_LOG
96
- ESP_LOGN(TAG, "Bad connect request %s", response.c_str());
96
+ ESP_LOGN(TAG, "Bad connect: %s", response.c_str());
97
97
  for (size_t i = 0; i < response.length(); i++) {
98
- ESP_LOGN(TAG, "response %s %d %d %c", response.c_str(), i, response[i], response[i]);
98
+ ESP_LOGN(TAG, "resp: %s %d %d %c", response.c_str(), i, response[i], response[i]);
99
99
  }
100
100
  #endif
101
101
 
102
- ESP_LOGW(TAG, "Nextion is not connected! ");
102
+ ESP_LOGW(TAG, "Not connected");
103
103
  comok_sent_ = 0;
104
104
  return false;
105
105
  }
106
106
 
107
107
  this->ignore_is_setup_ = true;
108
- ESP_LOGI(TAG, "Nextion is connected");
108
+ ESP_LOGI(TAG, "Connected");
109
109
  this->is_connected_ = true;
110
110
 
111
- ESP_LOGN(TAG, "connect request %s", response.c_str());
111
+ ESP_LOGN(TAG, "connect: %s", response.c_str());
112
112
 
113
113
  size_t start;
114
114
  size_t end = 0;
@@ -120,14 +120,14 @@ bool Nextion::check_connect_() {
120
120
 
121
121
  this->is_detected_ = (connect_info.size() == 7);
122
122
  if (this->is_detected_) {
123
- ESP_LOGN(TAG, "Received connect_info %zu", connect_info.size());
123
+ ESP_LOGN(TAG, "Connect info: %zu", connect_info.size());
124
124
 
125
125
  this->device_model_ = connect_info[2];
126
126
  this->firmware_version_ = connect_info[3];
127
127
  this->serial_number_ = connect_info[5];
128
128
  this->flash_size_ = connect_info[6];
129
129
  } else {
130
- ESP_LOGE(TAG, "Nextion returned bad connect value \"%s\"", response.c_str());
130
+ ESP_LOGE(TAG, "Bad connect value: '%s'", response.c_str());
131
131
  }
132
132
 
133
133
  this->ignore_is_setup_ = false;
@@ -148,31 +148,43 @@ void Nextion::reset_(bool reset_nextion) {
148
148
  void Nextion::dump_config() {
149
149
  ESP_LOGCONFIG(TAG, "Nextion:");
150
150
  if (this->skip_connection_handshake_) {
151
- ESP_LOGCONFIG(TAG, " Skip handshake: %s", YESNO(this->skip_connection_handshake_));
151
+ ESP_LOGCONFIG(TAG, " Skip handshake: %s", YESNO(this->skip_connection_handshake_));
152
152
  } else {
153
- ESP_LOGCONFIG(TAG, " Device Model: %s", this->device_model_.c_str());
154
- ESP_LOGCONFIG(TAG, " Firmware Version: %s", this->firmware_version_.c_str());
155
- ESP_LOGCONFIG(TAG, " Serial Number: %s", this->serial_number_.c_str());
156
- ESP_LOGCONFIG(TAG, " Flash Size: %s", this->flash_size_.c_str());
153
+ ESP_LOGCONFIG(TAG,
154
+ " Device Model: %s\n"
155
+ " FW Version: %s\n"
156
+ " Serial Number: %s\n"
157
+ " Flash Size: %s",
158
+ this->device_model_.c_str(), this->firmware_version_.c_str(), this->serial_number_.c_str(),
159
+ this->flash_size_.c_str());
157
160
  }
158
- ESP_LOGCONFIG(TAG, " Wake On Touch: %s", YESNO(this->auto_wake_on_touch_));
159
- ESP_LOGCONFIG(TAG, " Exit reparse: %s", YESNO(this->exit_reparse_on_start_));
161
+ ESP_LOGCONFIG(TAG,
162
+ " Wake On Touch: %s\n"
163
+ " Exit reparse: %s",
164
+ YESNO(this->auto_wake_on_touch_), YESNO(this->exit_reparse_on_start_));
165
+ #ifdef USE_NEXTION_MAX_COMMANDS_PER_LOOP
166
+ ESP_LOGCONFIG(TAG, " Max commands per loop: %u", this->max_commands_per_loop_);
167
+ #endif // USE_NEXTION_MAX_COMMANDS_PER_LOOP
160
168
 
161
169
  if (this->touch_sleep_timeout_ != 0) {
162
- ESP_LOGCONFIG(TAG, " Touch Timeout: %" PRIu32, this->touch_sleep_timeout_);
170
+ ESP_LOGCONFIG(TAG, " Touch Timeout: %" PRIu32, this->touch_sleep_timeout_);
163
171
  }
164
172
 
165
173
  if (this->wake_up_page_ != -1) {
166
- ESP_LOGCONFIG(TAG, " Wake Up Page: %" PRId16, this->wake_up_page_);
174
+ ESP_LOGCONFIG(TAG, " Wake Up Page: %d", this->wake_up_page_);
167
175
  }
168
176
 
169
177
  if (this->start_up_page_ != -1) {
170
- ESP_LOGCONFIG(TAG, " Start Up Page: %" PRId16, this->start_up_page_);
178
+ ESP_LOGCONFIG(TAG, " Start Up Page: %d", this->start_up_page_);
171
179
  }
172
180
 
173
181
  #ifdef USE_NEXTION_COMMAND_SPACING
174
- ESP_LOGCONFIG(TAG, " Command spacing: %" PRIu8 "ms", this->command_pacer_.get_spacing());
182
+ ESP_LOGCONFIG(TAG, " Cmd spacing: %u ms", this->command_pacer_.get_spacing());
175
183
  #endif // USE_NEXTION_COMMAND_SPACING
184
+
185
+ #ifdef USE_NEXTION_MAX_QUEUE_SIZE
186
+ ESP_LOGCONFIG(TAG, " Max queue size: %zu", this->max_queue_size_);
187
+ #endif
176
188
  }
177
189
 
178
190
  float Nextion::get_setup_priority() const { return setup_priority::DATA; }
@@ -248,7 +260,7 @@ bool Nextion::send_command_printf(const char *format, ...) {
248
260
  int ret = vsnprintf(buffer, sizeof(buffer), format, arg);
249
261
  va_end(arg);
250
262
  if (ret <= 0) {
251
- ESP_LOGW(TAG, "Building command for format '%s' failed!", format);
263
+ ESP_LOGW(TAG, "Bad cmd format: '%s'", format);
252
264
  return false;
253
265
  }
254
266
 
@@ -269,9 +281,9 @@ void Nextion::print_queue_members_() {
269
281
  break;
270
282
 
271
283
  if (i == nullptr) {
272
- ESP_LOGN(TAG, "Nextion queue is null");
284
+ ESP_LOGN(TAG, "Queue null");
273
285
  } else {
274
- ESP_LOGN(TAG, "Nextion queue type: %d:%s , name: %s", i->component->get_queue_type(),
286
+ ESP_LOGN(TAG, "Queue type: %d:%s, name: %s", i->component->get_queue_type(),
275
287
  i->component->get_queue_type_string().c_str(), i->component->get_variable_name().c_str());
276
288
  }
277
289
  }
@@ -312,7 +324,7 @@ void Nextion::loop() {
312
324
  this->started_ms_ = millis();
313
325
 
314
326
  if (this->started_ms_ + this->startup_override_ms_ < millis()) {
315
- ESP_LOGD(TAG, "Manually set nextion report ready");
327
+ ESP_LOGD(TAG, "Manual ready set");
316
328
  this->nextion_reports_is_setup_ = true;
317
329
  }
318
330
  }
@@ -321,20 +333,20 @@ void Nextion::loop() {
321
333
  bool Nextion::remove_from_q_(bool report_empty) {
322
334
  if (this->nextion_queue_.empty()) {
323
335
  if (report_empty) {
324
- ESP_LOGE(TAG, "Nextion queue is empty!");
336
+ ESP_LOGE(TAG, "Queue empty");
325
337
  }
326
338
  return false;
327
339
  }
328
340
 
329
341
  NextionQueue *nb = this->nextion_queue_.front();
330
342
  if (!nb || !nb->component) {
331
- ESP_LOGE(TAG, "Invalid queue entry!");
343
+ ESP_LOGE(TAG, "Invalid queue");
332
344
  this->nextion_queue_.pop_front();
333
345
  return false;
334
346
  }
335
347
  NextionComponentBase *component = nb->component;
336
348
 
337
- ESP_LOGN(TAG, "Removing %s from the queue", component->get_variable_name().c_str());
349
+ ESP_LOGN(TAG, "Removed: %s", component->get_variable_name().c_str());
338
350
 
339
351
  if (component->get_queue_type() == NextionQueueType::NO_RESULT) {
340
352
  if (component->get_variable_name() == "sleep_wake") {
@@ -361,6 +373,10 @@ void Nextion::process_nextion_commands_() {
361
373
  return;
362
374
  }
363
375
 
376
+ #ifdef USE_NEXTION_MAX_COMMANDS_PER_LOOP
377
+ size_t commands_processed = 0;
378
+ #endif // USE_NEXTION_MAX_COMMANDS_PER_LOOP
379
+
364
380
  #ifdef USE_NEXTION_COMMAND_SPACING
365
381
  if (!this->command_pacer_.can_send()) {
366
382
  return; // Will try again in next loop iteration
@@ -370,16 +386,22 @@ void Nextion::process_nextion_commands_() {
370
386
  size_t to_process_length = 0;
371
387
  std::string to_process;
372
388
 
373
- ESP_LOGN(TAG, "this->command_data_ %s length %d", this->command_data_.c_str(), this->command_data_.length());
389
+ ESP_LOGN(TAG, "command_data_ %s len %d", this->command_data_.c_str(), this->command_data_.length());
374
390
  #ifdef NEXTION_PROTOCOL_LOG
375
391
  this->print_queue_members_();
376
392
  #endif
377
393
  while ((to_process_length = this->command_data_.find(COMMAND_DELIMITER)) != std::string::npos) {
378
- ESP_LOGN(TAG, "print_queue_members_ size %zu", this->nextion_queue_.size());
394
+ #ifdef USE_NEXTION_MAX_COMMANDS_PER_LOOP
395
+ if (++commands_processed > this->max_commands_per_loop_) {
396
+ ESP_LOGW(TAG, "Command processing limit exceeded");
397
+ break;
398
+ }
399
+ #endif // USE_NEXTION_MAX_COMMANDS_PER_LOOP
400
+ ESP_LOGN(TAG, "queue size: %zu", this->nextion_queue_.size());
379
401
  while (to_process_length + COMMAND_DELIMITER.length() < this->command_data_.length() &&
380
402
  static_cast<uint8_t>(this->command_data_[to_process_length + COMMAND_DELIMITER.length()]) == 0xFF) {
381
403
  ++to_process_length;
382
- ESP_LOGN(TAG, "Add extra 0xFF to process");
404
+ ESP_LOGN(TAG, "Add 0xFF");
383
405
  }
384
406
 
385
407
  this->nextion_event_ = this->command_data_[0];
@@ -389,19 +411,19 @@ void Nextion::process_nextion_commands_() {
389
411
 
390
412
  switch (this->nextion_event_) {
391
413
  case 0x00: // instruction sent by user has failed
392
- ESP_LOGW(TAG, "Nextion reported invalid instruction!");
414
+ ESP_LOGW(TAG, "Invalid instruction");
393
415
  this->remove_from_q_();
394
416
 
395
417
  break;
396
418
  case 0x01: // instruction sent by user was successful
397
419
 
398
- ESP_LOGVV(TAG, "instruction sent by user was successful");
420
+ ESP_LOGVV(TAG, "Cmd OK");
399
421
  ESP_LOGN(TAG, "this->nextion_queue_.empty() %s", this->nextion_queue_.empty() ? "True" : "False");
400
422
 
401
423
  this->remove_from_q_();
402
424
  if (!this->is_setup_) {
403
425
  if (this->nextion_queue_.empty()) {
404
- ESP_LOGD(TAG, "Nextion is setup");
426
+ ESP_LOGD(TAG, "Setup complete");
405
427
  this->is_setup_ = true;
406
428
  this->setup_callback_.call();
407
429
  }
@@ -411,96 +433,91 @@ void Nextion::process_nextion_commands_() {
411
433
  #endif
412
434
  break;
413
435
  case 0x02: // invalid Component ID or name was used
414
- ESP_LOGW(TAG, "Nextion reported component ID or name invalid!");
436
+ ESP_LOGW(TAG, "Invalid component ID/name");
415
437
  this->remove_from_q_();
416
438
  break;
417
439
  case 0x03: // invalid Page ID or name was used
418
- ESP_LOGW(TAG, "Nextion reported page ID invalid!");
440
+ ESP_LOGW(TAG, "Invalid page ID");
419
441
  this->remove_from_q_();
420
442
  break;
421
443
  case 0x04: // invalid Picture ID was used
422
- ESP_LOGW(TAG, "Nextion reported picture ID invalid!");
444
+ ESP_LOGW(TAG, "Invalid picture ID");
423
445
  this->remove_from_q_();
424
446
  break;
425
447
  case 0x05: // invalid Font ID was used
426
- ESP_LOGW(TAG, "Nextion reported font ID invalid!");
448
+ ESP_LOGW(TAG, "Invalid font ID");
427
449
  this->remove_from_q_();
428
450
  break;
429
451
  case 0x06: // File operation fails
430
- ESP_LOGW(TAG, "Nextion File operation fail!");
452
+ ESP_LOGW(TAG, "File operation failed");
431
453
  break;
432
454
  case 0x09: // Instructions with CRC validation fails their CRC check
433
- ESP_LOGW(TAG, "Nextion Instructions with CRC validation fails their CRC check!");
455
+ ESP_LOGW(TAG, "CRC validation failed");
434
456
  break;
435
457
  case 0x11: // invalid Baud rate was used
436
- ESP_LOGW(TAG, "Nextion reported baud rate invalid!");
458
+ ESP_LOGW(TAG, "Invalid baud rate");
437
459
  break;
438
460
  case 0x12: // invalid Waveform ID or Channel # was used
439
461
  if (this->waveform_queue_.empty()) {
440
- ESP_LOGW(TAG,
441
- "Nextion reported invalid Waveform ID or Channel # was used but no waveform sensor in queue found!");
462
+ ESP_LOGW(TAG, "Waveform ID/ch used but no sensor queued");
442
463
  } else {
443
464
  auto &nb = this->waveform_queue_.front();
444
465
  NextionComponentBase *component = nb->component;
445
466
 
446
- ESP_LOGW(TAG, "Nextion reported invalid Waveform ID %d or Channel # %d was used!",
447
- component->get_component_id(), component->get_wave_channel_id());
467
+ ESP_LOGW(TAG, "Invalid waveform ID %d/ch %d", component->get_component_id(),
468
+ component->get_wave_channel_id());
448
469
 
449
- ESP_LOGN(TAG, "Removing waveform from queue with component id %d and waveform id %d",
450
- component->get_component_id(), component->get_wave_channel_id());
470
+ ESP_LOGN(TAG, "Remove waveform ID %d/ch %d", component->get_component_id(), component->get_wave_channel_id());
451
471
 
452
472
  delete nb; // NOLINT(cppcoreguidelines-owning-memory)
453
473
  this->waveform_queue_.pop_front();
454
474
  }
455
475
  break;
456
476
  case 0x1A: // variable name invalid
457
- ESP_LOGW(TAG, "Nextion reported variable name invalid!");
477
+ ESP_LOGW(TAG, "Invalid variable name");
458
478
  this->remove_from_q_();
459
479
  break;
460
480
  case 0x1B: // variable operation invalid
461
- ESP_LOGW(TAG, "Nextion reported variable operation invalid!");
481
+ ESP_LOGW(TAG, "Invalid variable operation");
462
482
  this->remove_from_q_();
463
483
  break;
464
484
  case 0x1C: // failed to assign
465
- ESP_LOGW(TAG, "Nextion reported failed to assign variable!");
485
+ ESP_LOGW(TAG, "Variable assign failed");
466
486
  this->remove_from_q_();
467
487
  break;
468
488
  case 0x1D: // operate EEPROM failed
469
- ESP_LOGW(TAG, "Nextion reported operating EEPROM failed!");
489
+ ESP_LOGW(TAG, "EEPROM operation failed");
470
490
  break;
471
491
  case 0x1E: // parameter quantity invalid
472
- ESP_LOGW(TAG, "Nextion reported parameter quantity invalid!");
492
+ ESP_LOGW(TAG, "Invalid parameter count");
473
493
  this->remove_from_q_();
474
494
  break;
475
495
  case 0x1F: // IO operation failed
476
- ESP_LOGW(TAG, "Nextion reported component I/O operation invalid!");
496
+ ESP_LOGW(TAG, "Invalid component I/O");
477
497
  break;
478
498
  case 0x20: // undefined escape characters
479
- ESP_LOGW(TAG, "Nextion reported undefined escape characters!");
499
+ ESP_LOGW(TAG, "Undefined escape chars");
480
500
  this->remove_from_q_();
481
501
  break;
482
502
  case 0x23: // too long variable name
483
- ESP_LOGW(TAG, "Nextion reported too long variable name!");
503
+ ESP_LOGW(TAG, "Variable name too long");
484
504
  this->remove_from_q_();
485
505
  break;
486
506
  case 0x24: // Serial Buffer overflow occurs
487
507
  // Buffer will continue to receive the current instruction, all previous instructions are lost.
488
- ESP_LOGE(TAG, "Nextion reported Serial Buffer overflow!");
508
+ ESP_LOGE(TAG, "Serial buffer overflow");
489
509
  this->buffer_overflow_callback_.call();
490
510
  break;
491
511
  case 0x65: { // touch event return data
492
512
  if (to_process_length != 3) {
493
- ESP_LOGW(TAG, "Touch event data is expecting 3, received %zu", to_process_length);
513
+ ESP_LOGW(TAG, "Incorrect touch len: %zu (need 3)", to_process_length);
494
514
  break;
495
515
  }
496
516
 
497
517
  uint8_t page_id = to_process[0];
498
518
  uint8_t component_id = to_process[1];
499
519
  uint8_t touch_event = to_process[2]; // 0 -> release, 1 -> press
500
- ESP_LOGD(TAG, "Got touch event:");
501
- ESP_LOGD(TAG, " page_id: %u", page_id);
502
- ESP_LOGD(TAG, " component_id: %u", component_id);
503
- ESP_LOGD(TAG, " event type: %s", touch_event ? "PRESS" : "RELEASE");
520
+ ESP_LOGD(TAG, "Touch %s: page %u comp %u", touch_event ? "PRESS" : "RELEASE", page_id, component_id);
504
521
  for (auto *touch : this->touch_) {
505
522
  touch->process_touch(page_id, component_id, touch_event != 0);
506
523
  }
@@ -510,12 +527,12 @@ void Nextion::process_nextion_commands_() {
510
527
  case 0x66: { // Nextion initiated new page event return data.
511
528
  // Also is used for sendme command which we never explicitly initiate
512
529
  if (to_process_length != 1) {
513
- ESP_LOGW(TAG, "New page event data is expecting 1, received %zu", to_process_length);
530
+ ESP_LOGW(TAG, "Page event: expect 1, got %zu", to_process_length);
514
531
  break;
515
532
  }
516
533
 
517
534
  uint8_t page_id = to_process[0];
518
- ESP_LOGD(TAG, "Got new page: %u", page_id);
535
+ ESP_LOGD(TAG, "New page: %u", page_id);
519
536
  this->page_callback_.call(page_id);
520
537
  break;
521
538
  }
@@ -525,7 +542,7 @@ void Nextion::process_nextion_commands_() {
525
542
  case 0x68: { // touch coordinate data (sleep)
526
543
 
527
544
  if (to_process_length != 5) {
528
- ESP_LOGW(TAG, "Touch coordinate data is expecting 5, received %zu", to_process_length);
545
+ ESP_LOGW(TAG, "Touch coordinate: expect 5, got %zu", to_process_length);
529
546
  ESP_LOGW(TAG, "%s", to_process.c_str());
530
547
  break;
531
548
  }
@@ -533,10 +550,7 @@ void Nextion::process_nextion_commands_() {
533
550
  uint16_t x = (uint16_t(to_process[0]) << 8) | to_process[1];
534
551
  uint16_t y = (uint16_t(to_process[2]) << 8) | to_process[3];
535
552
  uint8_t touch_event = to_process[4]; // 0 -> release, 1 -> press
536
- ESP_LOGD(TAG, "Got touch event:");
537
- ESP_LOGD(TAG, " x: %u", x);
538
- ESP_LOGD(TAG, " y: %u", y);
539
- ESP_LOGD(TAG, " type: %s", touch_event ? "PRESS" : "RELEASE");
553
+ ESP_LOGD(TAG, "Touch %s at %u,%u", touch_event ? "PRESS" : "RELEASE", x, y);
540
554
  break;
541
555
  }
542
556
 
@@ -547,25 +561,23 @@ void Nextion::process_nextion_commands_() {
547
561
  case 0x70: // string variable data return
548
562
  {
549
563
  if (this->nextion_queue_.empty()) {
550
- ESP_LOGW(TAG, "ERROR: Received string return but the queue is empty");
564
+ ESP_LOGW(TAG, "String return but queue is empty");
551
565
  break;
552
566
  }
553
567
 
554
568
  NextionQueue *nb = this->nextion_queue_.front();
555
569
  if (!nb || !nb->component) {
556
- ESP_LOGE(TAG, "Invalid queue entry!");
570
+ ESP_LOGE(TAG, "Invalid queue entry");
557
571
  this->nextion_queue_.pop_front();
558
572
  return;
559
573
  }
560
574
  NextionComponentBase *component = nb->component;
561
575
 
562
576
  if (component->get_queue_type() != NextionQueueType::TEXT_SENSOR) {
563
- ESP_LOGE(TAG, "ERROR: Received string return but next in queue \"%s\" is not a text sensor",
564
- component->get_variable_name().c_str());
577
+ ESP_LOGE(TAG, "String return but '%s' not text sensor", component->get_variable_name().c_str());
565
578
  } else {
566
- ESP_LOGN(TAG, "Received get_string response: \"%s\" for component id: %s, type: %s", to_process.c_str(),
567
- component->get_variable_name().c_str(), component->get_queue_type_string().c_str());
568
- component->set_state_from_string(to_process, true, false);
579
+ ESP_LOGN(TAG, "String resp: '%s' id: %s type: %s", to_process.c_str(), component->get_variable_name().c_str(),
580
+ component->get_queue_type_string().c_str());
569
581
  }
570
582
 
571
583
  delete nb; // NOLINT(cppcoreguidelines-owning-memory)
@@ -581,12 +593,12 @@ void Nextion::process_nextion_commands_() {
581
593
  case 0x71: // numeric variable data return
582
594
  {
583
595
  if (this->nextion_queue_.empty()) {
584
- ESP_LOGE(TAG, "ERROR: Received numeric return but the queue is empty");
596
+ ESP_LOGE(TAG, "Numeric return but queue empty");
585
597
  break;
586
598
  }
587
599
 
588
600
  if (to_process_length == 0) {
589
- ESP_LOGE(TAG, "ERROR: Received numeric return but no data!");
601
+ ESP_LOGE(TAG, "Numeric return but no data");
590
602
  break;
591
603
  }
592
604
 
@@ -598,7 +610,7 @@ void Nextion::process_nextion_commands_() {
598
610
 
599
611
  NextionQueue *nb = this->nextion_queue_.front();
600
612
  if (!nb || !nb->component) {
601
- ESP_LOGE(TAG, "Invalid queue entry!");
613
+ ESP_LOGE(TAG, "Invalid queue");
602
614
  this->nextion_queue_.pop_front();
603
615
  return;
604
616
  }
@@ -607,12 +619,11 @@ void Nextion::process_nextion_commands_() {
607
619
  if (component->get_queue_type() != NextionQueueType::SENSOR &&
608
620
  component->get_queue_type() != NextionQueueType::BINARY_SENSOR &&
609
621
  component->get_queue_type() != NextionQueueType::SWITCH) {
610
- ESP_LOGE(TAG, "ERROR: Received numeric return but next in queue \"%s\" is not a valid sensor type %d",
611
- component->get_variable_name().c_str(), component->get_queue_type());
622
+ ESP_LOGE(TAG, "Numeric return but '%s' invalid type %d", component->get_variable_name().c_str(),
623
+ component->get_queue_type());
612
624
  } else {
613
- ESP_LOGN(TAG, "Received numeric return for variable %s, queue type %d:%s, value %d",
614
- component->get_variable_name().c_str(), component->get_queue_type(),
615
- component->get_queue_type_string().c_str(), value);
625
+ ESP_LOGN(TAG, "Numeric: %s type %d:%s val %d", component->get_variable_name().c_str(),
626
+ component->get_queue_type(), component->get_queue_type_string().c_str(), value);
616
627
  component->set_state_from_int(value, true, false);
617
628
  }
618
629
 
@@ -623,14 +634,14 @@ void Nextion::process_nextion_commands_() {
623
634
  }
624
635
 
625
636
  case 0x86: { // device automatically enters into sleep mode
626
- ESP_LOGVV(TAG, "Received Nextion entering sleep automatically");
637
+ ESP_LOGVV(TAG, "Auto sleep");
627
638
  this->is_sleeping_ = true;
628
639
  this->sleep_callback_.call();
629
640
  break;
630
641
  }
631
642
  case 0x87: // device automatically wakes up
632
643
  {
633
- ESP_LOGVV(TAG, "Received Nextion leaves sleep automatically");
644
+ ESP_LOGVV(TAG, "Auto wake");
634
645
  this->is_sleeping_ = false;
635
646
  this->wake_callback_.call();
636
647
  this->all_components_send_state_(false);
@@ -638,7 +649,7 @@ void Nextion::process_nextion_commands_() {
638
649
  }
639
650
  case 0x88: // system successful start up
640
651
  {
641
- ESP_LOGD(TAG, "system successful start up %zu", to_process_length);
652
+ ESP_LOGD(TAG, "System start: %zu", to_process_length);
642
653
  this->nextion_reports_is_setup_ = true;
643
654
  break;
644
655
  }
@@ -657,17 +668,15 @@ void Nextion::process_nextion_commands_() {
657
668
  // Get variable name
658
669
  auto index = to_process.find('\0');
659
670
  if (index == std::string::npos || (to_process_length - index - 1) < 1) {
660
- ESP_LOGE(TAG, "Bad switch component data received for 0x90 event!");
661
- ESP_LOGN(TAG, "to_process %s %zu %d", to_process.c_str(), to_process_length, index);
671
+ ESP_LOGE(TAG, "Bad switch data (0x90)");
672
+ ESP_LOGN(TAG, "proc: %s %zu %d", to_process.c_str(), to_process_length, index);
662
673
  break;
663
674
  }
664
675
 
665
676
  variable_name = to_process.substr(0, index);
666
677
  ++index;
667
678
 
668
- ESP_LOGN(TAG, "Got Switch:");
669
- ESP_LOGN(TAG, " variable_name: %s", variable_name.c_str());
670
- ESP_LOGN(TAG, " value: %d", to_process[0] != 0);
679
+ ESP_LOGN(TAG, "Switch %s: %s", ONOFF(to_process[index] != 0), variable_name.c_str());
671
680
 
672
681
  for (auto *switchtype : this->switchtype_) {
673
682
  switchtype->process_bool(variable_name, to_process[index] != 0);
@@ -685,8 +694,8 @@ void Nextion::process_nextion_commands_() {
685
694
 
686
695
  auto index = to_process.find('\0');
687
696
  if (index == std::string::npos || (to_process_length - index - 1) != 4) {
688
- ESP_LOGE(TAG, "Bad sensor component data received for 0x91 event!");
689
- ESP_LOGN(TAG, "to_process %s %zu %d", to_process.c_str(), to_process_length, index);
697
+ ESP_LOGE(TAG, "Bad sensor data (0x91)");
698
+ ESP_LOGN(TAG, "proc: %s %zu %d", to_process.c_str(), to_process_length, index);
690
699
  break;
691
700
  }
692
701
 
@@ -698,9 +707,7 @@ void Nextion::process_nextion_commands_() {
698
707
  value += to_process[i + index + 1] << (8 * i);
699
708
  }
700
709
 
701
- ESP_LOGN(TAG, "Got sensor:");
702
- ESP_LOGN(TAG, " variable_name: %s", variable_name.c_str());
703
- ESP_LOGN(TAG, " value: %d", value);
710
+ ESP_LOGN(TAG, "Sensor: %s=%d", variable_name.c_str(), value);
704
711
 
705
712
  for (auto *sensor : this->sensortype_) {
706
713
  sensor->process_sensor(variable_name, value);
@@ -722,8 +729,8 @@ void Nextion::process_nextion_commands_() {
722
729
  // Get variable name
723
730
  auto index = to_process.find('\0');
724
731
  if (index == std::string::npos || (to_process_length - index - 1) < 1) {
725
- ESP_LOGE(TAG, "Bad text sensor component data received for 0x92 event!");
726
- ESP_LOGN(TAG, "to_process %s %zu %d", to_process.c_str(), to_process_length, index);
732
+ ESP_LOGE(TAG, "Bad text data (0x92)");
733
+ ESP_LOGN(TAG, "proc: %s %zu %d", to_process.c_str(), to_process_length, index);
727
734
  break;
728
735
  }
729
736
 
@@ -732,9 +739,7 @@ void Nextion::process_nextion_commands_() {
732
739
 
733
740
  text_value = to_process.substr(index);
734
741
 
735
- ESP_LOGN(TAG, "Got Text Sensor:");
736
- ESP_LOGN(TAG, " variable_name: %s", variable_name.c_str());
737
- ESP_LOGN(TAG, " value: %s", text_value.c_str());
742
+ ESP_LOGN(TAG, "Text sensor: %s='%s'", variable_name.c_str(), text_value.c_str());
738
743
 
739
744
  // NextionTextSensorResponseQueue *nq = new NextionTextSensorResponseQueue;
740
745
  // nq->variable_name = variable_name;
@@ -757,17 +762,15 @@ void Nextion::process_nextion_commands_() {
757
762
  // Get variable name
758
763
  auto index = to_process.find('\0');
759
764
  if (index == std::string::npos || (to_process_length - index - 1) < 1) {
760
- ESP_LOGE(TAG, "Bad binary sensor component data received for 0x92 event!");
761
- ESP_LOGN(TAG, "to_process %s %zu %d", to_process.c_str(), to_process_length, index);
765
+ ESP_LOGE(TAG, "Bad binary data (0x92)");
766
+ ESP_LOGN(TAG, "proc: %s %zu %d", to_process.c_str(), to_process_length, index);
762
767
  break;
763
768
  }
764
769
 
765
770
  variable_name = to_process.substr(0, index);
766
771
  ++index;
767
772
 
768
- ESP_LOGN(TAG, "Got Binary Sensor:");
769
- ESP_LOGN(TAG, " variable_name: %s", variable_name.c_str());
770
- ESP_LOGN(TAG, " value: %d", to_process[index] != 0);
773
+ ESP_LOGN(TAG, "Binary sensor: %s=%s", variable_name.c_str(), ONOFF(to_process[index] != 0));
771
774
 
772
775
  for (auto *binarysensortype : this->binarysensortype_) {
773
776
  binarysensortype->process_bool(&variable_name[0], to_process[index] != 0);
@@ -775,14 +778,14 @@ void Nextion::process_nextion_commands_() {
775
778
  break;
776
779
  }
777
780
  case 0xFD: { // data transparent transmit finished
778
- ESP_LOGVV(TAG, "Nextion reported data transmit finished!");
781
+ ESP_LOGVV(TAG, "Data transmit done");
779
782
  this->check_pending_waveform_();
780
783
  break;
781
784
  }
782
785
  case 0xFE: { // data transparent transmit ready
783
- ESP_LOGVV(TAG, "Nextion reported ready for transmit!");
786
+ ESP_LOGVV(TAG, "Ready for transmit");
784
787
  if (this->waveform_queue_.empty()) {
785
- ESP_LOGE(TAG, "No waveforms in queue to send data!");
788
+ ESP_LOGE(TAG, "No waveforms queued");
786
789
  break;
787
790
  }
788
791
 
@@ -793,8 +796,8 @@ void Nextion::process_nextion_commands_() {
793
796
 
794
797
  this->write_array(component->get_wave_buffer().data(), static_cast<int>(buffer_to_send));
795
798
 
796
- ESP_LOGN(TAG, "Nextion sending waveform data for component id %d and waveform id %d, size %zu",
797
- component->get_component_id(), component->get_wave_channel_id(), buffer_to_send);
799
+ ESP_LOGN(TAG, "Send waveform: component id %d, waveform id %d, size %zu", component->get_component_id(),
800
+ component->get_wave_channel_id(), buffer_to_send);
798
801
 
799
802
  component->clear_wave_buffer(buffer_to_send);
800
803
  delete nb; // NOLINT(cppcoreguidelines-owning-memory)
@@ -802,14 +805,12 @@ void Nextion::process_nextion_commands_() {
802
805
  break;
803
806
  }
804
807
  default:
805
- ESP_LOGW(TAG, "Received unknown event from nextion: 0x%02X", this->nextion_event_);
808
+ ESP_LOGW(TAG, "Unknown event: 0x%02X", this->nextion_event_);
806
809
  break;
807
810
  }
808
811
 
809
812
  // ESP_LOGN(TAG, "nextion_event_ deleting from 0 to %d", to_process_length + COMMAND_DELIMITER.length() + 1);
810
813
  this->command_data_.erase(0, to_process_length + COMMAND_DELIMITER.length() + 1);
811
- // App.feed_wdt(); Remove before master merge
812
- this->process_serial_();
813
814
  }
814
815
 
815
816
  uint32_t ms = millis();
@@ -819,15 +820,15 @@ void Nextion::process_nextion_commands_() {
819
820
  NextionComponentBase *component = this->nextion_queue_[i]->component;
820
821
  if (this->nextion_queue_[i]->queue_time + this->max_q_age_ms_ < ms) {
821
822
  if (this->nextion_queue_[i]->queue_time == 0) {
822
- ESP_LOGD(TAG, "Removing old queue type \"%s\" name \"%s\" queue_time 0",
823
- component->get_queue_type_string().c_str(), component->get_variable_name().c_str());
823
+ ESP_LOGD(TAG, "Remove old queue '%s':'%s' (t=0)", component->get_queue_type_string().c_str(),
824
+ component->get_variable_name().c_str());
824
825
  }
825
826
 
826
827
  if (component->get_variable_name() == "sleep_wake") {
827
828
  this->is_sleeping_ = false;
828
829
  }
829
830
 
830
- ESP_LOGD(TAG, "Removing old queue type \"%s\" name \"%s\"", component->get_queue_type_string().c_str(),
831
+ ESP_LOGD(TAG, "Remove old queue '%s':'%s'", component->get_queue_type_string().c_str(),
831
832
  component->get_variable_name().c_str());
832
833
 
833
834
  if (component->get_queue_type() == NextionQueueType::NO_RESULT) {
@@ -847,20 +848,17 @@ void Nextion::process_nextion_commands_() {
847
848
  }
848
849
  }
849
850
  }
850
- ESP_LOGN(TAG, "Loop End");
851
+ ESP_LOGN(TAG, "Loop end");
851
852
  // App.feed_wdt(); Remove before master merge
852
853
  this->process_serial_();
853
- } // namespace nextion
854
+ } // Nextion::process_nextion_commands_()
854
855
 
855
856
  void Nextion::set_nextion_sensor_state(int queue_type, const std::string &name, float state) {
856
857
  this->set_nextion_sensor_state(static_cast<NextionQueueType>(queue_type), name, state);
857
858
  }
858
859
 
859
860
  void Nextion::set_nextion_sensor_state(NextionQueueType queue_type, const std::string &name, float state) {
860
- ESP_LOGN(TAG, "Received state:");
861
- ESP_LOGN(TAG, " variable: %s", name.c_str());
862
- ESP_LOGN(TAG, " state: %lf", state);
863
- ESP_LOGN(TAG, " queue type: %d", queue_type);
861
+ ESP_LOGN(TAG, "State: %s=%lf (type %d)", name.c_str(), state, queue_type);
864
862
 
865
863
  switch (queue_type) {
866
864
  case NextionQueueType::SENSOR: {
@@ -891,15 +889,13 @@ void Nextion::set_nextion_sensor_state(NextionQueueType queue_type, const std::s
891
889
  break;
892
890
  }
893
891
  default: {
894
- ESP_LOGW(TAG, "set_nextion_sensor_state does not support a queue type %d", queue_type);
892
+ ESP_LOGW(TAG, "set_sensor_state: bad type %d", queue_type);
895
893
  }
896
894
  }
897
895
  }
898
896
 
899
897
  void Nextion::set_nextion_text_state(const std::string &name, const std::string &state) {
900
- ESP_LOGD(TAG, "Received state:");
901
- ESP_LOGD(TAG, " variable: %s", name.c_str());
902
- ESP_LOGD(TAG, " state: %s", state.c_str());
898
+ ESP_LOGD(TAG, "State: %s='%s'", name.c_str(), state.c_str());
903
899
 
904
900
  for (auto *sensor : this->textsensortype_) {
905
901
  if (name == sensor->get_variable_name()) {
@@ -910,7 +906,7 @@ void Nextion::set_nextion_text_state(const std::string &name, const std::string
910
906
  }
911
907
 
912
908
  void Nextion::all_components_send_state_(bool force_update) {
913
- ESP_LOGD(TAG, "all_components_send_state_ ");
909
+ ESP_LOGD(TAG, "Send states");
914
910
  for (auto *binarysensortype : this->binarysensortype_) {
915
911
  if (force_update || binarysensortype->get_needs_to_send_update())
916
912
  binarysensortype->send_state_to_nextion();
@@ -998,13 +994,30 @@ uint16_t Nextion::recv_ret_string_(std::string &response, uint32_t timeout, bool
998
994
  }
999
995
 
1000
996
  /**
1001
- * @brief
997
+ * @brief Add a command to the Nextion queue that expects no response.
998
+ *
999
+ * This is typically used for write-only operations such as variable assignments or component updates
1000
+ * where no return value or acknowledgment is expected from the display.
1002
1001
  *
1003
- * @param variable_name Name for the queue
1002
+ * If the `max_queue_size` limit is configured and reached, the command will be skipped.
1003
+ *
1004
+ * @param variable_name Name of the variable or component associated with the command.
1004
1005
  */
1005
1006
  void Nextion::add_no_result_to_queue_(const std::string &variable_name) {
1006
- // NOLINTNEXTLINE(cppcoreguidelines-owning-memory)
1007
- nextion::NextionQueue *nextion_queue = new nextion::NextionQueue;
1007
+ #ifdef USE_NEXTION_MAX_QUEUE_SIZE
1008
+ if (this->max_queue_size_ > 0 && this->nextion_queue_.size() >= this->max_queue_size_) {
1009
+ ESP_LOGW(TAG, "Queue full (%zu), drop: %s", this->nextion_queue_.size(), variable_name.c_str());
1010
+ return;
1011
+ }
1012
+ #endif
1013
+
1014
+ ExternalRAMAllocator<nextion::NextionQueue> allocator(ExternalRAMAllocator<nextion::NextionQueue>::ALLOW_FAILURE);
1015
+ nextion::NextionQueue *nextion_queue = allocator.allocate(1);
1016
+ if (nextion_queue == nullptr) {
1017
+ ESP_LOGW(TAG, "Queue alloc failed");
1018
+ return;
1019
+ }
1020
+ new (nextion_queue) nextion::NextionQueue();
1008
1021
 
1009
1022
  // NOLINTNEXTLINE(cppcoreguidelines-owning-memory)
1010
1023
  nextion_queue->component = new nextion::NextionComponentBase;
@@ -1014,7 +1027,7 @@ void Nextion::add_no_result_to_queue_(const std::string &variable_name) {
1014
1027
 
1015
1028
  this->nextion_queue_.push_back(nextion_queue);
1016
1029
 
1017
- ESP_LOGN(TAG, "Add to queue type: NORESULT component %s", nextion_queue->component->get_variable_name().c_str());
1030
+ ESP_LOGN(TAG, "Queue NORESULT: %s", nextion_queue->component->get_variable_name().c_str());
1018
1031
  }
1019
1032
 
1020
1033
  /**
@@ -1043,7 +1056,7 @@ bool Nextion::add_no_result_to_queue_with_ignore_sleep_printf_(const std::string
1043
1056
  int ret = vsnprintf(buffer, sizeof(buffer), format, arg);
1044
1057
  va_end(arg);
1045
1058
  if (ret <= 0) {
1046
- ESP_LOGW(TAG, "Building command for format '%s' failed!", format);
1059
+ ESP_LOGW(TAG, "Bad cmd format: '%s'", format);
1047
1060
  return false;
1048
1061
  }
1049
1062
 
@@ -1068,7 +1081,7 @@ bool Nextion::add_no_result_to_queue_with_printf_(const std::string &variable_na
1068
1081
  int ret = vsnprintf(buffer, sizeof(buffer), format, arg);
1069
1082
  va_end(arg);
1070
1083
  if (ret <= 0) {
1071
- ESP_LOGW(TAG, "Building command for format '%s' failed!", format);
1084
+ ESP_LOGW(TAG, "Bad cmd format: '%s'", format);
1072
1085
  return false;
1073
1086
  }
1074
1087
 
@@ -1133,18 +1146,39 @@ void Nextion::add_no_result_to_queue_with_set_internal_(const std::string &varia
1133
1146
  state_value.c_str());
1134
1147
  }
1135
1148
 
1149
+ /**
1150
+ * @brief Queue a GET command for a component that expects a response from the Nextion display.
1151
+ *
1152
+ * This method is used for querying values such as sensor states, text content, or switch status.
1153
+ * The component will be added to the Nextion queue only if the display is already set up,
1154
+ * the queue has not reached the configured maximum size (if set), and the command is sent successfully.
1155
+ *
1156
+ * @param component Pointer to the Nextion component that will handle the response.
1157
+ */
1136
1158
  void Nextion::add_to_get_queue(NextionComponentBase *component) {
1137
1159
  if ((!this->is_setup() && !this->ignore_is_setup_))
1138
1160
  return;
1139
1161
 
1140
- // NOLINTNEXTLINE(cppcoreguidelines-owning-memory)
1141
- nextion::NextionQueue *nextion_queue = new nextion::NextionQueue;
1162
+ #ifdef USE_NEXTION_MAX_QUEUE_SIZE
1163
+ if (this->max_queue_size_ > 0 && this->nextion_queue_.size() >= this->max_queue_size_) {
1164
+ ESP_LOGW(TAG, "Queue full (%zu), drop GET: %s", this->nextion_queue_.size(),
1165
+ component->get_variable_name().c_str());
1166
+ return;
1167
+ }
1168
+ #endif
1169
+
1170
+ ExternalRAMAllocator<nextion::NextionQueue> allocator(ExternalRAMAllocator<nextion::NextionQueue>::ALLOW_FAILURE);
1171
+ nextion::NextionQueue *nextion_queue = allocator.allocate(1);
1172
+ if (nextion_queue == nullptr) {
1173
+ ESP_LOGW(TAG, "Queue alloc failed");
1174
+ return;
1175
+ }
1176
+ new (nextion_queue) nextion::NextionQueue();
1142
1177
 
1143
1178
  nextion_queue->component = component;
1144
1179
  nextion_queue->queue_time = millis();
1145
1180
 
1146
- ESP_LOGN(TAG, "Add to queue type: %s component %s", component->get_queue_type_string().c_str(),
1147
- component->get_variable_name().c_str());
1181
+ ESP_LOGN(TAG, "Queue %s: %s", component->get_queue_type_string().c_str(), component->get_variable_name().c_str());
1148
1182
 
1149
1183
  std::string command = "get " + component->get_variable_name_to_send();
1150
1184
 
@@ -1165,8 +1199,13 @@ void Nextion::add_addt_command_to_queue(NextionComponentBase *component) {
1165
1199
  if ((!this->is_setup() && !this->ignore_is_setup_) || this->is_sleeping())
1166
1200
  return;
1167
1201
 
1168
- // NOLINTNEXTLINE(cppcoreguidelines-owning-memory)
1169
- nextion::NextionQueue *nextion_queue = new nextion::NextionQueue;
1202
+ ExternalRAMAllocator<nextion::NextionQueue> allocator(ExternalRAMAllocator<nextion::NextionQueue>::ALLOW_FAILURE);
1203
+ nextion::NextionQueue *nextion_queue = allocator.allocate(1);
1204
+ if (nextion_queue == nullptr) {
1205
+ ESP_LOGW(TAG, "Queue alloc failed");
1206
+ return;
1207
+ }
1208
+ new (nextion_queue) nextion::NextionQueue();
1170
1209
 
1171
1210
  nextion_queue->component = component;
1172
1211
  nextion_queue->queue_time = millis();
@@ -1195,8 +1234,8 @@ void Nextion::check_pending_waveform_() {
1195
1234
 
1196
1235
  void Nextion::set_writer(const nextion_writer_t &writer) { this->writer_ = writer; }
1197
1236
 
1198
- ESPDEPRECATED("set_wait_for_ack(bool) is deprecated and has no effect", "v1.20")
1199
- void Nextion::set_wait_for_ack(bool wait_for_ack) { ESP_LOGE(TAG, "This command is deprecated"); }
1237
+ ESPDEPRECATED("set_wait_for_ack(bool) deprecated, no effect", "v1.20")
1238
+ void Nextion::set_wait_for_ack(bool wait_for_ack) { ESP_LOGE(TAG, "Deprecated"); }
1200
1239
 
1201
1240
  bool Nextion::is_updating() { return this->is_updating_; }
1202
1241