esphome 2025.6.2__py3-none-any.whl → 2025.7.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 (648) hide show
  1. esphome/__main__.py +1 -3
  2. esphome/codegen.py +2 -0
  3. esphome/components/ac_dimmer/ac_dimmer.cpp +6 -6
  4. esphome/components/adc/__init__.py +25 -1
  5. esphome/components/adc/adc_sensor.h +11 -11
  6. esphome/components/adc/adc_sensor_common.cpp +1 -1
  7. esphome/components/adc/adc_sensor_esp32.cpp +16 -8
  8. esphome/components/ade7880/ade7880.h +0 -2
  9. esphome/components/ads1115/ads1115.h +0 -1
  10. esphome/components/ads1118/ads1118.h +0 -1
  11. esphome/components/ags10/ags10.h +0 -2
  12. esphome/components/aic3204/aic3204.h +0 -1
  13. esphome/components/alarm_control_panel/__init__.py +5 -2
  14. esphome/components/alpha3/alpha3.h +0 -1
  15. esphome/components/am43/cover/am43_cover.h +0 -1
  16. esphome/components/am43/sensor/am43_sensor.h +0 -1
  17. esphome/components/analog_threshold/analog_threshold_binary_sensor.h +0 -2
  18. esphome/components/anova/anova.cpp +5 -1
  19. esphome/components/anova/anova.h +0 -1
  20. esphome/components/apds9960/apds9960.cpp +1 -1
  21. esphome/components/api/__init__.py +57 -21
  22. esphome/components/api/api_connection.cpp +344 -539
  23. esphome/components/api/api_connection.h +224 -141
  24. esphome/components/api/api_frame_helper.cpp +91 -127
  25. esphome/components/api/api_frame_helper.h +64 -54
  26. esphome/components/api/api_pb2.cpp +1837 -9044
  27. esphome/components/api/api_pb2.h +532 -685
  28. esphome/components/api/api_pb2_dump.cpp +4432 -0
  29. esphome/components/api/api_pb2_service.cpp +184 -425
  30. esphome/components/api/api_pb2_service.h +13 -6
  31. esphome/components/api/api_server.cpp +131 -167
  32. esphome/components/api/api_server.h +38 -10
  33. esphome/components/api/client.py +10 -4
  34. esphome/components/api/custom_api_device.h +8 -0
  35. esphome/components/api/list_entities.cpp +37 -104
  36. esphome/components/api/list_entities.h +33 -23
  37. esphome/components/api/proto.h +532 -26
  38. esphome/components/api/subscribe_state.cpp +23 -29
  39. esphome/components/api/subscribe_state.h +26 -19
  40. esphome/components/api/user_services.h +2 -0
  41. esphome/components/as3935_spi/as3935_spi.h +0 -2
  42. esphome/components/as5600/as5600.h +0 -1
  43. esphome/components/async_tcp/__init__.py +14 -5
  44. esphome/components/atc_mithermometer/atc_mithermometer.h +0 -1
  45. esphome/components/atm90e32/atm90e32.cpp +2 -1
  46. esphome/components/audio/audio_decoder.cpp +1 -1
  47. esphome/components/audio/audio_transfer_buffer.cpp +2 -2
  48. esphome/components/b_parasite/b_parasite.h +0 -1
  49. esphome/components/bedjet/bedjet_hub.cpp +5 -1
  50. esphome/components/bedjet/climate/bedjet_climate.cpp +5 -1
  51. esphome/components/beken_spi_led_strip/led_strip.cpp +4 -2
  52. esphome/components/bh1750/bh1750.cpp +5 -5
  53. esphome/components/binary_sensor/__init__.py +82 -5
  54. esphome/components/binary_sensor/automation.h +19 -1
  55. esphome/components/binary_sensor/binary_sensor.cpp +12 -30
  56. esphome/components/binary_sensor/binary_sensor.h +11 -25
  57. esphome/components/binary_sensor/filter.cpp +29 -24
  58. esphome/components/binary_sensor/filter.h +20 -10
  59. esphome/components/ble_client/output/ble_binary_output.h +0 -1
  60. esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +5 -1
  61. esphome/components/ble_client/sensor/ble_rssi_sensor.h +0 -1
  62. esphome/components/ble_client/sensor/ble_sensor.cpp +5 -1
  63. esphome/components/ble_client/sensor/ble_sensor.h +0 -1
  64. esphome/components/ble_client/switch/ble_switch.h +0 -1
  65. esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +5 -1
  66. esphome/components/ble_client/text_sensor/ble_text_sensor.h +0 -1
  67. esphome/components/ble_presence/ble_presence_device.h +0 -1
  68. esphome/components/ble_rssi/ble_rssi_sensor.h +0 -1
  69. esphome/components/ble_scanner/ble_scanner.h +0 -1
  70. esphome/components/bluetooth_proxy/bluetooth_connection.h +9 -2
  71. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -6
  72. esphome/components/bluetooth_proxy/bluetooth_proxy.h +8 -2
  73. esphome/components/bme680/sensor.py +1 -1
  74. esphome/components/bmp581/bmp581.h +0 -2
  75. esphome/components/button/__init__.py +5 -2
  76. esphome/components/camera/__init__.py +1 -0
  77. esphome/components/camera/camera.cpp +22 -0
  78. esphome/components/camera/camera.h +80 -0
  79. esphome/components/canbus/__init__.py +1 -0
  80. esphome/components/cap1188/cap1188.h +0 -1
  81. esphome/components/captive_portal/__init__.py +12 -2
  82. esphome/components/captive_portal/captive_portal.cpp +12 -2
  83. esphome/components/captive_portal/captive_portal.h +5 -2
  84. esphome/components/ccs811/ccs811.h +0 -2
  85. esphome/components/climate/__init__.py +5 -2
  86. esphome/components/cm1106/sensor.py +2 -2
  87. esphome/components/const/__init__.py +2 -0
  88. esphome/components/copy/binary_sensor/copy_binary_sensor.h +0 -1
  89. esphome/components/copy/button/copy_button.h +0 -1
  90. esphome/components/copy/cover/copy_cover.h +0 -1
  91. esphome/components/copy/fan/copy_fan.h +0 -1
  92. esphome/components/copy/lock/copy_lock.h +0 -1
  93. esphome/components/copy/number/copy_number.h +0 -1
  94. esphome/components/copy/select/copy_select.h +0 -1
  95. esphome/components/copy/sensor/copy_sensor.h +0 -1
  96. esphome/components/copy/switch/copy_switch.h +0 -1
  97. esphome/components/copy/text/copy_text.h +0 -1
  98. esphome/components/copy/text_sensor/copy_text_sensor.h +0 -1
  99. esphome/components/cover/__init__.py +5 -2
  100. esphome/components/cs5460a/cs5460a.h +0 -1
  101. esphome/components/datetime/__init__.py +4 -2
  102. esphome/components/debug/__init__.py +20 -0
  103. esphome/components/debug/debug_esp32.cpp +2 -0
  104. esphome/components/deep_sleep/__init__.py +43 -9
  105. esphome/components/demo/__init__.py +2 -2
  106. esphome/components/display/display.cpp +4 -3
  107. esphome/components/display/display.h +0 -2
  108. esphome/components/display/display_buffer.cpp +1 -1
  109. esphome/components/ds2484/__init__.py +1 -0
  110. esphome/components/ds2484/ds2484.cpp +209 -0
  111. esphome/components/ds2484/ds2484.h +43 -0
  112. esphome/components/ds2484/one_wire.py +37 -0
  113. esphome/components/duty_time/duty_time_sensor.h +0 -1
  114. esphome/components/ens160_base/ens160_base.h +0 -1
  115. esphome/components/es7210/es7210.h +0 -1
  116. esphome/components/es7243e/es7243e.h +0 -1
  117. esphome/components/es8156/es8156.h +0 -1
  118. esphome/components/es8311/es8311.h +0 -1
  119. esphome/components/es8388/es8388.h +0 -1
  120. esphome/components/esp32/__init__.py +103 -135
  121. esphome/components/esp32/core.cpp +0 -4
  122. esphome/components/esp32/gpio.h +1 -1
  123. esphome/components/esp32/helpers.cpp +69 -0
  124. esphome/components/esp32_ble/ble.cpp +5 -6
  125. esphome/components/esp32_ble/ble.h +29 -14
  126. esphome/components/esp32_ble/ble_event.h +6 -6
  127. esphome/components/esp32_ble_client/ble_client_base.cpp +21 -6
  128. esphome/components/esp32_ble_client/ble_client_base.h +24 -9
  129. esphome/components/esp32_ble_tracker/__init__.py +2 -8
  130. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +5 -5
  131. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +11 -7
  132. esphome/components/esp32_camera/__init__.py +112 -98
  133. esphome/components/esp32_camera/esp32_camera.cpp +41 -31
  134. esphome/components/esp32_camera/esp32_camera.h +35 -30
  135. esphome/components/esp32_camera_web_server/__init__.py +2 -1
  136. esphome/components/esp32_camera_web_server/camera_web_server.cpp +8 -8
  137. esphome/components/esp32_camera_web_server/camera_web_server.h +3 -3
  138. esphome/components/esp32_hall/sensor.py +2 -21
  139. esphome/components/esp32_hosted/__init__.py +101 -0
  140. esphome/components/esp32_hosted/esp32_hosted.py.script +12 -0
  141. esphome/components/esp32_improv/esp32_improv_component.cpp +3 -0
  142. esphome/components/esp32_rmt/__init__.py +0 -58
  143. esphome/components/esp32_rmt_led_strip/led_strip.cpp +77 -63
  144. esphome/components/esp32_rmt_led_strip/led_strip.h +11 -17
  145. esphome/components/esp32_rmt_led_strip/light.py +14 -76
  146. esphome/components/esp32_touch/esp32_touch.h +174 -28
  147. esphome/components/esp32_touch/esp32_touch_common.cpp +162 -0
  148. esphome/components/esp32_touch/esp32_touch_v1.cpp +240 -0
  149. esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
  150. esphome/components/esp8266/__init__.py +2 -0
  151. esphome/components/esp8266/gpio.cpp +10 -10
  152. esphome/components/esp8266/helpers.cpp +31 -0
  153. esphome/components/esp_ldo/__init__.py +10 -8
  154. esphome/components/esp_ldo/esp_ldo.h +3 -0
  155. esphome/components/esphome/ota/__init__.py +1 -0
  156. esphome/components/esphome/ota/ota_esphome.cpp +24 -19
  157. esphome/components/ethernet/__init__.py +42 -23
  158. esphome/components/ethernet/esp_eth_phy_jl1101.c +0 -16
  159. esphome/components/ethernet/ethernet_component.cpp +69 -29
  160. esphome/components/ethernet/ethernet_component.h +18 -10
  161. esphome/components/event/__init__.py +5 -2
  162. esphome/components/ezo/ezo.h +0 -1
  163. esphome/components/ezo_pmp/ezo_pmp.h +0 -1
  164. esphome/components/fan/__init__.py +5 -2
  165. esphome/components/fan/fan.cpp +4 -0
  166. esphome/components/feedback/feedback_cover.h +0 -1
  167. esphome/components/font/__init__.py +92 -82
  168. esphome/components/font/font.cpp +9 -2
  169. esphome/components/font/font.h +20 -5
  170. esphome/components/fs3000/fs3000.h +0 -1
  171. esphome/components/gcja5/gcja5.h +0 -1
  172. esphome/components/gl_r01_i2c/__init__.py +0 -0
  173. esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +68 -0
  174. esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
  175. esphome/components/gl_r01_i2c/sensor.py +36 -0
  176. esphome/components/gp8403/gp8403.h +0 -1
  177. esphome/components/gpio/binary_sensor/__init__.py +39 -1
  178. esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +77 -3
  179. esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +40 -0
  180. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +0 -2
  181. esphome/components/he60r/he60r.h +0 -1
  182. esphome/components/heatpumpir/climate.py +2 -1
  183. esphome/components/heatpumpir/heatpumpir.cpp +1 -0
  184. esphome/components/heatpumpir/heatpumpir.h +1 -0
  185. esphome/components/honeywellabp2_i2c/honeywellabp2.h +0 -1
  186. esphome/components/host/__init__.py +3 -1
  187. esphome/components/host/helpers.cpp +57 -0
  188. esphome/components/http_request/__init__.py +19 -1
  189. esphome/components/http_request/http_request.h +1 -1
  190. esphome/components/http_request/http_request_arduino.cpp +0 -1
  191. esphome/components/http_request/http_request_arduino.h +1 -0
  192. esphome/components/http_request/http_request_idf.cpp +0 -1
  193. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  194. esphome/components/http_request/update/http_request_update.cpp +35 -16
  195. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +3 -9
  196. esphome/components/hydreon_rgxx/sensor.py +1 -1
  197. esphome/components/i2c/__init__.py +23 -11
  198. esphome/components/i2c/i2c_bus.h +8 -1
  199. esphome/components/i2c/i2c_bus_arduino.cpp +4 -3
  200. esphome/components/i2c/i2c_bus_arduino.h +6 -3
  201. esphome/components/i2c/i2c_bus_esp_idf.h +5 -3
  202. esphome/components/i2c_device/i2c_device.h +0 -1
  203. esphome/components/i2s_audio/__init__.py +2 -10
  204. esphome/components/i2s_audio/i2s_audio.cpp +1 -5
  205. esphome/components/i2s_audio/media_player/__init__.py +2 -2
  206. esphome/components/i2s_audio/speaker/__init__.py +1 -1
  207. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +2 -2
  208. esphome/components/iaqcore/iaqcore.h +0 -2
  209. esphome/components/image/__init__.py +123 -24
  210. esphome/components/improv_serial/improv_serial_component.cpp +0 -4
  211. esphome/components/ina219/ina219.cpp +7 -0
  212. esphome/components/ina219/ina219.h +1 -0
  213. esphome/components/ina260/ina260.h +0 -2
  214. esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.h +0 -1
  215. esphome/components/inkplate6/display.py +15 -0
  216. esphome/components/inkplate6/inkplate.cpp +2 -2
  217. esphome/components/integration/integration_sensor.h +0 -1
  218. esphome/components/internal_temperature/internal_temperature.cpp +8 -27
  219. esphome/components/internal_temperature/sensor.py +0 -26
  220. esphome/components/interval/interval.h +0 -2
  221. esphome/components/json/__init__.py +1 -1
  222. esphome/components/json/json_util.cpp +56 -63
  223. esphome/components/ld2410/button/__init__.py +3 -3
  224. esphome/components/ld2410/button/factory_reset_button.cpp +9 -0
  225. esphome/components/ld2410/button/{reset_button.h → factory_reset_button.h} +2 -2
  226. esphome/components/ld2410/ld2410.cpp +421 -268
  227. esphome/components/ld2410/ld2410.h +44 -146
  228. esphome/components/ld2410/number/__init__.py +2 -2
  229. esphome/components/ld2410/sensor.py +1 -1
  230. esphome/components/ld2410/switch/__init__.py +1 -1
  231. esphome/components/ld2420/binary_sensor/ld2420_binary_sensor.cpp +2 -2
  232. esphome/components/ld2420/button/reconfig_buttons.cpp +1 -1
  233. esphome/components/ld2420/ld2420.cpp +252 -147
  234. esphome/components/ld2420/ld2420.h +52 -126
  235. esphome/components/ld2420/number/__init__.py +2 -2
  236. esphome/components/ld2420/number/gate_config_number.cpp +1 -1
  237. esphome/components/ld2420/select/operating_mode_select.cpp +1 -1
  238. esphome/components/ld2420/sensor/__init__.py +6 -2
  239. esphome/components/ld2420/sensor/ld2420_sensor.cpp +2 -2
  240. esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
  241. esphome/components/ld2420/text_sensor/text_sensor.cpp +2 -2
  242. esphome/components/ld2450/button/__init__.py +3 -3
  243. esphome/components/ld2450/button/factory_reset_button.cpp +9 -0
  244. esphome/components/ld2450/button/{reset_button.h → factory_reset_button.h} +2 -2
  245. esphome/components/ld2450/ld2450.cpp +384 -232
  246. esphome/components/ld2450/ld2450.h +60 -69
  247. esphome/components/ld2450/switch/__init__.py +1 -1
  248. esphome/components/ledc/ledc_output.cpp +1 -63
  249. esphome/components/libretiny/__init__.py +5 -3
  250. esphome/components/libretiny/const.py +5 -0
  251. esphome/components/libretiny/generate_components.py +1 -0
  252. esphome/components/libretiny/helpers.cpp +35 -0
  253. esphome/components/libretiny/lt_component.cpp +5 -3
  254. esphome/components/light/__init__.py +4 -2
  255. esphome/components/light/addressable_light.h +3 -3
  256. esphome/components/light/light_call.cpp +180 -243
  257. esphome/components/light/light_call.h +72 -20
  258. esphome/components/light/light_color_values.h +14 -14
  259. esphome/components/light/light_json_schema.cpp +17 -16
  260. esphome/components/light/light_state.h +15 -13
  261. esphome/components/light/transformers.h +2 -2
  262. esphome/components/ln882x/__init__.py +52 -0
  263. esphome/components/ln882x/boards.py +285 -0
  264. esphome/components/lock/__init__.py +5 -2
  265. esphome/components/logger/__init__.py +40 -3
  266. esphome/components/logger/logger.cpp +47 -12
  267. esphome/components/logger/logger.h +80 -49
  268. esphome/components/logger/logger_esp32.cpp +3 -3
  269. esphome/components/lps22/__init__.py +0 -0
  270. esphome/components/lps22/lps22.cpp +75 -0
  271. esphome/components/lps22/lps22.h +27 -0
  272. esphome/components/lps22/sensor.py +58 -0
  273. esphome/components/ltr390/ltr390.h +0 -1
  274. esphome/components/ltr501/ltr501.h +0 -1
  275. esphome/components/ltr_als_ps/ltr_als_ps.h +0 -1
  276. esphome/components/lvgl/__init__.py +1 -1
  277. esphome/components/lvgl/schemas.py +66 -6
  278. esphome/components/lvgl/styles.py +24 -16
  279. esphome/components/lvgl/widgets/__init__.py +12 -2
  280. esphome/components/lvgl/widgets/lv_bar.py +40 -19
  281. esphome/components/lvgl/widgets/meter.py +20 -13
  282. esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +1 -1
  283. esphome/components/max9611/max9611.h +0 -1
  284. esphome/components/mcp23016/__init__.py +1 -1
  285. esphome/components/mcp23xxx_base/__init__.py +1 -1
  286. esphome/components/mcp4461/__init__.py +1 -1
  287. esphome/components/mcp4461/output/__init__.py +3 -2
  288. esphome/components/mcp9600/mcp9600.h +0 -2
  289. esphome/components/md5/md5.cpp +3 -3
  290. esphome/components/md5/md5.h +1 -6
  291. esphome/components/mdns/__init__.py +22 -11
  292. esphome/components/media_player/__init__.py +4 -3
  293. esphome/components/micro_wake_word/__init__.py +1 -5
  294. esphome/components/micro_wake_word/streaming_model.cpp +2 -2
  295. esphome/components/microphone/microphone.cpp +7 -9
  296. esphome/components/microphone/microphone.h +0 -2
  297. esphome/components/mipi_spi/display.py +1 -0
  298. esphome/components/mmc5603/mmc5603.cpp +1 -1
  299. esphome/components/modbus/modbus.cpp +33 -15
  300. esphome/components/modbus/modbus.h +9 -0
  301. esphome/components/modbus_controller/__init__.py +42 -10
  302. esphome/components/modbus_controller/modbus_controller.cpp +92 -11
  303. esphome/components/modbus_controller/modbus_controller.h +61 -7
  304. esphome/components/mopeka_pro_check/mopeka_pro_check.h +0 -1
  305. esphome/components/mopeka_std_check/mopeka_std_check.h +0 -1
  306. esphome/components/mpl3115a2/mpl3115a2.h +0 -2
  307. esphome/components/mqtt/__init__.py +16 -0
  308. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +2 -1
  309. esphome/components/mqtt/mqtt_backend.h +2 -1
  310. esphome/components/mqtt/mqtt_backend_esp32.cpp +132 -47
  311. esphome/components/mqtt/mqtt_backend_esp32.h +106 -4
  312. esphome/components/mqtt/mqtt_binary_sensor.cpp +1 -0
  313. esphome/components/mqtt/mqtt_button.cpp +4 -1
  314. esphome/components/mqtt/mqtt_client.cpp +17 -9
  315. esphome/components/mqtt/mqtt_client.h +8 -3
  316. esphome/components/mqtt/mqtt_climate.cpp +6 -4
  317. esphome/components/mqtt/mqtt_component.cpp +3 -1
  318. esphome/components/mqtt/mqtt_cover.cpp +1 -0
  319. esphome/components/mqtt/mqtt_date.cpp +4 -3
  320. esphome/components/mqtt/mqtt_datetime.cpp +7 -6
  321. esphome/components/mqtt/mqtt_event.cpp +6 -3
  322. esphome/components/mqtt/mqtt_fan.cpp +1 -0
  323. esphome/components/mqtt/mqtt_light.cpp +8 -4
  324. esphome/components/mqtt/mqtt_lock.cpp +3 -1
  325. esphome/components/mqtt/mqtt_number.cpp +1 -0
  326. esphome/components/mqtt/mqtt_select.cpp +2 -1
  327. esphome/components/mqtt/mqtt_sensor.cpp +3 -1
  328. esphome/components/mqtt/mqtt_switch.cpp +3 -1
  329. esphome/components/mqtt/mqtt_text.cpp +1 -0
  330. esphome/components/mqtt/mqtt_text_sensor.cpp +3 -1
  331. esphome/components/mqtt/mqtt_time.cpp +4 -3
  332. esphome/components/mqtt/mqtt_update.cpp +1 -0
  333. esphome/components/mqtt/mqtt_valve.cpp +3 -1
  334. esphome/components/ms8607/ms8607.cpp +1 -1
  335. esphome/components/ms8607/ms8607.h +0 -1
  336. esphome/components/neopixelbus/light.py +4 -1
  337. esphome/components/neopixelbus/neopixelbus_light.h +1 -1
  338. esphome/components/network/__init__.py +4 -1
  339. esphome/components/network/ip_address.h +1 -0
  340. esphome/components/nextion/__init__.py +16 -0
  341. esphome/components/nextion/base_component.py +1 -0
  342. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +1 -1
  343. esphome/components/nextion/display.py +14 -4
  344. esphome/components/nextion/nextion.cpp +166 -101
  345. esphome/components/nextion/nextion.h +84 -53
  346. esphome/components/nextion/nextion_commands.cpp +11 -10
  347. esphome/components/nextion/nextion_component.cpp +28 -28
  348. esphome/components/nextion/nextion_component.h +53 -18
  349. esphome/components/nextion/nextion_component_base.h +3 -0
  350. esphome/components/nextion/nextion_upload.cpp +36 -0
  351. esphome/components/nextion/nextion_upload_arduino.cpp +10 -35
  352. esphome/components/nextion/nextion_upload_idf.cpp +9 -33
  353. esphome/components/nextion/sensor/nextion_sensor.cpp +1 -1
  354. esphome/components/nextion/switch/nextion_switch.cpp +1 -1
  355. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +1 -1
  356. esphome/components/nfc/nfc.cpp +3 -22
  357. esphome/components/nfc/nfc.h +3 -3
  358. esphome/components/number/__init__.py +5 -2
  359. esphome/components/online_image/__init__.py +9 -1
  360. esphome/components/online_image/online_image.cpp +17 -7
  361. esphome/components/online_image/online_image.h +10 -2
  362. esphome/components/opentherm/opentherm.cpp +7 -12
  363. esphome/components/opentherm/output/output.cpp +1 -1
  364. esphome/components/openthread/__init__.py +47 -40
  365. esphome/components/openthread/const.py +1 -0
  366. esphome/components/openthread/openthread_esp.cpp +27 -5
  367. esphome/components/opt3001/__init__.py +0 -0
  368. esphome/components/opt3001/opt3001.cpp +122 -0
  369. esphome/components/opt3001/opt3001.h +27 -0
  370. esphome/components/opt3001/sensor.py +35 -0
  371. esphome/components/ota/__init__.py +17 -0
  372. esphome/components/ota/ota_backend.h +27 -1
  373. esphome/components/ota/ota_backend_arduino_esp32.cpp +12 -2
  374. esphome/components/ota/ota_backend_arduino_esp32.h +3 -0
  375. esphome/components/ota/ota_backend_arduino_esp8266.cpp +18 -4
  376. esphome/components/ota/ota_backend_arduino_esp8266.h +3 -0
  377. esphome/components/ota/ota_backend_arduino_libretiny.cpp +12 -2
  378. esphome/components/ota/ota_backend_arduino_libretiny.h +3 -0
  379. esphome/components/ota/ota_backend_arduino_rp2040.cpp +9 -2
  380. esphome/components/ota/ota_backend_arduino_rp2040.h +3 -0
  381. esphome/components/ota/ota_backend_esp_idf.cpp +10 -16
  382. esphome/components/ota/ota_backend_esp_idf.h +1 -0
  383. esphome/components/packages/__init__.py +5 -2
  384. esphome/components/packet_transport/binary_sensor.py +61 -4
  385. esphome/components/packet_transport/packet_transport.cpp +34 -1
  386. esphome/components/packet_transport/packet_transport.h +11 -5
  387. esphome/components/pcf8574/__init__.py +1 -1
  388. esphome/components/pi4ioe5v6408/__init__.py +84 -0
  389. esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +171 -0
  390. esphome/components/pi4ioe5v6408/pi4ioe5v6408.h +70 -0
  391. esphome/components/pmsa003i/pmsa003i.h +0 -1
  392. esphome/components/pmsx003/pmsx003.h +0 -1
  393. esphome/components/pn7150/pn7150.cpp +7 -7
  394. esphome/components/pn7150/pn7150.h +0 -1
  395. esphome/components/pn7160/pn7160.cpp +7 -7
  396. esphome/components/pn7160/pn7160.h +0 -1
  397. esphome/components/preferences/syncer.h +2 -0
  398. esphome/components/prometheus/prometheus_handler.h +1 -1
  399. esphome/components/psram/psram.cpp +0 -20
  400. esphome/components/pulse_counter/pulse_counter_sensor.h +0 -1
  401. esphome/components/pulse_meter/pulse_meter_sensor.cpp +8 -4
  402. esphome/components/pulse_width/pulse_width.h +0 -1
  403. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +0 -4
  404. esphome/components/pvvx_mithermometer/display/pvvx_display.h +0 -2
  405. esphome/components/pvvx_mithermometer/pvvx_mithermometer.h +0 -1
  406. esphome/components/qr_code/__init__.py +13 -10
  407. esphome/components/qwiic_pir/qwiic_pir.h +0 -1
  408. esphome/components/radon_eye_ble/radon_eye_listener.cpp +1 -1
  409. esphome/components/rc522/rc522.h +0 -1
  410. esphome/components/rdm6300/rdm6300.h +0 -2
  411. esphome/components/remote_base/__init__.py +7 -5
  412. esphome/components/remote_base/remote_base.cpp +24 -21
  413. esphome/components/remote_base/remote_base.h +3 -26
  414. esphome/components/remote_receiver/__init__.py +40 -46
  415. esphome/components/remote_receiver/remote_receiver.h +4 -18
  416. esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -87
  417. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +1 -1
  418. esphome/components/remote_transmitter/__init__.py +42 -43
  419. esphome/components/remote_transmitter/remote_transmitter.h +2 -14
  420. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -77
  421. esphome/components/resistance/resistance_sensor.h +0 -1
  422. esphome/components/rp2040/__init__.py +2 -0
  423. esphome/components/rp2040/helpers.cpp +55 -0
  424. esphome/components/rp2040_pio_led_strip/led_strip.cpp +2 -2
  425. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -4
  426. esphome/components/rtttl/__init__.py +4 -4
  427. esphome/components/rtttl/rtttl.cpp +10 -1
  428. esphome/components/ruuvitag/ruuvitag.h +0 -1
  429. esphome/components/safe_mode/safe_mode.cpp +2 -0
  430. esphome/components/safe_mode/safe_mode.h +4 -1
  431. esphome/components/scd30/scd30.h +0 -1
  432. esphome/components/scd30/sensor.py +2 -2
  433. esphome/components/scd4x/scd4x.cpp +61 -54
  434. esphome/components/scd4x/scd4x.h +17 -15
  435. esphome/components/scd4x/sensor.py +4 -4
  436. esphome/components/script/script.h +0 -2
  437. esphome/components/sdp3x/sensor.py +1 -1
  438. esphome/components/select/__init__.py +5 -2
  439. esphome/components/sen5x/sen5x.h +0 -1
  440. esphome/components/senseair/senseair.h +0 -1
  441. esphome/components/sensor/__init__.py +4 -2
  442. esphome/components/sensor/filter.cpp +1 -1
  443. esphome/components/sensor/sensor.cpp +12 -6
  444. esphome/components/sensor/sensor.h +13 -5
  445. esphome/components/servo/servo.cpp +2 -2
  446. esphome/components/servo/servo.h +0 -1
  447. esphome/components/sfa30/sfa30.h +0 -1
  448. esphome/components/sgp30/sgp30.h +0 -1
  449. esphome/components/sgp4x/sgp4x.h +0 -1
  450. esphome/components/shelly_dimmer/stm32flash.cpp +1 -2
  451. esphome/components/sht4x/sht4x.h +0 -1
  452. esphome/components/sm300d2/sm300d2.h +0 -2
  453. esphome/components/smt100/sensor.py +8 -4
  454. esphome/components/smt100/smt100.cpp +5 -5
  455. esphome/components/smt100/smt100.h +3 -3
  456. esphome/components/sn74hc595/__init__.py +1 -1
  457. esphome/components/sn74hc595/sn74hc595.cpp +5 -4
  458. esphome/components/sntp/sntp_component.cpp +9 -3
  459. esphome/components/sntp/time.py +2 -0
  460. esphome/components/socket/__init__.py +17 -0
  461. esphome/components/spi/__init__.py +27 -6
  462. esphome/components/spi/spi.cpp +3 -2
  463. esphome/components/spi/spi.h +9 -3
  464. esphome/components/spi/spi_arduino.cpp +3 -5
  465. esphome/components/spi/spi_esp_idf.cpp +40 -21
  466. esphome/components/spi_led_strip/spi_led_strip.cpp +1 -1
  467. esphome/components/sps30/sps30.h +0 -1
  468. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  469. esphome/components/st7701s/st7701s.cpp +0 -4
  470. esphome/components/status/status_binary_sensor.h +0 -2
  471. esphome/components/substitutions/__init__.py +81 -21
  472. esphome/components/substitutions/jinja.py +99 -0
  473. esphome/components/sun/sun.cpp +3 -4
  474. esphome/components/switch/__init__.py +5 -2
  475. esphome/components/switch/binary_sensor/switch_binary_sensor.h +0 -1
  476. esphome/components/sx126x/__init__.py +317 -0
  477. esphome/components/sx126x/automation.h +62 -0
  478. esphome/components/sx126x/packet_transport/__init__.py +26 -0
  479. esphome/components/sx126x/packet_transport/sx126x_transport.cpp +26 -0
  480. esphome/components/sx126x/packet_transport/sx126x_transport.h +25 -0
  481. esphome/components/sx126x/sx126x.cpp +523 -0
  482. esphome/components/sx126x/sx126x.h +140 -0
  483. esphome/components/sx126x/sx126x_reg.h +163 -0
  484. esphome/components/sx127x/__init__.py +325 -0
  485. esphome/components/sx127x/automation.h +62 -0
  486. esphome/components/sx127x/packet_transport/__init__.py +26 -0
  487. esphome/components/sx127x/packet_transport/sx127x_transport.cpp +26 -0
  488. esphome/components/sx127x/packet_transport/sx127x_transport.h +25 -0
  489. esphome/components/sx127x/sx127x.cpp +498 -0
  490. esphome/components/sx127x/sx127x.h +128 -0
  491. esphome/components/sx127x/sx127x_reg.h +295 -0
  492. esphome/components/syslog/esphome_syslog.cpp +5 -3
  493. esphome/components/syslog/esphome_syslog.h +1 -1
  494. esphome/components/tca9555/__init__.py +1 -1
  495. esphome/components/template/binary_sensor/template_binary_sensor.cpp +1 -9
  496. esphome/components/text/__init__.py +5 -2
  497. esphome/components/text_sensor/__init__.py +5 -2
  498. esphome/components/thermostat/thermostat_climate.cpp +34 -31
  499. esphome/components/thermostat/thermostat_climate.h +43 -39
  500. esphome/components/time/__init__.py +16 -2
  501. esphome/components/time/real_time_clock.cpp +4 -0
  502. esphome/components/time/real_time_clock.h +5 -1
  503. esphome/components/tlc5971/tlc5971.cpp +4 -1
  504. esphome/components/tmp1075/tmp1075.h +0 -2
  505. esphome/components/tof10120/tof10120_sensor.h +0 -1
  506. esphome/components/tormatic/tormatic_cover.h +0 -1
  507. esphome/components/total_daily_energy/total_daily_energy.h +0 -1
  508. esphome/components/tsl2591/tsl2591.cpp +1 -1
  509. esphome/components/ttp229_bsf/ttp229_bsf.h +0 -1
  510. esphome/components/ttp229_lsf/ttp229_lsf.h +0 -1
  511. esphome/components/tx20/tx20.cpp +2 -2
  512. esphome/components/uart/__init__.py +18 -0
  513. esphome/components/uart/uart_component_esp_idf.cpp +1 -5
  514. esphome/components/update/__init__.py +5 -2
  515. esphome/components/update/update_entity.h +8 -0
  516. esphome/components/usb_host/__init__.py +5 -2
  517. esphome/components/usb_host/usb_host_client.cpp +10 -10
  518. esphome/components/usb_uart/cp210x.cpp +1 -1
  519. esphome/components/usb_uart/usb_uart.cpp +41 -44
  520. esphome/components/usb_uart/usb_uart.h +4 -3
  521. esphome/components/valve/__init__.py +5 -2
  522. esphome/components/vbus/vbus.h +0 -1
  523. esphome/components/veml3235/veml3235.h +0 -1
  524. esphome/components/veml7700/veml7700.h +0 -1
  525. esphome/components/vl53l0x/vl53l0x_sensor.h +0 -1
  526. esphome/components/voice_assistant/voice_assistant.cpp +4 -4
  527. esphome/components/watchdog/watchdog.cpp +0 -4
  528. esphome/components/waveshare_epaper/waveshare_epaper.cpp +6 -6
  529. esphome/components/web_server/__init__.py +34 -19
  530. esphome/components/web_server/ota/__init__.py +32 -0
  531. esphome/components/web_server/ota/ota_web_server.cpp +210 -0
  532. esphome/components/web_server/ota/ota_web_server.h +26 -0
  533. esphome/components/web_server/web_server.cpp +324 -439
  534. esphome/components/web_server/web_server.h +33 -23
  535. esphome/components/web_server/web_server_v1.cpp +4 -5
  536. esphome/components/web_server_base/__init__.py +5 -2
  537. esphome/components/web_server_base/web_server_base.cpp +2 -94
  538. esphome/components/web_server_base/web_server_base.h +5 -25
  539. esphome/components/web_server_idf/multipart.cpp +254 -0
  540. esphome/components/web_server_idf/multipart.h +86 -0
  541. esphome/components/web_server_idf/utils.cpp +32 -0
  542. esphome/components/web_server_idf/utils.h +10 -0
  543. esphome/components/web_server_idf/web_server_idf.cpp +164 -16
  544. esphome/components/web_server_idf/web_server_idf.h +11 -10
  545. esphome/components/wiegand/wiegand.cpp +2 -2
  546. esphome/components/wifi/__init__.py +18 -0
  547. esphome/components/wifi/wifi_component.cpp +17 -22
  548. esphome/components/wifi/wifi_component.h +27 -23
  549. esphome/components/wifi/wifi_component_esp32_arduino.cpp +52 -59
  550. esphome/components/wifi/wifi_component_esp8266.cpp +46 -46
  551. esphome/components/wifi/wifi_component_esp_idf.cpp +35 -36
  552. esphome/components/wifi/wifi_component_libretiny.cpp +26 -27
  553. esphome/components/wifi/wifi_component_pico_w.cpp +3 -3
  554. esphome/components/wifi_info/wifi_info_text_sensor.cpp +6 -6
  555. esphome/components/wireguard/__init__.py +2 -11
  556. esphome/components/xiaomi_ble/xiaomi_ble.cpp +13 -1
  557. esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
  558. esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +0 -1
  559. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +0 -1
  560. esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +0 -1
  561. esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +0 -1
  562. esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +0 -1
  563. esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +0 -1
  564. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +0 -1
  565. esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +0 -1
  566. esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +0 -1
  567. esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +0 -1
  568. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +0 -1
  569. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +0 -1
  570. esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +0 -1
  571. esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +0 -1
  572. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +0 -1
  573. esphome/components/xiaomi_miscale/xiaomi_miscale.h +0 -1
  574. esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +0 -1
  575. esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +0 -1
  576. esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +0 -1
  577. esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +0 -1
  578. esphome/components/xiaomi_xmwsdj04mmc/__init__.py +0 -0
  579. esphome/components/xiaomi_xmwsdj04mmc/sensor.py +77 -0
  580. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.cpp +77 -0
  581. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.h +36 -0
  582. esphome/components/zio_ultrasonic/zio_ultrasonic.h +0 -2
  583. esphome/components/zyaura/zyaura.h +0 -1
  584. esphome/config.py +88 -22
  585. esphome/config_helpers.py +74 -1
  586. esphome/config_validation.py +12 -1
  587. esphome/const.py +65 -10
  588. esphome/core/__init__.py +18 -2
  589. esphome/core/application.cpp +169 -10
  590. esphome/core/application.h +145 -165
  591. esphome/core/area.h +19 -0
  592. esphome/core/automation.h +58 -9
  593. esphome/core/color.cpp +3 -5
  594. esphome/core/color.h +16 -16
  595. esphome/core/component.cpp +156 -22
  596. esphome/core/component.h +98 -4
  597. esphome/core/component_iterator.cpp +11 -9
  598. esphome/core/component_iterator.h +12 -10
  599. esphome/core/config.py +155 -6
  600. esphome/core/controller.cpp +4 -2
  601. esphome/core/controller.h +1 -1
  602. esphome/core/datatypes.h +2 -2
  603. esphome/core/defines.h +17 -2
  604. esphome/core/device.h +20 -0
  605. esphome/core/entity_base.cpp +20 -15
  606. esphome/core/entity_base.h +76 -0
  607. esphome/core/entity_helpers.py +168 -1
  608. esphome/core/event_pool.h +81 -0
  609. esphome/core/helpers.cpp +75 -230
  610. esphome/core/helpers.h +165 -105
  611. esphome/core/lock_free_queue.h +151 -0
  612. esphome/core/log.cpp +2 -2
  613. esphome/core/log.h +2 -0
  614. esphome/core/optional.h +5 -0
  615. esphome/core/ring_buffer.cpp +2 -2
  616. esphome/core/scheduler.cpp +275 -103
  617. esphome/core/scheduler.h +154 -17
  618. esphome/core/time.cpp +5 -5
  619. esphome/core/time.h +5 -5
  620. esphome/cpp_generator.py +17 -0
  621. esphome/cpp_helpers.py +0 -22
  622. esphome/cpp_types.py +3 -1
  623. esphome/dashboard/entries.py +1 -1
  624. esphome/dashboard/util/text.py +5 -21
  625. esphome/dashboard/web_server.py +9 -1
  626. esphome/helpers.py +47 -0
  627. esphome/loader.py +15 -1
  628. esphome/pins.py +14 -8
  629. esphome/platformio_api.py +2 -0
  630. esphome/wizard.py +17 -4
  631. esphome/writer.py +44 -3
  632. esphome/yaml_util.py +0 -2
  633. {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/METADATA +10 -9
  634. {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/RECORD +639 -580
  635. esphome/components/api/api_pb2_size.h +0 -361
  636. esphome/components/esp32_ble/ble_event_pool.h +0 -72
  637. esphome/components/esp32_ble/queue.h +0 -85
  638. esphome/components/esp32_hall/esp32_hall.cpp +0 -25
  639. esphome/components/esp32_hall/esp32_hall.h +0 -23
  640. esphome/components/esp32_touch/esp32_touch.cpp +0 -355
  641. esphome/components/ld2410/button/reset_button.cpp +0 -9
  642. esphome/components/ld2450/button/reset_button.cpp +0 -9
  643. esphome/components/openthread/tlv.py +0 -65
  644. /esphome/{dashboard/enum.py → enum.py} +0 -0
  645. {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/WHEEL +0 -0
  646. {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/entry_points.txt +0 -0
  647. {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/licenses/LICENSE +0 -0
  648. {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,128 @@
1
+ #pragma once
2
+
3
+ #include "sx127x_reg.h"
4
+ #include "esphome/components/spi/spi.h"
5
+ #include "esphome/core/automation.h"
6
+ #include "esphome/core/component.h"
7
+ #include <vector>
8
+
9
+ namespace esphome {
10
+ namespace sx127x {
11
+
12
+ enum SX127xBw : uint8_t {
13
+ SX127X_BW_2_6,
14
+ SX127X_BW_3_1,
15
+ SX127X_BW_3_9,
16
+ SX127X_BW_5_2,
17
+ SX127X_BW_6_3,
18
+ SX127X_BW_7_8,
19
+ SX127X_BW_10_4,
20
+ SX127X_BW_12_5,
21
+ SX127X_BW_15_6,
22
+ SX127X_BW_20_8,
23
+ SX127X_BW_25_0,
24
+ SX127X_BW_31_3,
25
+ SX127X_BW_41_7,
26
+ SX127X_BW_50_0,
27
+ SX127X_BW_62_5,
28
+ SX127X_BW_83_3,
29
+ SX127X_BW_100_0,
30
+ SX127X_BW_125_0,
31
+ SX127X_BW_166_7,
32
+ SX127X_BW_200_0,
33
+ SX127X_BW_250_0,
34
+ SX127X_BW_500_0,
35
+ };
36
+
37
+ enum class SX127xError { NONE = 0, TIMEOUT, INVALID_PARAMS };
38
+
39
+ class SX127xListener {
40
+ public:
41
+ virtual void on_packet(const std::vector<uint8_t> &packet, float rssi, float snr) = 0;
42
+ };
43
+
44
+ class SX127x : public Component,
45
+ public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, spi::CLOCK_PHASE_LEADING,
46
+ spi::DATA_RATE_8MHZ> {
47
+ public:
48
+ size_t get_max_packet_size();
49
+ float get_setup_priority() const override { return setup_priority::PROCESSOR; }
50
+ void setup() override;
51
+ void loop() override;
52
+ void dump_config() override;
53
+ void set_auto_cal(bool auto_cal) { this->auto_cal_ = auto_cal; }
54
+ void set_bandwidth(SX127xBw bandwidth) { this->bandwidth_ = bandwidth; }
55
+ void set_bitrate(uint32_t bitrate) { this->bitrate_ = bitrate; }
56
+ void set_bitsync(bool bitsync) { this->bitsync_ = bitsync; }
57
+ void set_coding_rate(uint8_t coding_rate) { this->coding_rate_ = coding_rate; }
58
+ void set_crc_enable(bool crc_enable) { this->crc_enable_ = crc_enable; }
59
+ void set_deviation(uint32_t deviation) { this->deviation_ = deviation; }
60
+ void set_dio0_pin(InternalGPIOPin *dio0_pin) { this->dio0_pin_ = dio0_pin; }
61
+ void set_frequency(uint32_t frequency) { this->frequency_ = frequency; }
62
+ void set_mode_rx();
63
+ void set_mode_tx();
64
+ void set_mode_standby();
65
+ void set_mode_sleep();
66
+ void set_modulation(uint8_t modulation) { this->modulation_ = modulation; }
67
+ void set_pa_pin(uint8_t pin) { this->pa_pin_ = pin; }
68
+ void set_pa_power(uint8_t power) { this->pa_power_ = power; }
69
+ void set_pa_ramp(uint8_t ramp) { this->pa_ramp_ = ramp; }
70
+ void set_packet_mode(bool packet_mode) { this->packet_mode_ = packet_mode; }
71
+ void set_payload_length(uint8_t payload_length) { this->payload_length_ = payload_length; }
72
+ void set_preamble_errors(uint8_t preamble_errors) { this->preamble_errors_ = preamble_errors; }
73
+ void set_preamble_polarity(uint8_t preamble_polarity) { this->preamble_polarity_ = preamble_polarity; }
74
+ void set_preamble_size(uint16_t preamble_size) { this->preamble_size_ = preamble_size; }
75
+ void set_preamble_detect(uint8_t preamble_detect) { this->preamble_detect_ = preamble_detect; }
76
+ void set_rst_pin(InternalGPIOPin *rst_pin) { this->rst_pin_ = rst_pin; }
77
+ void set_rx_floor(float floor) { this->rx_floor_ = floor; }
78
+ void set_rx_start(bool start) { this->rx_start_ = start; }
79
+ void set_shaping(uint8_t shaping) { this->shaping_ = shaping; }
80
+ void set_spreading_factor(uint8_t spreading_factor) { this->spreading_factor_ = spreading_factor; }
81
+ void set_sync_value(const std::vector<uint8_t> &sync_value) { this->sync_value_ = sync_value; }
82
+ void run_image_cal();
83
+ void configure();
84
+ SX127xError transmit_packet(const std::vector<uint8_t> &packet);
85
+ void register_listener(SX127xListener *listener) { this->listeners_.push_back(listener); }
86
+ Trigger<std::vector<uint8_t>, float, float> *get_packet_trigger() const { return this->packet_trigger_; };
87
+
88
+ protected:
89
+ void configure_fsk_ook_();
90
+ void configure_lora_();
91
+ void set_mode_(uint8_t modulation, uint8_t mode);
92
+ void write_fifo_(const std::vector<uint8_t> &packet);
93
+ void read_fifo_(std::vector<uint8_t> &packet);
94
+ void write_register_(uint8_t reg, uint8_t value);
95
+ void call_listeners_(const std::vector<uint8_t> &packet, float rssi, float snr);
96
+ uint8_t read_register_(uint8_t reg);
97
+ Trigger<std::vector<uint8_t>, float, float> *packet_trigger_{new Trigger<std::vector<uint8_t>, float, float>()};
98
+ std::vector<SX127xListener *> listeners_;
99
+ std::vector<uint8_t> packet_;
100
+ std::vector<uint8_t> sync_value_;
101
+ InternalGPIOPin *dio0_pin_{nullptr};
102
+ InternalGPIOPin *rst_pin_{nullptr};
103
+ SX127xBw bandwidth_;
104
+ uint32_t bitrate_;
105
+ uint32_t deviation_;
106
+ uint32_t frequency_;
107
+ uint32_t payload_length_;
108
+ uint16_t preamble_size_;
109
+ uint8_t coding_rate_;
110
+ uint8_t modulation_;
111
+ uint8_t pa_pin_;
112
+ uint8_t pa_power_;
113
+ uint8_t pa_ramp_;
114
+ uint8_t preamble_detect_;
115
+ uint8_t preamble_errors_;
116
+ uint8_t preamble_polarity_;
117
+ uint8_t shaping_;
118
+ uint8_t spreading_factor_;
119
+ float rx_floor_;
120
+ bool auto_cal_{false};
121
+ bool bitsync_{false};
122
+ bool crc_enable_{false};
123
+ bool packet_mode_{false};
124
+ bool rx_start_{false};
125
+ };
126
+
127
+ } // namespace sx127x
128
+ } // namespace esphome
@@ -0,0 +1,295 @@
1
+ #pragma once
2
+
3
+ #include "esphome/core/hal.h"
4
+
5
+ namespace esphome {
6
+ namespace sx127x {
7
+
8
+ enum SX127xReg : uint8_t {
9
+ // Common registers
10
+ REG_FIFO = 0x00,
11
+ REG_OP_MODE = 0x01,
12
+ REG_BITRATE_MSB = 0x02,
13
+ REG_BITRATE_LSB = 0x03,
14
+ REG_FDEV_MSB = 0x04,
15
+ REG_FDEV_LSB = 0x05,
16
+ REG_FRF_MSB = 0x06,
17
+ REG_FRF_MID = 0x07,
18
+ REG_FRF_LSB = 0x08,
19
+ REG_PA_CONFIG = 0x09,
20
+ REG_PA_RAMP = 0x0A,
21
+ REG_DIO_MAPPING1 = 0x40,
22
+ REG_DIO_MAPPING2 = 0x41,
23
+ REG_VERSION = 0x42,
24
+ // FSK/OOK registers
25
+ REG_RX_CONFIG = 0x0D,
26
+ REG_RSSI_THRESH = 0x10,
27
+ REG_RX_BW = 0x12,
28
+ REG_OOK_PEAK = 0x14,
29
+ REG_OOK_FIX = 0x15,
30
+ REG_OOK_AVG = 0x16,
31
+ REG_AFC_FEI = 0x1A,
32
+ REG_PREAMBLE_DETECT = 0x1F,
33
+ REG_PREAMBLE_SIZE_MSB = 0x25,
34
+ REG_PREAMBLE_SIZE_LSB = 0x26,
35
+ REG_SYNC_CONFIG = 0x27,
36
+ REG_SYNC_VALUE1 = 0x28,
37
+ REG_SYNC_VALUE2 = 0x29,
38
+ REG_SYNC_VALUE3 = 0x2A,
39
+ REG_SYNC_VALUE4 = 0x2B,
40
+ REG_SYNC_VALUE5 = 0x2C,
41
+ REG_SYNC_VALUE6 = 0x2D,
42
+ REG_SYNC_VALUE7 = 0x2E,
43
+ REG_SYNC_VALUE8 = 0x2F,
44
+ REG_PACKET_CONFIG_1 = 0x30,
45
+ REG_PACKET_CONFIG_2 = 0x31,
46
+ REG_PAYLOAD_LENGTH_LSB = 0x32,
47
+ REG_FIFO_THRESH = 0x35,
48
+ REG_IMAGE_CAL = 0x3B,
49
+ // LoRa registers
50
+ REG_FIFO_ADDR_PTR = 0x0D,
51
+ REG_FIFO_TX_BASE_ADDR = 0x0E,
52
+ REG_FIFO_RX_BASE_ADDR = 0x0F,
53
+ REG_FIFO_RX_CURR_ADDR = 0x10,
54
+ REG_IRQ_FLAGS_MASK = 0x11,
55
+ REG_IRQ_FLAGS = 0x12,
56
+ REG_NB_RX_BYTES = 0x13,
57
+ REG_MODEM_STAT = 0x18,
58
+ REG_PKT_SNR_VALUE = 0x19,
59
+ REG_PKT_RSSI_VALUE = 0x1A,
60
+ REG_RSSI_VALUE = 0x1B,
61
+ REG_HOP_CHANNEL = 0x1C,
62
+ REG_MODEM_CONFIG1 = 0x1D,
63
+ REG_MODEM_CONFIG2 = 0x1E,
64
+ REG_SYMB_TIMEOUT_LSB = 0x1F,
65
+ REG_PREAMBLE_LEN_MSB = 0x20,
66
+ REG_PREAMBLE_LEN_LSB = 0x21,
67
+ REG_PAYLOAD_LENGTH = 0x22,
68
+ REG_HOP_PERIOD = 0x24,
69
+ REG_FIFO_RX_BYTE_ADDR = 0x25,
70
+ REG_MODEM_CONFIG3 = 0x26,
71
+ REG_FEI_MSB = 0x28,
72
+ REG_FEI_MIB = 0x29,
73
+ REG_FEI_LSB = 0x2A,
74
+ REG_DETECT_OPTIMIZE = 0x31,
75
+ REG_INVERT_IQ = 0x33,
76
+ REG_DETECT_THRESHOLD = 0x37,
77
+ REG_SYNC_WORD = 0x39,
78
+ };
79
+
80
+ enum SX127xOpMode : uint8_t {
81
+ MOD_LORA = 0x80,
82
+ ACCESS_FSK_REGS = 0x40,
83
+ ACCESS_LORA_REGS = 0x00,
84
+ MOD_OOK = 0x20,
85
+ MOD_FSK = 0x00,
86
+ ACCESS_LF_REGS = 0x08,
87
+ ACCESS_HF_REGS = 0x00,
88
+ MODE_CAD = 0x07,
89
+ MODE_RX_SINGLE = 0x06,
90
+ MODE_RX = 0x05,
91
+ MODE_RX_FS = 0x04,
92
+ MODE_TX = 0x03,
93
+ MODE_TX_FS = 0x02,
94
+ MODE_STDBY = 0x01,
95
+ MODE_SLEEP = 0x00,
96
+ MODE_MASK = 0x07,
97
+ };
98
+
99
+ enum SX127xPaConfig : uint8_t {
100
+ PA_PIN_BOOST = 0x80,
101
+ PA_PIN_RFO = 0x00,
102
+ PA_MAX_POWER = 0x70,
103
+ };
104
+
105
+ enum SX127xPaRamp : uint8_t {
106
+ CUTOFF_BR_X_2 = 0x40,
107
+ CUTOFF_BR_X_1 = 0x20,
108
+ GAUSSIAN_BT_0_3 = 0x60,
109
+ GAUSSIAN_BT_0_5 = 0x40,
110
+ GAUSSIAN_BT_1_0 = 0x20,
111
+ SHAPING_NONE = 0x00,
112
+ PA_RAMP_10 = 0x0F,
113
+ PA_RAMP_12 = 0x0E,
114
+ PA_RAMP_15 = 0x0D,
115
+ PA_RAMP_20 = 0x0C,
116
+ PA_RAMP_25 = 0x0B,
117
+ PA_RAMP_31 = 0x0A,
118
+ PA_RAMP_40 = 0x09,
119
+ PA_RAMP_50 = 0x08,
120
+ PA_RAMP_62 = 0x07,
121
+ PA_RAMP_100 = 0x06,
122
+ PA_RAMP_125 = 0x05,
123
+ PA_RAMP_250 = 0x04,
124
+ PA_RAMP_500 = 0x03,
125
+ PA_RAMP_1000 = 0x02,
126
+ PA_RAMP_2000 = 0x01,
127
+ PA_RAMP_3400 = 0x00,
128
+ };
129
+
130
+ enum SX127xDioMapping1 : uint8_t {
131
+ DIO0_MAPPING_00 = 0x00,
132
+ DIO0_MAPPING_01 = 0x40,
133
+ DIO0_MAPPING_10 = 0x80,
134
+ DIO0_MAPPING_11 = 0xC0,
135
+ };
136
+
137
+ enum SX127xRxConfig : uint8_t {
138
+ RESTART_ON_COLLISION = 0x80,
139
+ RESTART_NO_LOCK = 0x40,
140
+ RESTART_PLL_LOCK = 0x20,
141
+ AFC_AUTO_ON = 0x10,
142
+ AGC_AUTO_ON = 0x08,
143
+ TRIGGER_NONE = 0x00,
144
+ TRIGGER_RSSI = 0x01,
145
+ TRIGGER_PREAMBLE = 0x06,
146
+ TRIGGER_ALL = 0x07,
147
+ };
148
+
149
+ enum SX127xRxBw : uint8_t {
150
+ RX_BW_2_6 = 0x17,
151
+ RX_BW_3_1 = 0x0F,
152
+ RX_BW_3_9 = 0x07,
153
+ RX_BW_5_2 = 0x16,
154
+ RX_BW_6_3 = 0x0E,
155
+ RX_BW_7_8 = 0x06,
156
+ RX_BW_10_4 = 0x15,
157
+ RX_BW_12_5 = 0x0D,
158
+ RX_BW_15_6 = 0x05,
159
+ RX_BW_20_8 = 0x14,
160
+ RX_BW_25_0 = 0x0C,
161
+ RX_BW_31_3 = 0x04,
162
+ RX_BW_41_7 = 0x13,
163
+ RX_BW_50_0 = 0x0B,
164
+ RX_BW_62_5 = 0x03,
165
+ RX_BW_83_3 = 0x12,
166
+ RX_BW_100_0 = 0x0A,
167
+ RX_BW_125_0 = 0x02,
168
+ RX_BW_166_7 = 0x11,
169
+ RX_BW_200_0 = 0x09,
170
+ RX_BW_250_0 = 0x01,
171
+ };
172
+
173
+ enum SX127xOokPeak : uint8_t {
174
+ BIT_SYNC_ON = 0x20,
175
+ BIT_SYNC_OFF = 0x00,
176
+ OOK_THRESH_AVG = 0x10,
177
+ OOK_THRESH_PEAK = 0x08,
178
+ OOK_THRESH_FIXED = 0x00,
179
+ OOK_THRESH_STEP_6_0 = 0x07,
180
+ OOK_THRESH_STEP_5_0 = 0x06,
181
+ OOK_THRESH_STEP_4_0 = 0x05,
182
+ OOK_THRESH_STEP_3_0 = 0x04,
183
+ OOK_THRESH_STEP_2_0 = 0x03,
184
+ OOK_THRESH_STEP_1_5 = 0x02,
185
+ OOK_THRESH_STEP_1_0 = 0x01,
186
+ OOK_THRESH_STEP_0_5 = 0x00,
187
+ };
188
+
189
+ enum SX127xOokAvg : uint8_t {
190
+ OOK_THRESH_DEC_16 = 0xE0,
191
+ OOK_THRESH_DEC_8 = 0xC0,
192
+ OOK_THRESH_DEC_4 = 0xA0,
193
+ OOK_THRESH_DEC_2 = 0x80,
194
+ OOK_THRESH_DEC_1_8 = 0x60,
195
+ OOK_THRESH_DEC_1_4 = 0x40,
196
+ OOK_THRESH_DEC_1_2 = 0x20,
197
+ OOK_THRESH_DEC_1 = 0x00,
198
+ OOK_AVG_RESERVED = 0x10,
199
+ };
200
+
201
+ enum SX127xAfcFei : uint8_t {
202
+ AFC_AUTO_CLEAR_ON = 0x01,
203
+ };
204
+
205
+ enum SX127xPreambleDetect : uint8_t {
206
+ PREAMBLE_DETECTOR_ON = 0x80,
207
+ PREAMBLE_DETECTOR_OFF = 0x00,
208
+ PREAMBLE_DETECTOR_SIZE_SHIFT = 5,
209
+ PREAMBLE_DETECTOR_TOL_SHIFT = 0,
210
+ };
211
+
212
+ enum SX127xSyncConfig : uint8_t {
213
+ AUTO_RESTART_PLL_LOCK = 0x80,
214
+ AUTO_RESTART_NO_LOCK = 0x40,
215
+ AUTO_RESTART_OFF = 0x00,
216
+ PREAMBLE_55 = 0x20,
217
+ PREAMBLE_AA = 0x00,
218
+ SYNC_ON = 0x10,
219
+ SYNC_OFF = 0x00,
220
+ };
221
+
222
+ enum SX127xPacketConfig1 : uint8_t {
223
+ VARIABLE_LENGTH = 0x80,
224
+ FIXED_LENGTH = 0x00,
225
+ CRC_ON = 0x10,
226
+ CRC_OFF = 0x00,
227
+ };
228
+
229
+ enum SX127xPacketConfig2 : uint8_t {
230
+ CONTINUOUS_MODE = 0x00,
231
+ PACKET_MODE = 0x40,
232
+ };
233
+
234
+ enum SX127xFifoThresh : uint8_t {
235
+ TX_START_FIFO_EMPTY = 0x80,
236
+ TX_START_FIFO_LEVEL = 0x00,
237
+ };
238
+
239
+ enum SX127xImageCal : uint8_t {
240
+ AUTO_IMAGE_CAL_ON = 0x80,
241
+ IMAGE_CAL_START = 0x40,
242
+ IMAGE_CAL_RUNNING = 0x20,
243
+ TEMP_CHANGE = 0x08,
244
+ TEMP_THRESHOLD_20C = 0x06,
245
+ TEMP_THRESHOLD_15C = 0x04,
246
+ TEMP_THRESHOLD_10C = 0x02,
247
+ TEMP_THRESHOLD_5C = 0x00,
248
+ TEMP_MONITOR_OFF = 0x01,
249
+ TEMP_MONITOR_ON = 0x00,
250
+ };
251
+
252
+ enum SX127xIrqFlags : uint8_t {
253
+ RX_TIMEOUT = 0x80,
254
+ RX_DONE = 0x40,
255
+ PAYLOAD_CRC_ERROR = 0x20,
256
+ VALID_HEADER = 0x10,
257
+ TX_DONE = 0x08,
258
+ CAD_DONE = 0x04,
259
+ FHSS_CHANGE_CHANNEL = 0x02,
260
+ CAD_DETECTED = 0x01,
261
+ };
262
+
263
+ enum SX127xModemCfg1 : uint8_t {
264
+ BW_7_8 = 0x00,
265
+ BW_10_4 = 0x10,
266
+ BW_15_6 = 0x20,
267
+ BW_20_8 = 0x30,
268
+ BW_31_3 = 0x40,
269
+ BW_41_7 = 0x50,
270
+ BW_62_5 = 0x60,
271
+ BW_125_0 = 0x70,
272
+ BW_250_0 = 0x80,
273
+ BW_500_0 = 0x90,
274
+ CODING_RATE_4_5 = 0x02,
275
+ CODING_RATE_4_6 = 0x04,
276
+ CODING_RATE_4_7 = 0x06,
277
+ CODING_RATE_4_8 = 0x08,
278
+ IMPLICIT_HEADER = 0x01,
279
+ EXPLICIT_HEADER = 0x00,
280
+ };
281
+
282
+ enum SX127xModemCfg2 : uint8_t {
283
+ SPREADING_FACTOR_SHIFT = 4,
284
+ TX_CONTINOUS_MODE = 0x08,
285
+ RX_PAYLOAD_CRC_ON = 0x04,
286
+ RX_PAYLOAD_CRC_OFF = 0x00,
287
+ };
288
+
289
+ enum SX127xModemCfg3 : uint8_t {
290
+ LOW_DATA_RATE_OPTIMIZE_ON = 0x08,
291
+ MODEM_AGC_AUTO_ON = 0x04,
292
+ };
293
+
294
+ } // namespace sx127x
295
+ } // namespace esphome
@@ -21,10 +21,12 @@ constexpr int LOG_LEVEL_TO_SYSLOG_SEVERITY[] = {
21
21
 
22
22
  void Syslog::setup() {
23
23
  logger::global_logger->add_on_log_callback(
24
- [this](int level, const char *tag, const char *message) { this->log_(level, tag, message); });
24
+ [this](int level, const char *tag, const char *message, size_t message_len) {
25
+ this->log_(level, tag, message, message_len);
26
+ });
25
27
  }
26
28
 
27
- void Syslog::log_(const int level, const char *tag, const char *message) const {
29
+ void Syslog::log_(const int level, const char *tag, const char *message, size_t message_len) const {
28
30
  if (level > this->log_level_)
29
31
  return;
30
32
  // Syslog PRI calculation: facility * 8 + severity
@@ -34,7 +36,7 @@ void Syslog::log_(const int level, const char *tag, const char *message) const {
34
36
  }
35
37
  int pri = this->facility_ * 8 + severity;
36
38
  auto timestamp = this->time_->now().strftime("%b %d %H:%M:%S");
37
- unsigned len = strlen(message);
39
+ size_t len = message_len;
38
40
  // remove color formatting
39
41
  if (this->strip_ && message[0] == 0x1B && len > 11) {
40
42
  message += 7;
@@ -17,7 +17,7 @@ class Syslog : public Component, public Parented<udp::UDPComponent> {
17
17
 
18
18
  protected:
19
19
  int log_level_;
20
- void log_(int level, const char *tag, const char *message) const;
20
+ void log_(int level, const char *tag, const char *message, size_t message_len) const;
21
21
  time::RealTimeClock *time_;
22
22
  bool strip_{true};
23
23
  int facility_{16};
@@ -53,7 +53,7 @@ TCA9555_PIN_SCHEMA = pins.gpio_base_schema(
53
53
  cv.int_range(min=0, max=15),
54
54
  modes=[CONF_INPUT, CONF_OUTPUT],
55
55
  mode_validator=validate_mode,
56
- invertable=True,
56
+ invertible=True,
57
57
  ).extend(
58
58
  {
59
59
  cv.Required(CONF_TCA9555): cv.use_id(TCA9555Component),
@@ -6,16 +6,8 @@ namespace template_ {
6
6
 
7
7
  static const char *const TAG = "template.binary_sensor";
8
8
 
9
- void TemplateBinarySensor::setup() {
10
- if (!this->publish_initial_state_)
11
- return;
9
+ void TemplateBinarySensor::setup() { this->loop(); }
12
10
 
13
- if (this->f_ != nullptr) {
14
- this->publish_initial_state(this->f_().value_or(false));
15
- } else {
16
- this->publish_initial_state(false);
17
- }
18
- }
19
11
  void TemplateBinarySensor::loop() {
20
12
  if (this->f_ == nullptr)
21
13
  return;
@@ -14,8 +14,8 @@ from esphome.const import (
14
14
  CONF_WEB_SERVER,
15
15
  )
16
16
  from esphome.core import CORE, coroutine_with_priority
17
+ from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
17
18
  from esphome.cpp_generator import MockObjClass
18
- from esphome.cpp_helpers import setup_entity
19
19
 
20
20
  CODEOWNERS = ["@mauritskorse"]
21
21
  IS_PLATFORM_COMPONENT = True
@@ -58,6 +58,9 @@ _TEXT_SCHEMA = (
58
58
  )
59
59
 
60
60
 
61
+ _TEXT_SCHEMA.add_extra(entity_duplicate_validator("text"))
62
+
63
+
61
64
  def text_schema(
62
65
  class_: MockObjClass = cv.UNDEFINED,
63
66
  *,
@@ -94,7 +97,7 @@ async def setup_text_core_(
94
97
  max_length: int | None,
95
98
  pattern: str | None,
96
99
  ):
97
- await setup_entity(var, config)
100
+ await setup_entity(var, config, "text")
98
101
 
99
102
  cg.add(var.traits.set_min_length(min_length))
100
103
  cg.add(var.traits.set_max_length(max_length))
@@ -21,8 +21,8 @@ from esphome.const import (
21
21
  DEVICE_CLASS_TIMESTAMP,
22
22
  )
23
23
  from esphome.core import CORE, coroutine_with_priority
24
+ from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
24
25
  from esphome.cpp_generator import MockObjClass
25
- from esphome.cpp_helpers import setup_entity
26
26
  from esphome.util import Registry
27
27
 
28
28
  DEVICE_CLASSES = [
@@ -153,6 +153,9 @@ _TEXT_SENSOR_SCHEMA = (
153
153
  )
154
154
 
155
155
 
156
+ _TEXT_SENSOR_SCHEMA.add_extra(entity_duplicate_validator("text_sensor"))
157
+
158
+
156
159
  def text_sensor_schema(
157
160
  class_: MockObjClass = cv.UNDEFINED,
158
161
  *,
@@ -186,7 +189,7 @@ async def build_filters(config):
186
189
 
187
190
 
188
191
  async def setup_text_sensor_core_(var, config):
189
- await setup_entity(var, config)
192
+ await setup_entity(var, config, "text_sensor")
190
193
 
191
194
  if (device_class := config.get(CONF_DEVICE_CLASS)) is not None:
192
195
  cg.add(var.set_device_class(device_class))
@@ -997,7 +997,7 @@ void ThermostatClimate::change_preset_(climate::ClimatePreset preset) {
997
997
  auto config = this->preset_config_.find(preset);
998
998
 
999
999
  if (config != this->preset_config_.end()) {
1000
- ESP_LOGI(TAG, "Preset %s requested", LOG_STR_ARG(climate::climate_preset_to_string(preset)));
1000
+ ESP_LOGV(TAG, "Preset %s requested", LOG_STR_ARG(climate::climate_preset_to_string(preset)));
1001
1001
  if (this->change_preset_internal_(config->second) || (!this->preset.has_value()) ||
1002
1002
  this->preset.value() != preset) {
1003
1003
  // Fire any preset changed trigger if defined
@@ -1015,7 +1015,7 @@ void ThermostatClimate::change_preset_(climate::ClimatePreset preset) {
1015
1015
  this->custom_preset.reset();
1016
1016
  this->preset = preset;
1017
1017
  } else {
1018
- ESP_LOGE(TAG, "Preset %s is not configured, ignoring.", LOG_STR_ARG(climate::climate_preset_to_string(preset)));
1018
+ ESP_LOGW(TAG, "Preset %s not configured; ignoring", LOG_STR_ARG(climate::climate_preset_to_string(preset)));
1019
1019
  }
1020
1020
  }
1021
1021
 
@@ -1023,7 +1023,7 @@ void ThermostatClimate::change_custom_preset_(const std::string &custom_preset)
1023
1023
  auto config = this->custom_preset_config_.find(custom_preset);
1024
1024
 
1025
1025
  if (config != this->custom_preset_config_.end()) {
1026
- ESP_LOGI(TAG, "Custom preset %s requested", custom_preset.c_str());
1026
+ ESP_LOGV(TAG, "Custom preset %s requested", custom_preset.c_str());
1027
1027
  if (this->change_preset_internal_(config->second) || (!this->custom_preset.has_value()) ||
1028
1028
  this->custom_preset.value() != custom_preset) {
1029
1029
  // Fire any preset changed trigger if defined
@@ -1041,7 +1041,7 @@ void ThermostatClimate::change_custom_preset_(const std::string &custom_preset)
1041
1041
  this->preset.reset();
1042
1042
  this->custom_preset = custom_preset;
1043
1043
  } else {
1044
- ESP_LOGE(TAG, "Custom Preset %s is not configured, ignoring.", custom_preset.c_str());
1044
+ ESP_LOGW(TAG, "Custom preset %s not configured; ignoring", custom_preset.c_str());
1045
1045
  }
1046
1046
  }
1047
1047
 
@@ -1298,7 +1298,7 @@ void ThermostatClimate::dump_config() {
1298
1298
  if (this->supports_two_points_) {
1299
1299
  ESP_LOGCONFIG(TAG, " Minimum Set Point Differential: %.1f°C", this->set_point_minimum_differential_);
1300
1300
  }
1301
- ESP_LOGCONFIG(TAG, " Start-up Delay Enabled: %s", YESNO(this->use_startup_delay_));
1301
+ ESP_LOGCONFIG(TAG, " Use Start-up Delay: %s", YESNO(this->use_startup_delay_));
1302
1302
  if (this->supports_cool_) {
1303
1303
  ESP_LOGCONFIG(TAG,
1304
1304
  " Cooling Parameters:\n"
@@ -1353,44 +1353,47 @@ void ThermostatClimate::dump_config() {
1353
1353
  }
1354
1354
  ESP_LOGCONFIG(TAG, " Minimum Idle Time: %" PRIu32 "s", this->timer_[thermostat::TIMER_IDLE_ON].time / 1000);
1355
1355
  ESP_LOGCONFIG(TAG,
1356
- " Supports AUTO: %s\n"
1357
- " Supports HEAT/COOL: %s\n"
1358
- " Supports COOL: %s\n"
1359
- " Supports DRY: %s\n"
1360
- " Supports FAN_ONLY: %s\n"
1361
- " Supports FAN_ONLY_ACTION_USES_FAN_MODE_TIMER: %s\n"
1362
- " Supports FAN_ONLY_COOLING: %s",
1363
- YESNO(this->supports_auto_), YESNO(this->supports_heat_cool_), YESNO(this->supports_cool_),
1364
- YESNO(this->supports_dry_), YESNO(this->supports_fan_only_),
1356
+ " Supported MODES:\n"
1357
+ " AUTO: %s\n"
1358
+ " HEAT/COOL: %s\n"
1359
+ " HEAT: %s\n"
1360
+ " COOL: %s\n"
1361
+ " DRY: %s\n"
1362
+ " FAN_ONLY: %s\n"
1363
+ " FAN_ONLY_ACTION_USES_FAN_MODE_TIMER: %s\n"
1364
+ " FAN_ONLY_COOLING: %s",
1365
+ YESNO(this->supports_auto_), YESNO(this->supports_heat_cool_), YESNO(this->supports_heat_),
1366
+ YESNO(this->supports_cool_), YESNO(this->supports_dry_), YESNO(this->supports_fan_only_),
1365
1367
  YESNO(this->supports_fan_only_action_uses_fan_mode_timer_), YESNO(this->supports_fan_only_cooling_));
1366
1368
  if (this->supports_cool_) {
1367
- ESP_LOGCONFIG(TAG, " Supports FAN_WITH_COOLING: %s", YESNO(this->supports_fan_with_cooling_));
1369
+ ESP_LOGCONFIG(TAG, " FAN_WITH_COOLING: %s", YESNO(this->supports_fan_with_cooling_));
1368
1370
  }
1369
1371
  if (this->supports_heat_) {
1370
- ESP_LOGCONFIG(TAG, " Supports FAN_WITH_HEATING: %s", YESNO(this->supports_fan_with_heating_));
1372
+ ESP_LOGCONFIG(TAG, " FAN_WITH_HEATING: %s", YESNO(this->supports_fan_with_heating_));
1371
1373
  }
1372
- ESP_LOGCONFIG(TAG, " Supports HEAT: %s", YESNO(this->supports_heat_));
1373
1374
  ESP_LOGCONFIG(TAG,
1374
- " Supports FAN MODE ON: %s\n"
1375
- " Supports FAN MODE OFF: %s\n"
1376
- " Supports FAN MODE AUTO: %s\n"
1377
- " Supports FAN MODE LOW: %s\n"
1378
- " Supports FAN MODE MEDIUM: %s\n"
1379
- " Supports FAN MODE HIGH: %s\n"
1380
- " Supports FAN MODE MIDDLE: %s\n"
1381
- " Supports FAN MODE FOCUS: %s\n"
1382
- " Supports FAN MODE DIFFUSE: %s\n"
1383
- " Supports FAN MODE QUIET: %s",
1375
+ " Supported FAN MODES:\n"
1376
+ " ON: %s\n"
1377
+ " OFF: %s\n"
1378
+ " AUTO: %s\n"
1379
+ " LOW: %s\n"
1380
+ " MEDIUM: %s\n"
1381
+ " HIGH: %s\n"
1382
+ " MIDDLE: %s\n"
1383
+ " FOCUS: %s\n"
1384
+ " DIFFUSE: %s\n"
1385
+ " QUIET: %s",
1384
1386
  YESNO(this->supports_fan_mode_on_), YESNO(this->supports_fan_mode_off_),
1385
1387
  YESNO(this->supports_fan_mode_auto_), YESNO(this->supports_fan_mode_low_),
1386
1388
  YESNO(this->supports_fan_mode_medium_), YESNO(this->supports_fan_mode_high_),
1387
1389
  YESNO(this->supports_fan_mode_middle_), YESNO(this->supports_fan_mode_focus_),
1388
1390
  YESNO(this->supports_fan_mode_diffuse_), YESNO(this->supports_fan_mode_quiet_));
1389
1391
  ESP_LOGCONFIG(TAG,
1390
- " Supports SWING MODE BOTH: %s\n"
1391
- " Supports SWING MODE OFF: %s\n"
1392
- " Supports SWING MODE HORIZONTAL: %s\n"
1393
- " Supports SWING MODE VERTICAL: %s\n"
1392
+ " Supported SWING MODES:\n"
1393
+ " BOTH: %s\n"
1394
+ " OFF: %s\n"
1395
+ " HORIZONTAL: %s\n"
1396
+ " VERTICAL: %s\n"
1394
1397
  " Supports TWO SET POINTS: %s",
1395
1398
  YESNO(this->supports_swing_mode_both_), YESNO(this->supports_swing_mode_off_),
1396
1399
  YESNO(this->supports_swing_mode_horizontal_), YESNO(this->supports_swing_mode_vertical_),