esphome 2025.12.0b2__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 (3896) hide show
  1. esphome/__init__.py +0 -0
  2. esphome/__main__.py +1517 -0
  3. esphome/address_cache.py +142 -0
  4. esphome/analyze_memory/__init__.py +335 -0
  5. esphome/analyze_memory/__main__.py +6 -0
  6. esphome/analyze_memory/cli.py +435 -0
  7. esphome/analyze_memory/const.py +1052 -0
  8. esphome/analyze_memory/demangle.py +182 -0
  9. esphome/analyze_memory/helpers.py +121 -0
  10. esphome/analyze_memory/ram_strings.py +493 -0
  11. esphome/analyze_memory/toolchain.py +57 -0
  12. esphome/automation.py +589 -0
  13. esphome/build_gen/__init__.py +0 -0
  14. esphome/build_gen/platformio.py +100 -0
  15. esphome/codegen.py +97 -0
  16. esphome/components/__init__.py +0 -0
  17. esphome/components/a01nyub/__init__.py +1 -0
  18. esphome/components/a01nyub/a01nyub.cpp +44 -0
  19. esphome/components/a01nyub/a01nyub.h +27 -0
  20. esphome/components/a01nyub/sensor.py +41 -0
  21. esphome/components/a02yyuw/__init__.py +1 -0
  22. esphome/components/a02yyuw/a02yyuw.cpp +43 -0
  23. esphome/components/a02yyuw/a02yyuw.h +27 -0
  24. esphome/components/a02yyuw/sensor.py +41 -0
  25. esphome/components/a4988/__init__.py +0 -0
  26. esphome/components/a4988/a4988.cpp +55 -0
  27. esphome/components/a4988/a4988.h +29 -0
  28. esphome/components/a4988/stepper.py +32 -0
  29. esphome/components/absolute_humidity/__init__.py +1 -0
  30. esphome/components/absolute_humidity/absolute_humidity.cpp +180 -0
  31. esphome/components/absolute_humidity/absolute_humidity.h +76 -0
  32. esphome/components/absolute_humidity/sensor.py +56 -0
  33. esphome/components/ac_dimmer/__init__.py +0 -0
  34. esphome/components/ac_dimmer/ac_dimmer.cpp +236 -0
  35. esphome/components/ac_dimmer/ac_dimmer.h +70 -0
  36. esphome/components/ac_dimmer/output.py +52 -0
  37. esphome/components/adalight/__init__.py +27 -0
  38. esphome/components/adalight/adalight_light_effect.cpp +142 -0
  39. esphome/components/adalight/adalight_light_effect.h +39 -0
  40. esphome/components/adc/__init__.py +281 -0
  41. esphome/components/adc/adc_sensor.h +170 -0
  42. esphome/components/adc/adc_sensor_common.cpp +85 -0
  43. esphome/components/adc/adc_sensor_esp32.cpp +368 -0
  44. esphome/components/adc/adc_sensor_esp8266.cpp +61 -0
  45. esphome/components/adc/adc_sensor_libretiny.cpp +54 -0
  46. esphome/components/adc/adc_sensor_rp2040.cpp +97 -0
  47. esphome/components/adc/adc_sensor_zephyr.cpp +207 -0
  48. esphome/components/adc/sensor.py +196 -0
  49. esphome/components/adc128s102/__init__.py +23 -0
  50. esphome/components/adc128s102/adc128s102.cpp +32 -0
  51. esphome/components/adc128s102/adc128s102.h +23 -0
  52. esphome/components/adc128s102/sensor/__init__.py +38 -0
  53. esphome/components/adc128s102/sensor/adc128s102_sensor.cpp +24 -0
  54. esphome/components/adc128s102/sensor/adc128s102_sensor.h +29 -0
  55. esphome/components/addressable_light/__init__.py +0 -0
  56. esphome/components/addressable_light/addressable_light_display.cpp +67 -0
  57. esphome/components/addressable_light/addressable_light_display.h +63 -0
  58. esphome/components/addressable_light/display.py +62 -0
  59. esphome/components/ade7880/__init__.py +1 -0
  60. esphome/components/ade7880/ade7880.cpp +315 -0
  61. esphome/components/ade7880/ade7880.h +129 -0
  62. esphome/components/ade7880/ade7880_i2c.cpp +101 -0
  63. esphome/components/ade7880/ade7880_registers.h +243 -0
  64. esphome/components/ade7880/sensor.py +316 -0
  65. esphome/components/ade7953/__init__.py +1 -0
  66. esphome/components/ade7953/sensor.py +5 -0
  67. esphome/components/ade7953_base/__init__.py +203 -0
  68. esphome/components/ade7953_base/ade7953_base.cpp +156 -0
  69. esphome/components/ade7953_base/ade7953_base.h +131 -0
  70. esphome/components/ade7953_i2c/__init__.py +1 -0
  71. esphome/components/ade7953_i2c/ade7953_i2c.cpp +80 -0
  72. esphome/components/ade7953_i2c/ade7953_i2c.h +28 -0
  73. esphome/components/ade7953_i2c/sensor.py +26 -0
  74. esphome/components/ade7953_spi/__init__.py +1 -0
  75. esphome/components/ade7953_spi/ade7953_spi.cpp +81 -0
  76. esphome/components/ade7953_spi/ade7953_spi.h +32 -0
  77. esphome/components/ade7953_spi/sensor.py +26 -0
  78. esphome/components/ads1115/__init__.py +32 -0
  79. esphome/components/ads1115/ads1115.cpp +223 -0
  80. esphome/components/ads1115/ads1115.h +64 -0
  81. esphome/components/ads1115/sensor/__init__.py +98 -0
  82. esphome/components/ads1115/sensor/ads1115_sensor.cpp +31 -0
  83. esphome/components/ads1115/sensor/ads1115_sensor.h +37 -0
  84. esphome/components/ads1118/__init__.py +25 -0
  85. esphome/components/ads1118/ads1118.cpp +126 -0
  86. esphome/components/ads1118/ads1118.h +45 -0
  87. esphome/components/ads1118/sensor/__init__.py +98 -0
  88. esphome/components/ads1118/sensor/ads1118_sensor.cpp +29 -0
  89. esphome/components/ads1118/sensor/ads1118_sensor.h +36 -0
  90. esphome/components/ags10/__init__.py +1 -0
  91. esphome/components/ags10/ags10.cpp +196 -0
  92. esphome/components/ags10/ags10.h +140 -0
  93. esphome/components/ags10/sensor.py +132 -0
  94. esphome/components/aht10/__init__.py +0 -0
  95. esphome/components/aht10/aht10.cpp +166 -0
  96. esphome/components/aht10/aht10.h +36 -0
  97. esphome/components/aht10/sensor.py +65 -0
  98. esphome/components/aic3204/__init__.py +0 -0
  99. esphome/components/aic3204/aic3204.cpp +171 -0
  100. esphome/components/aic3204/aic3204.h +87 -0
  101. esphome/components/aic3204/audio_dac.py +52 -0
  102. esphome/components/aic3204/automation.h +23 -0
  103. esphome/components/airthings_ble/__init__.py +23 -0
  104. esphome/components/airthings_ble/airthings_listener.cpp +34 -0
  105. esphome/components/airthings_ble/airthings_listener.h +19 -0
  106. esphome/components/airthings_wave_base/__init__.py +102 -0
  107. esphome/components/airthings_wave_base/airthings_wave_base.cpp +211 -0
  108. esphome/components/airthings_wave_base/airthings_wave_base.h +90 -0
  109. esphome/components/airthings_wave_mini/__init__.py +1 -0
  110. esphome/components/airthings_wave_mini/airthings_wave_mini.cpp +55 -0
  111. esphome/components/airthings_wave_mini/airthings_wave_mini.h +40 -0
  112. esphome/components/airthings_wave_mini/sensor.py +25 -0
  113. esphome/components/airthings_wave_plus/__init__.py +1 -0
  114. esphome/components/airthings_wave_plus/airthings_wave_plus.cpp +104 -0
  115. esphome/components/airthings_wave_plus/airthings_wave_plus.h +64 -0
  116. esphome/components/airthings_wave_plus/sensor.py +102 -0
  117. esphome/components/alarm_control_panel/__init__.py +344 -0
  118. esphome/components/alarm_control_panel/alarm_control_panel.cpp +161 -0
  119. esphome/components/alarm_control_panel/alarm_control_panel.h +200 -0
  120. esphome/components/alarm_control_panel/alarm_control_panel_call.cpp +103 -0
  121. esphome/components/alarm_control_panel/alarm_control_panel_call.h +40 -0
  122. esphome/components/alarm_control_panel/alarm_control_panel_state.cpp +34 -0
  123. esphome/components/alarm_control_panel/alarm_control_panel_state.h +29 -0
  124. esphome/components/alarm_control_panel/automation.h +191 -0
  125. esphome/components/alpha3/__init__.py +1 -0
  126. esphome/components/alpha3/alpha3.cpp +191 -0
  127. esphome/components/alpha3/alpha3.h +72 -0
  128. esphome/components/alpha3/sensor.py +85 -0
  129. esphome/components/am2315c/__init__.py +1 -0
  130. esphome/components/am2315c/am2315c.cpp +182 -0
  131. esphome/components/am2315c/am2315c.h +50 -0
  132. esphome/components/am2315c/sensor.py +54 -0
  133. esphome/components/am2320/__init__.py +0 -0
  134. esphome/components/am2320/am2320.cpp +91 -0
  135. esphome/components/am2320/am2320.h +29 -0
  136. esphome/components/am2320/sensor.py +56 -0
  137. esphome/components/am43/__init__.py +1 -0
  138. esphome/components/am43/am43_base.cpp +144 -0
  139. esphome/components/am43/am43_base.h +78 -0
  140. esphome/components/am43/cover/__init__.py +35 -0
  141. esphome/components/am43/cover/am43_cover.cpp +159 -0
  142. esphome/components/am43/cover/am43_cover.h +44 -0
  143. esphome/components/am43/sensor/__init__.py +53 -0
  144. esphome/components/am43/sensor/am43_sensor.cpp +117 -0
  145. esphome/components/am43/sensor/am43_sensor.h +44 -0
  146. esphome/components/analog_threshold/__init__.py +1 -0
  147. esphome/components/analog_threshold/analog_threshold_binary_sensor.cpp +47 -0
  148. esphome/components/analog_threshold/analog_threshold_binary_sensor.h +27 -0
  149. esphome/components/analog_threshold/binary_sensor.py +49 -0
  150. esphome/components/animation/__init__.py +108 -0
  151. esphome/components/animation/animation.cpp +70 -0
  152. esphome/components/animation/animation.h +68 -0
  153. esphome/components/anova/__init__.py +0 -0
  154. esphome/components/anova/anova.cpp +161 -0
  155. esphome/components/anova/anova.h +51 -0
  156. esphome/components/anova/anova_base.cpp +134 -0
  157. esphome/components/anova/anova_base.h +79 -0
  158. esphome/components/anova/climate.py +35 -0
  159. esphome/components/apds9306/__init__.py +4 -0
  160. esphome/components/apds9306/apds9306.cpp +151 -0
  161. esphome/components/apds9306/apds9306.h +66 -0
  162. esphome/components/apds9306/sensor.py +95 -0
  163. esphome/components/apds9960/__init__.py +69 -0
  164. esphome/components/apds9960/apds9960.cpp +407 -0
  165. esphome/components/apds9960/apds9960.h +76 -0
  166. esphome/components/apds9960/binary_sensor.py +26 -0
  167. esphome/components/apds9960/sensor.py +34 -0
  168. esphome/components/api/__init__.py +802 -0
  169. esphome/components/api/api_connection.cpp +1983 -0
  170. esphome/components/api/api_connection.h +739 -0
  171. esphome/components/api/api_frame_helper.cpp +266 -0
  172. esphome/components/api/api_frame_helper.h +215 -0
  173. esphome/components/api/api_frame_helper_noise.cpp +604 -0
  174. esphome/components/api/api_frame_helper_noise.h +63 -0
  175. esphome/components/api/api_frame_helper_plaintext.cpp +292 -0
  176. esphome/components/api/api_frame_helper_plaintext.h +50 -0
  177. esphome/components/api/api_noise_context.h +30 -0
  178. esphome/components/api/api_pb2.cpp +3250 -0
  179. esphome/components/api/api_pb2.h +3072 -0
  180. esphome/components/api/api_pb2_dump.cpp +2243 -0
  181. esphome/components/api/api_pb2_includes.h +34 -0
  182. esphome/components/api/api_pb2_service.cpp +857 -0
  183. esphome/components/api/api_pb2_service.h +486 -0
  184. esphome/components/api/api_server.cpp +702 -0
  185. esphome/components/api/api_server.h +312 -0
  186. esphome/components/api/client.py +82 -0
  187. esphome/components/api/custom_api_device.h +296 -0
  188. esphome/components/api/homeassistant_service.h +243 -0
  189. esphome/components/api/list_entities.cpp +96 -0
  190. esphome/components/api/list_entities.h +99 -0
  191. esphome/components/api/proto.cpp +150 -0
  192. esphome/components/api/proto.h +892 -0
  193. esphome/components/api/subscribe_state.cpp +72 -0
  194. esphome/components/api/subscribe_state.h +92 -0
  195. esphome/components/api/user_services.cpp +91 -0
  196. esphome/components/api/user_services.h +307 -0
  197. esphome/components/as3935/__init__.py +59 -0
  198. esphome/components/as3935/as3935.cpp +324 -0
  199. esphome/components/as3935/as3935.h +132 -0
  200. esphome/components/as3935/binary_sensor.py +19 -0
  201. esphome/components/as3935/sensor.py +41 -0
  202. esphome/components/as3935_i2c/__init__.py +26 -0
  203. esphome/components/as3935_i2c/as3935_i2c.cpp +44 -0
  204. esphome/components/as3935_i2c/as3935_i2c.h +19 -0
  205. esphome/components/as3935_spi/__init__.py +26 -0
  206. esphome/components/as3935_spi/as3935_spi.cpp +46 -0
  207. esphome/components/as3935_spi/as3935_spi.h +25 -0
  208. esphome/components/as5600/__init__.py +227 -0
  209. esphome/components/as5600/as5600.cpp +138 -0
  210. esphome/components/as5600/as5600.h +104 -0
  211. esphome/components/as5600/sensor/__init__.py +119 -0
  212. esphome/components/as5600/sensor/as5600_sensor.cpp +98 -0
  213. esphome/components/as5600/sensor/as5600_sensor.h +43 -0
  214. esphome/components/as7341/__init__.py +0 -0
  215. esphome/components/as7341/as7341.cpp +272 -0
  216. esphome/components/as7341/as7341.h +144 -0
  217. esphome/components/as7341/sensor.py +111 -0
  218. esphome/components/async_tcp/__init__.py +37 -0
  219. esphome/components/at581x/__init__.py +219 -0
  220. esphome/components/at581x/at581x.cpp +198 -0
  221. esphome/components/at581x/at581x.h +62 -0
  222. esphome/components/at581x/automation.h +71 -0
  223. esphome/components/at581x/switch/__init__.py +29 -0
  224. esphome/components/at581x/switch/rf_switch.cpp +12 -0
  225. esphome/components/at581x/switch/rf_switch.h +15 -0
  226. esphome/components/atc_mithermometer/__init__.py +0 -0
  227. esphome/components/atc_mithermometer/atc_mithermometer.cpp +133 -0
  228. esphome/components/atc_mithermometer/atc_mithermometer.h +50 -0
  229. esphome/components/atc_mithermometer/sensor.py +100 -0
  230. esphome/components/atm90e26/__init__.py +1 -0
  231. esphome/components/atm90e26/atm90e26.cpp +234 -0
  232. esphome/components/atm90e26/atm90e26.h +72 -0
  233. esphome/components/atm90e26/atm90e26_reg.h +70 -0
  234. esphome/components/atm90e26/sensor.py +159 -0
  235. esphome/components/atm90e32/__init__.py +8 -0
  236. esphome/components/atm90e32/atm90e32.cpp +1233 -0
  237. esphome/components/atm90e32/atm90e32.h +275 -0
  238. esphome/components/atm90e32/atm90e32_reg.h +272 -0
  239. esphome/components/atm90e32/button/__init__.py +95 -0
  240. esphome/components/atm90e32/button/atm90e32_button.cpp +79 -0
  241. esphome/components/atm90e32/button/atm90e32_button.h +59 -0
  242. esphome/components/atm90e32/number/__init__.py +130 -0
  243. esphome/components/atm90e32/number/atm90e32_number.h +16 -0
  244. esphome/components/atm90e32/sensor.py +252 -0
  245. esphome/components/atm90e32/text_sensor/__init__.py +48 -0
  246. esphome/components/audio/__init__.py +168 -0
  247. esphome/components/audio/audio.cpp +67 -0
  248. esphome/components/audio/audio.h +187 -0
  249. esphome/components/audio/audio_decoder.cpp +393 -0
  250. esphome/components/audio/audio_decoder.h +135 -0
  251. esphome/components/audio/audio_reader.cpp +328 -0
  252. esphome/components/audio/audio_reader.h +85 -0
  253. esphome/components/audio/audio_resampler.cpp +163 -0
  254. esphome/components/audio/audio_resampler.h +102 -0
  255. esphome/components/audio/audio_transfer_buffer.cpp +175 -0
  256. esphome/components/audio/audio_transfer_buffer.h +144 -0
  257. esphome/components/audio_adc/__init__.py +41 -0
  258. esphome/components/audio_adc/audio_adc.h +17 -0
  259. esphome/components/audio_adc/automation.h +23 -0
  260. esphome/components/audio_dac/__init__.py +57 -0
  261. esphome/components/audio_dac/audio_dac.h +23 -0
  262. esphome/components/audio_dac/automation.h +43 -0
  263. esphome/components/axs15231/__init__.py +6 -0
  264. esphome/components/axs15231/touchscreen/__init__.py +36 -0
  265. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +68 -0
  266. esphome/components/axs15231/touchscreen/axs15231_touchscreen.h +27 -0
  267. esphome/components/b_parasite/__init__.py +0 -0
  268. esphome/components/b_parasite/b_parasite.cpp +108 -0
  269. esphome/components/b_parasite/b_parasite.h +41 -0
  270. esphome/components/b_parasite/sensor.py +92 -0
  271. esphome/components/ballu/__init__.py +0 -0
  272. esphome/components/ballu/ballu.cpp +239 -0
  273. esphome/components/ballu/ballu.h +31 -0
  274. esphome/components/ballu/climate.py +14 -0
  275. esphome/components/bang_bang/__init__.py +1 -0
  276. esphome/components/bang_bang/bang_bang_climate.cpp +232 -0
  277. esphome/components/bang_bang/bang_bang_climate.h +92 -0
  278. esphome/components/bang_bang/climate.py +81 -0
  279. esphome/components/bedjet/__init__.py +48 -0
  280. esphome/components/bedjet/bedjet_child.h +23 -0
  281. esphome/components/bedjet/bedjet_codec.cpp +169 -0
  282. esphome/components/bedjet/bedjet_codec.h +194 -0
  283. esphome/components/bedjet/bedjet_const.h +105 -0
  284. esphome/components/bedjet/bedjet_hub.cpp +553 -0
  285. esphome/components/bedjet/bedjet_hub.h +178 -0
  286. esphome/components/bedjet/climate/__init__.py +67 -0
  287. esphome/components/bedjet/climate/bedjet_climate.cpp +351 -0
  288. esphome/components/bedjet/climate/bedjet_climate.h +85 -0
  289. esphome/components/bedjet/fan/__init__.py +22 -0
  290. esphome/components/bedjet/fan/bedjet_fan.cpp +113 -0
  291. esphome/components/bedjet/fan/bedjet_fan.h +40 -0
  292. esphome/components/bedjet/sensor/__init__.py +52 -0
  293. esphome/components/bedjet/sensor/bedjet_sensor.cpp +34 -0
  294. esphome/components/bedjet/sensor/bedjet_sensor.h +32 -0
  295. esphome/components/beken_spi_led_strip/__init__.py +0 -0
  296. esphome/components/beken_spi_led_strip/led_strip.cpp +388 -0
  297. esphome/components/beken_spi_led_strip/led_strip.h +85 -0
  298. esphome/components/beken_spi_led_strip/light.py +134 -0
  299. esphome/components/bh1750/__init__.py +0 -0
  300. esphome/components/bh1750/bh1750.cpp +168 -0
  301. esphome/components/bh1750/bh1750.h +33 -0
  302. esphome/components/bh1750/sensor.py +41 -0
  303. esphome/components/bh1900nux/__init__.py +0 -0
  304. esphome/components/bh1900nux/bh1900nux.cpp +54 -0
  305. esphome/components/bh1900nux/bh1900nux.h +18 -0
  306. esphome/components/bh1900nux/sensor.py +34 -0
  307. esphome/components/binary/__init__.py +3 -0
  308. esphome/components/binary/fan/__init__.py +36 -0
  309. esphome/components/binary/fan/binary_fan.cpp +40 -0
  310. esphome/components/binary/fan/binary_fan.h +31 -0
  311. esphome/components/binary/light/__init__.py +23 -0
  312. esphome/components/binary/light/binary_light_output.h +33 -0
  313. esphome/components/binary_sensor/__init__.py +679 -0
  314. esphome/components/binary_sensor/automation.cpp +120 -0
  315. esphome/components/binary_sensor/automation.h +174 -0
  316. esphome/components/binary_sensor/binary_sensor.cpp +71 -0
  317. esphome/components/binary_sensor/binary_sensor.h +73 -0
  318. esphome/components/binary_sensor/filter.cpp +133 -0
  319. esphome/components/binary_sensor/filter.h +140 -0
  320. esphome/components/binary_sensor_map/__init__.py +0 -0
  321. esphome/components/binary_sensor_map/binary_sensor_map.cpp +142 -0
  322. esphome/components/binary_sensor_map/binary_sensor_map.h +100 -0
  323. esphome/components/binary_sensor_map/sensor.py +105 -0
  324. esphome/components/bk72xx/__init__.py +52 -0
  325. esphome/components/bk72xx/boards.py +1264 -0
  326. esphome/components/bl0906/__init__.py +1 -0
  327. esphome/components/bl0906/bl0906.cpp +238 -0
  328. esphome/components/bl0906/bl0906.h +96 -0
  329. esphome/components/bl0906/const.py +4 -0
  330. esphome/components/bl0906/constants.h +122 -0
  331. esphome/components/bl0906/sensor.py +185 -0
  332. esphome/components/bl0939/__init__.py +1 -0
  333. esphome/components/bl0939/bl0939.cpp +146 -0
  334. esphome/components/bl0939/bl0939.h +107 -0
  335. esphome/components/bl0939/sensor.py +119 -0
  336. esphome/components/bl0940/__init__.py +6 -0
  337. esphome/components/bl0940/bl0940.cpp +275 -0
  338. esphome/components/bl0940/bl0940.h +154 -0
  339. esphome/components/bl0940/button/__init__.py +27 -0
  340. esphome/components/bl0940/button/calibration_reset_button.cpp +20 -0
  341. esphome/components/bl0940/button/calibration_reset_button.h +19 -0
  342. esphome/components/bl0940/number/__init__.py +94 -0
  343. esphome/components/bl0940/number/calibration_number.cpp +29 -0
  344. esphome/components/bl0940/number/calibration_number.h +26 -0
  345. esphome/components/bl0940/sensor.py +250 -0
  346. esphome/components/bl0942/__init__.py +1 -0
  347. esphome/components/bl0942/bl0942.cpp +218 -0
  348. esphome/components/bl0942/bl0942.h +152 -0
  349. esphome/components/bl0942/sensor.py +128 -0
  350. esphome/components/ble_client/__init__.py +316 -0
  351. esphome/components/ble_client/automation.cpp +11 -0
  352. esphome/components/ble_client/automation.h +395 -0
  353. esphome/components/ble_client/ble_client.cpp +86 -0
  354. esphome/components/ble_client/ble_client.h +79 -0
  355. esphome/components/ble_client/output/__init__.py +68 -0
  356. esphome/components/ble_client/output/ble_binary_output.cpp +78 -0
  357. esphome/components/ble_client/output/ble_binary_output.h +40 -0
  358. esphome/components/ble_client/sensor/__init__.py +161 -0
  359. esphome/components/ble_client/sensor/automation.h +39 -0
  360. esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +81 -0
  361. esphome/components/ble_client/sensor/ble_rssi_sensor.h +32 -0
  362. esphome/components/ble_client/sensor/ble_sensor.cpp +150 -0
  363. esphome/components/ble_client/sensor/ble_sensor.h +51 -0
  364. esphome/components/ble_client/switch/__init__.py +22 -0
  365. esphome/components/ble_client/switch/ble_switch.cpp +34 -0
  366. esphome/components/ble_client/switch/ble_switch.h +27 -0
  367. esphome/components/ble_client/text_sensor/__init__.py +106 -0
  368. esphome/components/ble_client/text_sensor/automation.h +37 -0
  369. esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +141 -0
  370. esphome/components/ble_client/text_sensor/ble_text_sensor.h +43 -0
  371. esphome/components/ble_nus/__init__.py +29 -0
  372. esphome/components/ble_nus/ble_nus.cpp +161 -0
  373. esphome/components/ble_nus/ble_nus.h +48 -0
  374. esphome/components/ble_presence/__init__.py +0 -0
  375. esphome/components/ble_presence/binary_sensor.py +93 -0
  376. esphome/components/ble_presence/ble_presence_device.cpp +16 -0
  377. esphome/components/ble_presence/ble_presence_device.h +142 -0
  378. esphome/components/ble_rssi/__init__.py +0 -0
  379. esphome/components/ble_rssi/ble_rssi_sensor.cpp +16 -0
  380. esphome/components/ble_rssi/ble_rssi_sensor.h +125 -0
  381. esphome/components/ble_rssi/sensor.py +89 -0
  382. esphome/components/ble_scanner/__init__.py +0 -0
  383. esphome/components/ble_scanner/ble_scanner.cpp +16 -0
  384. esphome/components/ble_scanner/ble_scanner.h +37 -0
  385. esphome/components/ble_scanner/text_sensor.py +25 -0
  386. esphome/components/bluetooth_proxy/__init__.py +110 -0
  387. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +579 -0
  388. esphome/components/bluetooth_proxy/bluetooth_connection.h +56 -0
  389. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +455 -0
  390. esphome/components/bluetooth_proxy/bluetooth_proxy.h +183 -0
  391. esphome/components/bm8563/__init__.py +1 -0
  392. esphome/components/bm8563/bm8563.cpp +198 -0
  393. esphome/components/bm8563/bm8563.h +57 -0
  394. esphome/components/bm8563/time.py +80 -0
  395. esphome/components/bme280_base/__init__.py +108 -0
  396. esphome/components/bme280_base/bme280_base.cpp +357 -0
  397. esphome/components/bme280_base/bme280_base.h +114 -0
  398. esphome/components/bme280_i2c/__init__.py +0 -0
  399. esphome/components/bme280_i2c/bme280_i2c.cpp +30 -0
  400. esphome/components/bme280_i2c/bme280_i2c.h +20 -0
  401. esphome/components/bme280_i2c/sensor.py +22 -0
  402. esphome/components/bme280_spi/__init__.py +0 -0
  403. esphome/components/bme280_spi/bme280_spi.cpp +65 -0
  404. esphome/components/bme280_spi/bme280_spi.h +20 -0
  405. esphome/components/bme280_spi/sensor.py +24 -0
  406. esphome/components/bme680/__init__.py +0 -0
  407. esphome/components/bme680/bme680.cpp +514 -0
  408. esphome/components/bme680/bme680.h +139 -0
  409. esphome/components/bme680/sensor.py +159 -0
  410. esphome/components/bme680_bsec/__init__.py +96 -0
  411. esphome/components/bme680_bsec/bme680_bsec.cpp +565 -0
  412. esphome/components/bme680_bsec/bme680_bsec.h +137 -0
  413. esphome/components/bme680_bsec/sensor.py +124 -0
  414. esphome/components/bme680_bsec/text_sensor.py +33 -0
  415. esphome/components/bme68x_bsec2/__init__.py +197 -0
  416. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +531 -0
  417. esphome/components/bme68x_bsec2/bme68x_bsec2.h +161 -0
  418. esphome/components/bme68x_bsec2/sensor.py +130 -0
  419. esphome/components/bme68x_bsec2/text_sensor.py +33 -0
  420. esphome/components/bme68x_bsec2_i2c/__init__.py +28 -0
  421. esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +54 -0
  422. esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.h +28 -0
  423. esphome/components/bmi160/__init__.py +1 -0
  424. esphome/components/bmi160/bmi160.cpp +269 -0
  425. esphome/components/bmi160/bmi160.h +44 -0
  426. esphome/components/bmi160/sensor.py +102 -0
  427. esphome/components/bmp085/__init__.py +0 -0
  428. esphome/components/bmp085/bmp085.cpp +137 -0
  429. esphome/components/bmp085/bmp085.h +45 -0
  430. esphome/components/bmp085/sensor.py +56 -0
  431. esphome/components/bmp280/__init__.py +0 -0
  432. esphome/components/bmp280/sensor.py +5 -0
  433. esphome/components/bmp280_base/__init__.py +88 -0
  434. esphome/components/bmp280_base/bmp280_base.cpp +273 -0
  435. esphome/components/bmp280_base/bmp280_base.h +98 -0
  436. esphome/components/bmp280_i2c/__init__.py +0 -0
  437. esphome/components/bmp280_i2c/bmp280_i2c.cpp +14 -0
  438. esphome/components/bmp280_i2c/bmp280_i2c.h +24 -0
  439. esphome/components/bmp280_i2c/sensor.py +23 -0
  440. esphome/components/bmp280_spi/__init__.py +0 -0
  441. esphome/components/bmp280_spi/bmp280_spi.cpp +65 -0
  442. esphome/components/bmp280_spi/bmp280_spi.h +20 -0
  443. esphome/components/bmp280_spi/sensor.py +23 -0
  444. esphome/components/bmp3xx/__init__.py +0 -0
  445. esphome/components/bmp3xx/sensor.py +7 -0
  446. esphome/components/bmp3xx_base/__init__.py +95 -0
  447. esphome/components/bmp3xx_base/bmp3xx_base.cpp +388 -0
  448. esphome/components/bmp3xx_base/bmp3xx_base.h +242 -0
  449. esphome/components/bmp3xx_i2c/__init__.py +0 -0
  450. esphome/components/bmp3xx_i2c/bmp3xx_i2c.cpp +29 -0
  451. esphome/components/bmp3xx_i2c/bmp3xx_i2c.h +17 -0
  452. esphome/components/bmp3xx_i2c/sensor.py +23 -0
  453. esphome/components/bmp3xx_spi/__init__.py +0 -0
  454. esphome/components/bmp3xx_spi/bmp3xx_spi.cpp +57 -0
  455. esphome/components/bmp3xx_spi/bmp3xx_spi.h +19 -0
  456. esphome/components/bmp3xx_spi/sensor.py +23 -0
  457. esphome/components/bmp581/__init__.py +0 -0
  458. esphome/components/bmp581/bmp581.cpp +600 -0
  459. esphome/components/bmp581/bmp581.h +220 -0
  460. esphome/components/bmp581/sensor.py +164 -0
  461. esphome/components/bp1658cj/__init__.py +40 -0
  462. esphome/components/bp1658cj/bp1658cj.cpp +132 -0
  463. esphome/components/bp1658cj/bp1658cj.h +64 -0
  464. esphome/components/bp1658cj/output.py +28 -0
  465. esphome/components/bp5758d/__init__.py +29 -0
  466. esphome/components/bp5758d/bp5758d.cpp +168 -0
  467. esphome/components/bp5758d/bp5758d.h +64 -0
  468. esphome/components/bp5758d/output.py +30 -0
  469. esphome/components/button/__init__.py +134 -0
  470. esphome/components/button/automation.h +26 -0
  471. esphome/components/button/button.cpp +28 -0
  472. esphome/components/button/button.h +47 -0
  473. esphome/components/bytebuffer/__init__.py +5 -0
  474. esphome/components/bytebuffer/bytebuffer.h +421 -0
  475. esphome/components/camera/__init__.py +1 -0
  476. esphome/components/camera/buffer.h +18 -0
  477. esphome/components/camera/buffer_impl.cpp +20 -0
  478. esphome/components/camera/buffer_impl.h +26 -0
  479. esphome/components/camera/camera.cpp +22 -0
  480. esphome/components/camera/camera.h +138 -0
  481. esphome/components/camera/encoder.h +69 -0
  482. esphome/components/camera_encoder/__init__.py +60 -0
  483. esphome/components/camera_encoder/encoder_buffer_impl.cpp +23 -0
  484. esphome/components/camera_encoder/encoder_buffer_impl.h +25 -0
  485. esphome/components/camera_encoder/esp32_camera_jpeg_encoder.cpp +84 -0
  486. esphome/components/camera_encoder/esp32_camera_jpeg_encoder.h +41 -0
  487. esphome/components/canbus/__init__.py +183 -0
  488. esphome/components/canbus/canbus.cpp +106 -0
  489. esphome/components/canbus/canbus.h +184 -0
  490. esphome/components/cap1188/__init__.py +45 -0
  491. esphome/components/cap1188/binary_sensor.py +24 -0
  492. esphome/components/cap1188/cap1188.cpp +104 -0
  493. esphome/components/cap1188/cap1188.h +71 -0
  494. esphome/components/captive_portal/__init__.py +115 -0
  495. esphome/components/captive_portal/captive_index.h +89 -0
  496. esphome/components/captive_portal/captive_portal.cpp +130 -0
  497. esphome/components/captive_portal/captive_portal.h +80 -0
  498. esphome/components/captive_portal/dns_server_esp32_idf.cpp +205 -0
  499. esphome/components/captive_portal/dns_server_esp32_idf.h +27 -0
  500. esphome/components/cc1101/__init__.py +220 -0
  501. esphome/components/cc1101/cc1101.cpp +549 -0
  502. esphome/components/cc1101/cc1101.h +110 -0
  503. esphome/components/cc1101/cc1101defs.h +644 -0
  504. esphome/components/cc1101/cc1101pa.h +174 -0
  505. esphome/components/ccs811/__init__.py +0 -0
  506. esphome/components/ccs811/ccs811.cpp +190 -0
  507. esphome/components/ccs811/ccs811.h +55 -0
  508. esphome/components/ccs811/sensor.py +87 -0
  509. esphome/components/cd74hc4067/__init__.py +51 -0
  510. esphome/components/cd74hc4067/cd74hc4067.cpp +85 -0
  511. esphome/components/cd74hc4067/cd74hc4067.h +65 -0
  512. esphome/components/cd74hc4067/sensor.py +56 -0
  513. esphome/components/ch422g/__init__.py +76 -0
  514. esphome/components/ch422g/ch422g.cpp +138 -0
  515. esphome/components/ch422g/ch422g.h +70 -0
  516. esphome/components/chsc6x/__init__.py +2 -0
  517. esphome/components/chsc6x/chsc6x_touchscreen.cpp +46 -0
  518. esphome/components/chsc6x/chsc6x_touchscreen.h +34 -0
  519. esphome/components/chsc6x/touchscreen.py +33 -0
  520. esphome/components/climate/__init__.py +517 -0
  521. esphome/components/climate/automation.h +60 -0
  522. esphome/components/climate/climate.cpp +764 -0
  523. esphome/components/climate/climate.h +347 -0
  524. esphome/components/climate/climate_mode.cpp +109 -0
  525. esphome/components/climate/climate_mode.h +134 -0
  526. esphome/components/climate/climate_traits.cpp +13 -0
  527. esphome/components/climate/climate_traits.h +294 -0
  528. esphome/components/climate_ir/__init__.py +78 -0
  529. esphome/components/climate_ir/climate_ir.cpp +99 -0
  530. esphome/components/climate_ir/climate_ir.h +75 -0
  531. esphome/components/climate_ir_lg/__init__.py +0 -0
  532. esphome/components/climate_ir_lg/climate.py +44 -0
  533. esphome/components/climate_ir_lg/climate_ir_lg.cpp +222 -0
  534. esphome/components/climate_ir_lg/climate_ir_lg.h +57 -0
  535. esphome/components/cm1106/__init__.py +1 -0
  536. esphome/components/cm1106/cm1106.cpp +111 -0
  537. esphome/components/cm1106/cm1106.h +40 -0
  538. esphome/components/cm1106/sensor.py +72 -0
  539. esphome/components/color/__init__.py +109 -0
  540. esphome/components/color_temperature/__init__.py +0 -0
  541. esphome/components/color_temperature/ct_light_output.h +38 -0
  542. esphome/components/color_temperature/light.py +42 -0
  543. esphome/components/combination/__init__.py +0 -0
  544. esphome/components/combination/combination.cpp +262 -0
  545. esphome/components/combination/combination.h +141 -0
  546. esphome/components/combination/sensor.py +176 -0
  547. esphome/components/const/__init__.py +17 -0
  548. esphome/components/coolix/__init__.py +0 -0
  549. esphome/components/coolix/climate.py +14 -0
  550. esphome/components/coolix/coolix.cpp +163 -0
  551. esphome/components/coolix/coolix.h +45 -0
  552. esphome/components/copy/__init__.py +5 -0
  553. esphome/components/copy/binary_sensor/__init__.py +41 -0
  554. esphome/components/copy/binary_sensor/copy_binary_sensor.cpp +18 -0
  555. esphome/components/copy/binary_sensor/copy_binary_sensor.h +20 -0
  556. esphome/components/copy/button/__init__.py +41 -0
  557. esphome/components/copy/button/copy_button.cpp +14 -0
  558. esphome/components/copy/button/copy_button.h +21 -0
  559. esphome/components/copy/cover/__init__.py +39 -0
  560. esphome/components/copy/cover/copy_cover.cpp +51 -0
  561. esphome/components/copy/cover/copy_cover.h +24 -0
  562. esphome/components/copy/fan/__init__.py +33 -0
  563. esphome/components/copy/fan/copy_fan.cpp +58 -0
  564. esphome/components/copy/fan/copy_fan.h +25 -0
  565. esphome/components/copy/lock/__init__.py +33 -0
  566. esphome/components/copy/lock/copy_lock.cpp +29 -0
  567. esphome/components/copy/lock/copy_lock.h +22 -0
  568. esphome/components/copy/number/__init__.py +41 -0
  569. esphome/components/copy/number/copy_number.cpp +29 -0
  570. esphome/components/copy/number/copy_number.h +22 -0
  571. esphome/components/copy/select/__init__.py +34 -0
  572. esphome/components/copy/select/copy_select.cpp +27 -0
  573. esphome/components/copy/select/copy_select.h +22 -0
  574. esphome/components/copy/sensor/__init__.py +45 -0
  575. esphome/components/copy/sensor/copy_sensor.cpp +18 -0
  576. esphome/components/copy/sensor/copy_sensor.h +20 -0
  577. esphome/components/copy/switch/__init__.py +39 -0
  578. esphome/components/copy/switch/copy_switch.cpp +26 -0
  579. esphome/components/copy/switch/copy_switch.h +22 -0
  580. esphome/components/copy/text/__init__.py +34 -0
  581. esphome/components/copy/text/copy_text.cpp +25 -0
  582. esphome/components/copy/text/copy_text.h +22 -0
  583. esphome/components/copy/text_sensor/__init__.py +33 -0
  584. esphome/components/copy/text_sensor/copy_text_sensor.cpp +18 -0
  585. esphome/components/copy/text_sensor/copy_text_sensor.h +20 -0
  586. esphome/components/cover/__init__.py +263 -0
  587. esphome/components/cover/automation.h +133 -0
  588. esphome/components/cover/cover.cpp +214 -0
  589. esphome/components/cover/cover.h +160 -0
  590. esphome/components/cover/cover_traits.h +28 -0
  591. esphome/components/cs5460a/__init__.py +0 -0
  592. esphome/components/cs5460a/cs5460a.cpp +343 -0
  593. esphome/components/cs5460a/cs5460a.h +124 -0
  594. esphome/components/cs5460a/sensor.py +138 -0
  595. esphome/components/cse7761/__init__.py +0 -0
  596. esphome/components/cse7761/cse7761.cpp +243 -0
  597. esphome/components/cse7761/cse7761.h +52 -0
  598. esphome/components/cse7761/sensor.py +90 -0
  599. esphome/components/cse7766/__init__.py +0 -0
  600. esphome/components/cse7766/cse7766.cpp +239 -0
  601. esphome/components/cse7766/cse7766.h +52 -0
  602. esphome/components/cse7766/sensor.py +111 -0
  603. esphome/components/cst226/__init__.py +6 -0
  604. esphome/components/cst226/binary_sensor/__init__.py +28 -0
  605. esphome/components/cst226/binary_sensor/cs226_button.h +22 -0
  606. esphome/components/cst226/binary_sensor/cstt6_button.cpp +19 -0
  607. esphome/components/cst226/touchscreen/__init__.py +37 -0
  608. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +114 -0
  609. esphome/components/cst226/touchscreen/cst226_touchscreen.h +44 -0
  610. esphome/components/cst816/__init__.py +6 -0
  611. esphome/components/cst816/binary_sensor/__init__.py +5 -0
  612. esphome/components/cst816/touchscreen/__init__.py +37 -0
  613. esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +125 -0
  614. esphome/components/cst816/touchscreen/cst816_touchscreen.h +61 -0
  615. esphome/components/ct_clamp/__init__.py +0 -0
  616. esphome/components/ct_clamp/ct_clamp_sensor.cpp +74 -0
  617. esphome/components/ct_clamp/ct_clamp_sensor.h +54 -0
  618. esphome/components/ct_clamp/sensor.py +45 -0
  619. esphome/components/current_based/__init__.py +1 -0
  620. esphome/components/current_based/cover.py +128 -0
  621. esphome/components/current_based/current_based_cover.cpp +273 -0
  622. esphome/components/current_based/current_based_cover.h +97 -0
  623. esphome/components/custom/__init__.py +0 -0
  624. esphome/components/custom/binary_sensor/__init__.py +5 -0
  625. esphome/components/custom/climate/__init__.py +5 -0
  626. esphome/components/custom/cover/__init__.py +5 -0
  627. esphome/components/custom/light/__init__.py +5 -0
  628. esphome/components/custom/output/__init__.py +5 -0
  629. esphome/components/custom/sensor/__init__.py +5 -0
  630. esphome/components/custom/switch/__init__.py +5 -0
  631. esphome/components/custom/text_sensor/__init__.py +5 -0
  632. esphome/components/custom_component/__init__.py +7 -0
  633. esphome/components/cwww/__init__.py +0 -0
  634. esphome/components/cwww/cwww_light_output.h +40 -0
  635. esphome/components/cwww/light.py +48 -0
  636. esphome/components/dac7678/__init__.py +32 -0
  637. esphome/components/dac7678/dac7678_output.cpp +84 -0
  638. esphome/components/dac7678/dac7678_output.h +55 -0
  639. esphome/components/dac7678/output.py +28 -0
  640. esphome/components/daikin/__init__.py +0 -0
  641. esphome/components/daikin/climate.py +13 -0
  642. esphome/components/daikin/daikin.cpp +255 -0
  643. esphome/components/daikin/daikin.h +64 -0
  644. esphome/components/daikin_arc/__init__.py +1 -0
  645. esphome/components/daikin_arc/climate.py +13 -0
  646. esphome/components/daikin_arc/daikin_arc.cpp +492 -0
  647. esphome/components/daikin_arc/daikin_arc.h +76 -0
  648. esphome/components/daikin_brc/__init__.py +1 -0
  649. esphome/components/daikin_brc/climate.py +21 -0
  650. esphome/components/daikin_brc/daikin_brc.cpp +273 -0
  651. esphome/components/daikin_brc/daikin_brc.h +82 -0
  652. esphome/components/dallas/__init__.py +7 -0
  653. esphome/components/dallas/sensor.py +5 -0
  654. esphome/components/dallas_temp/__init__.py +1 -0
  655. esphome/components/dallas_temp/dallas_temp.cpp +160 -0
  656. esphome/components/dallas_temp/dallas_temp.h +31 -0
  657. esphome/components/dallas_temp/sensor.py +43 -0
  658. esphome/components/daly_bms/__init__.py +33 -0
  659. esphome/components/daly_bms/binary_sensor.py +39 -0
  660. esphome/components/daly_bms/daly_bms.cpp +327 -0
  661. esphome/components/daly_bms/daly_bms.h +93 -0
  662. esphome/components/daly_bms/sensor.py +236 -0
  663. esphome/components/daly_bms/text_sensor.py +35 -0
  664. esphome/components/dashboard_import/__init__.py +167 -0
  665. esphome/components/dashboard_import/dashboard_import.cpp +12 -0
  666. esphome/components/dashboard_import/dashboard_import.h +10 -0
  667. esphome/components/datetime/__init__.py +273 -0
  668. esphome/components/datetime/date_entity.cpp +133 -0
  669. esphome/components/datetime/date_entity.h +115 -0
  670. esphome/components/datetime/datetime_base.h +39 -0
  671. esphome/components/datetime/datetime_entity.cpp +254 -0
  672. esphome/components/datetime/datetime_entity.h +150 -0
  673. esphome/components/datetime/time_entity.cpp +156 -0
  674. esphome/components/datetime/time_entity.h +129 -0
  675. esphome/components/debug/__init__.py +81 -0
  676. esphome/components/debug/debug_component.cpp +98 -0
  677. esphome/components/debug/debug_component.h +92 -0
  678. esphome/components/debug/debug_esp32.cpp +241 -0
  679. esphome/components/debug/debug_esp8266.cpp +94 -0
  680. esphome/components/debug/debug_host.cpp +18 -0
  681. esphome/components/debug/debug_libretiny.cpp +44 -0
  682. esphome/components/debug/debug_rp2040.cpp +23 -0
  683. esphome/components/debug/debug_zephyr.cpp +378 -0
  684. esphome/components/debug/sensor.py +102 -0
  685. esphome/components/debug/text_sensor.py +40 -0
  686. esphome/components/deep_sleep/__init__.py +367 -0
  687. esphome/components/deep_sleep/deep_sleep_component.cpp +81 -0
  688. esphome/components/deep_sleep/deep_sleep_component.h +219 -0
  689. esphome/components/deep_sleep/deep_sleep_esp32.cpp +172 -0
  690. esphome/components/deep_sleep/deep_sleep_esp8266.cpp +23 -0
  691. esphome/components/delonghi/__init__.py +1 -0
  692. esphome/components/delonghi/climate.py +13 -0
  693. esphome/components/delonghi/delonghi.cpp +186 -0
  694. esphome/components/delonghi/delonghi.h +64 -0
  695. esphome/components/demo/__init__.py +629 -0
  696. esphome/components/demo/demo_alarm_control_panel.h +65 -0
  697. esphome/components/demo/demo_binary_sensor.h +22 -0
  698. esphome/components/demo/demo_button.h +15 -0
  699. esphome/components/demo/demo_climate.h +152 -0
  700. esphome/components/demo/demo_cover.h +87 -0
  701. esphome/components/demo/demo_date.h +34 -0
  702. esphome/components/demo/demo_datetime.h +40 -0
  703. esphome/components/demo/demo_fan.h +66 -0
  704. esphome/components/demo/demo_light.h +68 -0
  705. esphome/components/demo/demo_lock.h +17 -0
  706. esphome/components/demo/demo_number.h +39 -0
  707. esphome/components/demo/demo_select.h +15 -0
  708. esphome/components/demo/demo_sensor.h +29 -0
  709. esphome/components/demo/demo_switch.h +22 -0
  710. esphome/components/demo/demo_text.h +18 -0
  711. esphome/components/demo/demo_text_sensor.h +25 -0
  712. esphome/components/demo/demo_time.h +34 -0
  713. esphome/components/demo/demo_valve.h +54 -0
  714. esphome/components/dfplayer/__init__.py +373 -0
  715. esphome/components/dfplayer/dfplayer.cpp +276 -0
  716. esphome/components/dfplayer/dfplayer.h +182 -0
  717. esphome/components/dfrobot_sen0395/__init__.py +204 -0
  718. esphome/components/dfrobot_sen0395/automation.h +89 -0
  719. esphome/components/dfrobot_sen0395/binary_sensor.py +23 -0
  720. esphome/components/dfrobot_sen0395/commands.cpp +321 -0
  721. esphome/components/dfrobot_sen0395/commands.h +156 -0
  722. esphome/components/dfrobot_sen0395/dfrobot_sen0395.cpp +143 -0
  723. esphome/components/dfrobot_sen0395/dfrobot_sen0395.h +125 -0
  724. esphome/components/dfrobot_sen0395/switch/__init__.py +63 -0
  725. esphome/components/dfrobot_sen0395/switch/dfrobot_sen0395_switch.cpp +48 -0
  726. esphome/components/dfrobot_sen0395/switch/dfrobot_sen0395_switch.h +34 -0
  727. esphome/components/dht/__init__.py +1 -0
  728. esphome/components/dht/dht.cpp +237 -0
  729. esphome/components/dht/dht.h +65 -0
  730. esphome/components/dht/sensor.py +70 -0
  731. esphome/components/dht12/__init__.py +0 -0
  732. esphome/components/dht12/dht12.cpp +69 -0
  733. esphome/components/dht12/dht12.h +28 -0
  734. esphome/components/dht12/sensor.py +54 -0
  735. esphome/components/display/__init__.py +224 -0
  736. esphome/components/display/display.cpp +929 -0
  737. esphome/components/display/display.h +875 -0
  738. esphome/components/display/display_buffer.cpp +72 -0
  739. esphome/components/display/display_buffer.h +34 -0
  740. esphome/components/display/display_color_utils.h +159 -0
  741. esphome/components/display/rect.cpp +94 -0
  742. esphome/components/display/rect.h +36 -0
  743. esphome/components/display_menu_base/__init__.py +428 -0
  744. esphome/components/display_menu_base/automation.h +133 -0
  745. esphome/components/display_menu_base/display_menu_base.cpp +329 -0
  746. esphome/components/display_menu_base/display_menu_base.h +82 -0
  747. esphome/components/display_menu_base/menu_item.cpp +202 -0
  748. esphome/components/display_menu_base/menu_item.h +191 -0
  749. esphome/components/dps310/__init__.py +0 -0
  750. esphome/components/dps310/dps310.cpp +189 -0
  751. esphome/components/dps310/dps310.h +65 -0
  752. esphome/components/dps310/sensor.py +62 -0
  753. esphome/components/ds1307/__init__.py +0 -0
  754. esphome/components/ds1307/ds1307.cpp +108 -0
  755. esphome/components/ds1307/ds1307.h +70 -0
  756. esphome/components/ds1307/time.py +57 -0
  757. esphome/components/ds2484/__init__.py +1 -0
  758. esphome/components/ds2484/ds2484.cpp +208 -0
  759. esphome/components/ds2484/ds2484.h +43 -0
  760. esphome/components/ds2484/one_wire.py +37 -0
  761. esphome/components/dsmr/__init__.py +89 -0
  762. esphome/components/dsmr/dsmr.cpp +335 -0
  763. esphome/components/dsmr/dsmr.h +146 -0
  764. esphome/components/dsmr/sensor.py +291 -0
  765. esphome/components/dsmr/text_sensor.py +52 -0
  766. esphome/components/duty_cycle/__init__.py +0 -0
  767. esphome/components/duty_cycle/duty_cycle_sensor.cpp +62 -0
  768. esphome/components/duty_cycle/duty_cycle_sensor.h +37 -0
  769. esphome/components/duty_cycle/sensor.py +30 -0
  770. esphome/components/duty_time/__init__.py +1 -0
  771. esphome/components/duty_time/duty_time_sensor.cpp +107 -0
  772. esphome/components/duty_time/duty_time_sensor.h +75 -0
  773. esphome/components/duty_time/sensor.py +127 -0
  774. esphome/components/e131/__init__.py +58 -0
  775. esphome/components/e131/e131.cpp +127 -0
  776. esphome/components/e131/e131.h +55 -0
  777. esphome/components/e131/e131_addressable_light_effect.cpp +94 -0
  778. esphome/components/e131/e131_addressable_light_effect.h +45 -0
  779. esphome/components/e131/e131_packet.cpp +147 -0
  780. esphome/components/ee895/__init__.py +0 -0
  781. esphome/components/ee895/ee895.cpp +114 -0
  782. esphome/components/ee895/ee895.h +34 -0
  783. esphome/components/ee895/sensor.py +69 -0
  784. esphome/components/ektf2232/__init__.py +0 -0
  785. esphome/components/ektf2232/touchscreen/__init__.py +44 -0
  786. esphome/components/ektf2232/touchscreen/ektf2232.cpp +134 -0
  787. esphome/components/ektf2232/touchscreen/ektf2232.h +35 -0
  788. esphome/components/emc2101/__init__.py +83 -0
  789. esphome/components/emc2101/emc2101.cpp +169 -0
  790. esphome/components/emc2101/emc2101.h +115 -0
  791. esphome/components/emc2101/output/__init__.py +22 -0
  792. esphome/components/emc2101/output/emc2101_output.cpp +9 -0
  793. esphome/components/emc2101/output/emc2101_output.h +22 -0
  794. esphome/components/emc2101/sensor/__init__.py +75 -0
  795. esphome/components/emc2101/sensor/emc2101_sensor.cpp +43 -0
  796. esphome/components/emc2101/sensor/emc2101_sensor.h +39 -0
  797. esphome/components/emmeti/__init__.py +0 -0
  798. esphome/components/emmeti/climate.py +14 -0
  799. esphome/components/emmeti/emmeti.cpp +316 -0
  800. esphome/components/emmeti/emmeti.h +109 -0
  801. esphome/components/endstop/__init__.py +0 -0
  802. esphome/components/endstop/cover.py +60 -0
  803. esphome/components/endstop/endstop_cover.cpp +193 -0
  804. esphome/components/endstop/endstop_cover.h +58 -0
  805. esphome/components/ens160/__init__.py +0 -0
  806. esphome/components/ens160/sensor.py +7 -0
  807. esphome/components/ens160_base/__init__.py +81 -0
  808. esphome/components/ens160_base/ens160_base.cpp +318 -0
  809. esphome/components/ens160_base/ens160_base.h +63 -0
  810. esphome/components/ens160_i2c/__init__.py +0 -0
  811. esphome/components/ens160_i2c/ens160_i2c.cpp +32 -0
  812. esphome/components/ens160_i2c/ens160_i2c.h +19 -0
  813. esphome/components/ens160_i2c/sensor.py +23 -0
  814. esphome/components/ens160_spi/__init__.py +0 -0
  815. esphome/components/ens160_spi/ens160_spi.cpp +59 -0
  816. esphome/components/ens160_spi/ens160_spi.h +22 -0
  817. esphome/components/ens160_spi/sensor.py +23 -0
  818. esphome/components/ens210/__init__.py +0 -0
  819. esphome/components/ens210/ens210.cpp +229 -0
  820. esphome/components/ens210/ens210.h +39 -0
  821. esphome/components/ens210/sensor.py +58 -0
  822. esphome/components/epaper_spi/__init__.py +1 -0
  823. esphome/components/epaper_spi/display.py +233 -0
  824. esphome/components/epaper_spi/epaper_spi.cpp +346 -0
  825. esphome/components/epaper_spi/epaper_spi.h +181 -0
  826. esphome/components/epaper_spi/epaper_spi_spectra_e6.cpp +159 -0
  827. esphome/components/epaper_spi/epaper_spi_spectra_e6.h +28 -0
  828. esphome/components/epaper_spi/epaper_spi_ssd1677.cpp +86 -0
  829. esphome/components/epaper_spi/epaper_spi_ssd1677.h +25 -0
  830. esphome/components/epaper_spi/models/__init__.py +65 -0
  831. esphome/components/epaper_spi/models/spectra_e6.py +55 -0
  832. esphome/components/epaper_spi/models/ssd1677.py +42 -0
  833. esphome/components/es7210/__init__.py +0 -0
  834. esphome/components/es7210/audio_adc.py +51 -0
  835. esphome/components/es7210/es7210.cpp +228 -0
  836. esphome/components/es7210/es7210.h +61 -0
  837. esphome/components/es7210/es7210_const.h +129 -0
  838. esphome/components/es7243e/__init__.py +0 -0
  839. esphome/components/es7243e/audio_adc.py +34 -0
  840. esphome/components/es7243e/es7243e.cpp +123 -0
  841. esphome/components/es7243e/es7243e.h +36 -0
  842. esphome/components/es7243e/es7243e_const.h +54 -0
  843. esphome/components/es8156/__init__.py +0 -0
  844. esphome/components/es8156/audio_dac.py +27 -0
  845. esphome/components/es8156/es8156.cpp +85 -0
  846. esphome/components/es8156/es8156.h +50 -0
  847. esphome/components/es8156/es8156_const.h +68 -0
  848. esphome/components/es8311/__init__.py +0 -0
  849. esphome/components/es8311/audio_dac.py +67 -0
  850. esphome/components/es8311/es8311.cpp +227 -0
  851. esphome/components/es8311/es8311.h +134 -0
  852. esphome/components/es8311/es8311_const.h +195 -0
  853. esphome/components/es8388/__init__.py +0 -0
  854. esphome/components/es8388/audio_dac.py +26 -0
  855. esphome/components/es8388/es8388.cpp +287 -0
  856. esphome/components/es8388/es8388.h +80 -0
  857. esphome/components/es8388/es8388_const.h +83 -0
  858. esphome/components/es8388/select/__init__.py +47 -0
  859. esphome/components/es8388/select/adc_input_mic_select.cpp +12 -0
  860. esphome/components/es8388/select/adc_input_mic_select.h +15 -0
  861. esphome/components/es8388/select/dac_output_select.cpp +12 -0
  862. esphome/components/es8388/select/dac_output_select.h +15 -0
  863. esphome/components/esp32/__init__.py +1323 -0
  864. esphome/components/esp32/boards.py +2536 -0
  865. esphome/components/esp32/const.py +51 -0
  866. esphome/components/esp32/core.cpp +114 -0
  867. esphome/components/esp32/gpio.cpp +209 -0
  868. esphome/components/esp32/gpio.h +57 -0
  869. esphome/components/esp32/gpio.py +239 -0
  870. esphome/components/esp32/gpio_esp32.py +70 -0
  871. esphome/components/esp32/gpio_esp32_c2.py +32 -0
  872. esphome/components/esp32/gpio_esp32_c3.py +45 -0
  873. esphome/components/esp32/gpio_esp32_c5.py +58 -0
  874. esphome/components/esp32/gpio_esp32_c6.py +58 -0
  875. esphome/components/esp32/gpio_esp32_c61.py +46 -0
  876. esphome/components/esp32/gpio_esp32_h2.py +47 -0
  877. esphome/components/esp32/gpio_esp32_p4.py +52 -0
  878. esphome/components/esp32/gpio_esp32_s2.py +74 -0
  879. esphome/components/esp32/gpio_esp32_s3.py +64 -0
  880. esphome/components/esp32/helpers.cpp +109 -0
  881. esphome/components/esp32/iram_fix.py.script +71 -0
  882. esphome/components/esp32/post_build.py.script +128 -0
  883. esphome/components/esp32/pre_build.py.script +9 -0
  884. esphome/components/esp32/preferences.cpp +209 -0
  885. esphome/components/esp32/preferences.h +12 -0
  886. esphome/components/esp32_ble/__init__.py +553 -0
  887. esphome/components/esp32_ble/ble.cpp +673 -0
  888. esphome/components/esp32_ble/ble.h +230 -0
  889. esphome/components/esp32_ble/ble_advertising.cpp +170 -0
  890. esphome/components/esp32_ble/ble_advertising.h +69 -0
  891. esphome/components/esp32_ble/ble_event.h +467 -0
  892. esphome/components/esp32_ble/ble_scan_result.h +22 -0
  893. esphome/components/esp32_ble/ble_uuid.cpp +190 -0
  894. esphome/components/esp32_ble/ble_uuid.h +48 -0
  895. esphome/components/esp32_ble_beacon/__init__.py +90 -0
  896. esphome/components/esp32_ble_beacon/esp32_ble_beacon.cpp +127 -0
  897. esphome/components/esp32_ble_beacon/esp32_ble_beacon.h +71 -0
  898. esphome/components/esp32_ble_client/__init__.py +11 -0
  899. esphome/components/esp32_ble_client/ble_characteristic.cpp +99 -0
  900. esphome/components/esp32_ble_client/ble_characteristic.h +41 -0
  901. esphome/components/esp32_ble_client/ble_client_base.cpp +683 -0
  902. esphome/components/esp32_ble_client/ble_client_base.h +148 -0
  903. esphome/components/esp32_ble_client/ble_descriptor.h +27 -0
  904. esphome/components/esp32_ble_client/ble_service.cpp +77 -0
  905. esphome/components/esp32_ble_client/ble_service.h +38 -0
  906. esphome/components/esp32_ble_server/__init__.py +649 -0
  907. esphome/components/esp32_ble_server/ble_2902.cpp +20 -0
  908. esphome/components/esp32_ble_server/ble_2902.h +18 -0
  909. esphome/components/esp32_ble_server/ble_characteristic.cpp +328 -0
  910. esphome/components/esp32_ble_server/ble_characteristic.h +120 -0
  911. esphome/components/esp32_ble_server/ble_descriptor.cpp +93 -0
  912. esphome/components/esp32_ble_server/ble_descriptor.h +69 -0
  913. esphome/components/esp32_ble_server/ble_server.cpp +239 -0
  914. esphome/components/esp32_ble_server/ble_server.h +116 -0
  915. esphome/components/esp32_ble_server/ble_server_automations.cpp +93 -0
  916. esphome/components/esp32_ble_server/ble_server_automations.h +130 -0
  917. esphome/components/esp32_ble_server/ble_service.cpp +179 -0
  918. esphome/components/esp32_ble_server/ble_service.h +86 -0
  919. esphome/components/esp32_ble_tracker/__init__.py +451 -0
  920. esphome/components/esp32_ble_tracker/automation.h +115 -0
  921. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +868 -0
  922. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +389 -0
  923. esphome/components/esp32_camera/__init__.py +368 -0
  924. esphome/components/esp32_camera/esp32_camera.cpp +443 -0
  925. esphome/components/esp32_camera/esp32_camera.h +247 -0
  926. esphome/components/esp32_camera_web_server/__init__.py +44 -0
  927. esphome/components/esp32_camera_web_server/camera_web_server.cpp +248 -0
  928. esphome/components/esp32_camera_web_server/camera_web_server.h +54 -0
  929. esphome/components/esp32_can/__init__.py +0 -0
  930. esphome/components/esp32_can/canbus.py +130 -0
  931. esphome/components/esp32_can/esp32_can.cpp +177 -0
  932. esphome/components/esp32_can/esp32_can.h +40 -0
  933. esphome/components/esp32_dac/__init__.py +0 -0
  934. esphome/components/esp32_dac/esp32_dac.cpp +47 -0
  935. esphome/components/esp32_dac/esp32_dac.h +36 -0
  936. esphome/components/esp32_dac/output.py +46 -0
  937. esphome/components/esp32_hall/__init__.py +0 -0
  938. esphome/components/esp32_hall/sensor.py +5 -0
  939. esphome/components/esp32_hosted/__init__.py +107 -0
  940. esphome/components/esp32_hosted/esp32_hosted.py.script +12 -0
  941. esphome/components/esp32_hosted/update/__init__.py +78 -0
  942. esphome/components/esp32_hosted/update/esp32_hosted_update.cpp +169 -0
  943. esphome/components/esp32_hosted/update/esp32_hosted_update.h +32 -0
  944. esphome/components/esp32_improv/__init__.py +158 -0
  945. esphome/components/esp32_improv/automation.h +72 -0
  946. esphome/components/esp32_improv/esp32_improv_component.cpp +482 -0
  947. esphome/components/esp32_improv/esp32_improv_component.h +130 -0
  948. esphome/components/esp32_rmt/__init__.py +22 -0
  949. esphome/components/esp32_rmt_led_strip/__init__.py +0 -0
  950. esphome/components/esp32_rmt_led_strip/led_strip.cpp +309 -0
  951. esphome/components/esp32_rmt_led_strip/led_strip.h +106 -0
  952. esphome/components/esp32_rmt_led_strip/light.py +170 -0
  953. esphome/components/esp32_touch/__init__.py +325 -0
  954. esphome/components/esp32_touch/binary_sensor.py +36 -0
  955. esphome/components/esp32_touch/esp32_touch.h +271 -0
  956. esphome/components/esp32_touch/esp32_touch_common.cpp +164 -0
  957. esphome/components/esp32_touch/esp32_touch_v1.cpp +244 -0
  958. esphome/components/esp32_touch/esp32_touch_v2.cpp +401 -0
  959. esphome/components/esp8266/__init__.py +280 -0
  960. esphome/components/esp8266/boards.py +362 -0
  961. esphome/components/esp8266/const.py +11 -0
  962. esphome/components/esp8266/core.cpp +73 -0
  963. esphome/components/esp8266/core.h +12 -0
  964. esphome/components/esp8266/gpio.cpp +183 -0
  965. esphome/components/esp8266/gpio.h +37 -0
  966. esphome/components/esp8266/gpio.py +212 -0
  967. esphome/components/esp8266/helpers.cpp +35 -0
  968. esphome/components/esp8266/post_build.py.script +23 -0
  969. esphome/components/esp8266/preferences.cpp +293 -0
  970. esphome/components/esp8266/preferences.h +12 -0
  971. esphome/components/esp8266/testing_mode.py.script +166 -0
  972. esphome/components/esp8266_pwm/__init__.py +0 -0
  973. esphome/components/esp8266_pwm/esp8266_pwm.cpp +57 -0
  974. esphome/components/esp8266_pwm/esp8266_pwm.h +54 -0
  975. esphome/components/esp8266_pwm/output.py +63 -0
  976. esphome/components/esp_ldo/__init__.py +93 -0
  977. esphome/components/esp_ldo/esp_ldo.cpp +43 -0
  978. esphome/components/esp_ldo/esp_ldo.h +46 -0
  979. esphome/components/esphome/ota/__init__.py +166 -0
  980. esphome/components/esphome/ota/ota_esphome.cpp +802 -0
  981. esphome/components/esphome/ota/ota_esphome.h +103 -0
  982. esphome/components/espnow/__init__.py +314 -0
  983. esphome/components/espnow/automation.h +175 -0
  984. esphome/components/espnow/espnow_component.cpp +486 -0
  985. esphome/components/espnow/espnow_component.h +183 -0
  986. esphome/components/espnow/espnow_err.h +19 -0
  987. esphome/components/espnow/espnow_packet.h +166 -0
  988. esphome/components/espnow/packet_transport/__init__.py +39 -0
  989. esphome/components/espnow/packet_transport/espnow_transport.cpp +97 -0
  990. esphome/components/espnow/packet_transport/espnow_transport.h +44 -0
  991. esphome/components/ethernet/__init__.py +470 -0
  992. esphome/components/ethernet/esp_eth_phy_jl1101.c +344 -0
  993. esphome/components/ethernet/ethernet_component.cpp +813 -0
  994. esphome/components/ethernet/ethernet_component.h +180 -0
  995. esphome/components/ethernet_info/__init__.py +1 -0
  996. esphome/components/ethernet_info/ethernet_info_text_sensor.cpp +18 -0
  997. esphome/components/ethernet_info/ethernet_info_text_sensor.h +70 -0
  998. esphome/components/ethernet_info/text_sensor.py +64 -0
  999. esphome/components/event/__init__.py +143 -0
  1000. esphome/components/event/automation.h +25 -0
  1001. esphome/components/event/event.cpp +53 -0
  1002. esphome/components/event/event.h +63 -0
  1003. esphome/components/exposure_notifications/__init__.py +39 -0
  1004. esphome/components/exposure_notifications/exposure_notifications.cpp +49 -0
  1005. esphome/components/exposure_notifications/exposure_notifications.h +29 -0
  1006. esphome/components/external_components/__init__.py +118 -0
  1007. esphome/components/ezo/__init__.py +0 -0
  1008. esphome/components/ezo/automation.h +53 -0
  1009. esphome/components/ezo/ezo.cpp +235 -0
  1010. esphome/components/ezo/ezo.h +110 -0
  1011. esphome/components/ezo/sensor.py +114 -0
  1012. esphome/components/ezo_pmp/__init__.py +296 -0
  1013. esphome/components/ezo_pmp/binary_sensor.py +42 -0
  1014. esphome/components/ezo_pmp/ezo_pmp.cpp +543 -0
  1015. esphome/components/ezo_pmp/ezo_pmp.h +251 -0
  1016. esphome/components/ezo_pmp/sensor.py +103 -0
  1017. esphome/components/ezo_pmp/text_sensor.py +35 -0
  1018. esphome/components/factory_reset/__init__.py +97 -0
  1019. esphome/components/factory_reset/button/__init__.py +28 -0
  1020. esphome/components/factory_reset/button/factory_reset_button.cpp +38 -0
  1021. esphome/components/factory_reset/button/factory_reset_button.h +23 -0
  1022. esphome/components/factory_reset/factory_reset.cpp +76 -0
  1023. esphome/components/factory_reset/factory_reset.h +43 -0
  1024. esphome/components/factory_reset/switch/__init__.py +22 -0
  1025. esphome/components/factory_reset/switch/factory_reset_switch.cpp +43 -0
  1026. esphome/components/factory_reset/switch/factory_reset_switch.h +22 -0
  1027. esphome/components/fan/__init__.py +398 -0
  1028. esphome/components/fan/automation.h +231 -0
  1029. esphome/components/fan/fan.cpp +276 -0
  1030. esphome/components/fan/fan.h +165 -0
  1031. esphome/components/fan/fan_traits.h +69 -0
  1032. esphome/components/fastled_base/__init__.py +45 -0
  1033. esphome/components/fastled_base/fastled_light.cpp +44 -0
  1034. esphome/components/fastled_base/fastled_light.h +243 -0
  1035. esphome/components/fastled_clockless/__init__.py +0 -0
  1036. esphome/components/fastled_clockless/light.py +85 -0
  1037. esphome/components/fastled_spi/__init__.py +0 -0
  1038. esphome/components/fastled_spi/light.py +75 -0
  1039. esphome/components/feedback/__init__.py +1 -0
  1040. esphome/components/feedback/cover.py +162 -0
  1041. esphome/components/feedback/feedback_cover.cpp +447 -0
  1042. esphome/components/feedback/feedback_cover.h +89 -0
  1043. esphome/components/fingerprint_grow/__init__.py +372 -0
  1044. esphome/components/fingerprint_grow/binary_sensor.py +21 -0
  1045. esphome/components/fingerprint_grow/fingerprint_grow.cpp +576 -0
  1046. esphome/components/fingerprint_grow/fingerprint_grow.h +336 -0
  1047. esphome/components/fingerprint_grow/sensor.py +74 -0
  1048. esphome/components/font/__init__.py +625 -0
  1049. esphome/components/font/font.cpp +288 -0
  1050. esphome/components/font/font.h +102 -0
  1051. esphome/components/fs3000/__init__.py +0 -0
  1052. esphome/components/fs3000/fs3000.cpp +105 -0
  1053. esphome/components/fs3000/fs3000.h +34 -0
  1054. esphome/components/fs3000/sensor.py +46 -0
  1055. esphome/components/ft5x06/__init__.py +6 -0
  1056. esphome/components/ft5x06/touchscreen/__init__.py +32 -0
  1057. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +103 -0
  1058. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.h +56 -0
  1059. esphome/components/ft63x6/__init__.py +1 -0
  1060. esphome/components/ft63x6/ft63x6.cpp +137 -0
  1061. esphome/components/ft63x6/ft63x6.h +51 -0
  1062. esphome/components/ft63x6/touchscreen.py +44 -0
  1063. esphome/components/fujitsu_general/__init__.py +0 -0
  1064. esphome/components/fujitsu_general/climate.py +15 -0
  1065. esphome/components/fujitsu_general/fujitsu_general.cpp +404 -0
  1066. esphome/components/fujitsu_general/fujitsu_general.h +82 -0
  1067. esphome/components/gcja5/__init__.py +1 -0
  1068. esphome/components/gcja5/gcja5.cpp +109 -0
  1069. esphome/components/gcja5/gcja5.h +56 -0
  1070. esphome/components/gcja5/sensor.py +118 -0
  1071. esphome/components/gdk101/__init__.py +32 -0
  1072. esphome/components/gdk101/binary_sensor.py +30 -0
  1073. esphome/components/gdk101/gdk101.cpp +191 -0
  1074. esphome/components/gdk101/gdk101.h +57 -0
  1075. esphome/components/gdk101/sensor.py +79 -0
  1076. esphome/components/gdk101/text_sensor.py +23 -0
  1077. esphome/components/gl_r01_i2c/__init__.py +0 -0
  1078. esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +67 -0
  1079. esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
  1080. esphome/components/gl_r01_i2c/sensor.py +36 -0
  1081. esphome/components/globals/__init__.py +88 -0
  1082. esphome/components/globals/globals_component.h +148 -0
  1083. esphome/components/gp2y1010au0f/__init__.py +0 -0
  1084. esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +69 -0
  1085. esphome/components/gp2y1010au0f/gp2y1010au0f.h +52 -0
  1086. esphome/components/gp2y1010au0f/sensor.py +61 -0
  1087. esphome/components/gp8403/__init__.py +46 -0
  1088. esphome/components/gp8403/gp8403.cpp +55 -0
  1089. esphome/components/gp8403/gp8403.h +35 -0
  1090. esphome/components/gp8403/output/__init__.py +30 -0
  1091. esphome/components/gp8403/output/gp8403_output.cpp +20 -0
  1092. esphome/components/gp8403/output/gp8403_output.h +23 -0
  1093. esphome/components/gpio/__init__.py +4 -0
  1094. esphome/components/gpio/binary_sensor/__init__.py +102 -0
  1095. esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +101 -0
  1096. esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +68 -0
  1097. esphome/components/gpio/one_wire/__init__.py +26 -0
  1098. esphome/components/gpio/one_wire/gpio_one_wire.cpp +206 -0
  1099. esphome/components/gpio/one_wire/gpio_one_wire.h +42 -0
  1100. esphome/components/gpio/output/__init__.py +25 -0
  1101. esphome/components/gpio/output/gpio_binary_output.cpp +16 -0
  1102. esphome/components/gpio/output/gpio_binary_output.h +29 -0
  1103. esphome/components/gpio/switch/__init__.py +40 -0
  1104. esphome/components/gpio/switch/gpio_switch.cpp +73 -0
  1105. esphome/components/gpio/switch/gpio_switch.h +33 -0
  1106. esphome/components/gpio_expander/__init__.py +0 -0
  1107. esphome/components/gpio_expander/cached_gpio.h +82 -0
  1108. esphome/components/gps/__init__.py +130 -0
  1109. esphome/components/gps/gps.cpp +95 -0
  1110. esphome/components/gps/gps.h +71 -0
  1111. esphome/components/gps/time/__init__.py +28 -0
  1112. esphome/components/gps/time/gps_time.cpp +32 -0
  1113. esphome/components/gps/time/gps_time.h +25 -0
  1114. esphome/components/graph/__init__.py +219 -0
  1115. esphome/components/graph/graph.cpp +397 -0
  1116. esphome/components/graph/graph.h +187 -0
  1117. esphome/components/graphical_display_menu/__init__.py +100 -0
  1118. esphome/components/graphical_display_menu/graphical_display_menu.cpp +250 -0
  1119. esphome/components/graphical_display_menu/graphical_display_menu.h +84 -0
  1120. esphome/components/gree/__init__.py +3 -0
  1121. esphome/components/gree/climate.py +33 -0
  1122. esphome/components/gree/gree.cpp +252 -0
  1123. esphome/components/gree/gree.h +109 -0
  1124. esphome/components/gree/switch/__init__.py +74 -0
  1125. esphome/components/gree/switch/gree_switch.cpp +24 -0
  1126. esphome/components/gree/switch/gree_switch.h +24 -0
  1127. esphome/components/grove_gas_mc_v2/__init__.py +0 -0
  1128. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +86 -0
  1129. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +37 -0
  1130. esphome/components/grove_gas_mc_v2/sensor.py +77 -0
  1131. esphome/components/grove_tb6612fng/__init__.py +176 -0
  1132. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +170 -0
  1133. esphome/components/grove_tb6612fng/grove_tb6612fng.h +215 -0
  1134. esphome/components/growatt_solar/__init__.py +0 -0
  1135. esphome/components/growatt_solar/growatt_solar.cpp +145 -0
  1136. esphome/components/growatt_solar/growatt_solar.h +87 -0
  1137. esphome/components/growatt_solar/sensor.py +212 -0
  1138. esphome/components/gt911/__init__.py +6 -0
  1139. esphome/components/gt911/binary_sensor/__init__.py +31 -0
  1140. esphome/components/gt911/binary_sensor/gt911_button.cpp +27 -0
  1141. esphome/components/gt911/binary_sensor/gt911_button.h +28 -0
  1142. esphome/components/gt911/touchscreen/__init__.py +33 -0
  1143. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +146 -0
  1144. esphome/components/gt911/touchscreen/gt911_touchscreen.h +59 -0
  1145. esphome/components/haier/__init__.py +0 -0
  1146. esphome/components/haier/automation.h +130 -0
  1147. esphome/components/haier/binary_sensor/__init__.py +65 -0
  1148. esphome/components/haier/button/__init__.py +38 -0
  1149. esphome/components/haier/button/self_cleaning.cpp +9 -0
  1150. esphome/components/haier/button/self_cleaning.h +18 -0
  1151. esphome/components/haier/button/steri_cleaning.cpp +9 -0
  1152. esphome/components/haier/button/steri_cleaning.h +18 -0
  1153. esphome/components/haier/climate.py +521 -0
  1154. esphome/components/haier/haier_base.cpp +427 -0
  1155. esphome/components/haier/haier_base.h +186 -0
  1156. esphome/components/haier/hon_climate.cpp +1384 -0
  1157. esphome/components/haier/hon_climate.h +214 -0
  1158. esphome/components/haier/hon_packet.h +260 -0
  1159. esphome/components/haier/logger_handler.cpp +33 -0
  1160. esphome/components/haier/logger_handler.h +14 -0
  1161. esphome/components/haier/sensor/__init__.py +150 -0
  1162. esphome/components/haier/smartair2_climate.cpp +553 -0
  1163. esphome/components/haier/smartair2_climate.h +40 -0
  1164. esphome/components/haier/smartair2_packet.h +88 -0
  1165. esphome/components/haier/switch/__init__.py +88 -0
  1166. esphome/components/haier/switch/beeper.cpp +14 -0
  1167. esphome/components/haier/switch/beeper.h +18 -0
  1168. esphome/components/haier/switch/display.cpp +14 -0
  1169. esphome/components/haier/switch/display.h +18 -0
  1170. esphome/components/haier/switch/health_mode.cpp +14 -0
  1171. esphome/components/haier/switch/health_mode.h +18 -0
  1172. esphome/components/haier/switch/quiet_mode.cpp +14 -0
  1173. esphome/components/haier/switch/quiet_mode.h +18 -0
  1174. esphome/components/haier/text_sensor/__init__.py +49 -0
  1175. esphome/components/havells_solar/__init__.py +0 -0
  1176. esphome/components/havells_solar/havells_solar.cpp +168 -0
  1177. esphome/components/havells_solar/havells_solar.h +117 -0
  1178. esphome/components/havells_solar/havells_solar_registers.h +49 -0
  1179. esphome/components/havells_solar/sensor.py +291 -0
  1180. esphome/components/hbridge/__init__.py +3 -0
  1181. esphome/components/hbridge/fan/__init__.py +78 -0
  1182. esphome/components/hbridge/fan/hbridge_fan.cpp +94 -0
  1183. esphome/components/hbridge/fan/hbridge_fan.h +58 -0
  1184. esphome/components/hbridge/light/__init__.py +31 -0
  1185. esphome/components/hbridge/light/hbridge_light_output.h +58 -0
  1186. esphome/components/hbridge/switch/__init__.py +44 -0
  1187. esphome/components/hbridge/switch/hbridge_switch.cpp +93 -0
  1188. esphome/components/hbridge/switch/hbridge_switch.h +50 -0
  1189. esphome/components/hc8/__init__.py +1 -0
  1190. esphome/components/hc8/hc8.cpp +99 -0
  1191. esphome/components/hc8/hc8.h +37 -0
  1192. esphome/components/hc8/sensor.py +79 -0
  1193. esphome/components/hdc1080/__init__.py +0 -0
  1194. esphome/components/hdc1080/hdc1080.cpp +82 -0
  1195. esphome/components/hdc1080/hdc1080.h +27 -0
  1196. esphome/components/hdc1080/sensor.py +56 -0
  1197. esphome/components/hdc2010/__init__.py +1 -0
  1198. esphome/components/hdc2010/hdc2010.cpp +111 -0
  1199. esphome/components/hdc2010/hdc2010.h +32 -0
  1200. esphome/components/hdc2010/sensor.py +56 -0
  1201. esphome/components/he60r/__init__.py +1 -0
  1202. esphome/components/he60r/cover.py +42 -0
  1203. esphome/components/he60r/he60r.cpp +265 -0
  1204. esphome/components/he60r/he60r.h +45 -0
  1205. esphome/components/heatpumpir/__init__.py +0 -0
  1206. esphome/components/heatpumpir/climate.py +131 -0
  1207. esphome/components/heatpumpir/heatpumpir.cpp +213 -0
  1208. esphome/components/heatpumpir/heatpumpir.h +132 -0
  1209. esphome/components/heatpumpir/ir_sender_esphome.cpp +32 -0
  1210. esphome/components/heatpumpir/ir_sender_esphome.h +25 -0
  1211. esphome/components/hitachi_ac344/__init__.py +0 -0
  1212. esphome/components/hitachi_ac344/climate.py +13 -0
  1213. esphome/components/hitachi_ac344/hitachi_ac344.cpp +370 -0
  1214. esphome/components/hitachi_ac344/hitachi_ac344.h +121 -0
  1215. esphome/components/hitachi_ac424/__init__.py +1 -0
  1216. esphome/components/hitachi_ac424/climate.py +13 -0
  1217. esphome/components/hitachi_ac424/hitachi_ac424.cpp +371 -0
  1218. esphome/components/hitachi_ac424/hitachi_ac424.h +123 -0
  1219. esphome/components/hlk_fm22x/__init__.py +247 -0
  1220. esphome/components/hlk_fm22x/binary_sensor.py +21 -0
  1221. esphome/components/hlk_fm22x/hlk_fm22x.cpp +325 -0
  1222. esphome/components/hlk_fm22x/hlk_fm22x.h +224 -0
  1223. esphome/components/hlk_fm22x/sensor.py +47 -0
  1224. esphome/components/hlk_fm22x/text_sensor.py +42 -0
  1225. esphome/components/hlw8012/__init__.py +0 -0
  1226. esphome/components/hlw8012/hlw8012.cpp +109 -0
  1227. esphome/components/hlw8012/hlw8012.h +77 -0
  1228. esphome/components/hlw8012/sensor.py +124 -0
  1229. esphome/components/hlw8032/__init__.py +1 -0
  1230. esphome/components/hlw8032/hlw8032.cpp +194 -0
  1231. esphome/components/hlw8032/hlw8032.h +44 -0
  1232. esphome/components/hlw8032/sensor.py +93 -0
  1233. esphome/components/hm3301/__init__.py +0 -0
  1234. esphome/components/hm3301/abstract_aqi_calculator.h +14 -0
  1235. esphome/components/hm3301/aqi_calculator.h +50 -0
  1236. esphome/components/hm3301/aqi_calculator_factory.h +29 -0
  1237. esphome/components/hm3301/caqi_calculator.h +52 -0
  1238. esphome/components/hm3301/hm3301.cpp +100 -0
  1239. esphome/components/hm3301/hm3301.h +52 -0
  1240. esphome/components/hm3301/sensor.py +111 -0
  1241. esphome/components/hmac_md5/__init__.py +2 -0
  1242. esphome/components/hmac_md5/hmac_md5.cpp +58 -0
  1243. esphome/components/hmac_md5/hmac_md5.h +49 -0
  1244. esphome/components/hmc5883l/__init__.py +0 -0
  1245. esphome/components/hmc5883l/hmc5883l.cpp +145 -0
  1246. esphome/components/hmc5883l/hmc5883l.h +70 -0
  1247. esphome/components/hmc5883l/sensor.py +142 -0
  1248. esphome/components/homeassistant/__init__.py +41 -0
  1249. esphome/components/homeassistant/binary_sensor/__init__.py +24 -0
  1250. esphome/components/homeassistant/binary_sensor/homeassistant_binary_sensor.cpp +47 -0
  1251. esphome/components/homeassistant/binary_sensor/homeassistant_binary_sensor.h +24 -0
  1252. esphome/components/homeassistant/number/__init__.py +34 -0
  1253. esphome/components/homeassistant/number/homeassistant_number.cpp +103 -0
  1254. esphome/components/homeassistant/number/homeassistant_number.h +31 -0
  1255. esphome/components/homeassistant/sensor/__init__.py +24 -0
  1256. esphome/components/homeassistant/sensor/homeassistant_sensor.cpp +38 -0
  1257. esphome/components/homeassistant/sensor/homeassistant_sensor.h +23 -0
  1258. esphome/components/homeassistant/switch/__init__.py +44 -0
  1259. esphome/components/homeassistant/switch/homeassistant_switch.cpp +63 -0
  1260. esphome/components/homeassistant/switch/homeassistant_switch.h +22 -0
  1261. esphome/components/homeassistant/text_sensor/__init__.py +24 -0
  1262. esphome/components/homeassistant/text_sensor/homeassistant_text_sensor.cpp +30 -0
  1263. esphome/components/homeassistant/text_sensor/homeassistant_text_sensor.h +23 -0
  1264. esphome/components/homeassistant/time/__init__.py +23 -0
  1265. esphome/components/homeassistant/time/homeassistant_time.cpp +22 -0
  1266. esphome/components/homeassistant/time/homeassistant_time.h +22 -0
  1267. esphome/components/honeywell_hih_i2c/__init__.py +3 -0
  1268. esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +97 -0
  1269. esphome/components/honeywell_hih_i2c/honeywell_hih.h +34 -0
  1270. esphome/components/honeywell_hih_i2c/sensor.py +56 -0
  1271. esphome/components/honeywellabp/__init__.py +1 -0
  1272. esphome/components/honeywellabp/honeywellabp.cpp +101 -0
  1273. esphome/components/honeywellabp/honeywellabp.h +45 -0
  1274. esphome/components/honeywellabp/sensor.py +68 -0
  1275. esphome/components/honeywellabp2_i2c/__init__.py +3 -0
  1276. esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +111 -0
  1277. esphome/components/honeywellabp2_i2c/honeywellabp2.h +59 -0
  1278. esphome/components/honeywellabp2_i2c/sensor.py +74 -0
  1279. esphome/components/host/__init__.py +50 -0
  1280. esphome/components/host/const.py +5 -0
  1281. esphome/components/host/core.cpp +77 -0
  1282. esphome/components/host/gpio.cpp +59 -0
  1283. esphome/components/host/gpio.h +38 -0
  1284. esphome/components/host/gpio.py +65 -0
  1285. esphome/components/host/helpers.cpp +57 -0
  1286. esphome/components/host/preferences.cpp +87 -0
  1287. esphome/components/host/preferences.h +67 -0
  1288. esphome/components/host/time/__init__.py +20 -0
  1289. esphome/components/host/time/host_time.h +15 -0
  1290. esphome/components/hrxl_maxsonar_wr/__init__.py +0 -0
  1291. esphome/components/hrxl_maxsonar_wr/hrxl_maxsonar_wr.cpp +77 -0
  1292. esphome/components/hrxl_maxsonar_wr/hrxl_maxsonar_wr.h +25 -0
  1293. esphome/components/hrxl_maxsonar_wr/sensor.py +29 -0
  1294. esphome/components/hte501/__init__.py +0 -0
  1295. esphome/components/hte501/hte501.cpp +71 -0
  1296. esphome/components/hte501/hte501.h +29 -0
  1297. esphome/components/hte501/sensor.py +58 -0
  1298. esphome/components/http_request/__init__.py +339 -0
  1299. esphome/components/http_request/http_request.cpp +46 -0
  1300. esphome/components/http_request/http_request.h +306 -0
  1301. esphome/components/http_request/http_request_arduino.cpp +183 -0
  1302. esphome/components/http_request/http_request_arduino.h +42 -0
  1303. esphome/components/http_request/http_request_host.cpp +145 -0
  1304. esphome/components/http_request/http_request_host.h +33 -0
  1305. esphome/components/http_request/http_request_idf.cpp +251 -0
  1306. esphome/components/http_request/http_request_idf.h +54 -0
  1307. esphome/components/http_request/httplib.h +9695 -0
  1308. esphome/components/http_request/ota/__init__.py +97 -0
  1309. esphome/components/http_request/ota/automation.h +42 -0
  1310. esphome/components/http_request/ota/ota_http_request.cpp +268 -0
  1311. esphome/components/http_request/ota/ota_http_request.h +61 -0
  1312. esphome/components/http_request/update/__init__.py +43 -0
  1313. esphome/components/http_request/update/http_request_update.cpp +205 -0
  1314. esphome/components/http_request/update/http_request_update.h +44 -0
  1315. esphome/components/htu21d/__init__.py +0 -0
  1316. esphome/components/htu21d/htu21d.cpp +149 -0
  1317. esphome/components/htu21d/htu21d.h +63 -0
  1318. esphome/components/htu21d/sensor.py +121 -0
  1319. esphome/components/htu31d/__init__.py +1 -0
  1320. esphome/components/htu31d/htu31d.cpp +269 -0
  1321. esphome/components/htu31d/htu31d.h +33 -0
  1322. esphome/components/htu31d/sensor.py +56 -0
  1323. esphome/components/hub75/__init__.py +6 -0
  1324. esphome/components/hub75/boards/__init__.py +80 -0
  1325. esphome/components/hub75/boards/adafruit.py +23 -0
  1326. esphome/components/hub75/boards/apollo.py +41 -0
  1327. esphome/components/hub75/boards/huidu.py +22 -0
  1328. esphome/components/hub75/boards/trinity.py +24 -0
  1329. esphome/components/hub75/display.py +578 -0
  1330. esphome/components/hub75/hub75.cpp +192 -0
  1331. esphome/components/hub75/hub75_component.h +55 -0
  1332. esphome/components/hx711/__init__.py +0 -0
  1333. esphome/components/hx711/hx711.cpp +82 -0
  1334. esphome/components/hx711/hx711.h +38 -0
  1335. esphome/components/hx711/sensor.py +45 -0
  1336. esphome/components/hydreon_rgxx/__init__.py +12 -0
  1337. esphome/components/hydreon_rgxx/binary_sensor.py +49 -0
  1338. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +290 -0
  1339. esphome/components/hydreon_rgxx/hydreon_rgxx.h +98 -0
  1340. esphome/components/hydreon_rgxx/sensor.py +156 -0
  1341. esphome/components/hyt271/__init__.py +1 -0
  1342. esphome/components/hyt271/hyt271.cpp +52 -0
  1343. esphome/components/hyt271/hyt271.h +27 -0
  1344. esphome/components/hyt271/sensor.py +56 -0
  1345. esphome/components/i2c/__init__.py +336 -0
  1346. esphome/components/i2c/i2c.cpp +122 -0
  1347. esphome/components/i2c/i2c.h +307 -0
  1348. esphome/components/i2c/i2c_bus.h +147 -0
  1349. esphome/components/i2c/i2c_bus_arduino.cpp +264 -0
  1350. esphome/components/i2c/i2c_bus_arduino.h +51 -0
  1351. esphome/components/i2c/i2c_bus_esp_idf.cpp +311 -0
  1352. esphome/components/i2c/i2c_bus_esp_idf.h +62 -0
  1353. esphome/components/i2c/i2c_bus_zephyr.cpp +134 -0
  1354. esphome/components/i2c/i2c_bus_zephyr.h +38 -0
  1355. esphome/components/i2c_device/__init__.py +26 -0
  1356. esphome/components/i2c_device/i2c_device.cpp +17 -0
  1357. esphome/components/i2c_device/i2c_device.h +17 -0
  1358. esphome/components/i2s_audio/__init__.py +284 -0
  1359. esphome/components/i2s_audio/i2s_audio.cpp +27 -0
  1360. esphome/components/i2s_audio/i2s_audio.h +115 -0
  1361. esphome/components/i2s_audio/media_player/__init__.py +120 -0
  1362. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +257 -0
  1363. esphome/components/i2s_audio/media_player/i2s_audio_media_player.h +87 -0
  1364. esphome/components/i2s_audio/microphone/__init__.py +146 -0
  1365. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +547 -0
  1366. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +92 -0
  1367. esphome/components/i2s_audio/speaker/__init__.py +199 -0
  1368. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +728 -0
  1369. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +143 -0
  1370. esphome/components/iaqcore/__init__.py +0 -0
  1371. esphome/components/iaqcore/iaqcore.cpp +99 -0
  1372. esphome/components/iaqcore/iaqcore.h +27 -0
  1373. esphome/components/iaqcore/sensor.py +57 -0
  1374. esphome/components/ili9341/__init__.py +0 -0
  1375. esphome/components/ili9341/display.py +5 -0
  1376. esphome/components/ili9xxx/__init__.py +0 -0
  1377. esphome/components/ili9xxx/display.py +313 -0
  1378. esphome/components/ili9xxx/ili9xxx_defines.h +100 -0
  1379. esphome/components/ili9xxx/ili9xxx_display.cpp +463 -0
  1380. esphome/components/ili9xxx/ili9xxx_display.h +287 -0
  1381. esphome/components/ili9xxx/ili9xxx_init.h +482 -0
  1382. esphome/components/image/__init__.py +760 -0
  1383. esphome/components/image/image.cpp +251 -0
  1384. esphome/components/image/image.h +65 -0
  1385. esphome/components/improv_base/__init__.py +45 -0
  1386. esphome/components/improv_base/improv_base.cpp +51 -0
  1387. esphome/components/improv_base/improv_base.h +23 -0
  1388. esphome/components/improv_serial/__init__.py +45 -0
  1389. esphome/components/improv_serial/improv_serial_component.cpp +315 -0
  1390. esphome/components/improv_serial/improv_serial_component.h +104 -0
  1391. esphome/components/ina219/__init__.py +0 -0
  1392. esphome/components/ina219/ina219.cpp +202 -0
  1393. esphome/components/ina219/ina219.h +40 -0
  1394. esphome/components/ina219/sensor.py +96 -0
  1395. esphome/components/ina226/__init__.py +1 -0
  1396. esphome/components/ina226/ina226.cpp +167 -0
  1397. esphome/components/ina226/ina226.h +78 -0
  1398. esphome/components/ina226/sensor.py +147 -0
  1399. esphome/components/ina260/__init__.py +0 -0
  1400. esphome/components/ina260/ina260.cpp +126 -0
  1401. esphome/components/ina260/ina260.h +37 -0
  1402. esphome/components/ina260/sensor.py +71 -0
  1403. esphome/components/ina2xx_base/__init__.py +257 -0
  1404. esphome/components/ina2xx_base/ina2xx_base.cpp +611 -0
  1405. esphome/components/ina2xx_base/ina2xx_base.h +255 -0
  1406. esphome/components/ina2xx_i2c/__init__.py +0 -0
  1407. esphome/components/ina2xx_i2c/ina2xx_i2c.cpp +39 -0
  1408. esphome/components/ina2xx_i2c/ina2xx_i2c.h +21 -0
  1409. esphome/components/ina2xx_i2c/sensor.py +34 -0
  1410. esphome/components/ina2xx_spi/__init__.py +0 -0
  1411. esphome/components/ina2xx_spi/ina2xx_spi.cpp +38 -0
  1412. esphome/components/ina2xx_spi/ina2xx_spi.h +22 -0
  1413. esphome/components/ina2xx_spi/sensor.py +33 -0
  1414. esphome/components/ina3221/__init__.py +0 -0
  1415. esphome/components/ina3221/ina3221.cpp +133 -0
  1416. esphome/components/ina3221/ina3221.h +40 -0
  1417. esphome/components/ina3221/sensor.py +99 -0
  1418. esphome/components/inkbird_ibsth1_mini/__init__.py +0 -0
  1419. esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.cpp +110 -0
  1420. esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.h +35 -0
  1421. esphome/components/inkbird_ibsth1_mini/sensor.py +83 -0
  1422. esphome/components/inkplate/__init__.py +1 -0
  1423. esphome/components/inkplate/const.py +105 -0
  1424. esphome/components/inkplate/display.py +246 -0
  1425. esphome/components/inkplate/inkplate.cpp +805 -0
  1426. esphome/components/inkplate/inkplate.h +214 -0
  1427. esphome/components/inkplate6/__init__.py +0 -0
  1428. esphome/components/inkplate6/display.py +5 -0
  1429. esphome/components/integration/__init__.py +1 -0
  1430. esphome/components/integration/integration_sensor.cpp +51 -0
  1431. esphome/components/integration/integration_sensor.h +85 -0
  1432. esphome/components/integration/sensor.py +115 -0
  1433. esphome/components/internal_temperature/__init__.py +1 -0
  1434. esphome/components/internal_temperature/internal_temperature.cpp +109 -0
  1435. esphome/components/internal_temperature/internal_temperature.h +18 -0
  1436. esphome/components/internal_temperature/sensor.py +34 -0
  1437. esphome/components/interval/__init__.py +32 -0
  1438. esphome/components/interval/interval.h +28 -0
  1439. esphome/components/jsn_sr04t/__init__.py +1 -0
  1440. esphome/components/jsn_sr04t/jsn_sr04t.cpp +64 -0
  1441. esphome/components/jsn_sr04t/jsn_sr04t.h +34 -0
  1442. esphome/components/jsn_sr04t/sensor.py +57 -0
  1443. esphome/components/json/__init__.py +17 -0
  1444. esphome/components/json/json_util.cpp +75 -0
  1445. esphome/components/json/json_util.h +86 -0
  1446. esphome/components/kalman_combinator/__init__.py +0 -0
  1447. esphome/components/kalman_combinator/sensor.py +6 -0
  1448. esphome/components/kamstrup_kmp/__init__.py +0 -0
  1449. esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +301 -0
  1450. esphome/components/kamstrup_kmp/kamstrup_kmp.h +131 -0
  1451. esphome/components/kamstrup_kmp/sensor.py +132 -0
  1452. esphome/components/key_collector/__init__.py +131 -0
  1453. esphome/components/key_collector/key_collector.cpp +107 -0
  1454. esphome/components/key_collector/key_collector.h +63 -0
  1455. esphome/components/key_provider/__init__.py +6 -0
  1456. esphome/components/key_provider/key_provider.cpp +13 -0
  1457. esphome/components/key_provider/key_provider.h +21 -0
  1458. esphome/components/kmeteriso/__init__.py +0 -0
  1459. esphome/components/kmeteriso/kmeteriso.cpp +80 -0
  1460. esphome/components/kmeteriso/kmeteriso.h +34 -0
  1461. esphome/components/kmeteriso/sensor.py +55 -0
  1462. esphome/components/kuntze/__init__.py +0 -0
  1463. esphome/components/kuntze/kuntze.cpp +94 -0
  1464. esphome/components/kuntze/kuntze.h +42 -0
  1465. esphome/components/kuntze/sensor.py +123 -0
  1466. esphome/components/lc709203f/__init__.py +1 -0
  1467. esphome/components/lc709203f/lc709203f.cpp +284 -0
  1468. esphome/components/lc709203f/lc709203f.h +54 -0
  1469. esphome/components/lc709203f/sensor.py +93 -0
  1470. esphome/components/lcd_base/__init__.py +59 -0
  1471. esphome/components/lcd_base/lcd_display.cpp +177 -0
  1472. esphome/components/lcd_base/lcd_display.h +66 -0
  1473. esphome/components/lcd_gpio/__init__.py +0 -0
  1474. esphome/components/lcd_gpio/display.py +62 -0
  1475. esphome/components/lcd_gpio/gpio_lcd_display.cpp +67 -0
  1476. esphome/components/lcd_gpio/gpio_lcd_display.h +55 -0
  1477. esphome/components/lcd_menu/__init__.py +69 -0
  1478. esphome/components/lcd_menu/lcd_menu.cpp +76 -0
  1479. esphome/components/lcd_menu/lcd_menu.h +45 -0
  1480. esphome/components/lcd_pcf8574/__init__.py +0 -0
  1481. esphome/components/lcd_pcf8574/display.py +32 -0
  1482. esphome/components/lcd_pcf8574/pcf8574_display.cpp +60 -0
  1483. esphome/components/lcd_pcf8574/pcf8574_display.h +36 -0
  1484. esphome/components/ld2410/__init__.py +107 -0
  1485. esphome/components/ld2410/automation.h +20 -0
  1486. esphome/components/ld2410/binary_sensor.py +60 -0
  1487. esphome/components/ld2410/button/__init__.py +58 -0
  1488. esphome/components/ld2410/button/factory_reset_button.cpp +7 -0
  1489. esphome/components/ld2410/button/factory_reset_button.h +16 -0
  1490. esphome/components/ld2410/button/query_button.cpp +7 -0
  1491. esphome/components/ld2410/button/query_button.h +16 -0
  1492. esphome/components/ld2410/button/restart_button.cpp +7 -0
  1493. esphome/components/ld2410/button/restart_button.h +16 -0
  1494. esphome/components/ld2410/ld2410.cpp +784 -0
  1495. esphome/components/ld2410/ld2410.h +135 -0
  1496. esphome/components/ld2410/number/__init__.py +129 -0
  1497. esphome/components/ld2410/number/gate_threshold_number.cpp +12 -0
  1498. esphome/components/ld2410/number/gate_threshold_number.h +17 -0
  1499. esphome/components/ld2410/number/light_threshold_number.cpp +10 -0
  1500. esphome/components/ld2410/number/light_threshold_number.h +16 -0
  1501. esphome/components/ld2410/number/max_distance_timeout_number.cpp +10 -0
  1502. esphome/components/ld2410/number/max_distance_timeout_number.h +16 -0
  1503. esphome/components/ld2410/select/__init__.py +82 -0
  1504. esphome/components/ld2410/select/baud_rate_select.cpp +10 -0
  1505. esphome/components/ld2410/select/baud_rate_select.h +16 -0
  1506. esphome/components/ld2410/select/distance_resolution_select.cpp +10 -0
  1507. esphome/components/ld2410/select/distance_resolution_select.h +16 -0
  1508. esphome/components/ld2410/select/light_out_control_select.cpp +10 -0
  1509. esphome/components/ld2410/select/light_out_control_select.h +16 -0
  1510. esphome/components/ld2410/sensor.py +183 -0
  1511. esphome/components/ld2410/switch/__init__.py +45 -0
  1512. esphome/components/ld2410/switch/bluetooth_switch.cpp +10 -0
  1513. esphome/components/ld2410/switch/bluetooth_switch.h +16 -0
  1514. esphome/components/ld2410/switch/engineering_mode_switch.cpp +10 -0
  1515. esphome/components/ld2410/switch/engineering_mode_switch.h +16 -0
  1516. esphome/components/ld2410/text_sensor.py +34 -0
  1517. esphome/components/ld2412/__init__.py +46 -0
  1518. esphome/components/ld2412/binary_sensor.py +70 -0
  1519. esphome/components/ld2412/button/__init__.py +74 -0
  1520. esphome/components/ld2412/button/factory_reset_button.cpp +7 -0
  1521. esphome/components/ld2412/button/factory_reset_button.h +16 -0
  1522. esphome/components/ld2412/button/query_button.cpp +7 -0
  1523. esphome/components/ld2412/button/query_button.h +16 -0
  1524. esphome/components/ld2412/button/restart_button.cpp +7 -0
  1525. esphome/components/ld2412/button/restart_button.h +16 -0
  1526. esphome/components/ld2412/button/start_dynamic_background_correction_button.cpp +9 -0
  1527. esphome/components/ld2412/button/start_dynamic_background_correction_button.h +16 -0
  1528. esphome/components/ld2412/ld2412.cpp +857 -0
  1529. esphome/components/ld2412/ld2412.h +139 -0
  1530. esphome/components/ld2412/number/__init__.py +126 -0
  1531. esphome/components/ld2412/number/gate_threshold_number.cpp +12 -0
  1532. esphome/components/ld2412/number/gate_threshold_number.h +17 -0
  1533. esphome/components/ld2412/number/light_threshold_number.cpp +10 -0
  1534. esphome/components/ld2412/number/light_threshold_number.h +16 -0
  1535. esphome/components/ld2412/number/max_distance_timeout_number.cpp +10 -0
  1536. esphome/components/ld2412/number/max_distance_timeout_number.h +16 -0
  1537. esphome/components/ld2412/select/__init__.py +82 -0
  1538. esphome/components/ld2412/select/baud_rate_select.cpp +10 -0
  1539. esphome/components/ld2412/select/baud_rate_select.h +16 -0
  1540. esphome/components/ld2412/select/distance_resolution_select.cpp +10 -0
  1541. esphome/components/ld2412/select/distance_resolution_select.h +16 -0
  1542. esphome/components/ld2412/select/light_out_control_select.cpp +10 -0
  1543. esphome/components/ld2412/select/light_out_control_select.h +16 -0
  1544. esphome/components/ld2412/sensor.py +184 -0
  1545. esphome/components/ld2412/switch/__init__.py +45 -0
  1546. esphome/components/ld2412/switch/bluetooth_switch.cpp +10 -0
  1547. esphome/components/ld2412/switch/bluetooth_switch.h +16 -0
  1548. esphome/components/ld2412/switch/engineering_mode_switch.cpp +10 -0
  1549. esphome/components/ld2412/switch/engineering_mode_switch.h +16 -0
  1550. esphome/components/ld2412/text_sensor.py +34 -0
  1551. esphome/components/ld2420/__init__.py +39 -0
  1552. esphome/components/ld2420/binary_sensor/__init__.py +33 -0
  1553. esphome/components/ld2420/binary_sensor/ld2420_binary_sensor.cpp +14 -0
  1554. esphome/components/ld2420/binary_sensor/ld2420_binary_sensor.h +23 -0
  1555. esphome/components/ld2420/button/__init__.py +70 -0
  1556. esphome/components/ld2420/button/reconfig_buttons.cpp +14 -0
  1557. esphome/components/ld2420/button/reconfig_buttons.h +40 -0
  1558. esphome/components/ld2420/ld2420.cpp +900 -0
  1559. esphome/components/ld2420/ld2420.h +195 -0
  1560. esphome/components/ld2420/number/__init__.py +184 -0
  1561. esphome/components/ld2420/number/gate_config_number.cpp +71 -0
  1562. esphome/components/ld2420/number/gate_config_number.h +76 -0
  1563. esphome/components/ld2420/select/__init__.py +34 -0
  1564. esphome/components/ld2420/select/operating_mode_select.cpp +14 -0
  1565. esphome/components/ld2420/select/operating_mode_select.h +16 -0
  1566. esphome/components/ld2420/sensor/__init__.py +40 -0
  1567. esphome/components/ld2420/sensor/ld2420_sensor.cpp +14 -0
  1568. esphome/components/ld2420/sensor/ld2420_sensor.h +32 -0
  1569. esphome/components/ld2420/text_sensor/__init__.py +34 -0
  1570. esphome/components/ld2420/text_sensor/ld2420_text_sensor.cpp +14 -0
  1571. esphome/components/ld2420/text_sensor/ld2420_text_sensor.h +22 -0
  1572. esphome/components/ld2450/__init__.py +47 -0
  1573. esphome/components/ld2450/binary_sensor.py +50 -0
  1574. esphome/components/ld2450/button/__init__.py +45 -0
  1575. esphome/components/ld2450/button/factory_reset_button.cpp +7 -0
  1576. esphome/components/ld2450/button/factory_reset_button.h +16 -0
  1577. esphome/components/ld2450/button/restart_button.cpp +7 -0
  1578. esphome/components/ld2450/button/restart_button.h +16 -0
  1579. esphome/components/ld2450/ld2450.cpp +941 -0
  1580. esphome/components/ld2450/ld2450.h +195 -0
  1581. esphome/components/ld2450/number/__init__.py +121 -0
  1582. esphome/components/ld2450/number/presence_timeout_number.cpp +10 -0
  1583. esphome/components/ld2450/number/presence_timeout_number.h +16 -0
  1584. esphome/components/ld2450/number/zone_coordinate_number.cpp +12 -0
  1585. esphome/components/ld2450/number/zone_coordinate_number.h +17 -0
  1586. esphome/components/ld2450/select/__init__.py +56 -0
  1587. esphome/components/ld2450/select/baud_rate_select.cpp +10 -0
  1588. esphome/components/ld2450/select/baud_rate_select.h +16 -0
  1589. esphome/components/ld2450/select/zone_type_select.cpp +10 -0
  1590. esphome/components/ld2450/select/zone_type_select.h +16 -0
  1591. esphome/components/ld2450/sensor.py +270 -0
  1592. esphome/components/ld2450/switch/__init__.py +45 -0
  1593. esphome/components/ld2450/switch/bluetooth_switch.cpp +10 -0
  1594. esphome/components/ld2450/switch/bluetooth_switch.h +16 -0
  1595. esphome/components/ld2450/switch/multi_target_switch.cpp +10 -0
  1596. esphome/components/ld2450/switch/multi_target_switch.h +16 -0
  1597. esphome/components/ld2450/text_sensor.py +63 -0
  1598. esphome/components/ld24xx/__init__.py +1 -0
  1599. esphome/components/ld24xx/ld24xx.h +85 -0
  1600. esphome/components/ledc/__init__.py +1 -0
  1601. esphome/components/ledc/ledc_output.cpp +209 -0
  1602. esphome/components/ledc/ledc_output.h +62 -0
  1603. esphome/components/ledc/output.py +84 -0
  1604. esphome/components/libretiny/__init__.py +349 -0
  1605. esphome/components/libretiny/const.py +95 -0
  1606. esphome/components/libretiny/core.cpp +40 -0
  1607. esphome/components/libretiny/core.h +11 -0
  1608. esphome/components/libretiny/generate_components.py +330 -0
  1609. esphome/components/libretiny/gpio.py +207 -0
  1610. esphome/components/libretiny/gpio_arduino.cpp +105 -0
  1611. esphome/components/libretiny/gpio_arduino.h +37 -0
  1612. esphome/components/libretiny/helpers.cpp +39 -0
  1613. esphome/components/libretiny/lt_component.cpp +31 -0
  1614. esphome/components/libretiny/lt_component.h +36 -0
  1615. esphome/components/libretiny/preferences.cpp +196 -0
  1616. esphome/components/libretiny/preferences.h +13 -0
  1617. esphome/components/libretiny/text_sensor.py +31 -0
  1618. esphome/components/libretiny_pwm/__init__.py +1 -0
  1619. esphome/components/libretiny_pwm/libretiny_pwm.cpp +53 -0
  1620. esphome/components/libretiny_pwm/libretiny_pwm.h +55 -0
  1621. esphome/components/libretiny_pwm/output.py +45 -0
  1622. esphome/components/light/__init__.py +288 -0
  1623. esphome/components/light/addressable_light.cpp +114 -0
  1624. esphome/components/light/addressable_light.h +118 -0
  1625. esphome/components/light/addressable_light_effect.h +373 -0
  1626. esphome/components/light/addressable_light_wrapper.h +125 -0
  1627. esphome/components/light/automation.cpp +13 -0
  1628. esphome/components/light/automation.h +226 -0
  1629. esphome/components/light/automation.py +281 -0
  1630. esphome/components/light/base_light_effects.h +237 -0
  1631. esphome/components/light/color_mode.h +212 -0
  1632. esphome/components/light/effects.py +577 -0
  1633. esphome/components/light/esp_color_correction.cpp +25 -0
  1634. esphome/components/light/esp_color_correction.h +75 -0
  1635. esphome/components/light/esp_color_view.h +108 -0
  1636. esphome/components/light/esp_hsv_color.cpp +72 -0
  1637. esphome/components/light/esp_hsv_color.h +34 -0
  1638. esphome/components/light/esp_range_view.cpp +94 -0
  1639. esphome/components/light/esp_range_view.h +78 -0
  1640. esphome/components/light/light_call.cpp +652 -0
  1641. esphome/components/light/light_call.h +260 -0
  1642. esphome/components/light/light_color_values.h +312 -0
  1643. esphome/components/light/light_effect.cpp +34 -0
  1644. esphome/components/light/light_effect.h +57 -0
  1645. esphome/components/light/light_json_schema.cpp +174 -0
  1646. esphome/components/light/light_json_schema.h +26 -0
  1647. esphome/components/light/light_output.cpp +10 -0
  1648. esphome/components/light/light_output.h +31 -0
  1649. esphome/components/light/light_state.cpp +343 -0
  1650. esphome/components/light/light_state.h +333 -0
  1651. esphome/components/light/light_traits.h +47 -0
  1652. esphome/components/light/light_transformer.h +61 -0
  1653. esphome/components/light/transformers.h +120 -0
  1654. esphome/components/light/types.py +87 -0
  1655. esphome/components/lightwaverf/LwRx.cpp +427 -0
  1656. esphome/components/lightwaverf/LwRx.h +142 -0
  1657. esphome/components/lightwaverf/LwTx.cpp +208 -0
  1658. esphome/components/lightwaverf/LwTx.h +94 -0
  1659. esphome/components/lightwaverf/__init__.py +81 -0
  1660. esphome/components/lightwaverf/lightwaverf.cpp +65 -0
  1661. esphome/components/lightwaverf/lightwaverf.h +70 -0
  1662. esphome/components/lilygo_t5_47/__init__.py +3 -0
  1663. esphome/components/lilygo_t5_47/touchscreen/__init__.py +38 -0
  1664. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +104 -0
  1665. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.h +31 -0
  1666. esphome/components/lm75b/__init__.py +0 -0
  1667. esphome/components/lm75b/lm75b.cpp +39 -0
  1668. esphome/components/lm75b/lm75b.h +19 -0
  1669. esphome/components/lm75b/sensor.py +34 -0
  1670. esphome/components/ln882x/__init__.py +52 -0
  1671. esphome/components/ln882x/boards.py +285 -0
  1672. esphome/components/lock/__init__.py +155 -0
  1673. esphome/components/lock/automation.h +66 -0
  1674. esphome/components/lock/lock.cpp +109 -0
  1675. esphome/components/lock/lock.h +182 -0
  1676. esphome/components/logger/__init__.py +534 -0
  1677. esphome/components/logger/logger.cpp +299 -0
  1678. esphome/components/logger/logger.h +565 -0
  1679. esphome/components/logger/logger_esp32.cpp +167 -0
  1680. esphome/components/logger/logger_esp8266.cpp +54 -0
  1681. esphome/components/logger/logger_host.cpp +22 -0
  1682. esphome/components/logger/logger_libretiny.cpp +70 -0
  1683. esphome/components/logger/logger_rp2040.cpp +48 -0
  1684. esphome/components/logger/logger_zephyr.cpp +96 -0
  1685. esphome/components/logger/select/__init__.py +37 -0
  1686. esphome/components/logger/select/logger_level_select.cpp +19 -0
  1687. esphome/components/logger/select/logger_level_select.h +25 -0
  1688. esphome/components/logger/task_log_buffer.cpp +136 -0
  1689. esphome/components/logger/task_log_buffer.h +67 -0
  1690. esphome/components/lps22/__init__.py +0 -0
  1691. esphome/components/lps22/lps22.cpp +75 -0
  1692. esphome/components/lps22/lps22.h +27 -0
  1693. esphome/components/lps22/sensor.py +58 -0
  1694. esphome/components/ltr390/__init__.py +0 -0
  1695. esphome/components/ltr390/ltr390.cpp +206 -0
  1696. esphome/components/ltr390/ltr390.h +89 -0
  1697. esphome/components/ltr390/sensor.py +141 -0
  1698. esphome/components/ltr501/__init__.py +1 -0
  1699. esphome/components/ltr501/ltr501.cpp +547 -0
  1700. esphome/components/ltr501/ltr501.h +183 -0
  1701. esphome/components/ltr501/ltr_definitions_501.h +260 -0
  1702. esphome/components/ltr501/sensor.py +274 -0
  1703. esphome/components/ltr_als_ps/__init__.py +1 -0
  1704. esphome/components/ltr_als_ps/ltr_als_ps.cpp +526 -0
  1705. esphome/components/ltr_als_ps/ltr_als_ps.h +183 -0
  1706. esphome/components/ltr_als_ps/ltr_definitions.h +275 -0
  1707. esphome/components/ltr_als_ps/sensor.py +271 -0
  1708. esphome/components/lvgl/__init__.py +454 -0
  1709. esphome/components/lvgl/automation.py +416 -0
  1710. esphome/components/lvgl/binary_sensor/__init__.py +37 -0
  1711. esphome/components/lvgl/defines.py +596 -0
  1712. esphome/components/lvgl/encoders.py +81 -0
  1713. esphome/components/lvgl/gradient.py +61 -0
  1714. esphome/components/lvgl/helpers.py +76 -0
  1715. esphome/components/lvgl/keypads.py +77 -0
  1716. esphome/components/lvgl/layout.py +389 -0
  1717. esphome/components/lvgl/light/__init__.py +31 -0
  1718. esphome/components/lvgl/light/lvgl_light.h +48 -0
  1719. esphome/components/lvgl/lv_validation.py +538 -0
  1720. esphome/components/lvgl/lvcode.py +360 -0
  1721. esphome/components/lvgl/lvgl_esphome.cpp +616 -0
  1722. esphome/components/lvgl/lvgl_esphome.h +412 -0
  1723. esphome/components/lvgl/lvgl_hal.h +21 -0
  1724. esphome/components/lvgl/lvgl_proxy.h +17 -0
  1725. esphome/components/lvgl/number/__init__.py +66 -0
  1726. esphome/components/lvgl/number/lvgl_number.h +52 -0
  1727. esphome/components/lvgl/schemas.py +489 -0
  1728. esphome/components/lvgl/select/__init__.py +30 -0
  1729. esphome/components/lvgl/select/lvgl_select.h +75 -0
  1730. esphome/components/lvgl/sensor/__init__.py +41 -0
  1731. esphome/components/lvgl/styles.py +97 -0
  1732. esphome/components/lvgl/switch/__init__.py +58 -0
  1733. esphome/components/lvgl/switch/lvgl_switch.h +25 -0
  1734. esphome/components/lvgl/text/__init__.py +50 -0
  1735. esphome/components/lvgl/text/lvgl_text.h +36 -0
  1736. esphome/components/lvgl/text_sensor/__init__.py +43 -0
  1737. esphome/components/lvgl/touchscreens.py +44 -0
  1738. esphome/components/lvgl/trigger.py +111 -0
  1739. esphome/components/lvgl/types.py +245 -0
  1740. esphome/components/lvgl/widgets/__init__.py +470 -0
  1741. esphome/components/lvgl/widgets/animimg.py +112 -0
  1742. esphome/components/lvgl/widgets/arc.py +114 -0
  1743. esphome/components/lvgl/widgets/button.py +52 -0
  1744. esphome/components/lvgl/widgets/buttonmatrix.py +279 -0
  1745. esphome/components/lvgl/widgets/canvas.py +422 -0
  1746. esphome/components/lvgl/widgets/checkbox.py +31 -0
  1747. esphome/components/lvgl/widgets/container.py +39 -0
  1748. esphome/components/lvgl/widgets/dropdown.py +93 -0
  1749. esphome/components/lvgl/widgets/img.py +86 -0
  1750. esphome/components/lvgl/widgets/keyboard.py +56 -0
  1751. esphome/components/lvgl/widgets/label.py +41 -0
  1752. esphome/components/lvgl/widgets/led.py +29 -0
  1753. esphome/components/lvgl/widgets/line.py +50 -0
  1754. esphome/components/lvgl/widgets/lv_bar.py +76 -0
  1755. esphome/components/lvgl/widgets/meter.py +324 -0
  1756. esphome/components/lvgl/widgets/msgbox.py +148 -0
  1757. esphome/components/lvgl/widgets/obj.py +19 -0
  1758. esphome/components/lvgl/widgets/page.py +193 -0
  1759. esphome/components/lvgl/widgets/qrcode.py +51 -0
  1760. esphome/components/lvgl/widgets/roller.py +84 -0
  1761. esphome/components/lvgl/widgets/slider.py +63 -0
  1762. esphome/components/lvgl/widgets/spinbox.py +176 -0
  1763. esphome/components/lvgl/widgets/spinner.py +43 -0
  1764. esphome/components/lvgl/widgets/switch.py +20 -0
  1765. esphome/components/lvgl/widgets/tabview.py +121 -0
  1766. esphome/components/lvgl/widgets/textarea.py +65 -0
  1767. esphome/components/lvgl/widgets/tileview.py +131 -0
  1768. esphome/components/m5stack_8angle/__init__.py +32 -0
  1769. esphome/components/m5stack_8angle/binary_sensor/__init__.py +29 -0
  1770. esphome/components/m5stack_8angle/binary_sensor/m5stack_8angle_binary_sensor.cpp +17 -0
  1771. esphome/components/m5stack_8angle/binary_sensor/m5stack_8angle_binary_sensor.h +19 -0
  1772. esphome/components/m5stack_8angle/light/__init__.py +29 -0
  1773. esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +45 -0
  1774. esphome/components/m5stack_8angle/light/m5stack_8angle_light.h +37 -0
  1775. esphome/components/m5stack_8angle/m5stack_8angle.cpp +73 -0
  1776. esphome/components/m5stack_8angle/m5stack_8angle.h +34 -0
  1777. esphome/components/m5stack_8angle/sensor/__init__.py +64 -0
  1778. esphome/components/m5stack_8angle/sensor/m5stack_8angle_sensor.cpp +24 -0
  1779. esphome/components/m5stack_8angle/sensor/m5stack_8angle_sensor.h +27 -0
  1780. esphome/components/mapping/__init__.py +142 -0
  1781. esphome/components/mapping/mapping.h +69 -0
  1782. esphome/components/matrix_keypad/__init__.py +88 -0
  1783. esphome/components/matrix_keypad/binary_sensor/__init__.py +50 -0
  1784. esphome/components/matrix_keypad/binary_sensor/matrix_keypad_binary_sensor.h +51 -0
  1785. esphome/components/matrix_keypad/matrix_keypad.cpp +116 -0
  1786. esphome/components/matrix_keypad/matrix_keypad.h +53 -0
  1787. esphome/components/max17043/__init__.py +1 -0
  1788. esphome/components/max17043/automation.h +20 -0
  1789. esphome/components/max17043/max17043.cpp +96 -0
  1790. esphome/components/max17043/max17043.h +29 -0
  1791. esphome/components/max17043/sensor.py +77 -0
  1792. esphome/components/max31855/__init__.py +0 -0
  1793. esphome/components/max31855/max31855.cpp +106 -0
  1794. esphome/components/max31855/max31855.h +31 -0
  1795. esphome/components/max31855/sensor.py +44 -0
  1796. esphome/components/max31856/__init__.py +0 -0
  1797. esphome/components/max31856/max31856.cpp +203 -0
  1798. esphome/components/max31856/max31856.h +103 -0
  1799. esphome/components/max31856/sensor.py +66 -0
  1800. esphome/components/max31865/__init__.py +0 -0
  1801. esphome/components/max31865/max31865.cpp +233 -0
  1802. esphome/components/max31865/max31865.h +58 -0
  1803. esphome/components/max31865/sensor.py +62 -0
  1804. esphome/components/max44009/__init__.py +0 -0
  1805. esphome/components/max44009/max44009.cpp +143 -0
  1806. esphome/components/max44009/max44009.h +37 -0
  1807. esphome/components/max44009/sensor.py +53 -0
  1808. esphome/components/max6675/__init__.py +0 -0
  1809. esphome/components/max6675/max6675.cpp +49 -0
  1810. esphome/components/max6675/max6675.h +26 -0
  1811. esphome/components/max6675/sensor.py +31 -0
  1812. esphome/components/max6956/__init__.py +142 -0
  1813. esphome/components/max6956/automation.h +40 -0
  1814. esphome/components/max6956/max6956.cpp +171 -0
  1815. esphome/components/max6956/max6956.h +96 -0
  1816. esphome/components/max6956/output/__init__.py +29 -0
  1817. esphome/components/max6956/output/max6956_led_output.cpp +26 -0
  1818. esphome/components/max6956/output/max6956_led_output.h +28 -0
  1819. esphome/components/max7219/__init__.py +0 -0
  1820. esphome/components/max7219/display.py +43 -0
  1821. esphome/components/max7219/max7219.cpp +244 -0
  1822. esphome/components/max7219/max7219.h +65 -0
  1823. esphome/components/max7219digit/__init__.py +0 -0
  1824. esphome/components/max7219digit/automation.h +52 -0
  1825. esphome/components/max7219digit/display.py +193 -0
  1826. esphome/components/max7219digit/max7219digit.cpp +353 -0
  1827. esphome/components/max7219digit/max7219digit.h +124 -0
  1828. esphome/components/max7219digit/max7219font.h +270 -0
  1829. esphome/components/max9611/__init__.py +1 -0
  1830. esphome/components/max9611/max9611.cpp +95 -0
  1831. esphome/components/max9611/max9611.h +61 -0
  1832. esphome/components/max9611/sensor.py +92 -0
  1833. esphome/components/mcp23008/__init__.py +28 -0
  1834. esphome/components/mcp23008/mcp23008.cpp +42 -0
  1835. esphome/components/mcp23008/mcp23008.h +24 -0
  1836. esphome/components/mcp23016/__init__.py +73 -0
  1837. esphome/components/mcp23016/mcp23016.cpp +109 -0
  1838. esphome/components/mcp23016/mcp23016.h +80 -0
  1839. esphome/components/mcp23017/__init__.py +28 -0
  1840. esphome/components/mcp23017/mcp23017.cpp +43 -0
  1841. esphome/components/mcp23017/mcp23017.h +24 -0
  1842. esphome/components/mcp23s08/__init__.py +32 -0
  1843. esphome/components/mcp23s08/mcp23s08.cpp +58 -0
  1844. esphome/components/mcp23s08/mcp23s08.h +30 -0
  1845. esphome/components/mcp23s17/__init__.py +32 -0
  1846. esphome/components/mcp23s17/mcp23s17.cpp +68 -0
  1847. esphome/components/mcp23s17/mcp23s17.h +29 -0
  1848. esphome/components/mcp23x08_base/__init__.py +10 -0
  1849. esphome/components/mcp23x08_base/mcp23x08_base.cpp +86 -0
  1850. esphome/components/mcp23x08_base/mcp23x08_base.h +44 -0
  1851. esphome/components/mcp23x17_base/__init__.py +10 -0
  1852. esphome/components/mcp23x17_base/mcp23x17_base.cpp +102 -0
  1853. esphome/components/mcp23x17_base/mcp23x17_base.h +57 -0
  1854. esphome/components/mcp23xxx_base/__init__.py +92 -0
  1855. esphome/components/mcp23xxx_base/mcp23xxx_base.cpp +27 -0
  1856. esphome/components/mcp23xxx_base/mcp23xxx_base.h +58 -0
  1857. esphome/components/mcp2515/__init__.py +0 -0
  1858. esphome/components/mcp2515/canbus.py +50 -0
  1859. esphome/components/mcp2515/mcp2515.cpp +710 -0
  1860. esphome/components/mcp2515/mcp2515.h +112 -0
  1861. esphome/components/mcp2515/mcp2515_defs.h +375 -0
  1862. esphome/components/mcp3008/__init__.py +25 -0
  1863. esphome/components/mcp3008/mcp3008.cpp +40 -0
  1864. esphome/components/mcp3008/mcp3008.h +22 -0
  1865. esphome/components/mcp3008/sensor/__init__.py +53 -0
  1866. esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +29 -0
  1867. esphome/components/mcp3008/sensor/mcp3008_sensor.h +31 -0
  1868. esphome/components/mcp3204/__init__.py +26 -0
  1869. esphome/components/mcp3204/mcp3204.cpp +37 -0
  1870. esphome/components/mcp3204/mcp3204.h +28 -0
  1871. esphome/components/mcp3204/sensor/__init__.py +39 -0
  1872. esphome/components/mcp3204/sensor/mcp3204_sensor.cpp +22 -0
  1873. esphome/components/mcp3204/sensor/mcp3204_sensor.h +31 -0
  1874. esphome/components/mcp3221/__init__.py +1 -0
  1875. esphome/components/mcp3221/mcp3221_sensor.cpp +31 -0
  1876. esphome/components/mcp3221/mcp3221_sensor.h +28 -0
  1877. esphome/components/mcp3221/sensor.py +49 -0
  1878. esphome/components/mcp4461/__init__.py +42 -0
  1879. esphome/components/mcp4461/mcp4461.cpp +631 -0
  1880. esphome/components/mcp4461/mcp4461.h +172 -0
  1881. esphome/components/mcp4461/output/__init__.py +61 -0
  1882. esphome/components/mcp4461/output/mcp4461_output.cpp +73 -0
  1883. esphome/components/mcp4461/output/mcp4461_output.h +49 -0
  1884. esphome/components/mcp4725/__init__.py +0 -0
  1885. esphome/components/mcp4725/mcp4725.cpp +34 -0
  1886. esphome/components/mcp4725/mcp4725.h +23 -0
  1887. esphome/components/mcp4725/output.py +26 -0
  1888. esphome/components/mcp4728/__init__.py +30 -0
  1889. esphome/components/mcp4728/mcp4728.cpp +113 -0
  1890. esphome/components/mcp4728/mcp4728.h +67 -0
  1891. esphome/components/mcp4728/output/__init__.py +63 -0
  1892. esphome/components/mcp4728/output/mcp4728_output.cpp +17 -0
  1893. esphome/components/mcp4728/output/mcp4728_output.h +32 -0
  1894. esphome/components/mcp47a1/__init__.py +0 -0
  1895. esphome/components/mcp47a1/mcp47a1.cpp +21 -0
  1896. esphome/components/mcp47a1/mcp47a1.h +17 -0
  1897. esphome/components/mcp47a1/output.py +27 -0
  1898. esphome/components/mcp9600/__init__.py +0 -0
  1899. esphome/components/mcp9600/mcp9600.cpp +113 -0
  1900. esphome/components/mcp9600/mcp9600.h +49 -0
  1901. esphome/components/mcp9600/sensor.py +81 -0
  1902. esphome/components/mcp9808/__init__.py +0 -0
  1903. esphome/components/mcp9808/mcp9808.cpp +79 -0
  1904. esphome/components/mcp9808/mcp9808.h +20 -0
  1905. esphome/components/mcp9808/sensor.py +34 -0
  1906. esphome/components/md5/__init__.py +7 -0
  1907. esphome/components/md5/md5.cpp +44 -0
  1908. esphome/components/md5/md5.h +55 -0
  1909. esphome/components/mdns/__init__.py +240 -0
  1910. esphome/components/mdns/mdns_component.cpp +194 -0
  1911. esphome/components/mdns/mdns_component.h +118 -0
  1912. esphome/components/mdns/mdns_esp32.cpp +54 -0
  1913. esphome/components/mdns/mdns_esp8266.cpp +50 -0
  1914. esphome/components/mdns/mdns_host.cpp +28 -0
  1915. esphome/components/mdns/mdns_libretiny.cpp +44 -0
  1916. esphome/components/mdns/mdns_rp2040.cpp +49 -0
  1917. esphome/components/media_player/__init__.py +305 -0
  1918. esphome/components/media_player/automation.h +109 -0
  1919. esphome/components/media_player/media_player.cpp +160 -0
  1920. esphome/components/media_player/media_player.h +164 -0
  1921. esphome/components/mhz19/__init__.py +0 -0
  1922. esphome/components/mhz19/mhz19.cpp +119 -0
  1923. esphome/components/mhz19/mhz19.h +70 -0
  1924. esphome/components/mhz19/sensor.py +100 -0
  1925. esphome/components/micro_wake_word/__init__.py +567 -0
  1926. esphome/components/micro_wake_word/automation.h +54 -0
  1927. esphome/components/micro_wake_word/micro_wake_word.cpp +473 -0
  1928. esphome/components/micro_wake_word/micro_wake_word.h +129 -0
  1929. esphome/components/micro_wake_word/preprocessor_settings.h +37 -0
  1930. esphome/components/micro_wake_word/streaming_model.cpp +316 -0
  1931. esphome/components/micro_wake_word/streaming_model.h +156 -0
  1932. esphome/components/micronova/__init__.py +81 -0
  1933. esphome/components/micronova/button/__init__.py +42 -0
  1934. esphome/components/micronova/button/micronova_button.cpp +10 -0
  1935. esphome/components/micronova/button/micronova_button.h +24 -0
  1936. esphome/components/micronova/micronova.cpp +156 -0
  1937. esphome/components/micronova/micronova.h +101 -0
  1938. esphome/components/micronova/number/__init__.py +80 -0
  1939. esphome/components/micronova/number/micronova_number.cpp +29 -0
  1940. esphome/components/micronova/number/micronova_number.h +28 -0
  1941. esphome/components/micronova/sensor/__init__.py +148 -0
  1942. esphome/components/micronova/sensor/micronova_sensor.cpp +23 -0
  1943. esphome/components/micronova/sensor/micronova_sensor.h +33 -0
  1944. esphome/components/micronova/switch/__init__.py +54 -0
  1945. esphome/components/micronova/switch/micronova_switch.cpp +38 -0
  1946. esphome/components/micronova/switch/micronova_switch.h +33 -0
  1947. esphome/components/micronova/text_sensor/__init__.py +41 -0
  1948. esphome/components/micronova/text_sensor/micronova_text_sensor.cpp +14 -0
  1949. esphome/components/micronova/text_sensor/micronova_text_sensor.h +33 -0
  1950. esphome/components/microphone/__init__.py +219 -0
  1951. esphome/components/microphone/automation.h +44 -0
  1952. esphome/components/microphone/microphone.cpp +19 -0
  1953. esphome/components/microphone/microphone.h +45 -0
  1954. esphome/components/microphone/microphone_source.cpp +95 -0
  1955. esphome/components/microphone/microphone_source.h +80 -0
  1956. esphome/components/mics_4514/__init__.py +0 -0
  1957. esphome/components/mics_4514/mics_4514.cpp +130 -0
  1958. esphome/components/mics_4514/mics_4514.h +34 -0
  1959. esphome/components/mics_4514/sensor.py +67 -0
  1960. esphome/components/midea/__init__.py +0 -0
  1961. esphome/components/midea/ac_adapter.cpp +179 -0
  1962. esphome/components/midea/ac_adapter.h +51 -0
  1963. esphome/components/midea/ac_automations.h +70 -0
  1964. esphome/components/midea/air_conditioner.cpp +179 -0
  1965. esphome/components/midea/air_conditioner.h +69 -0
  1966. esphome/components/midea/appliance_base.h +102 -0
  1967. esphome/components/midea/climate.py +293 -0
  1968. esphome/components/midea/ir_transmitter.h +91 -0
  1969. esphome/components/midea_ac/__init__.py +0 -0
  1970. esphome/components/midea_ac/climate.py +3 -0
  1971. esphome/components/midea_ir/__init__.py +0 -0
  1972. esphome/components/midea_ir/climate.py +22 -0
  1973. esphome/components/midea_ir/midea_data.h +92 -0
  1974. esphome/components/midea_ir/midea_ir.cpp +202 -0
  1975. esphome/components/midea_ir/midea_ir.h +47 -0
  1976. esphome/components/mipi/__init__.py +492 -0
  1977. esphome/components/mipi_dsi/__init__.py +5 -0
  1978. esphome/components/mipi_dsi/display.py +233 -0
  1979. esphome/components/mipi_dsi/mipi_dsi.cpp +385 -0
  1980. esphome/components/mipi_dsi/mipi_dsi.h +120 -0
  1981. esphome/components/mipi_dsi/models/__init__.py +0 -0
  1982. esphome/components/mipi_dsi/models/guition.py +104 -0
  1983. esphome/components/mipi_dsi/models/m5stack.py +57 -0
  1984. esphome/components/mipi_dsi/models/waveshare.py +96 -0
  1985. esphome/components/mipi_rgb/__init__.py +2 -0
  1986. esphome/components/mipi_rgb/display.py +320 -0
  1987. esphome/components/mipi_rgb/mipi_rgb.cpp +382 -0
  1988. esphome/components/mipi_rgb/mipi_rgb.h +127 -0
  1989. esphome/components/mipi_rgb/models/guition.py +25 -0
  1990. esphome/components/mipi_rgb/models/lilygo.py +226 -0
  1991. esphome/components/mipi_rgb/models/rpi.py +9 -0
  1992. esphome/components/mipi_rgb/models/st7701s.py +215 -0
  1993. esphome/components/mipi_rgb/models/waveshare.py +146 -0
  1994. esphome/components/mipi_spi/__init__.py +6 -0
  1995. esphome/components/mipi_spi/display.py +448 -0
  1996. esphome/components/mipi_spi/mipi_spi.cpp +6 -0
  1997. esphome/components/mipi_spi/mipi_spi.h +625 -0
  1998. esphome/components/mipi_spi/models/__init__.py +0 -0
  1999. esphome/components/mipi_spi/models/adafruit.py +30 -0
  2000. esphome/components/mipi_spi/models/amoled.py +110 -0
  2001. esphome/components/mipi_spi/models/cyd.py +10 -0
  2002. esphome/components/mipi_spi/models/ili.py +762 -0
  2003. esphome/components/mipi_spi/models/jc.py +592 -0
  2004. esphome/components/mipi_spi/models/lanbon.py +15 -0
  2005. esphome/components/mipi_spi/models/lilygo.py +60 -0
  2006. esphome/components/mipi_spi/models/waveshare.py +164 -0
  2007. esphome/components/mitsubishi/__init__.py +0 -0
  2008. esphome/components/mitsubishi/climate.py +68 -0
  2009. esphome/components/mitsubishi/mitsubishi.cpp +398 -0
  2010. esphome/components/mitsubishi/mitsubishi.h +83 -0
  2011. esphome/components/mixer/__init__.py +0 -0
  2012. esphome/components/mixer/speaker/__init__.py +171 -0
  2013. esphome/components/mixer/speaker/automation.h +19 -0
  2014. esphome/components/mixer/speaker/mixer_speaker.cpp +624 -0
  2015. esphome/components/mixer/speaker/mixer_speaker.h +207 -0
  2016. esphome/components/mlx90393/__init__.py +1 -0
  2017. esphome/components/mlx90393/sensor.py +162 -0
  2018. esphome/components/mlx90393/sensor_mlx90393.cpp +276 -0
  2019. esphome/components/mlx90393/sensor_mlx90393.h +81 -0
  2020. esphome/components/mlx90614/__init__.py +0 -0
  2021. esphome/components/mlx90614/mlx90614.cpp +107 -0
  2022. esphome/components/mlx90614/mlx90614.h +33 -0
  2023. esphome/components/mlx90614/sensor.py +63 -0
  2024. esphome/components/mmc5603/__init__.py +1 -0
  2025. esphome/components/mmc5603/mmc5603.cpp +161 -0
  2026. esphome/components/mmc5603/mmc5603.h +43 -0
  2027. esphome/components/mmc5603/sensor.py +90 -0
  2028. esphome/components/mmc5983/__init__.py +1 -0
  2029. esphome/components/mmc5983/mmc5983.cpp +139 -0
  2030. esphome/components/mmc5983/mmc5983.h +28 -0
  2031. esphome/components/mmc5983/sensor.py +55 -0
  2032. esphome/components/modbus/__init__.py +100 -0
  2033. esphome/components/modbus/modbus.cpp +284 -0
  2034. esphome/components/modbus/modbus.h +89 -0
  2035. esphome/components/modbus/modbus_definitions.h +86 -0
  2036. esphome/components/modbus_controller/__init__.py +398 -0
  2037. esphome/components/modbus_controller/automation.h +35 -0
  2038. esphome/components/modbus_controller/binary_sensor/__init__.py +60 -0
  2039. esphome/components/modbus_controller/binary_sensor/modbus_binarysensor.cpp +38 -0
  2040. esphome/components/modbus_controller/binary_sensor/modbus_binarysensor.h +44 -0
  2041. esphome/components/modbus_controller/const.py +24 -0
  2042. esphome/components/modbus_controller/modbus_controller.cpp +830 -0
  2043. esphome/components/modbus_controller/modbus_controller.h +599 -0
  2044. esphome/components/modbus_controller/number/__init__.py +125 -0
  2045. esphome/components/modbus_controller/number/modbus_number.cpp +86 -0
  2046. esphome/components/modbus_controller/number/modbus_number.h +50 -0
  2047. esphome/components/modbus_controller/output/__init__.py +105 -0
  2048. esphome/components/modbus_controller/output/modbus_output.cpp +115 -0
  2049. esphome/components/modbus_controller/output/modbus_output.h +76 -0
  2050. esphome/components/modbus_controller/select/__init__.py +143 -0
  2051. esphome/components/modbus_controller/select/modbus_select.cpp +90 -0
  2052. esphome/components/modbus_controller/select/modbus_select.h +53 -0
  2053. esphome/components/modbus_controller/sensor/__init__.py +68 -0
  2054. esphome/components/modbus_controller/sensor/modbus_sensor.cpp +31 -0
  2055. esphome/components/modbus_controller/sensor/modbus_sensor.h +37 -0
  2056. esphome/components/modbus_controller/switch/__init__.py +81 -0
  2057. esphome/components/modbus_controller/switch/modbus_switch.cpp +108 -0
  2058. esphome/components/modbus_controller/switch/modbus_switch.h +53 -0
  2059. esphome/components/modbus_controller/text_sensor/__init__.py +84 -0
  2060. esphome/components/modbus_controller/text_sensor/modbus_textsensor.cpp +52 -0
  2061. esphome/components/modbus_controller/text_sensor/modbus_textsensor.h +43 -0
  2062. esphome/components/monochromatic/__init__.py +0 -0
  2063. esphome/components/monochromatic/light.py +24 -0
  2064. esphome/components/monochromatic/monochromatic_light_output.h +29 -0
  2065. esphome/components/mopeka_ble/__init__.py +30 -0
  2066. esphome/components/mopeka_ble/mopeka_ble.cpp +91 -0
  2067. esphome/components/mopeka_ble/mopeka_ble.h +27 -0
  2068. esphome/components/mopeka_pro_check/__init__.py +1 -0
  2069. esphome/components/mopeka_pro_check/mopeka_pro_check.cpp +159 -0
  2070. esphome/components/mopeka_pro_check/mopeka_pro_check.h +71 -0
  2071. esphome/components/mopeka_pro_check/sensor.py +174 -0
  2072. esphome/components/mopeka_std_check/__init__.py +1 -0
  2073. esphome/components/mopeka_std_check/mopeka_std_check.cpp +227 -0
  2074. esphome/components/mopeka_std_check/mopeka_std_check.h +80 -0
  2075. esphome/components/mopeka_std_check/sensor.py +138 -0
  2076. esphome/components/mpl3115a2/__init__.py +0 -0
  2077. esphome/components/mpl3115a2/mpl3115a2.cpp +98 -0
  2078. esphome/components/mpl3115a2/mpl3115a2.h +106 -0
  2079. esphome/components/mpl3115a2/sensor.py +75 -0
  2080. esphome/components/mpr121/__init__.py +128 -0
  2081. esphome/components/mpr121/binary_sensor/__init__.py +38 -0
  2082. esphome/components/mpr121/binary_sensor/mpr121_binary_sensor.cpp +20 -0
  2083. esphome/components/mpr121/binary_sensor/mpr121_binary_sensor.h +26 -0
  2084. esphome/components/mpr121/mpr121.cpp +163 -0
  2085. esphome/components/mpr121/mpr121.h +129 -0
  2086. esphome/components/mpu6050/__init__.py +0 -0
  2087. esphome/components/mpu6050/mpu6050.cpp +146 -0
  2088. esphome/components/mpu6050/mpu6050.h +39 -0
  2089. esphome/components/mpu6050/sensor.py +84 -0
  2090. esphome/components/mpu6886/__init__.py +1 -0
  2091. esphome/components/mpu6886/mpu6886.cpp +152 -0
  2092. esphome/components/mpu6886/mpu6886.h +39 -0
  2093. esphome/components/mpu6886/sensor.py +85 -0
  2094. esphome/components/mqtt/__init__.py +627 -0
  2095. esphome/components/mqtt/custom_mqtt_device.cpp +35 -0
  2096. esphome/components/mqtt/custom_mqtt_device.h +220 -0
  2097. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +130 -0
  2098. esphome/components/mqtt/mqtt_alarm_control_panel.h +39 -0
  2099. esphome/components/mqtt/mqtt_backend.h +72 -0
  2100. esphome/components/mqtt/mqtt_backend_esp32.cpp +284 -0
  2101. esphome/components/mqtt/mqtt_backend_esp32.h +280 -0
  2102. esphome/components/mqtt/mqtt_backend_esp8266.h +74 -0
  2103. esphome/components/mqtt/mqtt_backend_libretiny.h +74 -0
  2104. esphome/components/mqtt/mqtt_binary_sensor.cpp +64 -0
  2105. esphome/components/mqtt/mqtt_binary_sensor.h +43 -0
  2106. esphome/components/mqtt/mqtt_button.cpp +50 -0
  2107. esphome/components/mqtt/mqtt_button.h +40 -0
  2108. esphome/components/mqtt/mqtt_client.cpp +753 -0
  2109. esphome/components/mqtt/mqtt_client.h +468 -0
  2110. esphome/components/mqtt/mqtt_climate.cpp +467 -0
  2111. esphome/components/mqtt/mqtt_climate.h +56 -0
  2112. esphome/components/mqtt/mqtt_component.cpp +304 -0
  2113. esphome/components/mqtt/mqtt_component.h +211 -0
  2114. esphome/components/mqtt/mqtt_const.h +547 -0
  2115. esphome/components/mqtt/mqtt_cover.cpp +126 -0
  2116. esphome/components/mqtt/mqtt_cover.h +43 -0
  2117. esphome/components/mqtt/mqtt_date.cpp +69 -0
  2118. esphome/components/mqtt/mqtt_date.h +45 -0
  2119. esphome/components/mqtt/mqtt_datetime.cpp +85 -0
  2120. esphome/components/mqtt/mqtt_datetime.h +45 -0
  2121. esphome/components/mqtt/mqtt_event.cpp +61 -0
  2122. esphome/components/mqtt/mqtt_event.h +39 -0
  2123. esphome/components/mqtt/mqtt_fan.cpp +189 -0
  2124. esphome/components/mqtt/mqtt_fan.h +54 -0
  2125. esphome/components/mqtt/mqtt_light.cpp +100 -0
  2126. esphome/components/mqtt/mqtt_light.h +44 -0
  2127. esphome/components/mqtt/mqtt_lock.cpp +65 -0
  2128. esphome/components/mqtt/mqtt_lock.h +41 -0
  2129. esphome/components/mqtt/mqtt_number.cpp +87 -0
  2130. esphome/components/mqtt/mqtt_number.h +46 -0
  2131. esphome/components/mqtt/mqtt_select.cpp +61 -0
  2132. esphome/components/mqtt/mqtt_select.h +46 -0
  2133. esphome/components/mqtt/mqtt_sensor.cpp +93 -0
  2134. esphome/components/mqtt/mqtt_sensor.h +58 -0
  2135. esphome/components/mqtt/mqtt_switch.cpp +64 -0
  2136. esphome/components/mqtt/mqtt_switch.h +41 -0
  2137. esphome/components/mqtt/mqtt_text.cpp +64 -0
  2138. esphome/components/mqtt/mqtt_text.h +46 -0
  2139. esphome/components/mqtt/mqtt_text_sensor.cpp +50 -0
  2140. esphome/components/mqtt/mqtt_text_sensor.h +39 -0
  2141. esphome/components/mqtt/mqtt_time.cpp +69 -0
  2142. esphome/components/mqtt/mqtt_time.h +45 -0
  2143. esphome/components/mqtt/mqtt_update.cpp +63 -0
  2144. esphome/components/mqtt/mqtt_update.h +41 -0
  2145. esphome/components/mqtt/mqtt_valve.cpp +96 -0
  2146. esphome/components/mqtt/mqtt_valve.h +41 -0
  2147. esphome/components/mqtt_subscribe/__init__.py +3 -0
  2148. esphome/components/mqtt_subscribe/sensor/__init__.py +38 -0
  2149. esphome/components/mqtt_subscribe/sensor/mqtt_subscribe_sensor.cpp +38 -0
  2150. esphome/components/mqtt_subscribe/sensor/mqtt_subscribe_sensor.h +33 -0
  2151. esphome/components/mqtt_subscribe/text_sensor/__init__.py +36 -0
  2152. esphome/components/mqtt_subscribe/text_sensor/mqtt_subscribe_text_sensor.cpp +28 -0
  2153. esphome/components/mqtt_subscribe/text_sensor/mqtt_subscribe_text_sensor.h +32 -0
  2154. esphome/components/ms5611/__init__.py +0 -0
  2155. esphome/components/ms5611/ms5611.cpp +130 -0
  2156. esphome/components/ms5611/ms5611.h +31 -0
  2157. esphome/components/ms5611/sensor.py +58 -0
  2158. esphome/components/ms8607/__init__.py +1 -0
  2159. esphome/components/ms8607/ms8607.cpp +443 -0
  2160. esphome/components/ms8607/ms8607.h +108 -0
  2161. esphome/components/ms8607/sensor.py +83 -0
  2162. esphome/components/msa3xx/__init__.py +189 -0
  2163. esphome/components/msa3xx/binary_sensor.py +40 -0
  2164. esphome/components/msa3xx/msa3xx.cpp +419 -0
  2165. esphome/components/msa3xx/msa3xx.h +311 -0
  2166. esphome/components/msa3xx/sensor.py +42 -0
  2167. esphome/components/msa3xx/text_sensor.py +38 -0
  2168. esphome/components/my9231/__init__.py +41 -0
  2169. esphome/components/my9231/my9231.cpp +127 -0
  2170. esphome/components/my9231/my9231.h +64 -0
  2171. esphome/components/my9231/output.py +28 -0
  2172. esphome/components/nau7802/__init__.py +0 -0
  2173. esphome/components/nau7802/nau7802.cpp +320 -0
  2174. esphome/components/nau7802/nau7802.h +119 -0
  2175. esphome/components/nau7802/sensor.py +134 -0
  2176. esphome/components/neopixelbus/__init__.py +0 -0
  2177. esphome/components/neopixelbus/_methods.py +423 -0
  2178. esphome/components/neopixelbus/const.py +42 -0
  2179. esphome/components/neopixelbus/light.py +232 -0
  2180. esphome/components/neopixelbus/neopixelbus_light.h +146 -0
  2181. esphome/components/network/__init__.py +227 -0
  2182. esphome/components/network/ip_address.h +153 -0
  2183. esphome/components/network/util.cpp +114 -0
  2184. esphome/components/network/util.h +20 -0
  2185. esphome/components/nextion/__init__.py +26 -0
  2186. esphome/components/nextion/automation.h +139 -0
  2187. esphome/components/nextion/base_component.py +130 -0
  2188. esphome/components/nextion/binary_sensor/__init__.py +87 -0
  2189. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +68 -0
  2190. esphome/components/nextion/binary_sensor/nextion_binarysensor.h +42 -0
  2191. esphome/components/nextion/display.py +224 -0
  2192. esphome/components/nextion/nextion.cpp +1299 -0
  2193. esphome/components/nextion/nextion.h +1499 -0
  2194. esphome/components/nextion/nextion_base.h +65 -0
  2195. esphome/components/nextion/nextion_commands.cpp +353 -0
  2196. esphome/components/nextion/nextion_component.cpp +114 -0
  2197. esphome/components/nextion/nextion_component.h +84 -0
  2198. esphome/components/nextion/nextion_component_base.h +106 -0
  2199. esphome/components/nextion/nextion_upload.cpp +39 -0
  2200. esphome/components/nextion/nextion_upload_arduino.cpp +360 -0
  2201. esphome/components/nextion/nextion_upload_idf.cpp +340 -0
  2202. esphome/components/nextion/sensor/__init__.py +127 -0
  2203. esphome/components/nextion/sensor/nextion_sensor.cpp +116 -0
  2204. esphome/components/nextion/sensor/nextion_sensor.h +49 -0
  2205. esphome/components/nextion/switch/__init__.py +69 -0
  2206. esphome/components/nextion/switch/nextion_switch.cpp +52 -0
  2207. esphome/components/nextion/switch/nextion_switch.h +34 -0
  2208. esphome/components/nextion/text_sensor/__init__.py +65 -0
  2209. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +49 -0
  2210. esphome/components/nextion/text_sensor/nextion_textsensor.h +32 -0
  2211. esphome/components/nfc/__init__.py +13 -0
  2212. esphome/components/nfc/automation.cpp +9 -0
  2213. esphome/components/nfc/automation.h +17 -0
  2214. esphome/components/nfc/binary_sensor/__init__.py +72 -0
  2215. esphome/components/nfc/binary_sensor/nfc_binary_sensor.cpp +114 -0
  2216. esphome/components/nfc/binary_sensor/nfc_binary_sensor.h +38 -0
  2217. esphome/components/nfc/nci_core.h +144 -0
  2218. esphome/components/nfc/nci_message.cpp +166 -0
  2219. esphome/components/nfc/nci_message.h +50 -0
  2220. esphome/components/nfc/ndef_message.cpp +110 -0
  2221. esphome/components/nfc/ndef_message.h +42 -0
  2222. esphome/components/nfc/ndef_record.cpp +65 -0
  2223. esphome/components/nfc/ndef_record.h +57 -0
  2224. esphome/components/nfc/ndef_record_text.cpp +40 -0
  2225. esphome/components/nfc/ndef_record_text.h +43 -0
  2226. esphome/components/nfc/ndef_record_uri.cpp +48 -0
  2227. esphome/components/nfc/ndef_record_uri.h +78 -0
  2228. esphome/components/nfc/nfc.cpp +89 -0
  2229. esphome/components/nfc/nfc.h +84 -0
  2230. esphome/components/nfc/nfc_helpers.cpp +47 -0
  2231. esphome/components/nfc/nfc_helpers.h +17 -0
  2232. esphome/components/nfc/nfc_tag.cpp +9 -0
  2233. esphome/components/nfc/nfc_tag.h +57 -0
  2234. esphome/components/noblex/__init__.py +1 -0
  2235. esphome/components/noblex/climate.py +13 -0
  2236. esphome/components/noblex/noblex.cpp +309 -0
  2237. esphome/components/noblex/noblex.h +47 -0
  2238. esphome/components/npi19/__init__.py +0 -0
  2239. esphome/components/npi19/npi19.cpp +107 -0
  2240. esphome/components/npi19/npi19.h +30 -0
  2241. esphome/components/npi19/sensor.py +52 -0
  2242. esphome/components/nrf52/__init__.py +320 -0
  2243. esphome/components/nrf52/ble_logger.py +60 -0
  2244. esphome/components/nrf52/boards.py +42 -0
  2245. esphome/components/nrf52/const.py +19 -0
  2246. esphome/components/nrf52/dfu.cpp +51 -0
  2247. esphome/components/nrf52/dfu.h +24 -0
  2248. esphome/components/nrf52/gpio.py +82 -0
  2249. esphome/components/nrf52/uicr.cpp +121 -0
  2250. esphome/components/ntc/__init__.py +0 -0
  2251. esphome/components/ntc/ntc.cpp +31 -0
  2252. esphome/components/ntc/ntc.h +29 -0
  2253. esphome/components/ntc/sensor.py +144 -0
  2254. esphome/components/number/__init__.py +434 -0
  2255. esphome/components/number/automation.cpp +54 -0
  2256. esphome/components/number/automation.h +93 -0
  2257. esphome/components/number/number.cpp +45 -0
  2258. esphome/components/number/number.h +55 -0
  2259. esphome/components/number/number_call.cpp +127 -0
  2260. esphome/components/number/number_call.h +46 -0
  2261. esphome/components/number/number_traits.cpp +8 -0
  2262. esphome/components/number/number_traits.h +37 -0
  2263. esphome/components/one_wire/__init__.py +42 -0
  2264. esphome/components/one_wire/one_wire.cpp +48 -0
  2265. esphome/components/one_wire/one_wire.h +47 -0
  2266. esphome/components/one_wire/one_wire_bus.cpp +92 -0
  2267. esphome/components/one_wire/one_wire_bus.h +67 -0
  2268. esphome/components/online_image/__init__.py +240 -0
  2269. esphome/components/online_image/bmp_image.cpp +139 -0
  2270. esphome/components/online_image/bmp_image.h +42 -0
  2271. esphome/components/online_image/image_decoder.cpp +73 -0
  2272. esphome/components/online_image/image_decoder.h +121 -0
  2273. esphome/components/online_image/jpeg_image.cpp +94 -0
  2274. esphome/components/online_image/jpeg_image.h +34 -0
  2275. esphome/components/online_image/online_image.cpp +369 -0
  2276. esphome/components/online_image/online_image.h +245 -0
  2277. esphome/components/online_image/png_image.cpp +105 -0
  2278. esphome/components/online_image/png_image.h +40 -0
  2279. esphome/components/opentherm/__init__.py +149 -0
  2280. esphome/components/opentherm/automation.h +25 -0
  2281. esphome/components/opentherm/binary_sensor/__init__.py +31 -0
  2282. esphome/components/opentherm/const.py +12 -0
  2283. esphome/components/opentherm/generate.py +175 -0
  2284. esphome/components/opentherm/hub.cpp +423 -0
  2285. esphome/components/opentherm/hub.h +179 -0
  2286. esphome/components/opentherm/input.h +18 -0
  2287. esphome/components/opentherm/input.py +52 -0
  2288. esphome/components/opentherm/number/__init__.py +66 -0
  2289. esphome/components/opentherm/number/opentherm_number.cpp +42 -0
  2290. esphome/components/opentherm/number/opentherm_number.h +31 -0
  2291. esphome/components/opentherm/opentherm.cpp +601 -0
  2292. esphome/components/opentherm/opentherm.h +399 -0
  2293. esphome/components/opentherm/opentherm_macros.h +162 -0
  2294. esphome/components/opentherm/output/__init__.py +48 -0
  2295. esphome/components/opentherm/output/opentherm_output.cpp +18 -0
  2296. esphome/components/opentherm/output/opentherm_output.h +33 -0
  2297. esphome/components/opentherm/schema.py +891 -0
  2298. esphome/components/opentherm/sensor/__init__.py +50 -0
  2299. esphome/components/opentherm/switch/__init__.py +42 -0
  2300. esphome/components/opentherm/switch/opentherm_switch.cpp +28 -0
  2301. esphome/components/opentherm/switch/opentherm_switch.h +20 -0
  2302. esphome/components/opentherm/validate.py +36 -0
  2303. esphome/components/openthread/__init__.py +192 -0
  2304. esphome/components/openthread/const.py +12 -0
  2305. esphome/components/openthread/openthread.cpp +281 -0
  2306. esphome/components/openthread/openthread.h +96 -0
  2307. esphome/components/openthread/openthread_esp.cpp +214 -0
  2308. esphome/components/openthread_info/__init__.py +0 -0
  2309. esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
  2310. esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
  2311. esphome/components/openthread_info/text_sensor.py +105 -0
  2312. esphome/components/opt3001/__init__.py +0 -0
  2313. esphome/components/opt3001/opt3001.cpp +122 -0
  2314. esphome/components/opt3001/opt3001.h +27 -0
  2315. esphome/components/opt3001/sensor.py +31 -0
  2316. esphome/components/ota/__init__.py +139 -0
  2317. esphome/components/ota/automation.h +78 -0
  2318. esphome/components/ota/ota_backend.cpp +20 -0
  2319. esphome/components/ota/ota_backend.h +123 -0
  2320. esphome/components/ota/ota_backend_arduino_esp8266.cpp +89 -0
  2321. esphome/components/ota/ota_backend_arduino_esp8266.h +33 -0
  2322. esphome/components/ota/ota_backend_arduino_libretiny.cpp +72 -0
  2323. esphome/components/ota/ota_backend_arduino_libretiny.h +26 -0
  2324. esphome/components/ota/ota_backend_arduino_rp2040.cpp +82 -0
  2325. esphome/components/ota/ota_backend_arduino_rp2040.h +29 -0
  2326. esphome/components/ota/ota_backend_esp_idf.cpp +110 -0
  2327. esphome/components/ota/ota_backend_esp_idf.h +32 -0
  2328. esphome/components/output/__init__.py +147 -0
  2329. esphome/components/output/automation.cpp +10 -0
  2330. esphome/components/output/automation.h +68 -0
  2331. esphome/components/output/binary_output.h +73 -0
  2332. esphome/components/output/button/__init__.py +30 -0
  2333. esphome/components/output/button/output_button.cpp +21 -0
  2334. esphome/components/output/button/output_button.h +25 -0
  2335. esphome/components/output/float_output.cpp +46 -0
  2336. esphome/components/output/float_output.h +89 -0
  2337. esphome/components/output/lock/__init__.py +26 -0
  2338. esphome/components/output/lock/output_lock.cpp +22 -0
  2339. esphome/components/output/lock/output_lock.h +24 -0
  2340. esphome/components/output/switch/__init__.py +29 -0
  2341. esphome/components/output/switch/output_switch.cpp +29 -0
  2342. esphome/components/output/switch/output_switch.h +25 -0
  2343. esphome/components/packages/__init__.py +337 -0
  2344. esphome/components/packet_transport/__init__.py +199 -0
  2345. esphome/components/packet_transport/binary_sensor.py +76 -0
  2346. esphome/components/packet_transport/packet_transport.cpp +571 -0
  2347. esphome/components/packet_transport/packet_transport.h +160 -0
  2348. esphome/components/packet_transport/sensor.py +19 -0
  2349. esphome/components/partition/__init__.py +0 -0
  2350. esphome/components/partition/light.py +121 -0
  2351. esphome/components/partition/light_partition.cpp +10 -0
  2352. esphome/components/partition/light_partition.h +97 -0
  2353. esphome/components/pca6416a/__init__.py +79 -0
  2354. esphome/components/pca6416a/pca6416a.cpp +190 -0
  2355. esphome/components/pca6416a/pca6416a.h +72 -0
  2356. esphome/components/pca9554/__init__.py +87 -0
  2357. esphome/components/pca9554/pca9554.cpp +139 -0
  2358. esphome/components/pca9554/pca9554.h +79 -0
  2359. esphome/components/pca9685/__init__.py +62 -0
  2360. esphome/components/pca9685/output.py +27 -0
  2361. esphome/components/pca9685/pca9685_output.cpp +168 -0
  2362. esphome/components/pca9685/pca9685_output.h +80 -0
  2363. esphome/components/pcd8544/__init__.py +0 -0
  2364. esphome/components/pcd8544/display.py +60 -0
  2365. esphome/components/pcd8544/pcd_8544.cpp +126 -0
  2366. esphome/components/pcd8544/pcd_8544.h +78 -0
  2367. esphome/components/pcf85063/__init__.py +0 -0
  2368. esphome/components/pcf85063/pcf85063.cpp +108 -0
  2369. esphome/components/pcf85063/pcf85063.h +96 -0
  2370. esphome/components/pcf85063/time.py +59 -0
  2371. esphome/components/pcf8563/__init__.py +0 -0
  2372. esphome/components/pcf8563/pcf8563.cpp +108 -0
  2373. esphome/components/pcf8563/pcf8563.h +124 -0
  2374. esphome/components/pcf8563/time.py +62 -0
  2375. esphome/components/pcf8574/__init__.py +76 -0
  2376. esphome/components/pcf8574/pcf8574.cpp +114 -0
  2377. esphome/components/pcf8574/pcf8574.h +74 -0
  2378. esphome/components/pi4ioe5v6408/__init__.py +84 -0
  2379. esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +170 -0
  2380. esphome/components/pi4ioe5v6408/pi4ioe5v6408.h +70 -0
  2381. esphome/components/pid/__init__.py +1 -0
  2382. esphome/components/pid/climate.py +192 -0
  2383. esphome/components/pid/pid_autotuner.cpp +361 -0
  2384. esphome/components/pid/pid_autotuner.h +115 -0
  2385. esphome/components/pid/pid_climate.cpp +188 -0
  2386. esphome/components/pid/pid_climate.h +160 -0
  2387. esphome/components/pid/pid_controller.cpp +129 -0
  2388. esphome/components/pid/pid_controller.h +71 -0
  2389. esphome/components/pid/pid_simulator.h +77 -0
  2390. esphome/components/pid/sensor/__init__.py +49 -0
  2391. esphome/components/pid/sensor/pid_climate_sensor.cpp +59 -0
  2392. esphome/components/pid/sensor/pid_climate_sensor.h +37 -0
  2393. esphome/components/pipsolar/__init__.py +32 -0
  2394. esphome/components/pipsolar/binary_sensor/__init__.py +141 -0
  2395. esphome/components/pipsolar/output/__init__.py +107 -0
  2396. esphome/components/pipsolar/output/pipsolar_output.cpp +22 -0
  2397. esphome/components/pipsolar/output/pipsolar_output.h +42 -0
  2398. esphome/components/pipsolar/pipsolar.cpp +786 -0
  2399. esphome/components/pipsolar/pipsolar.h +250 -0
  2400. esphome/components/pipsolar/sensor/__init__.py +324 -0
  2401. esphome/components/pipsolar/switch/__init__.py +51 -0
  2402. esphome/components/pipsolar/switch/pipsolar_switch.cpp +24 -0
  2403. esphome/components/pipsolar/switch/pipsolar_switch.h +25 -0
  2404. esphome/components/pipsolar/text_sensor/__init__.py +41 -0
  2405. esphome/components/pm1006/__init__.py +0 -0
  2406. esphome/components/pm1006/pm1006.cpp +99 -0
  2407. esphome/components/pm1006/pm1006.h +39 -0
  2408. esphome/components/pm1006/sensor.py +67 -0
  2409. esphome/components/pm2005/__init__.py +1 -0
  2410. esphome/components/pm2005/pm2005.cpp +121 -0
  2411. esphome/components/pm2005/pm2005.h +46 -0
  2412. esphome/components/pm2005/sensor.py +86 -0
  2413. esphome/components/pmsa003i/__init__.py +0 -0
  2414. esphome/components/pmsa003i/pmsa003i.cpp +135 -0
  2415. esphome/components/pmsa003i/pmsa003i.h +67 -0
  2416. esphome/components/pmsa003i/sensor.py +127 -0
  2417. esphome/components/pmsx003/__init__.py +0 -0
  2418. esphome/components/pmsx003/pmsx003.cpp +318 -0
  2419. esphome/components/pmsx003/pmsx003.h +121 -0
  2420. esphome/components/pmsx003/sensor.py +281 -0
  2421. esphome/components/pmwcs3/__init__.py +1 -0
  2422. esphome/components/pmwcs3/pmwcs3.cpp +112 -0
  2423. esphome/components/pmwcs3/pmwcs3.h +69 -0
  2424. esphome/components/pmwcs3/sensor.py +139 -0
  2425. esphome/components/pn532/__init__.py +96 -0
  2426. esphome/components/pn532/binary_sensor.py +48 -0
  2427. esphome/components/pn532/pn532.cpp +463 -0
  2428. esphome/components/pn532/pn532.h +150 -0
  2429. esphome/components/pn532/pn532_mifare_classic.cpp +262 -0
  2430. esphome/components/pn532/pn532_mifare_ultralight.cpp +192 -0
  2431. esphome/components/pn532_i2c/__init__.py +26 -0
  2432. esphome/components/pn532_i2c/pn532_i2c.cpp +129 -0
  2433. esphome/components/pn532_i2c/pn532_i2c.h +25 -0
  2434. esphome/components/pn532_spi/__init__.py +26 -0
  2435. esphome/components/pn532_spi/pn532_spi.cpp +136 -0
  2436. esphome/components/pn532_spi/pn532_spi.h +28 -0
  2437. esphome/components/pn7150/__init__.py +215 -0
  2438. esphome/components/pn7150/automation.h +82 -0
  2439. esphome/components/pn7150/pn7150.cpp +1143 -0
  2440. esphome/components/pn7150/pn7150.h +295 -0
  2441. esphome/components/pn7150/pn7150_mifare_classic.cpp +322 -0
  2442. esphome/components/pn7150/pn7150_mifare_ultralight.cpp +186 -0
  2443. esphome/components/pn7150_i2c/__init__.py +25 -0
  2444. esphome/components/pn7150_i2c/pn7150_i2c.cpp +49 -0
  2445. esphome/components/pn7150_i2c/pn7150_i2c.h +22 -0
  2446. esphome/components/pn7160/__init__.py +227 -0
  2447. esphome/components/pn7160/automation.h +82 -0
  2448. esphome/components/pn7160/pn7160.cpp +1167 -0
  2449. esphome/components/pn7160/pn7160.h +314 -0
  2450. esphome/components/pn7160/pn7160_mifare_classic.cpp +322 -0
  2451. esphome/components/pn7160/pn7160_mifare_ultralight.cpp +186 -0
  2452. esphome/components/pn7160_i2c/__init__.py +25 -0
  2453. esphome/components/pn7160_i2c/pn7160_i2c.cpp +49 -0
  2454. esphome/components/pn7160_i2c/pn7160_i2c.h +22 -0
  2455. esphome/components/pn7160_spi/__init__.py +26 -0
  2456. esphome/components/pn7160_spi/pn7160_spi.cpp +54 -0
  2457. esphome/components/pn7160_spi/pn7160_spi.h +30 -0
  2458. esphome/components/power_supply/__init__.py +42 -0
  2459. esphome/components/power_supply/power_supply.cpp +58 -0
  2460. esphome/components/power_supply/power_supply.h +67 -0
  2461. esphome/components/preferences/__init__.py +22 -0
  2462. esphome/components/preferences/syncer.h +32 -0
  2463. esphome/components/prometheus/__init__.py +52 -0
  2464. esphome/components/prometheus/prometheus_handler.cpp +1093 -0
  2465. esphome/components/prometheus/prometheus_handler.h +221 -0
  2466. esphome/components/psram/__init__.py +210 -0
  2467. esphome/components/psram/psram.cpp +31 -0
  2468. esphome/components/psram/psram.h +17 -0
  2469. esphome/components/pulse_counter/__init__.py +0 -0
  2470. esphome/components/pulse_counter/automation.h +24 -0
  2471. esphome/components/pulse_counter/pulse_counter_sensor.cpp +201 -0
  2472. esphome/components/pulse_counter/pulse_counter_sensor.h +90 -0
  2473. esphome/components/pulse_counter/sensor.py +159 -0
  2474. esphome/components/pulse_meter/__init__.py +0 -0
  2475. esphome/components/pulse_meter/automation.h +24 -0
  2476. esphome/components/pulse_meter/pulse_meter_sensor.cpp +189 -0
  2477. esphome/components/pulse_meter/pulse_meter_sensor.h +83 -0
  2478. esphome/components/pulse_meter/sensor.py +114 -0
  2479. esphome/components/pulse_width/__init__.py +0 -0
  2480. esphome/components/pulse_width/pulse_width.cpp +31 -0
  2481. esphome/components/pulse_width/pulse_width.h +43 -0
  2482. esphome/components/pulse_width/sensor.py +35 -0
  2483. esphome/components/pvvx_mithermometer/__init__.py +0 -0
  2484. esphome/components/pvvx_mithermometer/display/__init__.py +55 -0
  2485. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +189 -0
  2486. esphome/components/pvvx_mithermometer/display/pvvx_display.h +136 -0
  2487. esphome/components/pvvx_mithermometer/pvvx_mithermometer.cpp +141 -0
  2488. esphome/components/pvvx_mithermometer/pvvx_mithermometer.h +50 -0
  2489. esphome/components/pvvx_mithermometer/sensor.py +100 -0
  2490. esphome/components/pylontech/__init__.py +47 -0
  2491. esphome/components/pylontech/pylontech.cpp +103 -0
  2492. esphome/components/pylontech/pylontech.h +53 -0
  2493. esphome/components/pylontech/sensor/__init__.py +92 -0
  2494. esphome/components/pylontech/sensor/pylontech_sensor.cpp +62 -0
  2495. esphome/components/pylontech/sensor/pylontech_sensor.h +32 -0
  2496. esphome/components/pylontech/text_sensor/__init__.py +36 -0
  2497. esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +42 -0
  2498. esphome/components/pylontech/text_sensor/pylontech_text_sensor.h +26 -0
  2499. esphome/components/pzem004t/__init__.py +0 -0
  2500. esphome/components/pzem004t/pzem004t.cpp +127 -0
  2501. esphome/components/pzem004t/pzem004t.h +46 -0
  2502. esphome/components/pzem004t/sensor.py +82 -0
  2503. esphome/components/pzemac/__init__.py +0 -0
  2504. esphome/components/pzemac/pzemac.cpp +87 -0
  2505. esphome/components/pzemac/pzemac.h +53 -0
  2506. esphome/components/pzemac/sensor.py +125 -0
  2507. esphome/components/pzemdc/__init__.py +0 -0
  2508. esphome/components/pzemdc/pzemdc.cpp +75 -0
  2509. esphome/components/pzemdc/pzemdc.h +46 -0
  2510. esphome/components/pzemdc/sensor.py +101 -0
  2511. esphome/components/qmc5883l/__init__.py +0 -0
  2512. esphome/components/qmc5883l/qmc5883l.cpp +189 -0
  2513. esphome/components/qmc5883l/qmc5883l.h +66 -0
  2514. esphome/components/qmc5883l/sensor.py +164 -0
  2515. esphome/components/qmp6988/__init__.py +1 -0
  2516. esphome/components/qmp6988/qmp6988.cpp +350 -0
  2517. esphome/components/qmp6988/qmp6988.h +110 -0
  2518. esphome/components/qmp6988/sensor.py +101 -0
  2519. esphome/components/qr_code/__init__.py +44 -0
  2520. esphome/components/qr_code/qr_code.cpp +69 -0
  2521. esphome/components/qr_code/qr_code.h +36 -0
  2522. esphome/components/qspi_amoled/display.py +3 -0
  2523. esphome/components/qspi_dbi/__init__.py +3 -0
  2524. esphome/components/qspi_dbi/display.py +212 -0
  2525. esphome/components/qspi_dbi/models.py +309 -0
  2526. esphome/components/qspi_dbi/qspi_dbi.cpp +221 -0
  2527. esphome/components/qspi_dbi/qspi_dbi.h +173 -0
  2528. esphome/components/qwiic_pir/__init__.py +0 -0
  2529. esphome/components/qwiic_pir/binary_sensor.py +63 -0
  2530. esphome/components/qwiic_pir/qwiic_pir.cpp +133 -0
  2531. esphome/components/qwiic_pir/qwiic_pir.h +69 -0
  2532. esphome/components/radon_eye_ble/__init__.py +23 -0
  2533. esphome/components/radon_eye_ble/radon_eye_listener.cpp +32 -0
  2534. esphome/components/radon_eye_ble/radon_eye_listener.h +19 -0
  2535. esphome/components/radon_eye_rd200/__init__.py +1 -0
  2536. esphome/components/radon_eye_rd200/radon_eye_rd200.cpp +179 -0
  2537. esphome/components/radon_eye_rd200/radon_eye_rd200.h +59 -0
  2538. esphome/components/radon_eye_rd200/sensor.py +54 -0
  2539. esphome/components/rc522/__init__.py +56 -0
  2540. esphome/components/rc522/binary_sensor.py +48 -0
  2541. esphome/components/rc522/rc522.cpp +483 -0
  2542. esphome/components/rc522/rc522.h +279 -0
  2543. esphome/components/rc522_i2c/__init__.py +26 -0
  2544. esphome/components/rc522_i2c/rc522_i2c.cpp +70 -0
  2545. esphome/components/rc522_i2c/rc522_i2c.h +42 -0
  2546. esphome/components/rc522_spi/__init__.py +30 -0
  2547. esphome/components/rc522_spi/binary_sensor.py +9 -0
  2548. esphome/components/rc522_spi/rc522_spi.cpp +139 -0
  2549. esphome/components/rc522_spi/rc522_spi.h +54 -0
  2550. esphome/components/rdm6300/__init__.py +41 -0
  2551. esphome/components/rdm6300/binary_sensor.py +28 -0
  2552. esphome/components/rdm6300/rdm6300.cpp +69 -0
  2553. esphome/components/rdm6300/rdm6300.h +56 -0
  2554. esphome/components/remote_base/__init__.py +2199 -0
  2555. esphome/components/remote_base/abbwelcome_protocol.cpp +123 -0
  2556. esphome/components/remote_base/abbwelcome_protocol.h +256 -0
  2557. esphome/components/remote_base/aeha_protocol.cpp +102 -0
  2558. esphome/components/remote_base/aeha_protocol.h +46 -0
  2559. esphome/components/remote_base/beo4_protocol.cpp +153 -0
  2560. esphome/components/remote_base/beo4_protocol.h +43 -0
  2561. esphome/components/remote_base/byronsx_protocol.cpp +139 -0
  2562. esphome/components/remote_base/byronsx_protocol.h +46 -0
  2563. esphome/components/remote_base/canalsat_protocol.cpp +108 -0
  2564. esphome/components/remote_base/canalsat_protocol.h +78 -0
  2565. esphome/components/remote_base/coolix_protocol.cpp +113 -0
  2566. esphome/components/remote_base/coolix_protocol.h +41 -0
  2567. esphome/components/remote_base/dish_protocol.cpp +94 -0
  2568. esphome/components/remote_base/dish_protocol.h +38 -0
  2569. esphome/components/remote_base/dooya_protocol.cpp +120 -0
  2570. esphome/components/remote_base/dooya_protocol.h +49 -0
  2571. esphome/components/remote_base/drayton_protocol.cpp +240 -0
  2572. esphome/components/remote_base/drayton_protocol.h +46 -0
  2573. esphome/components/remote_base/dyson_protocol.cpp +71 -0
  2574. esphome/components/remote_base/dyson_protocol.h +46 -0
  2575. esphome/components/remote_base/gobox_protocol.cpp +131 -0
  2576. esphome/components/remote_base/gobox_protocol.h +54 -0
  2577. esphome/components/remote_base/haier_protocol.cpp +84 -0
  2578. esphome/components/remote_base/haier_protocol.h +39 -0
  2579. esphome/components/remote_base/jvc_protocol.cpp +52 -0
  2580. esphome/components/remote_base/jvc_protocol.h +37 -0
  2581. esphome/components/remote_base/keeloq_protocol.cpp +194 -0
  2582. esphome/components/remote_base/keeloq_protocol.h +53 -0
  2583. esphome/components/remote_base/lg_protocol.cpp +58 -0
  2584. esphome/components/remote_base/lg_protocol.h +41 -0
  2585. esphome/components/remote_base/magiquest_protocol.cpp +83 -0
  2586. esphome/components/remote_base/magiquest_protocol.h +52 -0
  2587. esphome/components/remote_base/midea_protocol.cpp +76 -0
  2588. esphome/components/remote_base/midea_protocol.h +83 -0
  2589. esphome/components/remote_base/mirage_protocol.cpp +84 -0
  2590. esphome/components/remote_base/mirage_protocol.h +39 -0
  2591. esphome/components/remote_base/nec_protocol.cpp +102 -0
  2592. esphome/components/remote_base/nec_protocol.h +41 -0
  2593. esphome/components/remote_base/nexa_protocol.cpp +240 -0
  2594. esphome/components/remote_base/nexa_protocol.h +54 -0
  2595. esphome/components/remote_base/panasonic_protocol.cpp +74 -0
  2596. esphome/components/remote_base/panasonic_protocol.h +41 -0
  2597. esphome/components/remote_base/pioneer_protocol.cpp +156 -0
  2598. esphome/components/remote_base/pioneer_protocol.h +38 -0
  2599. esphome/components/remote_base/pronto_protocol.cpp +244 -0
  2600. esphome/components/remote_base/pronto_protocol.h +55 -0
  2601. esphome/components/remote_base/raw_protocol.cpp +47 -0
  2602. esphome/components/remote_base/raw_protocol.h +86 -0
  2603. esphome/components/remote_base/rc5_protocol.cpp +90 -0
  2604. esphome/components/remote_base/rc5_protocol.h +39 -0
  2605. esphome/components/remote_base/rc6_protocol.cpp +181 -0
  2606. esphome/components/remote_base/rc6_protocol.h +46 -0
  2607. esphome/components/remote_base/rc_switch_protocol.cpp +271 -0
  2608. esphome/components/remote_base/rc_switch_protocol.h +221 -0
  2609. esphome/components/remote_base/remote_base.cpp +171 -0
  2610. esphome/components/remote_base/remote_base.h +308 -0
  2611. esphome/components/remote_base/roomba_protocol.cpp +56 -0
  2612. esphome/components/remote_base/roomba_protocol.h +35 -0
  2613. esphome/components/remote_base/samsung36_protocol.cpp +103 -0
  2614. esphome/components/remote_base/samsung36_protocol.h +41 -0
  2615. esphome/components/remote_base/samsung_protocol.cpp +65 -0
  2616. esphome/components/remote_base/samsung_protocol.h +39 -0
  2617. esphome/components/remote_base/sony_protocol.cpp +69 -0
  2618. esphome/components/remote_base/sony_protocol.h +41 -0
  2619. esphome/components/remote_base/symphony_protocol.cpp +120 -0
  2620. esphome/components/remote_base/symphony_protocol.h +44 -0
  2621. esphome/components/remote_base/toshiba_ac_protocol.cpp +115 -0
  2622. esphome/components/remote_base/toshiba_ac_protocol.h +39 -0
  2623. esphome/components/remote_base/toto_protocol.cpp +100 -0
  2624. esphome/components/remote_base/toto_protocol.h +45 -0
  2625. esphome/components/remote_receiver/__init__.py +220 -0
  2626. esphome/components/remote_receiver/binary_sensor.py +10 -0
  2627. esphome/components/remote_receiver/remote_receiver.cpp +142 -0
  2628. esphome/components/remote_receiver/remote_receiver.h +106 -0
  2629. esphome/components/remote_receiver/remote_receiver_esp32.cpp +252 -0
  2630. esphome/components/remote_transmitter/__init__.py +162 -0
  2631. esphome/components/remote_transmitter/automation.h +18 -0
  2632. esphome/components/remote_transmitter/remote_transmitter.cpp +114 -0
  2633. esphome/components/remote_transmitter/remote_transmitter.h +104 -0
  2634. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +364 -0
  2635. esphome/components/resampler/__init__.py +0 -0
  2636. esphome/components/resampler/speaker/__init__.py +102 -0
  2637. esphome/components/resampler/speaker/resampler_speaker.cpp +320 -0
  2638. esphome/components/resampler/speaker/resampler_speaker.h +109 -0
  2639. esphome/components/resistance/__init__.py +0 -0
  2640. esphome/components/resistance/resistance_sensor.cpp +47 -0
  2641. esphome/components/resistance/resistance_sensor.h +37 -0
  2642. esphome/components/resistance/sensor.py +52 -0
  2643. esphome/components/restart/__init__.py +1 -0
  2644. esphome/components/restart/button/__init__.py +25 -0
  2645. esphome/components/restart/button/restart_button.cpp +20 -0
  2646. esphome/components/restart/button/restart_button.h +18 -0
  2647. esphome/components/restart/switch/__init__.py +19 -0
  2648. esphome/components/restart/switch/restart_switch.cpp +25 -0
  2649. esphome/components/restart/switch/restart_switch.h +18 -0
  2650. esphome/components/rf_bridge/__init__.py +238 -0
  2651. esphome/components/rf_bridge/rf_bridge.cpp +236 -0
  2652. esphome/components/rf_bridge/rf_bridge.h +196 -0
  2653. esphome/components/rgb/__init__.py +0 -0
  2654. esphome/components/rgb/light.py +28 -0
  2655. esphome/components/rgb/rgb_light_output.h +36 -0
  2656. esphome/components/rgbct/__init__.py +0 -0
  2657. esphome/components/rgbct/light.py +59 -0
  2658. esphome/components/rgbct/rgbct_light_output.h +59 -0
  2659. esphome/components/rgbw/__init__.py +0 -0
  2660. esphome/components/rgbw/light.py +40 -0
  2661. esphome/components/rgbw/rgbw_light_output.h +44 -0
  2662. esphome/components/rgbww/__init__.py +0 -0
  2663. esphome/components/rgbww/light.py +69 -0
  2664. esphome/components/rgbww/rgbww_light_output.h +55 -0
  2665. esphome/components/rotary_encoder/__init__.py +0 -0
  2666. esphome/components/rotary_encoder/rotary_encoder.cpp +247 -0
  2667. esphome/components/rotary_encoder/rotary_encoder.h +138 -0
  2668. esphome/components/rotary_encoder/sensor.py +148 -0
  2669. esphome/components/rp2040/__init__.py +255 -0
  2670. esphome/components/rp2040/boards.py +28 -0
  2671. esphome/components/rp2040/build_pio.py.script +47 -0
  2672. esphome/components/rp2040/const.py +7 -0
  2673. esphome/components/rp2040/core.cpp +40 -0
  2674. esphome/components/rp2040/core.h +14 -0
  2675. esphome/components/rp2040/gpio.cpp +120 -0
  2676. esphome/components/rp2040/gpio.h +39 -0
  2677. esphome/components/rp2040/gpio.py +102 -0
  2678. esphome/components/rp2040/helpers.cpp +59 -0
  2679. esphome/components/rp2040/post_build.py.script +23 -0
  2680. esphome/components/rp2040/preferences.cpp +160 -0
  2681. esphome/components/rp2040/preferences.h +14 -0
  2682. esphome/components/rp2040_pio/__init__.py +39 -0
  2683. esphome/components/rp2040_pio_led_strip/__init__.py +1 -0
  2684. esphome/components/rp2040_pio_led_strip/led_strip.cpp +216 -0
  2685. esphome/components/rp2040_pio_led_strip/led_strip.h +133 -0
  2686. esphome/components/rp2040_pio_led_strip/light.py +280 -0
  2687. esphome/components/rp2040_pwm/__init__.py +0 -0
  2688. esphome/components/rp2040_pwm/output.py +51 -0
  2689. esphome/components/rp2040_pwm/rp2040_pwm.cpp +64 -0
  2690. esphome/components/rp2040_pwm/rp2040_pwm.h +59 -0
  2691. esphome/components/rpi_dpi_rgb/__init__.py +1 -0
  2692. esphome/components/rpi_dpi_rgb/display.py +198 -0
  2693. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +159 -0
  2694. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.h +97 -0
  2695. esphome/components/rtl87xx/__init__.py +61 -0
  2696. esphome/components/rtl87xx/boards.py +1404 -0
  2697. esphome/components/rtttl/__init__.py +156 -0
  2698. esphome/components/rtttl/rtttl.cpp +412 -0
  2699. esphome/components/rtttl/rtttl.h +149 -0
  2700. esphome/components/runtime_stats/__init__.py +34 -0
  2701. esphome/components/runtime_stats/runtime_stats.cpp +89 -0
  2702. esphome/components/runtime_stats/runtime_stats.h +126 -0
  2703. esphome/components/ruuvi_ble/__init__.py +22 -0
  2704. esphome/components/ruuvi_ble/ruuvi_ble.cpp +144 -0
  2705. esphome/components/ruuvi_ble/ruuvi_ble.h +37 -0
  2706. esphome/components/ruuvitag/__init__.py +0 -0
  2707. esphome/components/ruuvitag/ruuvitag.cpp +29 -0
  2708. esphome/components/ruuvitag/ruuvitag.h +83 -0
  2709. esphome/components/ruuvitag/sensor.py +163 -0
  2710. esphome/components/rx8130/__init__.py +0 -0
  2711. esphome/components/rx8130/rx8130.cpp +128 -0
  2712. esphome/components/rx8130/rx8130.h +35 -0
  2713. esphome/components/rx8130/time.py +56 -0
  2714. esphome/components/safe_mode/__init__.py +74 -0
  2715. esphome/components/safe_mode/automation.h +17 -0
  2716. esphome/components/safe_mode/button/__init__.py +34 -0
  2717. esphome/components/safe_mode/button/safe_mode_button.cpp +27 -0
  2718. esphome/components/safe_mode/button/safe_mode_button.h +21 -0
  2719. esphome/components/safe_mode/safe_mode.cpp +136 -0
  2720. esphome/components/safe_mode/safe_mode.h +53 -0
  2721. esphome/components/safe_mode/switch/__init__.py +29 -0
  2722. esphome/components/safe_mode/switch/safe_mode_switch.cpp +32 -0
  2723. esphome/components/safe_mode/switch/safe_mode_switch.h +21 -0
  2724. esphome/components/scd30/__init__.py +0 -0
  2725. esphome/components/scd30/automation.h +23 -0
  2726. esphome/components/scd30/scd30.cpp +234 -0
  2727. esphome/components/scd30/scd30.h +52 -0
  2728. esphome/components/scd30/sensor.py +139 -0
  2729. esphome/components/scd4x/__init__.py +0 -0
  2730. esphome/components/scd4x/automation.h +28 -0
  2731. esphome/components/scd4x/scd4x.cpp +327 -0
  2732. esphome/components/scd4x/scd4x.h +63 -0
  2733. esphome/components/scd4x/sensor.py +166 -0
  2734. esphome/components/script/__init__.py +239 -0
  2735. esphome/components/script/script.cpp +20 -0
  2736. esphome/components/script/script.h +342 -0
  2737. esphome/components/sdl/__init__.py +1 -0
  2738. esphome/components/sdl/binary_sensor.py +285 -0
  2739. esphome/components/sdl/display.py +114 -0
  2740. esphome/components/sdl/sdl_esphome.cpp +130 -0
  2741. esphome/components/sdl/sdl_esphome.h +72 -0
  2742. esphome/components/sdl/touchscreen/__init__.py +22 -0
  2743. esphome/components/sdl/touchscreen/sdl_touchscreen.h +26 -0
  2744. esphome/components/sdm_meter/__init__.py +0 -0
  2745. esphome/components/sdm_meter/sdm_meter.cpp +114 -0
  2746. esphome/components/sdm_meter/sdm_meter.h +83 -0
  2747. esphome/components/sdm_meter/sdm_meter_registers.h +114 -0
  2748. esphome/components/sdm_meter/sensor.py +176 -0
  2749. esphome/components/sdp3x/__init__.py +0 -0
  2750. esphome/components/sdp3x/sdp3x.cpp +120 -0
  2751. esphome/components/sdp3x/sdp3x.h +30 -0
  2752. esphome/components/sdp3x/sensor.py +52 -0
  2753. esphome/components/sds011/__init__.py +0 -0
  2754. esphome/components/sds011/sds011.cpp +190 -0
  2755. esphome/components/sds011/sds011.h +52 -0
  2756. esphome/components/sds011/sensor.py +81 -0
  2757. esphome/components/seeed_mr24hpc1/__init__.py +51 -0
  2758. esphome/components/seeed_mr24hpc1/binary_sensor.py +20 -0
  2759. esphome/components/seeed_mr24hpc1/button/__init__.py +43 -0
  2760. esphome/components/seeed_mr24hpc1/button/custom_mode_end_button.cpp +9 -0
  2761. esphome/components/seeed_mr24hpc1/button/custom_mode_end_button.h +18 -0
  2762. esphome/components/seeed_mr24hpc1/button/restart_button.cpp +9 -0
  2763. esphome/components/seeed_mr24hpc1/button/restart_button.h +18 -0
  2764. esphome/components/seeed_mr24hpc1/number/__init__.py +130 -0
  2765. esphome/components/seeed_mr24hpc1/number/custom_mode_number.cpp +12 -0
  2766. esphome/components/seeed_mr24hpc1/number/custom_mode_number.h +18 -0
  2767. esphome/components/seeed_mr24hpc1/number/custom_unman_time_number.cpp +9 -0
  2768. esphome/components/seeed_mr24hpc1/number/custom_unman_time_number.h +18 -0
  2769. esphome/components/seeed_mr24hpc1/number/existence_threshold_number.cpp +9 -0
  2770. esphome/components/seeed_mr24hpc1/number/existence_threshold_number.h +18 -0
  2771. esphome/components/seeed_mr24hpc1/number/motion_threshold_number.cpp +9 -0
  2772. esphome/components/seeed_mr24hpc1/number/motion_threshold_number.h +18 -0
  2773. esphome/components/seeed_mr24hpc1/number/motion_trigger_time_number.cpp +9 -0
  2774. esphome/components/seeed_mr24hpc1/number/motion_trigger_time_number.h +18 -0
  2775. esphome/components/seeed_mr24hpc1/number/motiontorest_time_number.cpp +9 -0
  2776. esphome/components/seeed_mr24hpc1/number/motiontorest_time_number.h +18 -0
  2777. esphome/components/seeed_mr24hpc1/number/sensitivity_number.cpp +9 -0
  2778. esphome/components/seeed_mr24hpc1/number/sensitivity_number.h +18 -0
  2779. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +889 -0
  2780. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.h +217 -0
  2781. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1_constants.h +173 -0
  2782. esphome/components/seeed_mr24hpc1/select/__init__.py +102 -0
  2783. esphome/components/seeed_mr24hpc1/select/existence_boundary_select.cpp +12 -0
  2784. esphome/components/seeed_mr24hpc1/select/existence_boundary_select.h +18 -0
  2785. esphome/components/seeed_mr24hpc1/select/motion_boundary_select.cpp +12 -0
  2786. esphome/components/seeed_mr24hpc1/select/motion_boundary_select.h +18 -0
  2787. esphome/components/seeed_mr24hpc1/select/scene_mode_select.cpp +12 -0
  2788. esphome/components/seeed_mr24hpc1/select/scene_mode_select.h +18 -0
  2789. esphome/components/seeed_mr24hpc1/select/unman_time_select.cpp +12 -0
  2790. esphome/components/seeed_mr24hpc1/select/unman_time_select.h +18 -0
  2791. esphome/components/seeed_mr24hpc1/sensor.py +83 -0
  2792. esphome/components/seeed_mr24hpc1/switch/__init__.py +30 -0
  2793. esphome/components/seeed_mr24hpc1/switch/underlyFuc_switch.cpp +12 -0
  2794. esphome/components/seeed_mr24hpc1/switch/underlyFuc_switch.h +18 -0
  2795. esphome/components/seeed_mr24hpc1/text_sensor.py +75 -0
  2796. esphome/components/seeed_mr60bha2/__init__.py +41 -0
  2797. esphome/components/seeed_mr60bha2/binary_sensor.py +23 -0
  2798. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +198 -0
  2799. esphome/components/seeed_mr60bha2/seeed_mr60bha2.h +50 -0
  2800. esphome/components/seeed_mr60bha2/sensor.py +65 -0
  2801. esphome/components/seeed_mr60fda2/__init__.py +41 -0
  2802. esphome/components/seeed_mr60fda2/binary_sensor.py +33 -0
  2803. esphome/components/seeed_mr60fda2/button/__init__.py +45 -0
  2804. esphome/components/seeed_mr60fda2/button/get_radar_parameters_button.cpp +9 -0
  2805. esphome/components/seeed_mr60fda2/button/get_radar_parameters_button.h +18 -0
  2806. esphome/components/seeed_mr60fda2/button/reset_radar_button.cpp +9 -0
  2807. esphome/components/seeed_mr60fda2/button/reset_radar_button.h +18 -0
  2808. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +366 -0
  2809. esphome/components/seeed_mr60fda2/seeed_mr60fda2.h +101 -0
  2810. esphome/components/seeed_mr60fda2/select/__init__.py +58 -0
  2811. esphome/components/seeed_mr60fda2/select/height_threshold_select.cpp +12 -0
  2812. esphome/components/seeed_mr60fda2/select/height_threshold_select.h +18 -0
  2813. esphome/components/seeed_mr60fda2/select/install_height_select.cpp +12 -0
  2814. esphome/components/seeed_mr60fda2/select/install_height_select.h +18 -0
  2815. esphome/components/seeed_mr60fda2/select/sensitivity_select.cpp +12 -0
  2816. esphome/components/seeed_mr60fda2/select/sensitivity_select.h +18 -0
  2817. esphome/components/selec_meter/__init__.py +0 -0
  2818. esphome/components/selec_meter/selec_meter.cpp +111 -0
  2819. esphome/components/selec_meter/selec_meter.h +47 -0
  2820. esphome/components/selec_meter/selec_meter_registers.h +32 -0
  2821. esphome/components/selec_meter/sensor.py +165 -0
  2822. esphome/components/select/__init__.py +241 -0
  2823. esphome/components/select/automation.h +65 -0
  2824. esphome/components/select/select.cpp +86 -0
  2825. esphome/components/select/select.h +117 -0
  2826. esphome/components/select/select_call.cpp +123 -0
  2827. esphome/components/select/select_call.h +49 -0
  2828. esphome/components/select/select_traits.cpp +16 -0
  2829. esphome/components/select/select_traits.h +18 -0
  2830. esphome/components/sen0321/__init__.py +1 -0
  2831. esphome/components/sen0321/sen0321.cpp +35 -0
  2832. esphome/components/sen0321/sen0321.h +35 -0
  2833. esphome/components/sen0321/sensor.py +34 -0
  2834. esphome/components/sen21231/__init__.py +0 -0
  2835. esphome/components/sen21231/sen21231.cpp +32 -0
  2836. esphome/components/sen21231/sen21231.h +77 -0
  2837. esphome/components/sen21231/sensor.py +24 -0
  2838. esphome/components/sen5x/__init__.py +0 -0
  2839. esphome/components/sen5x/automation.h +21 -0
  2840. esphome/components/sen5x/sen5x.cpp +447 -0
  2841. esphome/components/sen5x/sen5x.h +139 -0
  2842. esphome/components/sen5x/sensor.py +273 -0
  2843. esphome/components/senseair/__init__.py +0 -0
  2844. esphome/components/senseair/senseair.cpp +154 -0
  2845. esphome/components/senseair/senseair.h +92 -0
  2846. esphome/components/senseair/sensor.py +93 -0
  2847. esphome/components/sensirion_common/__init__.py +8 -0
  2848. esphome/components/sensirion_common/i2c_sensirion.cpp +101 -0
  2849. esphome/components/sensirion_common/i2c_sensirion.h +142 -0
  2850. esphome/components/sensor/__init__.py +1199 -0
  2851. esphome/components/sensor/automation.cpp +10 -0
  2852. esphome/components/sensor/automation.h +111 -0
  2853. esphome/components/sensor/filter.cpp +578 -0
  2854. esphome/components/sensor/filter.h +636 -0
  2855. esphome/components/sensor/sensor.cpp +144 -0
  2856. esphome/components/sensor/sensor.h +147 -0
  2857. esphome/components/servo/__init__.py +85 -0
  2858. esphome/components/servo/servo.cpp +110 -0
  2859. esphome/components/servo/servo.h +77 -0
  2860. esphome/components/sfa30/__init__.py +1 -0
  2861. esphome/components/sfa30/sensor.py +77 -0
  2862. esphome/components/sfa30/sfa30.cpp +95 -0
  2863. esphome/components/sfa30/sfa30.h +33 -0
  2864. esphome/components/sgp30/__init__.py +0 -0
  2865. esphome/components/sgp30/sensor.py +116 -0
  2866. esphome/components/sgp30/sgp30.cpp +304 -0
  2867. esphome/components/sgp30/sgp30.h +71 -0
  2868. esphome/components/sgp40/__init__.py +0 -0
  2869. esphome/components/sgp40/sensor.py +8 -0
  2870. esphome/components/sgp4x/__init__.py +0 -0
  2871. esphome/components/sgp4x/sensor.py +145 -0
  2872. esphome/components/sgp4x/sgp4x.cpp +296 -0
  2873. esphome/components/sgp4x/sgp4x.h +143 -0
  2874. esphome/components/sha256/__init__.py +22 -0
  2875. esphome/components/sha256/sha256.cpp +116 -0
  2876. esphome/components/sha256/sha256.h +60 -0
  2877. esphome/components/shelly_dimmer/__init__.py +1 -0
  2878. esphome/components/shelly_dimmer/dev_table.h +159 -0
  2879. esphome/components/shelly_dimmer/light.py +221 -0
  2880. esphome/components/shelly_dimmer/shelly_dimmer.cpp +529 -0
  2881. esphome/components/shelly_dimmer/shelly_dimmer.h +123 -0
  2882. esphome/components/shelly_dimmer/stm32flash.cpp +1065 -0
  2883. esphome/components/shelly_dimmer/stm32flash.h +131 -0
  2884. esphome/components/sht3xd/__init__.py +0 -0
  2885. esphome/components/sht3xd/sensor.py +64 -0
  2886. esphome/components/sht3xd/sht3xd.cpp +105 -0
  2887. esphome/components/sht3xd/sht3xd.h +39 -0
  2888. esphome/components/sht4x/__init__.py +0 -0
  2889. esphome/components/sht4x/sensor.py +103 -0
  2890. esphome/components/sht4x/sht4x.cpp +126 -0
  2891. esphome/components/sht4x/sht4x.h +48 -0
  2892. esphome/components/shtcx/__init__.py +0 -0
  2893. esphome/components/shtcx/sensor.py +59 -0
  2894. esphome/components/shtcx/shtcx.cpp +121 -0
  2895. esphome/components/shtcx/shtcx.h +34 -0
  2896. esphome/components/shutdown/__init__.py +1 -0
  2897. esphome/components/shutdown/button/__init__.py +17 -0
  2898. esphome/components/shutdown/button/shutdown_button.cpp +33 -0
  2899. esphome/components/shutdown/button/shutdown_button.h +18 -0
  2900. esphome/components/shutdown/switch/__init__.py +19 -0
  2901. esphome/components/shutdown/switch/shutdown_switch.cpp +38 -0
  2902. esphome/components/shutdown/switch/shutdown_switch.h +18 -0
  2903. esphome/components/sigma_delta_output/__init__.py +1 -0
  2904. esphome/components/sigma_delta_output/output.py +61 -0
  2905. esphome/components/sigma_delta_output/sigma_delta_output.cpp +57 -0
  2906. esphome/components/sigma_delta_output/sigma_delta_output.h +47 -0
  2907. esphome/components/sim800l/__init__.py +203 -0
  2908. esphome/components/sim800l/binary_sensor.py +26 -0
  2909. esphome/components/sim800l/sensor.py +34 -0
  2910. esphome/components/sim800l/sim800l.cpp +493 -0
  2911. esphome/components/sim800l/sim800l.h +223 -0
  2912. esphome/components/slow_pwm/__init__.py +0 -0
  2913. esphome/components/slow_pwm/output.py +71 -0
  2914. esphome/components/slow_pwm/slow_pwm_output.cpp +80 -0
  2915. esphome/components/slow_pwm/slow_pwm_output.h +61 -0
  2916. esphome/components/sm10bit_base/__init__.py +40 -0
  2917. esphome/components/sm10bit_base/sm10bit_base.cpp +131 -0
  2918. esphome/components/sm10bit_base/sm10bit_base.h +63 -0
  2919. esphome/components/sm16716/__init__.py +38 -0
  2920. esphome/components/sm16716/output.py +28 -0
  2921. esphome/components/sm16716/sm16716.cpp +51 -0
  2922. esphome/components/sm16716/sm16716.h +72 -0
  2923. esphome/components/sm2135/__init__.py +67 -0
  2924. esphome/components/sm2135/output.py +29 -0
  2925. esphome/components/sm2135/sm2135.cpp +151 -0
  2926. esphome/components/sm2135/sm2135.h +90 -0
  2927. esphome/components/sm2235/__init__.py +22 -0
  2928. esphome/components/sm2235/output.py +29 -0
  2929. esphome/components/sm2235/sm2235.cpp +28 -0
  2930. esphome/components/sm2235/sm2235.h +19 -0
  2931. esphome/components/sm2335/__init__.py +22 -0
  2932. esphome/components/sm2335/output.py +29 -0
  2933. esphome/components/sm2335/sm2335.cpp +28 -0
  2934. esphome/components/sm2335/sm2335.h +19 -0
  2935. esphome/components/sm300d2/__init__.py +0 -0
  2936. esphome/components/sm300d2/sensor.py +117 -0
  2937. esphome/components/sm300d2/sm300d2.cpp +108 -0
  2938. esphome/components/sm300d2/sm300d2.h +36 -0
  2939. esphome/components/sml/__init__.py +68 -0
  2940. esphome/components/sml/automation.h +19 -0
  2941. esphome/components/sml/constants.h +27 -0
  2942. esphome/components/sml/sensor/__init__.py +30 -0
  2943. esphome/components/sml/sensor/sml_sensor.cpp +41 -0
  2944. esphome/components/sml/sensor/sml_sensor.h +16 -0
  2945. esphome/components/sml/sml.cpp +148 -0
  2946. esphome/components/sml/sml.h +48 -0
  2947. esphome/components/sml/sml_parser.cpp +153 -0
  2948. esphome/components/sml/sml_parser.h +84 -0
  2949. esphome/components/sml/text_sensor/__init__.py +41 -0
  2950. esphome/components/sml/text_sensor/sml_text_sensor.cpp +54 -0
  2951. esphome/components/sml/text_sensor/sml_text_sensor.h +21 -0
  2952. esphome/components/smt100/__init__.py +1 -0
  2953. esphome/components/smt100/sensor.py +97 -0
  2954. esphome/components/smt100/smt100.cpp +84 -0
  2955. esphome/components/smt100/smt100.h +43 -0
  2956. esphome/components/sn74hc165/__init__.py +95 -0
  2957. esphome/components/sn74hc165/sn74hc165.cpp +70 -0
  2958. esphome/components/sn74hc165/sn74hc165.h +64 -0
  2959. esphome/components/sn74hc595/__init__.py +121 -0
  2960. esphome/components/sn74hc595/sn74hc595.cpp +99 -0
  2961. esphome/components/sn74hc595/sn74hc595.h +97 -0
  2962. esphome/components/sntp/__init__.py +0 -0
  2963. esphome/components/sntp/sntp_component.cpp +106 -0
  2964. esphome/components/sntp/sntp_component.h +46 -0
  2965. esphome/components/sntp/time.py +126 -0
  2966. esphome/components/socket/__init__.py +113 -0
  2967. esphome/components/socket/bsd_sockets_impl.cpp +188 -0
  2968. esphome/components/socket/headers.h +185 -0
  2969. esphome/components/socket/lwip_raw_tcp_impl.cpp +717 -0
  2970. esphome/components/socket/lwip_sockets_impl.cpp +163 -0
  2971. esphome/components/socket/socket.cpp +118 -0
  2972. esphome/components/socket/socket.h +96 -0
  2973. esphome/components/sonoff_d1/__init__.py +1 -0
  2974. esphome/components/sonoff_d1/light.py +39 -0
  2975. esphome/components/sonoff_d1/sonoff_d1.cpp +312 -0
  2976. esphome/components/sonoff_d1/sonoff_d1.h +85 -0
  2977. esphome/components/sound_level/__init__.py +0 -0
  2978. esphome/components/sound_level/sensor.py +97 -0
  2979. esphome/components/sound_level/sound_level.cpp +196 -0
  2980. esphome/components/sound_level/sound_level.h +73 -0
  2981. esphome/components/speaker/__init__.py +147 -0
  2982. esphome/components/speaker/automation.h +88 -0
  2983. esphome/components/speaker/media_player/__init__.py +452 -0
  2984. esphome/components/speaker/media_player/audio_pipeline.cpp +577 -0
  2985. esphome/components/speaker/media_player/audio_pipeline.h +160 -0
  2986. esphome/components/speaker/media_player/automation.h +26 -0
  2987. esphome/components/speaker/media_player/speaker_media_player.cpp +555 -0
  2988. esphome/components/speaker/media_player/speaker_media_player.h +151 -0
  2989. esphome/components/speaker/speaker.h +127 -0
  2990. esphome/components/speed/__init__.py +3 -0
  2991. esphome/components/speed/fan/__init__.py +52 -0
  2992. esphome/components/speed/fan/speed_fan.cpp +48 -0
  2993. esphome/components/speed/fan/speed_fan.h +35 -0
  2994. esphome/components/spi/__init__.py +459 -0
  2995. esphome/components/spi/spi.cpp +123 -0
  2996. esphome/components/spi/spi.h +513 -0
  2997. esphome/components/spi/spi_arduino.cpp +106 -0
  2998. esphome/components/spi/spi_esp_idf.cpp +271 -0
  2999. esphome/components/spi_device/__init__.py +36 -0
  3000. esphome/components/spi_device/spi_device.cpp +27 -0
  3001. esphome/components/spi_device/spi_device.h +22 -0
  3002. esphome/components/spi_led_strip/__init__.py +2 -0
  3003. esphome/components/spi_led_strip/light.py +23 -0
  3004. esphome/components/spi_led_strip/spi_led_strip.cpp +67 -0
  3005. esphome/components/spi_led_strip/spi_led_strip.h +40 -0
  3006. esphome/components/split_buffer/__init__.py +5 -0
  3007. esphome/components/split_buffer/split_buffer.cpp +144 -0
  3008. esphome/components/split_buffer/split_buffer.h +46 -0
  3009. esphome/components/sprinkler/__init__.py +835 -0
  3010. esphome/components/sprinkler/automation.h +185 -0
  3011. esphome/components/sprinkler/sprinkler.cpp +1741 -0
  3012. esphome/components/sprinkler/sprinkler.h +611 -0
  3013. esphome/components/sps30/__init__.py +0 -0
  3014. esphome/components/sps30/automation.h +26 -0
  3015. esphome/components/sps30/sensor.py +194 -0
  3016. esphome/components/sps30/sps30.cpp +293 -0
  3017. esphome/components/sps30/sps30.h +71 -0
  3018. esphome/components/ssd1306_base/__init__.py +103 -0
  3019. esphome/components/ssd1306_base/ssd1306_base.cpp +382 -0
  3020. esphome/components/ssd1306_base/ssd1306_base.h +88 -0
  3021. esphome/components/ssd1306_i2c/__init__.py +0 -0
  3022. esphome/components/ssd1306_i2c/display.py +29 -0
  3023. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +80 -0
  3024. esphome/components/ssd1306_i2c/ssd1306_i2c.h +23 -0
  3025. esphome/components/ssd1306_spi/__init__.py +0 -0
  3026. esphome/components/ssd1306_spi/display.py +38 -0
  3027. esphome/components/ssd1306_spi/ssd1306_spi.cpp +67 -0
  3028. esphome/components/ssd1306_spi/ssd1306_spi.h +29 -0
  3029. esphome/components/ssd1322_base/__init__.py +50 -0
  3030. esphome/components/ssd1322_base/ssd1322_base.cpp +204 -0
  3031. esphome/components/ssd1322_base/ssd1322_base.h +55 -0
  3032. esphome/components/ssd1322_spi/__init__.py +0 -0
  3033. esphome/components/ssd1322_spi/display.py +38 -0
  3034. esphome/components/ssd1322_spi/ssd1322_spi.cpp +70 -0
  3035. esphome/components/ssd1322_spi/ssd1322_spi.h +30 -0
  3036. esphome/components/ssd1325_base/__init__.py +54 -0
  3037. esphome/components/ssd1325_base/ssd1325_base.cpp +245 -0
  3038. esphome/components/ssd1325_base/ssd1325_base.h +60 -0
  3039. esphome/components/ssd1325_spi/__init__.py +0 -0
  3040. esphome/components/ssd1325_spi/display.py +38 -0
  3041. esphome/components/ssd1325_spi/ssd1325_spi.cpp +58 -0
  3042. esphome/components/ssd1325_spi/ssd1325_spi.h +29 -0
  3043. esphome/components/ssd1327_base/__init__.py +41 -0
  3044. esphome/components/ssd1327_base/ssd1327_base.cpp +180 -0
  3045. esphome/components/ssd1327_base/ssd1327_base.h +54 -0
  3046. esphome/components/ssd1327_i2c/__init__.py +0 -0
  3047. esphome/components/ssd1327_i2c/display.py +29 -0
  3048. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +43 -0
  3049. esphome/components/ssd1327_i2c/ssd1327_i2c.h +23 -0
  3050. esphome/components/ssd1327_spi/__init__.py +0 -0
  3051. esphome/components/ssd1327_spi/display.py +38 -0
  3052. esphome/components/ssd1327_spi/ssd1327_spi.cpp +57 -0
  3053. esphome/components/ssd1327_spi/ssd1327_spi.h +29 -0
  3054. esphome/components/ssd1331_base/__init__.py +32 -0
  3055. esphome/components/ssd1331_base/ssd1331_base.cpp +154 -0
  3056. esphome/components/ssd1331_base/ssd1331_base.h +47 -0
  3057. esphome/components/ssd1331_spi/__init__.py +0 -0
  3058. esphome/components/ssd1331_spi/display.py +38 -0
  3059. esphome/components/ssd1331_spi/ssd1331_spi.cpp +56 -0
  3060. esphome/components/ssd1331_spi/ssd1331_spi.h +29 -0
  3061. esphome/components/ssd1351_base/__init__.py +42 -0
  3062. esphome/components/ssd1351_base/ssd1351_base.cpp +196 -0
  3063. esphome/components/ssd1351_base/ssd1351_base.h +56 -0
  3064. esphome/components/ssd1351_spi/__init__.py +0 -0
  3065. esphome/components/ssd1351_spi/display.py +38 -0
  3066. esphome/components/ssd1351_spi/ssd1351_spi.cpp +70 -0
  3067. esphome/components/ssd1351_spi/ssd1351_spi.h +30 -0
  3068. esphome/components/st7567_base/__init__.py +55 -0
  3069. esphome/components/st7567_base/st7567_base.cpp +152 -0
  3070. esphome/components/st7567_base/st7567_base.h +100 -0
  3071. esphome/components/st7567_i2c/__init__.py +1 -0
  3072. esphome/components/st7567_i2c/display.py +29 -0
  3073. esphome/components/st7567_i2c/st7567_i2c.cpp +62 -0
  3074. esphome/components/st7567_i2c/st7567_i2c.h +23 -0
  3075. esphome/components/st7567_spi/__init__.py +1 -0
  3076. esphome/components/st7567_spi/display.py +38 -0
  3077. esphome/components/st7567_spi/st7567_spi.cpp +65 -0
  3078. esphome/components/st7567_spi/st7567_spi.h +29 -0
  3079. esphome/components/st7701s/__init__.py +1 -0
  3080. esphome/components/st7701s/display.py +251 -0
  3081. esphome/components/st7701s/init_sequences.py +363 -0
  3082. esphome/components/st7701s/st7701s.cpp +193 -0
  3083. esphome/components/st7701s/st7701s.h +118 -0
  3084. esphome/components/st7735/__init__.py +3 -0
  3085. esphome/components/st7735/display.py +105 -0
  3086. esphome/components/st7735/st7735.cpp +489 -0
  3087. esphome/components/st7735/st7735.h +90 -0
  3088. esphome/components/st7789v/__init__.py +3 -0
  3089. esphome/components/st7789v/display.py +209 -0
  3090. esphome/components/st7789v/st7789v.cpp +312 -0
  3091. esphome/components/st7789v/st7789v.h +172 -0
  3092. esphome/components/st7920/__init__.py +0 -0
  3093. esphome/components/st7920/display.py +41 -0
  3094. esphome/components/st7920/st7920.cpp +146 -0
  3095. esphome/components/st7920/st7920.h +51 -0
  3096. esphome/components/statsd/__init__.py +65 -0
  3097. esphome/components/statsd/statsd.cpp +162 -0
  3098. esphome/components/statsd/statsd.h +87 -0
  3099. esphome/components/status/__init__.py +0 -0
  3100. esphome/components/status/binary_sensor.py +22 -0
  3101. esphome/components/status/status_binary_sensor.cpp +37 -0
  3102. esphome/components/status/status_binary_sensor.h +20 -0
  3103. esphome/components/status_led/__init__.py +25 -0
  3104. esphome/components/status_led/light/__init__.py +36 -0
  3105. esphome/components/status_led/light/status_led_light.cpp +75 -0
  3106. esphome/components/status_led/light/status_led_light.h +44 -0
  3107. esphome/components/status_led/status_led.cpp +34 -0
  3108. esphome/components/status_led/status_led.h +26 -0
  3109. esphome/components/stepper/__init__.py +183 -0
  3110. esphome/components/stepper/stepper.cpp +51 -0
  3111. esphome/components/stepper/stepper.h +112 -0
  3112. esphome/components/sts3x/__init__.py +0 -0
  3113. esphome/components/sts3x/sensor.py +35 -0
  3114. esphome/components/sts3x/sts3x.cpp +70 -0
  3115. esphome/components/sts3x/sts3x.h +22 -0
  3116. esphome/components/stts22h/__init__.py +1 -0
  3117. esphome/components/stts22h/sensor.py +33 -0
  3118. esphome/components/stts22h/stts22h.cpp +101 -0
  3119. esphome/components/stts22h/stts22h.h +21 -0
  3120. esphome/components/substitutions/__init__.py +239 -0
  3121. esphome/components/substitutions/jinja.py +255 -0
  3122. esphome/components/sun/__init__.py +180 -0
  3123. esphome/components/sun/sensor/__init__.py +40 -0
  3124. esphome/components/sun/sensor/sun_sensor.cpp +12 -0
  3125. esphome/components/sun/sensor/sun_sensor.h +41 -0
  3126. esphome/components/sun/sun.cpp +321 -0
  3127. esphome/components/sun/sun.h +133 -0
  3128. esphome/components/sun/text_sensor/__init__.py +59 -0
  3129. esphome/components/sun/text_sensor/sun_text_sensor.cpp +12 -0
  3130. esphome/components/sun/text_sensor/sun_text_sensor.h +44 -0
  3131. esphome/components/sun_gtil2/__init__.py +26 -0
  3132. esphome/components/sun_gtil2/sensor.py +88 -0
  3133. esphome/components/sun_gtil2/sun_gtil2.cpp +135 -0
  3134. esphome/components/sun_gtil2/sun_gtil2.h +58 -0
  3135. esphome/components/sun_gtil2/text_sensor.py +32 -0
  3136. esphome/components/switch/__init__.py +230 -0
  3137. esphome/components/switch/automation.cpp +10 -0
  3138. esphome/components/switch/automation.h +108 -0
  3139. esphome/components/switch/binary_sensor/__init__.py +31 -0
  3140. esphome/components/switch/binary_sensor/switch_binary_sensor.cpp +17 -0
  3141. esphome/components/switch/binary_sensor/switch_binary_sensor.h +21 -0
  3142. esphome/components/switch/switch.cpp +115 -0
  3143. esphome/components/switch/switch.h +150 -0
  3144. esphome/components/sx126x/__init__.py +336 -0
  3145. esphome/components/sx126x/automation.h +68 -0
  3146. esphome/components/sx126x/packet_transport/__init__.py +26 -0
  3147. esphome/components/sx126x/packet_transport/sx126x_transport.cpp +26 -0
  3148. esphome/components/sx126x/packet_transport/sx126x_transport.h +25 -0
  3149. esphome/components/sx126x/sx126x.cpp +538 -0
  3150. esphome/components/sx126x/sx126x.h +148 -0
  3151. esphome/components/sx126x/sx126x_reg.h +165 -0
  3152. esphome/components/sx127x/__init__.py +329 -0
  3153. esphome/components/sx127x/automation.h +68 -0
  3154. esphome/components/sx127x/packet_transport/__init__.py +26 -0
  3155. esphome/components/sx127x/packet_transport/sx127x_transport.cpp +26 -0
  3156. esphome/components/sx127x/packet_transport/sx127x_transport.h +25 -0
  3157. esphome/components/sx127x/sx127x.cpp +496 -0
  3158. esphome/components/sx127x/sx127x.h +128 -0
  3159. esphome/components/sx127x/sx127x_reg.h +295 -0
  3160. esphome/components/sx1509/__init__.py +154 -0
  3161. esphome/components/sx1509/binary_sensor/__init__.py +26 -0
  3162. esphome/components/sx1509/binary_sensor/sx1509_binary_keypad_sensor.h +19 -0
  3163. esphome/components/sx1509/output/__init__.py +29 -0
  3164. esphome/components/sx1509/output/sx1509_float_output.cpp +31 -0
  3165. esphome/components/sx1509/output/sx1509_float_output.h +27 -0
  3166. esphome/components/sx1509/sx1509.cpp +317 -0
  3167. esphome/components/sx1509/sx1509.h +101 -0
  3168. esphome/components/sx1509/sx1509_gpio_pin.cpp +22 -0
  3169. esphome/components/sx1509/sx1509_gpio_pin.h +33 -0
  3170. esphome/components/sx1509/sx1509_registers.h +110 -0
  3171. esphome/components/syslog/__init__.py +41 -0
  3172. esphome/components/syslog/esphome_syslog.cpp +50 -0
  3173. esphome/components/syslog/esphome_syslog.h +29 -0
  3174. esphome/components/t6615/__init__.py +0 -0
  3175. esphome/components/t6615/sensor.py +46 -0
  3176. esphome/components/t6615/t6615.cpp +97 -0
  3177. esphome/components/t6615/t6615.h +44 -0
  3178. esphome/components/tc74/__init__.py +1 -0
  3179. esphome/components/tc74/sensor.py +32 -0
  3180. esphome/components/tc74/tc74.cpp +67 -0
  3181. esphome/components/tc74/tc74.h +28 -0
  3182. esphome/components/tca9548a/__init__.py +43 -0
  3183. esphome/components/tca9548a/tca9548a.cpp +48 -0
  3184. esphome/components/tca9548a/tca9548a.h +39 -0
  3185. esphome/components/tca9555/__init__.py +72 -0
  3186. esphome/components/tca9555/tca9555.cpp +144 -0
  3187. esphome/components/tca9555/tca9555.h +66 -0
  3188. esphome/components/tcl112/__init__.py +0 -0
  3189. esphome/components/tcl112/climate.py +14 -0
  3190. esphome/components/tcl112/tcl112.cpp +244 -0
  3191. esphome/components/tcl112/tcl112.h +28 -0
  3192. esphome/components/tcs34725/__init__.py +0 -0
  3193. esphome/components/tcs34725/sensor.py +132 -0
  3194. esphome/components/tcs34725/tcs34725.cpp +353 -0
  3195. esphome/components/tcs34725/tcs34725.h +90 -0
  3196. esphome/components/tee501/__init__.py +0 -0
  3197. esphome/components/tee501/sensor.py +36 -0
  3198. esphome/components/tee501/tee501.cpp +66 -0
  3199. esphome/components/tee501/tee501.h +23 -0
  3200. esphome/components/teleinfo/__init__.py +40 -0
  3201. esphome/components/teleinfo/sensor/__init__.py +22 -0
  3202. esphome/components/teleinfo/sensor/teleinfo_sensor.cpp +14 -0
  3203. esphome/components/teleinfo/sensor/teleinfo_sensor.h +16 -0
  3204. esphome/components/teleinfo/teleinfo.cpp +209 -0
  3205. esphome/components/teleinfo/teleinfo.h +54 -0
  3206. esphome/components/teleinfo/text_sensor/__init__.py +21 -0
  3207. esphome/components/teleinfo/text_sensor/teleinfo_text_sensor.cpp +11 -0
  3208. esphome/components/teleinfo/text_sensor/teleinfo_text_sensor.h +13 -0
  3209. esphome/components/tem3200/__init__.py +0 -0
  3210. esphome/components/tem3200/sensor.py +54 -0
  3211. esphome/components/tem3200/tem3200.cpp +148 -0
  3212. esphome/components/tem3200/tem3200.h +30 -0
  3213. esphome/components/template/__init__.py +3 -0
  3214. esphome/components/template/alarm_control_panel/__init__.py +163 -0
  3215. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +288 -0
  3216. esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +171 -0
  3217. esphome/components/template/binary_sensor/__init__.py +68 -0
  3218. esphome/components/template/binary_sensor/template_binary_sensor.cpp +25 -0
  3219. esphome/components/template/binary_sensor/template_binary_sensor.h +23 -0
  3220. esphome/components/template/button/__init__.py +11 -0
  3221. esphome/components/template/button/template_button.h +13 -0
  3222. esphome/components/template/cover/__init__.py +146 -0
  3223. esphome/components/template/cover/template_cover.cpp +135 -0
  3224. esphome/components/template/cover/template_cover.h +65 -0
  3225. esphome/components/template/datetime/__init__.py +150 -0
  3226. esphome/components/template/datetime/template_date.cpp +108 -0
  3227. esphome/components/template/datetime/template_date.h +45 -0
  3228. esphome/components/template/datetime/template_datetime.cpp +147 -0
  3229. esphome/components/template/datetime/template_datetime.h +45 -0
  3230. esphome/components/template/datetime/template_time.cpp +108 -0
  3231. esphome/components/template/datetime/template_time.h +45 -0
  3232. esphome/components/template/event/__init__.py +21 -0
  3233. esphome/components/template/event/template_event.h +10 -0
  3234. esphome/components/template/fan/__init__.py +41 -0
  3235. esphome/components/template/fan/template_fan.cpp +36 -0
  3236. esphome/components/template/fan/template_fan.h +29 -0
  3237. esphome/components/template/lock/__init__.py +99 -0
  3238. esphome/components/template/lock/automation.h +16 -0
  3239. esphome/components/template/lock/template_lock.cpp +58 -0
  3240. esphome/components/template/lock/template_lock.h +38 -0
  3241. esphome/components/template/number/__init__.py +94 -0
  3242. esphome/components/template/number/template_number.cpp +53 -0
  3243. esphome/components/template/number/template_number.h +36 -0
  3244. esphome/components/template/output/__init__.py +48 -0
  3245. esphome/components/template/output/template_output.h +29 -0
  3246. esphome/components/template/select/__init__.py +92 -0
  3247. esphome/components/template/select/template_select.cpp +65 -0
  3248. esphome/components/template/select/template_select.h +36 -0
  3249. esphome/components/template/sensor/__init__.py +53 -0
  3250. esphome/components/template/sensor/template_sensor.cpp +26 -0
  3251. esphome/components/template/sensor/template_sensor.h +23 -0
  3252. esphome/components/template/switch/__init__.py +93 -0
  3253. esphome/components/template/switch/template_switch.cpp +59 -0
  3254. esphome/components/template/switch/template_switch.h +39 -0
  3255. esphome/components/template/text/__init__.py +94 -0
  3256. esphome/components/template/text/template_text.cpp +53 -0
  3257. esphome/components/template/text/template_text.h +86 -0
  3258. esphome/components/template/text_sensor/__init__.py +52 -0
  3259. esphome/components/template/text_sensor/template_text_sensor.cpp +22 -0
  3260. esphome/components/template/text_sensor/template_text_sensor.h +24 -0
  3261. esphome/components/template/valve/__init__.py +130 -0
  3262. esphome/components/template/valve/automation.h +22 -0
  3263. esphome/components/template/valve/template_valve.cpp +129 -0
  3264. esphome/components/template/valve/template_valve.h +59 -0
  3265. esphome/components/text/__init__.py +173 -0
  3266. esphome/components/text/automation.h +33 -0
  3267. esphome/components/text/text.cpp +31 -0
  3268. esphome/components/text/text.h +51 -0
  3269. esphome/components/text/text_call.cpp +56 -0
  3270. esphome/components/text/text_call.h +25 -0
  3271. esphome/components/text/text_traits.h +41 -0
  3272. esphome/components/text_sensor/__init__.py +260 -0
  3273. esphome/components/text_sensor/automation.h +50 -0
  3274. esphome/components/text_sensor/filter.cpp +104 -0
  3275. esphome/components/text_sensor/filter.h +161 -0
  3276. esphome/components/text_sensor/text_sensor.cpp +105 -0
  3277. esphome/components/text_sensor/text_sensor.h +76 -0
  3278. esphome/components/thermopro_ble/__init__.py +0 -0
  3279. esphome/components/thermopro_ble/sensor.py +97 -0
  3280. esphome/components/thermopro_ble/thermopro_ble.cpp +204 -0
  3281. esphome/components/thermopro_ble/thermopro_ble.h +49 -0
  3282. esphome/components/thermostat/__init__.py +0 -0
  3283. esphome/components/thermostat/climate.py +1044 -0
  3284. esphome/components/thermostat/thermostat_climate.cpp +1657 -0
  3285. esphome/components/thermostat/thermostat_climate.h +558 -0
  3286. esphome/components/time/__init__.py +362 -0
  3287. esphome/components/time/automation.cpp +96 -0
  3288. esphome/components/time/automation.h +52 -0
  3289. esphome/components/time/real_time_clock.cpp +82 -0
  3290. esphome/components/time/real_time_clock.h +79 -0
  3291. esphome/components/time_based/__init__.py +0 -0
  3292. esphome/components/time_based/cover.py +58 -0
  3293. esphome/components/time_based/time_based_cover.cpp +186 -0
  3294. esphome/components/time_based/time_based_cover.h +55 -0
  3295. esphome/components/tinyusb/__init__.py +61 -0
  3296. esphome/components/tinyusb/tinyusb_component.cpp +44 -0
  3297. esphome/components/tinyusb/tinyusb_component.h +72 -0
  3298. esphome/components/tlc59208f/__init__.py +26 -0
  3299. esphome/components/tlc59208f/output.py +27 -0
  3300. esphome/components/tlc59208f/tlc59208f_output.cpp +157 -0
  3301. esphome/components/tlc59208f/tlc59208f_output.h +69 -0
  3302. esphome/components/tlc5947/__init__.py +49 -0
  3303. esphome/components/tlc5947/output/__init__.py +28 -0
  3304. esphome/components/tlc5947/output/tlc5947_output.cpp +12 -0
  3305. esphome/components/tlc5947/output/tlc5947_output.h +22 -0
  3306. esphome/components/tlc5947/tlc5947.cpp +71 -0
  3307. esphome/components/tlc5947/tlc5947.h +46 -0
  3308. esphome/components/tlc5971/__init__.py +34 -0
  3309. esphome/components/tlc5971/output/__init__.py +28 -0
  3310. esphome/components/tlc5971/output/tlc5971_output.cpp +12 -0
  3311. esphome/components/tlc5971/output/tlc5971_output.h +22 -0
  3312. esphome/components/tlc5971/tlc5971.cpp +102 -0
  3313. esphome/components/tlc5971/tlc5971.h +43 -0
  3314. esphome/components/tm1621/__init__.py +1 -0
  3315. esphome/components/tm1621/display.py +46 -0
  3316. esphome/components/tm1621/tm1621.cpp +281 -0
  3317. esphome/components/tm1621/tm1621.h +75 -0
  3318. esphome/components/tm1637/__init__.py +0 -0
  3319. esphome/components/tm1637/binary_sensor.py +25 -0
  3320. esphome/components/tm1637/display.py +52 -0
  3321. esphome/components/tm1637/tm1637.cpp +382 -0
  3322. esphome/components/tm1637/tm1637.h +103 -0
  3323. esphome/components/tm1638/__init__.py +0 -0
  3324. esphome/components/tm1638/binary_sensor/__init__.py +22 -0
  3325. esphome/components/tm1638/binary_sensor/tm1638_key.cpp +13 -0
  3326. esphome/components/tm1638/binary_sensor/tm1638_key.h +19 -0
  3327. esphome/components/tm1638/display.py +54 -0
  3328. esphome/components/tm1638/output/__init__.py +26 -0
  3329. esphome/components/tm1638/output/tm1638_output_led.cpp +17 -0
  3330. esphome/components/tm1638/output/tm1638_output_led.h +25 -0
  3331. esphome/components/tm1638/sevenseg.h +107 -0
  3332. esphome/components/tm1638/switch/__init__.py +28 -0
  3333. esphome/components/tm1638/switch/tm1638_switch_led.cpp +20 -0
  3334. esphome/components/tm1638/switch/tm1638_switch_led.h +23 -0
  3335. esphome/components/tm1638/tm1638.cpp +286 -0
  3336. esphome/components/tm1638/tm1638.h +79 -0
  3337. esphome/components/tm1651/__init__.py +136 -0
  3338. esphome/components/tm1651/tm1651.cpp +260 -0
  3339. esphome/components/tm1651/tm1651.h +101 -0
  3340. esphome/components/tmp102/__init__.py +9 -0
  3341. esphome/components/tmp102/sensor.py +44 -0
  3342. esphome/components/tmp102/tmp102.cpp +52 -0
  3343. esphome/components/tmp102/tmp102.h +19 -0
  3344. esphome/components/tmp1075/__init__.py +1 -0
  3345. esphome/components/tmp1075/sensor.py +92 -0
  3346. esphome/components/tmp1075/tmp1075.cpp +128 -0
  3347. esphome/components/tmp1075/tmp1075.h +89 -0
  3348. esphome/components/tmp117/__init__.py +0 -0
  3349. esphome/components/tmp117/sensor.py +80 -0
  3350. esphome/components/tmp117/tmp117.cpp +74 -0
  3351. esphome/components/tmp117/tmp117.h +27 -0
  3352. esphome/components/tof10120/__init__.py +0 -0
  3353. esphome/components/tof10120/sensor.py +34 -0
  3354. esphome/components/tof10120/tof10120_sensor.cpp +60 -0
  3355. esphome/components/tof10120/tof10120_sensor.h +18 -0
  3356. esphome/components/tormatic/__init__.py +1 -0
  3357. esphome/components/tormatic/cover.py +42 -0
  3358. esphome/components/tormatic/tormatic_cover.cpp +357 -0
  3359. esphome/components/tormatic/tormatic_cover.h +59 -0
  3360. esphome/components/tormatic/tormatic_protocol.h +211 -0
  3361. esphome/components/toshiba/__init__.py +0 -0
  3362. esphome/components/toshiba/climate.py +29 -0
  3363. esphome/components/toshiba/toshiba.cpp +1368 -0
  3364. esphome/components/toshiba/toshiba.h +86 -0
  3365. esphome/components/total_daily_energy/__init__.py +0 -0
  3366. esphome/components/total_daily_energy/sensor.py +92 -0
  3367. esphome/components/total_daily_energy/total_daily_energy.cpp +75 -0
  3368. esphome/components/total_daily_energy/total_daily_energy.h +45 -0
  3369. esphome/components/touchscreen/__init__.py +158 -0
  3370. esphome/components/touchscreen/binary_sensor/__init__.py +86 -0
  3371. esphome/components/touchscreen/binary_sensor/touchscreen_binary_sensor.cpp +34 -0
  3372. esphome/components/touchscreen/binary_sensor/touchscreen_binary_sensor.h +48 -0
  3373. esphome/components/touchscreen/touchscreen.cpp +166 -0
  3374. esphome/components/touchscreen/touchscreen.h +119 -0
  3375. esphome/components/tsl2561/__init__.py +0 -0
  3376. esphome/components/tsl2561/sensor.py +69 -0
  3377. esphome/components/tsl2561/tsl2561.cpp +165 -0
  3378. esphome/components/tsl2561/tsl2561.h +87 -0
  3379. esphome/components/tsl2591/__init__.py +1 -0
  3380. esphome/components/tsl2591/sensor.py +172 -0
  3381. esphome/components/tsl2591/tsl2591.cpp +479 -0
  3382. esphome/components/tsl2591/tsl2591.h +276 -0
  3383. esphome/components/tt21100/__init__.py +5 -0
  3384. esphome/components/tt21100/binary_sensor/__init__.py +31 -0
  3385. esphome/components/tt21100/binary_sensor/tt21100_button.cpp +27 -0
  3386. esphome/components/tt21100/binary_sensor/tt21100_button.h +28 -0
  3387. esphome/components/tt21100/touchscreen/__init__.py +40 -0
  3388. esphome/components/tt21100/touchscreen/tt21100.cpp +143 -0
  3389. esphome/components/tt21100/touchscreen/tt21100.h +43 -0
  3390. esphome/components/ttp229_bsf/__init__.py +30 -0
  3391. esphome/components/ttp229_bsf/binary_sensor.py +24 -0
  3392. esphome/components/ttp229_bsf/ttp229_bsf.cpp +22 -0
  3393. esphome/components/ttp229_bsf/ttp229_bsf.h +55 -0
  3394. esphome/components/ttp229_lsf/__init__.py +31 -0
  3395. esphome/components/ttp229_lsf/binary_sensor.py +24 -0
  3396. esphome/components/ttp229_lsf/ttp229_lsf.cpp +44 -0
  3397. esphome/components/ttp229_lsf/ttp229_lsf.h +37 -0
  3398. esphome/components/tuya/__init__.py +131 -0
  3399. esphome/components/tuya/automation.cpp +67 -0
  3400. esphome/components/tuya/automation.h +55 -0
  3401. esphome/components/tuya/binary_sensor/__init__.py +34 -0
  3402. esphome/components/tuya/binary_sensor/tuya_binary_sensor.cpp +22 -0
  3403. esphome/components/tuya/binary_sensor/tuya_binary_sensor.h +24 -0
  3404. esphome/components/tuya/climate/__init__.py +273 -0
  3405. esphome/components/tuya/climate/tuya_climate.cpp +495 -0
  3406. esphome/components/tuya/climate/tuya_climate.h +129 -0
  3407. esphome/components/tuya/cover/__init__.py +75 -0
  3408. esphome/components/tuya/cover/tuya_cover.cpp +140 -0
  3409. esphome/components/tuya/cover/tuya_cover.h +50 -0
  3410. esphome/components/tuya/fan/__init__.py +47 -0
  3411. esphome/components/tuya/fan/tuya_fan.cpp +107 -0
  3412. esphome/components/tuya/fan/tuya_fan.h +36 -0
  3413. esphome/components/tuya/light/__init__.py +123 -0
  3414. esphome/components/tuya/light/tuya_light.cpp +226 -0
  3415. esphome/components/tuya/light/tuya_light.h +71 -0
  3416. esphome/components/tuya/number/__init__.py +98 -0
  3417. esphome/components/tuya/number/tuya_number.cpp +95 -0
  3418. esphome/components/tuya/number/tuya_number.h +38 -0
  3419. esphome/components/tuya/select/__init__.py +61 -0
  3420. esphome/components/tuya/select/tuya_select.cpp +51 -0
  3421. esphome/components/tuya/select/tuya_select.h +36 -0
  3422. esphome/components/tuya/sensor/__init__.py +33 -0
  3423. esphome/components/tuya/sensor/tuya_sensor.cpp +34 -0
  3424. esphome/components/tuya/sensor/tuya_sensor.h +24 -0
  3425. esphome/components/tuya/switch/__init__.py +32 -0
  3426. esphome/components/tuya/switch/tuya_switch.cpp +28 -0
  3427. esphome/components/tuya/switch/tuya_switch.h +26 -0
  3428. esphome/components/tuya/text_sensor/__init__.py +33 -0
  3429. esphome/components/tuya/text_sensor/tuya_text_sensor.cpp +41 -0
  3430. esphome/components/tuya/text_sensor/tuya_text_sensor.h +24 -0
  3431. esphome/components/tuya/tuya.cpp +739 -0
  3432. esphome/components/tuya/tuya.h +166 -0
  3433. esphome/components/tx20/__init__.py +0 -0
  3434. esphome/components/tx20/sensor.py +54 -0
  3435. esphome/components/tx20/tx20.cpp +196 -0
  3436. esphome/components/tx20/tx20.h +52 -0
  3437. esphome/components/uart/__init__.py +546 -0
  3438. esphome/components/uart/automation.h +43 -0
  3439. esphome/components/uart/button/__init__.py +36 -0
  3440. esphome/components/uart/button/uart_button.cpp +15 -0
  3441. esphome/components/uart/button/uart_button.h +23 -0
  3442. esphome/components/uart/packet_transport/__init__.py +20 -0
  3443. esphome/components/uart/packet_transport/uart_transport.cpp +87 -0
  3444. esphome/components/uart/packet_transport/uart_transport.h +39 -0
  3445. esphome/components/uart/switch/__init__.py +59 -0
  3446. esphome/components/uart/switch/uart_switch.cpp +60 -0
  3447. esphome/components/uart/switch/uart_switch.h +35 -0
  3448. esphome/components/uart/uart.cpp +45 -0
  3449. esphome/components/uart/uart.h +76 -0
  3450. esphome/components/uart/uart_component.cpp +30 -0
  3451. esphome/components/uart/uart_component.h +201 -0
  3452. esphome/components/uart/uart_component_esp8266.cpp +334 -0
  3453. esphome/components/uart/uart_component_esp8266.h +91 -0
  3454. esphome/components/uart/uart_component_esp_idf.cpp +409 -0
  3455. esphome/components/uart/uart_component_esp_idf.h +66 -0
  3456. esphome/components/uart/uart_component_host.cpp +299 -0
  3457. esphome/components/uart/uart_component_host.h +35 -0
  3458. esphome/components/uart/uart_component_libretiny.cpp +190 -0
  3459. esphome/components/uart/uart_component_libretiny.h +40 -0
  3460. esphome/components/uart/uart_component_rp2040.cpp +196 -0
  3461. esphome/components/uart/uart_component_rp2040.h +43 -0
  3462. esphome/components/uart/uart_debugger.cpp +200 -0
  3463. esphome/components/uart/uart_debugger.h +99 -0
  3464. esphome/components/udp/__init__.py +165 -0
  3465. esphome/components/udp/automation.h +45 -0
  3466. esphome/components/udp/binary_sensor.py +5 -0
  3467. esphome/components/udp/packet_transport/__init__.py +29 -0
  3468. esphome/components/udp/packet_transport/udp_transport.cpp +36 -0
  3469. esphome/components/udp/packet_transport/udp_transport.h +28 -0
  3470. esphome/components/udp/sensor.py +5 -0
  3471. esphome/components/udp/udp_component.cpp +164 -0
  3472. esphome/components/udp/udp_component.h +59 -0
  3473. esphome/components/ufire_ec/__init__.py +1 -0
  3474. esphome/components/ufire_ec/sensor.py +125 -0
  3475. esphome/components/ufire_ec/ufire_ec.cpp +118 -0
  3476. esphome/components/ufire_ec/ufire_ec.h +87 -0
  3477. esphome/components/ufire_ise/__init__.py +1 -0
  3478. esphome/components/ufire_ise/sensor.py +126 -0
  3479. esphome/components/ufire_ise/ufire_ise.cpp +151 -0
  3480. esphome/components/ufire_ise/ufire_ise.h +95 -0
  3481. esphome/components/uln2003/__init__.py +0 -0
  3482. esphome/components/uln2003/stepper.py +56 -0
  3483. esphome/components/uln2003/uln2003.cpp +92 -0
  3484. esphome/components/uln2003/uln2003.h +44 -0
  3485. esphome/components/ultrasonic/__init__.py +1 -0
  3486. esphome/components/ultrasonic/sensor.py +53 -0
  3487. esphome/components/ultrasonic/ultrasonic_sensor.cpp +64 -0
  3488. esphome/components/ultrasonic/ultrasonic_sensor.h +46 -0
  3489. esphome/components/update/__init__.py +160 -0
  3490. esphome/components/update/automation.h +23 -0
  3491. esphome/components/update/update_entity.cpp +42 -0
  3492. esphome/components/update/update_entity.h +58 -0
  3493. esphome/components/uponor_smatrix/__init__.py +81 -0
  3494. esphome/components/uponor_smatrix/climate/__init__.py +28 -0
  3495. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +101 -0
  3496. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.h +28 -0
  3497. esphome/components/uponor_smatrix/sensor/__init__.py +80 -0
  3498. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +44 -0
  3499. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.h +24 -0
  3500. esphome/components/uponor_smatrix/uponor_smatrix.cpp +217 -0
  3501. esphome/components/uponor_smatrix/uponor_smatrix.h +127 -0
  3502. esphome/components/uptime/__init__.py +0 -0
  3503. esphome/components/uptime/sensor/__init__.py +61 -0
  3504. esphome/components/uptime/sensor/uptime_seconds_sensor.cpp +37 -0
  3505. esphome/components/uptime/sensor/uptime_seconds_sensor.h +21 -0
  3506. esphome/components/uptime/sensor/uptime_timestamp_sensor.cpp +39 -0
  3507. esphome/components/uptime/sensor/uptime_timestamp_sensor.h +30 -0
  3508. esphome/components/uptime/text_sensor/__init__.py +59 -0
  3509. esphome/components/uptime/text_sensor/uptime_text_sensor.cpp +68 -0
  3510. esphome/components/uptime/text_sensor/uptime_text_sensor.h +44 -0
  3511. esphome/components/usb_cdc_acm/__init__.py +76 -0
  3512. esphome/components/usb_cdc_acm/usb_cdc_acm.cpp +495 -0
  3513. esphome/components/usb_cdc_acm/usb_cdc_acm.h +135 -0
  3514. esphome/components/usb_host/__init__.py +83 -0
  3515. esphome/components/usb_host/usb_host.h +191 -0
  3516. esphome/components/usb_host/usb_host_client.cpp +534 -0
  3517. esphome/components/usb_host/usb_host_component.cpp +34 -0
  3518. esphome/components/usb_uart/__init__.py +138 -0
  3519. esphome/components/usb_uart/ch34x.cpp +81 -0
  3520. esphome/components/usb_uart/cp210x.cpp +126 -0
  3521. esphome/components/usb_uart/usb_uart.cpp +395 -0
  3522. esphome/components/usb_uart/usb_uart.h +176 -0
  3523. esphome/components/valve/__init__.py +233 -0
  3524. esphome/components/valve/automation.h +111 -0
  3525. esphome/components/valve/valve.cpp +185 -0
  3526. esphome/components/valve/valve.h +153 -0
  3527. esphome/components/valve/valve_traits.h +27 -0
  3528. esphome/components/vbus/__init__.py +33 -0
  3529. esphome/components/vbus/binary_sensor/__init__.py +349 -0
  3530. esphome/components/vbus/binary_sensor/vbus_binary_sensor.cpp +165 -0
  3531. esphome/components/vbus/binary_sensor/vbus_binary_sensor.h +136 -0
  3532. esphome/components/vbus/sensor/__init__.py +691 -0
  3533. esphome/components/vbus/sensor/vbus_sensor.cpp +250 -0
  3534. esphome/components/vbus/sensor/vbus_sensor.h +182 -0
  3535. esphome/components/vbus/vbus.cpp +125 -0
  3536. esphome/components/vbus/vbus.h +51 -0
  3537. esphome/components/veml3235/__init__.py +0 -0
  3538. esphome/components/veml3235/sensor.py +84 -0
  3539. esphome/components/veml3235/veml3235.cpp +229 -0
  3540. esphome/components/veml3235/veml3235.h +108 -0
  3541. esphome/components/veml7700/__init__.py +1 -0
  3542. esphome/components/veml7700/sensor.py +190 -0
  3543. esphome/components/veml7700/veml7700.cpp +438 -0
  3544. esphome/components/veml7700/veml7700.h +200 -0
  3545. esphome/components/version/__init__.py +1 -0
  3546. esphome/components/version/text_sensor.py +29 -0
  3547. esphome/components/version/version_text_sensor.cpp +24 -0
  3548. esphome/components/version/version_text_sensor.h +21 -0
  3549. esphome/components/vl53l0x/LICENSE.txt +80 -0
  3550. esphome/components/vl53l0x/__init__.py +0 -0
  3551. esphome/components/vl53l0x/sensor.py +87 -0
  3552. esphome/components/vl53l0x/vl53l0x_sensor.cpp +534 -0
  3553. esphome/components/vl53l0x/vl53l0x_sensor.h +75 -0
  3554. esphome/components/voice_assistant/__init__.py +435 -0
  3555. esphome/components/voice_assistant/voice_assistant.cpp +999 -0
  3556. esphome/components/voice_assistant/voice_assistant.h +363 -0
  3557. esphome/components/voltage_sampler/__init__.py +4 -0
  3558. esphome/components/voltage_sampler/voltage_sampler.h +16 -0
  3559. esphome/components/wake_on_lan/__init__.py +1 -0
  3560. esphome/components/wake_on_lan/button.py +37 -0
  3561. esphome/components/wake_on_lan/wake_on_lan.cpp +89 -0
  3562. esphome/components/wake_on_lan/wake_on_lan.h +36 -0
  3563. esphome/components/watchdog/__init__.py +1 -0
  3564. esphome/components/watchdog/watchdog.cpp +71 -0
  3565. esphome/components/watchdog/watchdog.h +24 -0
  3566. esphome/components/waveshare_epaper/__init__.py +1 -0
  3567. esphome/components/waveshare_epaper/display.py +261 -0
  3568. esphome/components/waveshare_epaper/waveshare_213v3.cpp +192 -0
  3569. esphome/components/waveshare_epaper/waveshare_epaper.cpp +4754 -0
  3570. esphome/components/waveshare_epaper/waveshare_epaper.h +1103 -0
  3571. esphome/components/web_server/__init__.py +348 -0
  3572. esphome/components/web_server/list_entities.cpp +155 -0
  3573. esphome/components/web_server/list_entities.h +101 -0
  3574. esphome/components/web_server/ota/__init__.py +89 -0
  3575. esphome/components/web_server/ota/ota_web_server.cpp +246 -0
  3576. esphome/components/web_server/ota/ota_web_server.h +26 -0
  3577. esphome/components/web_server/server_index_v2.h +651 -0
  3578. esphome/components/web_server/server_index_v3.h +4055 -0
  3579. esphome/components/web_server/web_server.cpp +2088 -0
  3580. esphome/components/web_server/web_server.h +604 -0
  3581. esphome/components/web_server/web_server_v1.cpp +219 -0
  3582. esphome/components/web_server_base/__init__.py +49 -0
  3583. esphome/components/web_server_base/web_server_base.cpp +35 -0
  3584. esphome/components/web_server_base/web_server_base.h +142 -0
  3585. esphome/components/web_server_idf/__init__.py +14 -0
  3586. esphome/components/web_server_idf/multipart.cpp +254 -0
  3587. esphome/components/web_server_idf/multipart.h +86 -0
  3588. esphome/components/web_server_idf/utils.cpp +125 -0
  3589. esphome/components/web_server_idf/utils.h +27 -0
  3590. esphome/components/web_server_idf/web_server_idf.cpp +895 -0
  3591. esphome/components/web_server_idf/web_server_idf.h +353 -0
  3592. esphome/components/weikai/__init__.py +110 -0
  3593. esphome/components/weikai/weikai.cpp +565 -0
  3594. esphome/components/weikai/weikai.h +445 -0
  3595. esphome/components/weikai/wk_reg_def.h +304 -0
  3596. esphome/components/weikai_i2c/__init__.py +1 -0
  3597. esphome/components/weikai_i2c/weikai_i2c.cpp +181 -0
  3598. esphome/components/weikai_i2c/weikai_i2c.h +61 -0
  3599. esphome/components/weikai_spi/__init__.py +1 -0
  3600. esphome/components/weikai_spi/weikai_spi.cpp +194 -0
  3601. esphome/components/weikai_spi/weikai_spi.h +54 -0
  3602. esphome/components/whirlpool/__init__.py +0 -0
  3603. esphome/components/whirlpool/climate.py +27 -0
  3604. esphome/components/whirlpool/whirlpool.cpp +296 -0
  3605. esphome/components/whirlpool/whirlpool.h +65 -0
  3606. esphome/components/whynter/__init__.py +1 -0
  3607. esphome/components/whynter/climate.py +21 -0
  3608. esphome/components/whynter/whynter.cpp +181 -0
  3609. esphome/components/whynter/whynter.h +53 -0
  3610. esphome/components/wiegand/__init__.py +77 -0
  3611. esphome/components/wiegand/wiegand.cpp +127 -0
  3612. esphome/components/wiegand/wiegand.h +54 -0
  3613. esphome/components/wifi/__init__.py +711 -0
  3614. esphome/components/wifi/automation.h +116 -0
  3615. esphome/components/wifi/wifi_component.cpp +1830 -0
  3616. esphome/components/wifi/wifi_component.h +666 -0
  3617. esphome/components/wifi/wifi_component_esp8266.cpp +920 -0
  3618. esphome/components/wifi/wifi_component_esp_idf.cpp +1124 -0
  3619. esphome/components/wifi/wifi_component_libretiny.cpp +551 -0
  3620. esphome/components/wifi/wifi_component_pico_w.cpp +301 -0
  3621. esphome/components/wifi/wpa2_eap.py +152 -0
  3622. esphome/components/wifi_info/__init__.py +0 -0
  3623. esphome/components/wifi_info/text_sensor.py +109 -0
  3624. esphome/components/wifi_info/wifi_info_text_sensor.cpp +172 -0
  3625. esphome/components/wifi_info/wifi_info_text_sensor.h +89 -0
  3626. esphome/components/wifi_signal/__init__.py +0 -0
  3627. esphome/components/wifi_signal/sensor.py +30 -0
  3628. esphome/components/wifi_signal/wifi_signal_sensor.cpp +12 -0
  3629. esphome/components/wifi_signal/wifi_signal_sensor.h +31 -0
  3630. esphome/components/wireguard/__init__.py +175 -0
  3631. esphome/components/wireguard/binary_sensor.py +35 -0
  3632. esphome/components/wireguard/sensor.py +26 -0
  3633. esphome/components/wireguard/text_sensor.py +23 -0
  3634. esphome/components/wireguard/wireguard.cpp +300 -0
  3635. esphome/components/wireguard/wireguard.h +174 -0
  3636. esphome/components/wk2132_i2c/__init__.py +30 -0
  3637. esphome/components/wk2132_i2c/wk2132_i2c.cpp +4 -0
  3638. esphome/components/wk2132_spi/__init__.py +30 -0
  3639. esphome/components/wk2168_i2c/__init__.py +59 -0
  3640. esphome/components/wk2168_spi/__init__.py +57 -0
  3641. esphome/components/wk2204_i2c/__init__.py +30 -0
  3642. esphome/components/wk2204_spi/__init__.py +30 -0
  3643. esphome/components/wk2212_i2c/__init__.py +59 -0
  3644. esphome/components/wk2212_spi/__init__.py +57 -0
  3645. esphome/components/wl_134/__init__.py +0 -0
  3646. esphome/components/wl_134/text_sensor.py +28 -0
  3647. esphome/components/wl_134/wl_134.cpp +113 -0
  3648. esphome/components/wl_134/wl_134.h +63 -0
  3649. esphome/components/wled/__init__.py +30 -0
  3650. esphome/components/wled/wled_light_effect.cpp +287 -0
  3651. esphome/components/wled/wled_light_effect.h +47 -0
  3652. esphome/components/wts01/__init__.py +0 -0
  3653. esphome/components/wts01/sensor.py +41 -0
  3654. esphome/components/wts01/wts01.cpp +91 -0
  3655. esphome/components/wts01/wts01.h +27 -0
  3656. esphome/components/x9c/__init__.py +0 -0
  3657. esphome/components/x9c/output.py +55 -0
  3658. esphome/components/x9c/x9c.cpp +77 -0
  3659. esphome/components/x9c/x9c.h +34 -0
  3660. esphome/components/xgzp68xx/__init__.py +1 -0
  3661. esphome/components/xgzp68xx/sensor.py +81 -0
  3662. esphome/components/xgzp68xx/xgzp68xx.cpp +122 -0
  3663. esphome/components/xgzp68xx/xgzp68xx.h +47 -0
  3664. esphome/components/xiaomi_ble/__init__.py +22 -0
  3665. esphome/components/xiaomi_ble/xiaomi_ble.cpp +410 -0
  3666. esphome/components/xiaomi_ble/xiaomi_ble.h +84 -0
  3667. esphome/components/xiaomi_cgd1/__init__.py +0 -0
  3668. esphome/components/xiaomi_cgd1/sensor.py +76 -0
  3669. esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +75 -0
  3670. esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +35 -0
  3671. esphome/components/xiaomi_cgdk2/__init__.py +0 -0
  3672. esphome/components/xiaomi_cgdk2/sensor.py +76 -0
  3673. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +75 -0
  3674. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +35 -0
  3675. esphome/components/xiaomi_cgg1/__init__.py +0 -0
  3676. esphome/components/xiaomi_cgg1/sensor.py +77 -0
  3677. esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +75 -0
  3678. esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +36 -0
  3679. esphome/components/xiaomi_cgpr1/__init__.py +0 -0
  3680. esphome/components/xiaomi_cgpr1/binary_sensor.py +77 -0
  3681. esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.cpp +75 -0
  3682. esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +39 -0
  3683. esphome/components/xiaomi_gcls002/__init__.py +0 -0
  3684. esphome/components/xiaomi_gcls002/sensor.py +84 -0
  3685. esphome/components/xiaomi_gcls002/xiaomi_gcls002.cpp +62 -0
  3686. esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +36 -0
  3687. esphome/components/xiaomi_hhccjcy01/__init__.py +0 -0
  3688. esphome/components/xiaomi_hhccjcy01/sensor.py +97 -0
  3689. esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.cpp +65 -0
  3690. esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +38 -0
  3691. esphome/components/xiaomi_hhccjcy10/__init__.py +1 -0
  3692. esphome/components/xiaomi_hhccjcy10/sensor.py +96 -0
  3693. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +68 -0
  3694. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +37 -0
  3695. esphome/components/xiaomi_hhccpot002/__init__.py +0 -0
  3696. esphome/components/xiaomi_hhccpot002/sensor.py +60 -0
  3697. esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.cpp +56 -0
  3698. esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +32 -0
  3699. esphome/components/xiaomi_jqjcy01ym/__init__.py +0 -0
  3700. esphome/components/xiaomi_jqjcy01ym/sensor.py +85 -0
  3701. esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.cpp +62 -0
  3702. esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +36 -0
  3703. esphome/components/xiaomi_lywsd02/__init__.py +0 -0
  3704. esphome/components/xiaomi_lywsd02/sensor.py +73 -0
  3705. esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.cpp +59 -0
  3706. esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +34 -0
  3707. esphome/components/xiaomi_lywsd02mmc/__init__.py +0 -0
  3708. esphome/components/xiaomi_lywsd02mmc/sensor.py +77 -0
  3709. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +75 -0
  3710. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +36 -0
  3711. esphome/components/xiaomi_lywsd03mmc/__init__.py +0 -0
  3712. esphome/components/xiaomi_lywsd03mmc/sensor.py +78 -0
  3713. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +79 -0
  3714. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +35 -0
  3715. esphome/components/xiaomi_lywsdcgq/__init__.py +0 -0
  3716. esphome/components/xiaomi_lywsdcgq/sensor.py +73 -0
  3717. esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.cpp +59 -0
  3718. esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +34 -0
  3719. esphome/components/xiaomi_mhoc303/__init__.py +1 -0
  3720. esphome/components/xiaomi_mhoc303/sensor.py +73 -0
  3721. esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.cpp +59 -0
  3722. esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +34 -0
  3723. esphome/components/xiaomi_mhoc401/__init__.py +0 -0
  3724. esphome/components/xiaomi_mhoc401/sensor.py +77 -0
  3725. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +79 -0
  3726. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +35 -0
  3727. esphome/components/xiaomi_miscale/__init__.py +0 -0
  3728. esphome/components/xiaomi_miscale/sensor.py +62 -0
  3729. esphome/components/xiaomi_miscale/xiaomi_miscale.cpp +169 -0
  3730. esphome/components/xiaomi_miscale/xiaomi_miscale.h +46 -0
  3731. esphome/components/xiaomi_miscale2/__init__.py +0 -0
  3732. esphome/components/xiaomi_miscale2/sensor.py +5 -0
  3733. esphome/components/xiaomi_mjyd02yla/__init__.py +0 -0
  3734. esphome/components/xiaomi_mjyd02yla/binary_sensor.py +89 -0
  3735. esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.cpp +78 -0
  3736. esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +41 -0
  3737. esphome/components/xiaomi_mue4094rt/__init__.py +0 -0
  3738. esphome/components/xiaomi_mue4094rt/binary_sensor.py +40 -0
  3739. esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.cpp +55 -0
  3740. esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +32 -0
  3741. esphome/components/xiaomi_rtcgq02lm/__init__.py +35 -0
  3742. esphome/components/xiaomi_rtcgq02lm/binary_sensor.py +63 -0
  3743. esphome/components/xiaomi_rtcgq02lm/sensor.py +37 -0
  3744. esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.cpp +91 -0
  3745. esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +60 -0
  3746. esphome/components/xiaomi_wx08zm/__init__.py +0 -0
  3747. esphome/components/xiaomi_wx08zm/binary_sensor.py +63 -0
  3748. esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.cpp +60 -0
  3749. esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +35 -0
  3750. esphome/components/xiaomi_xmwsdj04mmc/__init__.py +0 -0
  3751. esphome/components/xiaomi_xmwsdj04mmc/sensor.py +77 -0
  3752. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.cpp +77 -0
  3753. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.h +36 -0
  3754. esphome/components/xl9535/__init__.py +79 -0
  3755. esphome/components/xl9535/xl9535.cpp +120 -0
  3756. esphome/components/xl9535/xl9535.h +56 -0
  3757. esphome/components/xpt2046/__init__.py +5 -0
  3758. esphome/components/xpt2046/touchscreen/__init__.py +43 -0
  3759. esphome/components/xpt2046/touchscreen/xpt2046.cpp +113 -0
  3760. esphome/components/xpt2046/touchscreen/xpt2046.h +41 -0
  3761. esphome/components/xxtea/__init__.py +3 -0
  3762. esphome/components/xxtea/xxtea.cpp +46 -0
  3763. esphome/components/xxtea/xxtea.h +26 -0
  3764. esphome/components/yashima/__init__.py +0 -0
  3765. esphome/components/yashima/climate.py +39 -0
  3766. esphome/components/yashima/yashima.cpp +199 -0
  3767. esphome/components/yashima/yashima.h +40 -0
  3768. esphome/components/zephyr/__init__.py +263 -0
  3769. esphome/components/zephyr/const.py +16 -0
  3770. esphome/components/zephyr/core.cpp +98 -0
  3771. esphome/components/zephyr/gpio.cpp +123 -0
  3772. esphome/components/zephyr/gpio.h +38 -0
  3773. esphome/components/zephyr/pre_build.py.script +4 -0
  3774. esphome/components/zephyr/preferences.cpp +156 -0
  3775. esphome/components/zephyr/preferences.h +13 -0
  3776. esphome/components/zephyr_ble_server/__init__.py +34 -0
  3777. esphome/components/zephyr_ble_server/ble_server.cpp +100 -0
  3778. esphome/components/zephyr_ble_server/ble_server.h +19 -0
  3779. esphome/components/zhlt01/__init__.py +0 -0
  3780. esphome/components/zhlt01/climate.py +14 -0
  3781. esphome/components/zhlt01/zhlt01.cpp +238 -0
  3782. esphome/components/zhlt01/zhlt01.h +167 -0
  3783. esphome/components/zio_ultrasonic/__init__.py +0 -0
  3784. esphome/components/zio_ultrasonic/sensor.py +31 -0
  3785. esphome/components/zio_ultrasonic/zio_ultrasonic.cpp +31 -0
  3786. esphome/components/zio_ultrasonic/zio_ultrasonic.h +20 -0
  3787. esphome/components/zwave_proxy/__init__.py +46 -0
  3788. esphome/components/zwave_proxy/zwave_proxy.cpp +346 -0
  3789. esphome/components/zwave_proxy/zwave_proxy.h +91 -0
  3790. esphome/components/zyaura/__init__.py +0 -0
  3791. esphome/components/zyaura/sensor.py +71 -0
  3792. esphome/components/zyaura/zyaura.cpp +125 -0
  3793. esphome/components/zyaura/zyaura.h +85 -0
  3794. esphome/config.py +1356 -0
  3795. esphome/config_helpers.py +155 -0
  3796. esphome/config_validation.py +2220 -0
  3797. esphome/const.py +1378 -0
  3798. esphome/core/__init__.py +974 -0
  3799. esphome/core/application.cpp +714 -0
  3800. esphome/core/application.h +646 -0
  3801. esphome/core/area.h +19 -0
  3802. esphome/core/automation.h +367 -0
  3803. esphome/core/base_automation.h +554 -0
  3804. esphome/core/color.cpp +23 -0
  3805. esphome/core/color.h +188 -0
  3806. esphome/core/component.cpp +506 -0
  3807. esphome/core/component.h +530 -0
  3808. esphome/core/component_iterator.cpp +197 -0
  3809. esphome/core/component_iterator.h +192 -0
  3810. esphome/core/config.py +639 -0
  3811. esphome/core/controller.h +134 -0
  3812. esphome/core/controller_registry.cpp +114 -0
  3813. esphome/core/controller_registry.h +245 -0
  3814. esphome/core/datatypes.h +61 -0
  3815. esphome/core/defines.h +337 -0
  3816. esphome/core/device.h +20 -0
  3817. esphome/core/doxygen.h +13 -0
  3818. esphome/core/entity_base.cpp +109 -0
  3819. esphome/core/entity_base.h +253 -0
  3820. esphome/core/entity_helpers.py +272 -0
  3821. esphome/core/event_pool.h +81 -0
  3822. esphome/core/finite_set_mask.h +171 -0
  3823. esphome/core/gpio.h +106 -0
  3824. esphome/core/hal.h +53 -0
  3825. esphome/core/hash_base.h +56 -0
  3826. esphome/core/helpers.cpp +711 -0
  3827. esphome/core/helpers.h +1253 -0
  3828. esphome/core/lock_free_queue.h +146 -0
  3829. esphome/core/log.cpp +62 -0
  3830. esphome/core/log.h +204 -0
  3831. esphome/core/log_const_en.h +4 -0
  3832. esphome/core/macros.h +12 -0
  3833. esphome/core/optional.h +220 -0
  3834. esphome/core/preferences.h +70 -0
  3835. esphome/core/progmem.h +16 -0
  3836. esphome/core/ring_buffer.cpp +131 -0
  3837. esphome/core/ring_buffer.h +99 -0
  3838. esphome/core/scheduler.cpp +822 -0
  3839. esphome/core/scheduler.h +508 -0
  3840. esphome/core/string_ref.h +147 -0
  3841. esphome/core/template_lambda.h +51 -0
  3842. esphome/core/time.cpp +224 -0
  3843. esphome/core/time.h +126 -0
  3844. esphome/core/util.cpp +37 -0
  3845. esphome/core/util.h +15 -0
  3846. esphome/core/version.h +12 -0
  3847. esphome/coroutine.py +348 -0
  3848. esphome/cpp_generator.py +1041 -0
  3849. esphome/cpp_helpers.py +126 -0
  3850. esphome/cpp_types.py +46 -0
  3851. esphome/dashboard/__init__.py +0 -0
  3852. esphome/dashboard/const.py +29 -0
  3853. esphome/dashboard/core.py +190 -0
  3854. esphome/dashboard/dashboard.py +152 -0
  3855. esphome/dashboard/dns.py +58 -0
  3856. esphome/dashboard/entries.py +458 -0
  3857. esphome/dashboard/models.py +76 -0
  3858. esphome/dashboard/settings.py +98 -0
  3859. esphome/dashboard/status/__init__.py +0 -0
  3860. esphome/dashboard/status/mdns.py +170 -0
  3861. esphome/dashboard/status/mqtt.py +78 -0
  3862. esphome/dashboard/status/ping.py +151 -0
  3863. esphome/dashboard/util/__init__.py +0 -0
  3864. esphome/dashboard/util/itertools.py +22 -0
  3865. esphome/dashboard/util/password.py +11 -0
  3866. esphome/dashboard/util/subprocess.py +31 -0
  3867. esphome/dashboard/util/text.py +9 -0
  3868. esphome/dashboard/web_server.py +1620 -0
  3869. esphome/enum.py +20 -0
  3870. esphome/espota2.py +445 -0
  3871. esphome/external_files.py +106 -0
  3872. esphome/final_validate.py +58 -0
  3873. esphome/git.py +283 -0
  3874. esphome/helpers.py +559 -0
  3875. esphome/loader.py +233 -0
  3876. esphome/log.py +93 -0
  3877. esphome/mqtt.py +305 -0
  3878. esphome/pins.py +340 -0
  3879. esphome/platformio_api.py +422 -0
  3880. esphome/resolver.py +67 -0
  3881. esphome/schema_extractors.py +92 -0
  3882. esphome/storage_json.py +303 -0
  3883. esphome/types.py +58 -0
  3884. esphome/util.py +380 -0
  3885. esphome/voluptuous_schema.py +234 -0
  3886. esphome/vscode.py +146 -0
  3887. esphome/wizard.py +559 -0
  3888. esphome/writer.py +412 -0
  3889. esphome/yaml_util.py +635 -0
  3890. esphome/zeroconf.py +202 -0
  3891. esphome-2025.12.0b2.dist-info/METADATA +86 -0
  3892. esphome-2025.12.0b2.dist-info/RECORD +3896 -0
  3893. esphome-2025.12.0b2.dist-info/WHEEL +5 -0
  3894. esphome-2025.12.0b2.dist-info/entry_points.txt +2 -0
  3895. esphome-2025.12.0b2.dist-info/licenses/LICENSE +709 -0
  3896. esphome-2025.12.0b2.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1830 @@
1
+ #include "wifi_component.h"
2
+ #ifdef USE_WIFI
3
+ #include <cassert>
4
+ #include <cinttypes>
5
+
6
+ #ifdef USE_ESP32
7
+ #if (ESP_IDF_VERSION_MAJOR >= 5 && ESP_IDF_VERSION_MINOR >= 1)
8
+ #include <esp_eap_client.h>
9
+ #else
10
+ #include <esp_wpa2.h>
11
+ #endif
12
+ #endif
13
+
14
+ #if defined(USE_ESP32)
15
+ #include <esp_wifi.h>
16
+ #endif
17
+ #ifdef USE_ESP8266
18
+ #include <user_interface.h>
19
+ #endif
20
+
21
+ #include <algorithm>
22
+ #include <utility>
23
+ #include "lwip/dns.h"
24
+ #include "lwip/err.h"
25
+
26
+ #include "esphome/core/application.h"
27
+ #include "esphome/core/hal.h"
28
+ #include "esphome/core/helpers.h"
29
+ #include "esphome/core/log.h"
30
+ #include "esphome/core/util.h"
31
+
32
+ #ifdef USE_CAPTIVE_PORTAL
33
+ #include "esphome/components/captive_portal/captive_portal.h"
34
+ #endif
35
+
36
+ #ifdef USE_IMPROV
37
+ #include "esphome/components/esp32_improv/esp32_improv_component.h"
38
+ #endif
39
+
40
+ namespace esphome::wifi {
41
+
42
+ static const char *const TAG = "wifi";
43
+
44
+ /// WiFi Retry Logic - Priority-Based BSSID Selection
45
+ ///
46
+ /// The WiFi component uses a state machine with priority degradation to handle connection failures
47
+ /// and automatically cycle through different BSSIDs in mesh networks or multiple configured networks.
48
+ ///
49
+ /// Connection Flow:
50
+ /// ┌──────────────────────────────────────────────────────────────────────┐
51
+ /// │ Fast Connect Path (Optional) │
52
+ /// ├──────────────────────────────────────────────────────────────────────┤
53
+ /// │ Entered if: configuration has 'fast_connect: true' │
54
+ /// │ Optimization to skip scanning when possible: │
55
+ /// │ │
56
+ /// │ 1. INITIAL_CONNECT → Try one of: │
57
+ /// │ a) Saved BSSID+channel (from previous boot) │
58
+ /// │ b) First configured non-hidden network (any BSSID) │
59
+ /// │ ↓ │
60
+ /// │ [FAILED] → Check if more configured networks available │
61
+ /// │ ↓ │
62
+ /// │ 2. FAST_CONNECT_CYCLING_APS → Try remaining configured networks │
63
+ /// │ (1 attempt each, any BSSID) │
64
+ /// │ ↓ │
65
+ /// │ [All Failed] → Fall through to explicit hidden or scanning │
66
+ /// │ │
67
+ /// │ Note: Fast connect data saved from previous successful connection │
68
+ /// └──────────────────────────────────────────────────────────────────────┘
69
+ /// ↓
70
+ /// ┌──────────────────────────────────────────────────────────────────────┐
71
+ /// │ Explicit Hidden Networks Path (Optional) │
72
+ /// ├──────────────────────────────────────────────────────────────────────┤
73
+ /// │ Entered if: first configured network has 'hidden: true' │
74
+ /// │ │
75
+ /// │ 1. EXPLICIT_HIDDEN → Try consecutive hidden networks (1 attempt) │
76
+ /// │ Stop when visible network reached │
77
+ /// │ ↓ │
78
+ /// │ Example: Hidden1, Hidden2, Visible1, Hidden3, Visible2 │
79
+ /// │ Try: Hidden1, Hidden2 (stop at Visible1) │
80
+ /// │ ↓ │
81
+ /// │ [All Failed] → Fall back to scan-based connection │
82
+ /// │ │
83
+ /// │ Note: Fast connect saves BSSID after first successful connection, │
84
+ /// │ so subsequent boots use fast path instead of hidden mode │
85
+ /// └──────────────────────────────────────────────────────────────────────┘
86
+ /// ↓
87
+ /// ┌──────────────────────────────────────────────────────────────────────┐
88
+ /// │ Scan-Based Connection Path │
89
+ /// ├──────────────────────────────────────────────────────────────────────┤
90
+ /// │ │
91
+ /// │ 1. SCAN → Sort by priority (highest first), then RSSI │
92
+ /// │ ┌─────────────────────────────────────────────────┐ │
93
+ /// │ │ scan_result_[0] = Best BSSID (highest priority) │ │
94
+ /// │ │ scan_result_[1] = Second best │ │
95
+ /// │ │ scan_result_[2] = Third best │ │
96
+ /// │ └─────────────────────────────────────────────────┘ │
97
+ /// │ ↓ │
98
+ /// │ 2. SCAN_CONNECTING → Try scan_result_[0] (2 attempts) │
99
+ /// │ (Visible1, Visible2 from example above) │
100
+ /// │ ↓ │
101
+ /// │ 3. FAILED → Decrease priority: 0.0 → -1.0 → -2.0 │
102
+ /// │ (stored in persistent sta_priorities_) │
103
+ /// │ ↓ │
104
+ /// │ 4. Check for hidden networks: │
105
+ /// │ - If found → RETRY_HIDDEN (try SSIDs not in scan, 1 attempt) │
106
+ /// │ Skip hidden networks before first visible one │
107
+ /// │ (Skip Hidden1/Hidden2, try Hidden3 from example) │
108
+ /// │ - If none → Skip RETRY_HIDDEN, go to step 5 │
109
+ /// │ ↓ │
110
+ /// │ 5. FAILED → RESTARTING_ADAPTER (skipped if AP/improv active) │
111
+ /// │ ↓ │
112
+ /// │ 6. Loop back to start: │
113
+ /// │ - If first network is hidden → EXPLICIT_HIDDEN (retry cycle) │
114
+ /// │ - Otherwise → SCAN_CONNECTING (rescan) │
115
+ /// │ ↓ │
116
+ /// │ 7. RESCAN → Apply stored priorities, sort again │
117
+ /// │ ┌─────────────────────────────────────────────────┐ │
118
+ /// │ │ scan_result_[0] = BSSID B (priority 0.0) ← NEW │ │
119
+ /// │ │ scan_result_[1] = BSSID C (priority 0.0) │ │
120
+ /// │ │ scan_result_[2] = BSSID A (priority -2.0) ← OLD │ │
121
+ /// │ └─────────────────────────────────────────────────┘ │
122
+ /// │ ↓ │
123
+ /// │ 8. SCAN_CONNECTING → Try scan_result_[0] (next best) │
124
+ /// │ │
125
+ /// │ Key: Priority system cycles through BSSIDs ACROSS scan cycles │
126
+ /// │ Full retry cycle: EXPLICIT_HIDDEN → SCAN → RETRY_HIDDEN │
127
+ /// │ Always try best available BSSID (scan_result_[0]) │
128
+ /// └──────────────────────────────────────────────────────────────────────┘
129
+ ///
130
+ /// Retry Phases:
131
+ /// - INITIAL_CONNECT: Try saved BSSID+channel (fast_connect), or fall back to normal flow
132
+ /// - FAST_CONNECT_CYCLING_APS: Cycle through remaining configured networks (1 attempt each, fast_connect only)
133
+ /// - EXPLICIT_HIDDEN: Try consecutive networks marked hidden:true before scanning (1 attempt per SSID)
134
+ /// - SCAN_CONNECTING: Connect using scan results (2 attempts per BSSID)
135
+ /// - RETRY_HIDDEN: Try networks not found in scan (1 attempt per SSID, skipped if none found)
136
+ /// - RESTARTING_ADAPTER: Restart WiFi adapter to clear stuck state
137
+ ///
138
+ /// Hidden Network Handling:
139
+ /// - Networks marked 'hidden: true' before first non-hidden → Tried in EXPLICIT_HIDDEN phase
140
+ /// - Networks marked 'hidden: true' after first non-hidden → Tried in RETRY_HIDDEN phase
141
+ /// - After successful connection, fast_connect saves BSSID → subsequent boots use fast path
142
+ /// - Networks not in scan results → Tried in RETRY_HIDDEN phase
143
+ /// - Networks visible in scan + not marked hidden → Skipped in RETRY_HIDDEN phase
144
+ /// - Networks marked 'hidden: true' always use hidden mode, even if broadcasting SSID
145
+
146
+ static const LogString *retry_phase_to_log_string(WiFiRetryPhase phase) {
147
+ switch (phase) {
148
+ case WiFiRetryPhase::INITIAL_CONNECT:
149
+ return LOG_STR("INITIAL_CONNECT");
150
+ #ifdef USE_WIFI_FAST_CONNECT
151
+ case WiFiRetryPhase::FAST_CONNECT_CYCLING_APS:
152
+ return LOG_STR("FAST_CONNECT_CYCLING");
153
+ #endif
154
+ case WiFiRetryPhase::EXPLICIT_HIDDEN:
155
+ return LOG_STR("EXPLICIT_HIDDEN");
156
+ case WiFiRetryPhase::SCAN_CONNECTING:
157
+ return LOG_STR("SCAN_CONNECTING");
158
+ case WiFiRetryPhase::RETRY_HIDDEN:
159
+ return LOG_STR("RETRY_HIDDEN");
160
+ case WiFiRetryPhase::RESTARTING_ADAPTER:
161
+ return LOG_STR("RESTARTING");
162
+ default:
163
+ return LOG_STR("UNKNOWN");
164
+ }
165
+ }
166
+
167
+ bool WiFiComponent::went_through_explicit_hidden_phase_() const {
168
+ // If first configured network is marked hidden, we went through EXPLICIT_HIDDEN phase
169
+ // This means those networks were already tried and should be skipped in RETRY_HIDDEN
170
+ return !this->sta_.empty() && this->sta_[0].get_hidden();
171
+ }
172
+
173
+ int8_t WiFiComponent::find_first_non_hidden_index_() const {
174
+ // Find the first network that is NOT marked hidden:true
175
+ // This is where EXPLICIT_HIDDEN phase would have stopped
176
+ for (size_t i = 0; i < this->sta_.size(); i++) {
177
+ if (!this->sta_[i].get_hidden()) {
178
+ return static_cast<int8_t>(i);
179
+ }
180
+ }
181
+ return -1; // All networks are hidden
182
+ }
183
+
184
+ // 2 attempts per BSSID in SCAN_CONNECTING phase
185
+ // Rationale: This is the ONLY phase where we decrease BSSID priority, so we must be very sure.
186
+ // Auth failures are common immediately after scan due to WiFi stack state transitions.
187
+ // Trying twice filters out false positives and prevents unnecessarily marking a good BSSID as bad.
188
+ // After 2 genuine failures, priority degradation ensures we skip this BSSID on subsequent scans.
189
+ static constexpr uint8_t WIFI_RETRY_COUNT_PER_BSSID = 2;
190
+
191
+ // 1 attempt per SSID in RETRY_HIDDEN phase
192
+ // Rationale: Try hidden mode once, then rescan to get next best BSSID via priority system
193
+ static constexpr uint8_t WIFI_RETRY_COUNT_PER_SSID = 1;
194
+
195
+ // 1 attempt per AP in fast_connect mode (INITIAL_CONNECT and FAST_CONNECT_CYCLING_APS)
196
+ // Rationale: Fast connect prioritizes speed - try each AP once to find a working one quickly
197
+ static constexpr uint8_t WIFI_RETRY_COUNT_PER_AP = 1;
198
+
199
+ /// Cooldown duration in milliseconds after adapter restart or repeated failures
200
+ /// Allows WiFi hardware to stabilize before next connection attempt
201
+ static constexpr uint32_t WIFI_COOLDOWN_DURATION_MS = 500;
202
+
203
+ /// Cooldown duration when fallback AP is active and captive portal may be running
204
+ /// Longer interval gives users time to configure WiFi without constant connection attempts
205
+ /// While connecting, WiFi can't beacon the AP properly, so needs longer cooldown
206
+ static constexpr uint32_t WIFI_COOLDOWN_WITH_AP_ACTIVE_MS = 30000;
207
+
208
+ static constexpr uint8_t get_max_retries_for_phase(WiFiRetryPhase phase) {
209
+ switch (phase) {
210
+ case WiFiRetryPhase::INITIAL_CONNECT:
211
+ #ifdef USE_WIFI_FAST_CONNECT
212
+ case WiFiRetryPhase::FAST_CONNECT_CYCLING_APS:
213
+ #endif
214
+ // INITIAL_CONNECT and FAST_CONNECT_CYCLING_APS both use 1 attempt per AP (fast_connect mode)
215
+ return WIFI_RETRY_COUNT_PER_AP;
216
+ case WiFiRetryPhase::EXPLICIT_HIDDEN:
217
+ // Explicitly hidden network: 1 attempt (user marked as hidden, try once then scan)
218
+ return WIFI_RETRY_COUNT_PER_SSID;
219
+ case WiFiRetryPhase::SCAN_CONNECTING:
220
+ // Scan-based phase: 2 attempts per BSSID (handles transient auth failures after scan)
221
+ return WIFI_RETRY_COUNT_PER_BSSID;
222
+ case WiFiRetryPhase::RETRY_HIDDEN:
223
+ // Hidden network mode: 1 attempt per SSID
224
+ return WIFI_RETRY_COUNT_PER_SSID;
225
+ default:
226
+ return WIFI_RETRY_COUNT_PER_BSSID;
227
+ }
228
+ }
229
+
230
+ static void apply_scan_result_to_params(WiFiAP &params, const WiFiScanResult &scan) {
231
+ params.set_hidden(false);
232
+ params.set_ssid(scan.get_ssid());
233
+ params.set_bssid(scan.get_bssid());
234
+ params.set_channel(scan.get_channel());
235
+ }
236
+
237
+ bool WiFiComponent::needs_scan_results_() const {
238
+ // Only SCAN_CONNECTING phase needs scan results
239
+ if (this->retry_phase_ != WiFiRetryPhase::SCAN_CONNECTING) {
240
+ return false;
241
+ }
242
+ // Need scan if we have no results or no matching networks
243
+ return this->scan_result_.empty() || !this->scan_result_[0].get_matches();
244
+ }
245
+
246
+ bool WiFiComponent::ssid_was_seen_in_scan_(const std::string &ssid) const {
247
+ // Check if this SSID is configured as hidden
248
+ // If explicitly marked hidden, we should always try hidden mode regardless of scan results
249
+ for (const auto &conf : this->sta_) {
250
+ if (conf.get_ssid() == ssid && conf.get_hidden()) {
251
+ return false; // Treat as not seen - force hidden mode attempt
252
+ }
253
+ }
254
+
255
+ // Otherwise, check if we saw it in scan results
256
+ for (const auto &scan : this->scan_result_) {
257
+ if (scan.get_ssid() == ssid) {
258
+ return true;
259
+ }
260
+ }
261
+ return false;
262
+ }
263
+
264
+ int8_t WiFiComponent::find_next_hidden_sta_(int8_t start_index) {
265
+ // Find next SSID that wasn't in scan results (might be hidden)
266
+ bool include_explicit_hidden = !this->went_through_explicit_hidden_phase_();
267
+ // Start searching from start_index + 1
268
+ for (size_t i = start_index + 1; i < this->sta_.size(); i++) {
269
+ const auto &sta = this->sta_[i];
270
+
271
+ // Skip networks that were already tried in EXPLICIT_HIDDEN phase
272
+ // Those are: networks marked hidden:true that appear before the first non-hidden network
273
+ // If all networks are hidden (first_non_hidden_idx == -1), skip all of them
274
+ if (!include_explicit_hidden && sta.get_hidden()) {
275
+ int8_t first_non_hidden_idx = this->find_first_non_hidden_index_();
276
+ if (first_non_hidden_idx < 0 || static_cast<int8_t>(i) < first_non_hidden_idx) {
277
+ ESP_LOGD(TAG, "Skipping " LOG_SECRET("'%s'") " (explicit hidden, already tried)", sta.get_ssid().c_str());
278
+ continue;
279
+ }
280
+ }
281
+
282
+ // If we didn't scan this cycle, treat all networks as potentially hidden
283
+ // Otherwise, only retry networks that weren't seen in the scan
284
+ if (!this->did_scan_this_cycle_ || !this->ssid_was_seen_in_scan_(sta.get_ssid())) {
285
+ ESP_LOGD(TAG, "Hidden candidate " LOG_SECRET("'%s'") " at index %d", sta.get_ssid().c_str(), static_cast<int>(i));
286
+ return static_cast<int8_t>(i);
287
+ }
288
+ ESP_LOGD(TAG, "Skipping hidden retry for visible network " LOG_SECRET("'%s'"), sta.get_ssid().c_str());
289
+ }
290
+ // No hidden SSIDs found
291
+ return -1;
292
+ }
293
+
294
+ void WiFiComponent::start_initial_connection_() {
295
+ // If first network (highest priority) is explicitly marked hidden, try it first before scanning
296
+ // This respects user's priority order when they explicitly configure hidden networks
297
+ if (!this->sta_.empty() && this->sta_[0].get_hidden()) {
298
+ ESP_LOGI(TAG, "Starting with explicit hidden network (highest priority)");
299
+ this->selected_sta_index_ = 0;
300
+ this->retry_phase_ = WiFiRetryPhase::EXPLICIT_HIDDEN;
301
+ WiFiAP params = this->build_params_for_current_phase_();
302
+ this->start_connecting(params);
303
+ } else {
304
+ ESP_LOGI(TAG, "Starting scan");
305
+ this->start_scanning();
306
+ }
307
+ }
308
+
309
+ #if defined(USE_ESP32) && defined(USE_WIFI_WPA2_EAP) && ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE
310
+ static const char *eap_phase2_to_str(esp_eap_ttls_phase2_types type) {
311
+ switch (type) {
312
+ case ESP_EAP_TTLS_PHASE2_PAP:
313
+ return "pap";
314
+ case ESP_EAP_TTLS_PHASE2_CHAP:
315
+ return "chap";
316
+ case ESP_EAP_TTLS_PHASE2_MSCHAP:
317
+ return "mschap";
318
+ case ESP_EAP_TTLS_PHASE2_MSCHAPV2:
319
+ return "mschapv2";
320
+ case ESP_EAP_TTLS_PHASE2_EAP:
321
+ return "eap";
322
+ default:
323
+ return "unknown";
324
+ }
325
+ }
326
+ #endif
327
+
328
+ float WiFiComponent::get_setup_priority() const { return setup_priority::WIFI; }
329
+
330
+ void WiFiComponent::setup() {
331
+ this->wifi_pre_setup_();
332
+
333
+ #if defined(USE_ESP32) && defined(USE_WIFI_RUNTIME_POWER_SAVE)
334
+ // Create semaphore for high-performance mode requests
335
+ // Start at 0, increment on request, decrement on release
336
+ this->high_performance_semaphore_ = xSemaphoreCreateCounting(UINT32_MAX, 0);
337
+ if (this->high_performance_semaphore_ == nullptr) {
338
+ ESP_LOGE(TAG, "Failed semaphore");
339
+ }
340
+
341
+ // Store the configured power save mode as baseline
342
+ this->configured_power_save_ = this->power_save_;
343
+ #endif
344
+
345
+ if (this->enable_on_boot_) {
346
+ this->start();
347
+ } else {
348
+ #ifdef USE_ESP32
349
+ esp_netif_init();
350
+ #endif
351
+ this->state_ = WIFI_COMPONENT_STATE_DISABLED;
352
+ }
353
+ }
354
+
355
+ void WiFiComponent::start() {
356
+ char mac_s[18];
357
+ ESP_LOGCONFIG(TAG,
358
+ "Starting\n"
359
+ " Local MAC: %s",
360
+ get_mac_address_pretty_into_buffer(mac_s));
361
+ this->last_connected_ = millis();
362
+
363
+ uint32_t hash = this->has_sta() ? fnv1_hash(App.get_compilation_time_ref().c_str()) : 88491487UL;
364
+
365
+ this->pref_ = global_preferences->make_preference<wifi::SavedWifiSettings>(hash, true);
366
+ #ifdef USE_WIFI_FAST_CONNECT
367
+ this->fast_connect_pref_ = global_preferences->make_preference<wifi::SavedWifiFastConnectSettings>(hash + 1, false);
368
+ #endif
369
+
370
+ SavedWifiSettings save{};
371
+ if (this->pref_.load(&save)) {
372
+ ESP_LOGD(TAG, "Loaded settings: %s", save.ssid);
373
+
374
+ WiFiAP sta{};
375
+ sta.set_ssid(save.ssid);
376
+ sta.set_password(save.password);
377
+ this->set_sta(sta);
378
+ }
379
+
380
+ if (this->has_sta()) {
381
+ this->wifi_sta_pre_setup_();
382
+ if (this->output_power_.has_value() && !this->wifi_apply_output_power_(*this->output_power_)) {
383
+ ESP_LOGV(TAG, "Setting Output Power Option failed");
384
+ }
385
+
386
+ #if defined(USE_ESP32) && defined(USE_WIFI_RUNTIME_POWER_SAVE)
387
+ // Synchronize power_save_ with semaphore state before applying
388
+ if (this->high_performance_semaphore_ != nullptr) {
389
+ UBaseType_t semaphore_count = uxSemaphoreGetCount(this->high_performance_semaphore_);
390
+ if (semaphore_count > 0) {
391
+ this->power_save_ = WIFI_POWER_SAVE_NONE;
392
+ this->is_high_performance_mode_ = true;
393
+ } else {
394
+ this->power_save_ = this->configured_power_save_;
395
+ this->is_high_performance_mode_ = false;
396
+ }
397
+ }
398
+ #endif
399
+ if (!this->wifi_apply_power_save_()) {
400
+ ESP_LOGV(TAG, "Setting Power Save Option failed");
401
+ }
402
+
403
+ this->transition_to_phase_(WiFiRetryPhase::INITIAL_CONNECT);
404
+ #ifdef USE_WIFI_FAST_CONNECT
405
+ WiFiAP params;
406
+ bool loaded_fast_connect = this->load_fast_connect_settings_(params);
407
+ // Fast connect optimization: only use when we have saved BSSID+channel data
408
+ // Without saved data, try first configured network or use normal flow
409
+ if (loaded_fast_connect) {
410
+ ESP_LOGI(TAG, "Starting fast_connect (saved) " LOG_SECRET("'%s'"), params.get_ssid().c_str());
411
+ this->start_connecting(params);
412
+ } else if (!this->sta_.empty() && !this->sta_[0].get_hidden()) {
413
+ // No saved data, but have configured networks - try first non-hidden network
414
+ ESP_LOGI(TAG, "Starting fast_connect (config) " LOG_SECRET("'%s'"), this->sta_[0].get_ssid().c_str());
415
+ this->selected_sta_index_ = 0;
416
+ params = this->build_params_for_current_phase_();
417
+ this->start_connecting(params);
418
+ } else {
419
+ // No saved data and (no networks OR first is hidden) - use normal flow
420
+ this->start_initial_connection_();
421
+ }
422
+ #else
423
+ // Without fast_connect: go straight to scanning (or hidden mode if all networks are hidden)
424
+ this->start_initial_connection_();
425
+ #endif
426
+ #ifdef USE_WIFI_AP
427
+ } else if (this->has_ap()) {
428
+ this->setup_ap_config_();
429
+ if (this->output_power_.has_value() && !this->wifi_apply_output_power_(*this->output_power_)) {
430
+ ESP_LOGV(TAG, "Setting Output Power Option failed");
431
+ }
432
+ #ifdef USE_CAPTIVE_PORTAL
433
+ if (captive_portal::global_captive_portal != nullptr) {
434
+ this->wifi_sta_pre_setup_();
435
+ this->start_scanning();
436
+ captive_portal::global_captive_portal->start();
437
+ }
438
+ #endif
439
+ #endif // USE_WIFI_AP
440
+ }
441
+ #ifdef USE_IMPROV
442
+ if (!this->has_sta() && esp32_improv::global_improv_component != nullptr) {
443
+ if (this->wifi_mode_(true, {}))
444
+ esp32_improv::global_improv_component->start();
445
+ }
446
+ #endif
447
+ this->wifi_apply_hostname_();
448
+ }
449
+
450
+ void WiFiComponent::restart_adapter() {
451
+ ESP_LOGW(TAG, "Restarting adapter");
452
+ this->wifi_mode_(false, {});
453
+ this->error_from_callback_ = false;
454
+ }
455
+
456
+ void WiFiComponent::loop() {
457
+ this->wifi_loop_();
458
+ const uint32_t now = App.get_loop_component_start_time();
459
+
460
+ if (this->has_sta()) {
461
+ if (this->is_connected() != this->handled_connected_state_) {
462
+ if (this->handled_connected_state_) {
463
+ this->disconnect_trigger_->trigger();
464
+ } else {
465
+ this->connect_trigger_->trigger();
466
+ }
467
+ this->handled_connected_state_ = this->is_connected();
468
+ }
469
+
470
+ switch (this->state_) {
471
+ case WIFI_COMPONENT_STATE_COOLDOWN: {
472
+ this->status_set_warning(LOG_STR("waiting to reconnect"));
473
+ // Skip cooldown if new credentials were provided while connecting
474
+ if (this->skip_cooldown_next_cycle_) {
475
+ this->skip_cooldown_next_cycle_ = false;
476
+ this->check_connecting_finished();
477
+ break;
478
+ }
479
+ // Use longer cooldown when captive portal/improv is active to avoid disrupting user config
480
+ bool portal_active = this->is_captive_portal_active_() || this->is_esp32_improv_active_();
481
+ uint32_t cooldown_duration = portal_active ? WIFI_COOLDOWN_WITH_AP_ACTIVE_MS : WIFI_COOLDOWN_DURATION_MS;
482
+ if (now - this->action_started_ > cooldown_duration) {
483
+ // After cooldown we either restarted the adapter because of
484
+ // a failure, or something tried to connect over and over
485
+ // so we entered cooldown. In both cases we call
486
+ // check_connecting_finished to continue the state machine.
487
+ this->check_connecting_finished();
488
+ }
489
+ break;
490
+ }
491
+ case WIFI_COMPONENT_STATE_STA_SCANNING: {
492
+ this->status_set_warning(LOG_STR("scanning for networks"));
493
+ this->check_scanning_finished();
494
+ break;
495
+ }
496
+ case WIFI_COMPONENT_STATE_STA_CONNECTING: {
497
+ this->status_set_warning(LOG_STR("associating to network"));
498
+ this->check_connecting_finished();
499
+ break;
500
+ }
501
+
502
+ case WIFI_COMPONENT_STATE_STA_CONNECTED: {
503
+ if (!this->is_connected()) {
504
+ ESP_LOGW(TAG, "Connection lost; reconnecting");
505
+ this->state_ = WIFI_COMPONENT_STATE_STA_CONNECTING;
506
+ // Clear error flag before reconnecting so first attempt is not seen as immediate failure
507
+ this->error_from_callback_ = false;
508
+ this->retry_connect();
509
+ } else {
510
+ this->status_clear_warning();
511
+ this->last_connected_ = now;
512
+ }
513
+ break;
514
+ }
515
+ case WIFI_COMPONENT_STATE_OFF:
516
+ case WIFI_COMPONENT_STATE_AP:
517
+ break;
518
+ case WIFI_COMPONENT_STATE_DISABLED:
519
+ return;
520
+ }
521
+
522
+ #ifdef USE_WIFI_AP
523
+ if (this->has_ap() && !this->ap_setup_) {
524
+ if (this->ap_timeout_ != 0 && (now - this->last_connected_ > this->ap_timeout_)) {
525
+ ESP_LOGI(TAG, "Starting fallback AP");
526
+ this->setup_ap_config_();
527
+ #ifdef USE_CAPTIVE_PORTAL
528
+ if (captive_portal::global_captive_portal != nullptr)
529
+ captive_portal::global_captive_portal->start();
530
+ #endif
531
+ }
532
+ }
533
+ #endif // USE_WIFI_AP
534
+
535
+ #ifdef USE_IMPROV
536
+ if (esp32_improv::global_improv_component != nullptr && !esp32_improv::global_improv_component->is_active() &&
537
+ !esp32_improv::global_improv_component->should_start()) {
538
+ if (now - this->last_connected_ > esp32_improv::global_improv_component->get_wifi_timeout()) {
539
+ if (this->wifi_mode_(true, {}))
540
+ esp32_improv::global_improv_component->start();
541
+ }
542
+ }
543
+
544
+ #endif
545
+
546
+ if (!this->has_ap() && this->reboot_timeout_ != 0) {
547
+ if (now - this->last_connected_ > this->reboot_timeout_) {
548
+ ESP_LOGE(TAG, "Can't connect; rebooting");
549
+ App.reboot();
550
+ }
551
+ }
552
+ }
553
+
554
+ #if defined(USE_ESP32) && defined(USE_WIFI_RUNTIME_POWER_SAVE)
555
+ // Check if power save mode needs to be updated based on high-performance requests
556
+ if (this->high_performance_semaphore_ != nullptr) {
557
+ // Semaphore count directly represents active requests (starts at 0, increments on request)
558
+ UBaseType_t semaphore_count = uxSemaphoreGetCount(this->high_performance_semaphore_);
559
+
560
+ if (semaphore_count > 0 && !this->is_high_performance_mode_) {
561
+ // Transition to high-performance mode (no power save)
562
+ ESP_LOGV(TAG, "Switching to high-performance mode (%" PRIu32 " active %s)", (uint32_t) semaphore_count,
563
+ semaphore_count == 1 ? "request" : "requests");
564
+ this->power_save_ = WIFI_POWER_SAVE_NONE;
565
+ if (this->wifi_apply_power_save_()) {
566
+ this->is_high_performance_mode_ = true;
567
+ }
568
+ } else if (semaphore_count == 0 && this->is_high_performance_mode_) {
569
+ // Restore to configured power save mode
570
+ ESP_LOGV(TAG, "Restoring power save mode to configured setting");
571
+ this->power_save_ = this->configured_power_save_;
572
+ if (this->wifi_apply_power_save_()) {
573
+ this->is_high_performance_mode_ = false;
574
+ }
575
+ }
576
+ }
577
+ #endif
578
+ }
579
+
580
+ WiFiComponent::WiFiComponent() { global_wifi_component = this; }
581
+
582
+ bool WiFiComponent::has_ap() const { return this->has_ap_; }
583
+ bool WiFiComponent::is_ap_active() const { return this->ap_started_; }
584
+ bool WiFiComponent::has_sta() const { return !this->sta_.empty(); }
585
+ #ifdef USE_WIFI_11KV_SUPPORT
586
+ void WiFiComponent::set_btm(bool btm) { this->btm_ = btm; }
587
+ void WiFiComponent::set_rrm(bool rrm) { this->rrm_ = rrm; }
588
+ #endif
589
+ network::IPAddresses WiFiComponent::get_ip_addresses() {
590
+ if (this->has_sta())
591
+ return this->wifi_sta_ip_addresses();
592
+
593
+ #ifdef USE_WIFI_AP
594
+ if (this->has_ap())
595
+ return {this->wifi_soft_ap_ip()};
596
+ #endif // USE_WIFI_AP
597
+
598
+ return {};
599
+ }
600
+ network::IPAddress WiFiComponent::get_dns_address(int num) {
601
+ if (this->has_sta())
602
+ return this->wifi_dns_ip_(num);
603
+ return {};
604
+ }
605
+ // set_use_address() is guaranteed to be called during component setup by Python code generation,
606
+ // so use_address_ will always be valid when get_use_address() is called - no fallback needed.
607
+ const char *WiFiComponent::get_use_address() const { return this->use_address_; }
608
+ void WiFiComponent::set_use_address(const char *use_address) { this->use_address_ = use_address; }
609
+
610
+ #ifdef USE_WIFI_AP
611
+ void WiFiComponent::setup_ap_config_() {
612
+ this->wifi_mode_({}, true);
613
+
614
+ if (this->ap_setup_)
615
+ return;
616
+
617
+ if (this->ap_.get_ssid().empty()) {
618
+ std::string name = App.get_name();
619
+ if (name.length() > 32) {
620
+ if (App.is_name_add_mac_suffix_enabled()) {
621
+ // Keep first 25 chars and last 7 chars (MAC suffix), remove middle
622
+ name.erase(25, name.length() - 32);
623
+ } else {
624
+ name.resize(32);
625
+ }
626
+ }
627
+ this->ap_.set_ssid(name);
628
+ }
629
+ this->ap_setup_ = this->wifi_start_ap_(this->ap_);
630
+
631
+ auto ip_address = this->wifi_soft_ap_ip().str();
632
+ ESP_LOGCONFIG(TAG,
633
+ "Setting up AP:\n"
634
+ " AP SSID: '%s'\n"
635
+ " AP Password: '%s'\n"
636
+ " IP Address: %s",
637
+ this->ap_.get_ssid().c_str(), this->ap_.get_password().c_str(), ip_address.c_str());
638
+
639
+ #ifdef USE_WIFI_MANUAL_IP
640
+ auto manual_ip = this->ap_.get_manual_ip();
641
+ if (manual_ip.has_value()) {
642
+ ESP_LOGCONFIG(TAG,
643
+ " AP Static IP: '%s'\n"
644
+ " AP Gateway: '%s'\n"
645
+ " AP Subnet: '%s'",
646
+ manual_ip->static_ip.str().c_str(), manual_ip->gateway.str().c_str(),
647
+ manual_ip->subnet.str().c_str());
648
+ }
649
+ #endif
650
+
651
+ if (!this->has_sta()) {
652
+ this->state_ = WIFI_COMPONENT_STATE_AP;
653
+ }
654
+ }
655
+
656
+ void WiFiComponent::set_ap(const WiFiAP &ap) {
657
+ this->ap_ = ap;
658
+ this->has_ap_ = true;
659
+ }
660
+ #endif // USE_WIFI_AP
661
+
662
+ float WiFiComponent::get_loop_priority() const {
663
+ return 10.0f; // before other loop components
664
+ }
665
+
666
+ void WiFiComponent::init_sta(size_t count) { this->sta_.init(count); }
667
+ void WiFiComponent::add_sta(const WiFiAP &ap) { this->sta_.push_back(ap); }
668
+ void WiFiComponent::set_sta(const WiFiAP &ap) {
669
+ this->clear_sta();
670
+ this->init_sta(1);
671
+ this->add_sta(ap);
672
+ this->selected_sta_index_ = 0;
673
+ // When new credentials are set (e.g., from improv), skip cooldown to retry immediately
674
+ this->skip_cooldown_next_cycle_ = true;
675
+ }
676
+
677
+ WiFiAP WiFiComponent::build_params_for_current_phase_() {
678
+ const WiFiAP *config = this->get_selected_sta_();
679
+ if (config == nullptr) {
680
+ ESP_LOGE(TAG, "No valid network config (selected_sta_index_=%d, sta_.size()=%zu)",
681
+ static_cast<int>(this->selected_sta_index_), this->sta_.size());
682
+ // Return empty params - caller should handle this gracefully
683
+ return WiFiAP();
684
+ }
685
+
686
+ WiFiAP params = *config;
687
+
688
+ switch (this->retry_phase_) {
689
+ case WiFiRetryPhase::INITIAL_CONNECT:
690
+ #ifdef USE_WIFI_FAST_CONNECT
691
+ case WiFiRetryPhase::FAST_CONNECT_CYCLING_APS:
692
+ #endif
693
+ // Fast connect phases: use config-only (no scan results)
694
+ // BSSID/channel from config if user specified them, otherwise empty
695
+ break;
696
+
697
+ case WiFiRetryPhase::EXPLICIT_HIDDEN:
698
+ case WiFiRetryPhase::RETRY_HIDDEN:
699
+ // Hidden network mode: clear BSSID/channel to trigger probe request
700
+ // (both explicit hidden and retry hidden use same behavior)
701
+ params.set_bssid(optional<bssid_t>{});
702
+ params.set_channel(optional<uint8_t>{});
703
+ break;
704
+
705
+ case WiFiRetryPhase::SCAN_CONNECTING:
706
+ // Scan-based phase: always use best scan result (index 0 - highest priority after sorting)
707
+ if (!this->scan_result_.empty()) {
708
+ apply_scan_result_to_params(params, this->scan_result_[0]);
709
+ }
710
+ break;
711
+
712
+ case WiFiRetryPhase::RESTARTING_ADAPTER:
713
+ // Should not be building params during restart
714
+ break;
715
+ }
716
+
717
+ return params;
718
+ }
719
+
720
+ WiFiAP WiFiComponent::get_sta() const {
721
+ const WiFiAP *config = this->get_selected_sta_();
722
+ return config ? *config : WiFiAP{};
723
+ }
724
+ void WiFiComponent::save_wifi_sta(const std::string &ssid, const std::string &password) {
725
+ SavedWifiSettings save{}; // zero-initialized - all bytes set to \0, guaranteeing null termination
726
+ strncpy(save.ssid, ssid.c_str(), sizeof(save.ssid) - 1); // max 32 chars, byte 32 remains \0
727
+ strncpy(save.password, password.c_str(), sizeof(save.password) - 1); // max 64 chars, byte 64 remains \0
728
+ this->pref_.save(&save);
729
+ // ensure it's written immediately
730
+ global_preferences->sync();
731
+
732
+ WiFiAP sta{};
733
+ sta.set_ssid(ssid);
734
+ sta.set_password(password);
735
+ this->set_sta(sta);
736
+
737
+ // Trigger connection attempt (exits cooldown if needed, no-op if already connecting/connected)
738
+ this->connect_soon_();
739
+ }
740
+
741
+ void WiFiComponent::connect_soon_() {
742
+ // Only trigger retry if we're in cooldown - if already connecting/connected, do nothing
743
+ if (this->state_ == WIFI_COMPONENT_STATE_COOLDOWN) {
744
+ ESP_LOGD(TAG, "Exiting cooldown early due to new WiFi credentials");
745
+ this->retry_connect();
746
+ }
747
+ }
748
+
749
+ void WiFiComponent::start_connecting(const WiFiAP &ap) {
750
+ // Log connection attempt at INFO level with priority
751
+ char bssid_s[18];
752
+ int8_t priority = 0;
753
+
754
+ if (ap.get_bssid().has_value()) {
755
+ format_mac_addr_upper(ap.get_bssid().value().data(), bssid_s);
756
+ priority = this->get_sta_priority(ap.get_bssid().value());
757
+ }
758
+
759
+ ESP_LOGI(TAG,
760
+ "Connecting to " LOG_SECRET("'%s'") " " LOG_SECRET("(%s)") " (priority %d, attempt %u/%u in phase %s)...",
761
+ ap.get_ssid().c_str(), ap.get_bssid().has_value() ? bssid_s : LOG_STR_LITERAL("any"), priority,
762
+ this->num_retried_ + 1, get_max_retries_for_phase(this->retry_phase_),
763
+ LOG_STR_ARG(retry_phase_to_log_string(this->retry_phase_)));
764
+
765
+ #ifdef ESPHOME_LOG_HAS_VERBOSE
766
+ ESP_LOGV(TAG, "Connection Params:");
767
+ ESP_LOGV(TAG, " SSID: '%s'", ap.get_ssid().c_str());
768
+ if (ap.get_bssid().has_value()) {
769
+ ESP_LOGV(TAG, " BSSID: %s", bssid_s);
770
+ } else {
771
+ ESP_LOGV(TAG, " BSSID: Not Set");
772
+ }
773
+
774
+ #ifdef USE_WIFI_WPA2_EAP
775
+ if (ap.get_eap().has_value()) {
776
+ ESP_LOGV(TAG, " WPA2 Enterprise authentication configured:");
777
+ EAPAuth eap_config = ap.get_eap().value();
778
+ ESP_LOGV(TAG, " Identity: " LOG_SECRET("'%s'"), eap_config.identity.c_str());
779
+ ESP_LOGV(TAG, " Username: " LOG_SECRET("'%s'"), eap_config.username.c_str());
780
+ ESP_LOGV(TAG, " Password: " LOG_SECRET("'%s'"), eap_config.password.c_str());
781
+ #if defined(USE_ESP32) && defined(USE_WIFI_WPA2_EAP) && ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE
782
+ ESP_LOGV(TAG, " TTLS Phase 2: " LOG_SECRET("'%s'"), eap_phase2_to_str(eap_config.ttls_phase_2));
783
+ #endif
784
+ bool ca_cert_present = eap_config.ca_cert != nullptr && strlen(eap_config.ca_cert);
785
+ bool client_cert_present = eap_config.client_cert != nullptr && strlen(eap_config.client_cert);
786
+ bool client_key_present = eap_config.client_key != nullptr && strlen(eap_config.client_key);
787
+ ESP_LOGV(TAG, " CA Cert: %s", ca_cert_present ? "present" : "not present");
788
+ ESP_LOGV(TAG, " Client Cert: %s", client_cert_present ? "present" : "not present");
789
+ ESP_LOGV(TAG, " Client Key: %s", client_key_present ? "present" : "not present");
790
+ } else {
791
+ #endif
792
+ ESP_LOGV(TAG, " Password: " LOG_SECRET("'%s'"), ap.get_password().c_str());
793
+ #ifdef USE_WIFI_WPA2_EAP
794
+ }
795
+ #endif
796
+ if (ap.get_channel().has_value()) {
797
+ ESP_LOGV(TAG, " Channel: %u", *ap.get_channel());
798
+ } else {
799
+ ESP_LOGV(TAG, " Channel not set");
800
+ }
801
+ #ifdef USE_WIFI_MANUAL_IP
802
+ if (ap.get_manual_ip().has_value()) {
803
+ ManualIP m = *ap.get_manual_ip();
804
+ ESP_LOGV(TAG, " Manual IP: Static IP=%s Gateway=%s Subnet=%s DNS1=%s DNS2=%s", m.static_ip.str().c_str(),
805
+ m.gateway.str().c_str(), m.subnet.str().c_str(), m.dns1.str().c_str(), m.dns2.str().c_str());
806
+ } else
807
+ #endif
808
+ {
809
+ ESP_LOGV(TAG, " Using DHCP IP");
810
+ }
811
+ ESP_LOGV(TAG, " Hidden: %s", YESNO(ap.get_hidden()));
812
+ #endif
813
+
814
+ if (!this->wifi_sta_connect_(ap)) {
815
+ ESP_LOGE(TAG, "wifi_sta_connect_ failed");
816
+ // Enter cooldown to allow WiFi hardware to stabilize
817
+ // (immediate failure suggests hardware not ready, different from connection timeout)
818
+ this->state_ = WIFI_COMPONENT_STATE_COOLDOWN;
819
+ } else {
820
+ this->state_ = WIFI_COMPONENT_STATE_STA_CONNECTING;
821
+ }
822
+ this->action_started_ = millis();
823
+ }
824
+
825
+ const LogString *get_signal_bars(int8_t rssi) {
826
+ // Check for disconnected sentinel value first
827
+ if (rssi == WIFI_RSSI_DISCONNECTED) {
828
+ // MULTIPLICATION SIGN
829
+ // Unicode: U+00D7, UTF-8: C3 97
830
+ return LOG_STR("\033[0;31m" // red
831
+ "\xc3\x97\xc3\x97\xc3\x97\xc3\x97"
832
+ "\033[0m");
833
+ }
834
+ // LOWER ONE QUARTER BLOCK
835
+ // Unicode: U+2582, UTF-8: E2 96 82
836
+ // LOWER HALF BLOCK
837
+ // Unicode: U+2584, UTF-8: E2 96 84
838
+ // LOWER THREE QUARTERS BLOCK
839
+ // Unicode: U+2586, UTF-8: E2 96 86
840
+ // FULL BLOCK
841
+ // Unicode: U+2588, UTF-8: E2 96 88
842
+ if (rssi >= -50) {
843
+ return LOG_STR("\033[0;32m" // green
844
+ "\xe2\x96\x82"
845
+ "\xe2\x96\x84"
846
+ "\xe2\x96\x86"
847
+ "\xe2\x96\x88"
848
+ "\033[0m");
849
+ } else if (rssi >= -65) {
850
+ return LOG_STR("\033[0;33m" // yellow
851
+ "\xe2\x96\x82"
852
+ "\xe2\x96\x84"
853
+ "\xe2\x96\x86"
854
+ "\033[0;37m"
855
+ "\xe2\x96\x88"
856
+ "\033[0m");
857
+ } else if (rssi >= -85) {
858
+ return LOG_STR("\033[0;33m" // yellow
859
+ "\xe2\x96\x82"
860
+ "\xe2\x96\x84"
861
+ "\033[0;37m"
862
+ "\xe2\x96\x86"
863
+ "\xe2\x96\x88"
864
+ "\033[0m");
865
+ } else {
866
+ return LOG_STR("\033[0;31m" // red
867
+ "\xe2\x96\x82"
868
+ "\033[0;37m"
869
+ "\xe2\x96\x84"
870
+ "\xe2\x96\x86"
871
+ "\xe2\x96\x88"
872
+ "\033[0m");
873
+ }
874
+ }
875
+
876
+ void WiFiComponent::print_connect_params_() {
877
+ bssid_t bssid = wifi_bssid();
878
+ char bssid_s[18];
879
+ format_mac_addr_upper(bssid.data(), bssid_s);
880
+
881
+ char mac_s[18];
882
+ ESP_LOGCONFIG(TAG, " Local MAC: %s", get_mac_address_pretty_into_buffer(mac_s));
883
+ if (this->is_disabled()) {
884
+ ESP_LOGCONFIG(TAG, " Disabled");
885
+ return;
886
+ }
887
+ for (auto &ip : wifi_sta_ip_addresses()) {
888
+ if (ip.is_set()) {
889
+ ESP_LOGCONFIG(TAG, " IP Address: %s", ip.str().c_str());
890
+ }
891
+ }
892
+ int8_t rssi = wifi_rssi();
893
+ ESP_LOGCONFIG(TAG,
894
+ " SSID: " LOG_SECRET("'%s'") "\n"
895
+ " BSSID: " LOG_SECRET("%s") "\n"
896
+ " Hostname: '%s'\n"
897
+ " Signal strength: %d dB %s\n"
898
+ " Channel: %" PRId32 "\n"
899
+ " Subnet: %s\n"
900
+ " Gateway: %s\n"
901
+ " DNS1: %s\n"
902
+ " DNS2: %s",
903
+ wifi_ssid().c_str(), bssid_s, App.get_name().c_str(), rssi, LOG_STR_ARG(get_signal_bars(rssi)),
904
+ get_wifi_channel(), wifi_subnet_mask_().str().c_str(), wifi_gateway_ip_().str().c_str(),
905
+ wifi_dns_ip_(0).str().c_str(), wifi_dns_ip_(1).str().c_str());
906
+ #ifdef ESPHOME_LOG_HAS_VERBOSE
907
+ if (const WiFiAP *config = this->get_selected_sta_(); config && config->get_bssid().has_value()) {
908
+ ESP_LOGV(TAG, " Priority: %d", this->get_sta_priority(*config->get_bssid()));
909
+ }
910
+ #endif
911
+ #ifdef USE_WIFI_11KV_SUPPORT
912
+ ESP_LOGCONFIG(TAG,
913
+ " BTM: %s\n"
914
+ " RRM: %s",
915
+ this->btm_ ? "enabled" : "disabled", this->rrm_ ? "enabled" : "disabled");
916
+ #endif
917
+ }
918
+
919
+ void WiFiComponent::enable() {
920
+ if (this->state_ != WIFI_COMPONENT_STATE_DISABLED)
921
+ return;
922
+
923
+ ESP_LOGD(TAG, "Enabling");
924
+ this->error_from_callback_ = false;
925
+ this->state_ = WIFI_COMPONENT_STATE_OFF;
926
+ this->start();
927
+ }
928
+
929
+ void WiFiComponent::disable() {
930
+ if (this->state_ == WIFI_COMPONENT_STATE_DISABLED)
931
+ return;
932
+
933
+ ESP_LOGD(TAG, "Disabling");
934
+ this->state_ = WIFI_COMPONENT_STATE_DISABLED;
935
+ this->wifi_disconnect_();
936
+ this->wifi_mode_(false, false);
937
+ }
938
+
939
+ bool WiFiComponent::is_disabled() { return this->state_ == WIFI_COMPONENT_STATE_DISABLED; }
940
+
941
+ void WiFiComponent::start_scanning() {
942
+ this->action_started_ = millis();
943
+ ESP_LOGD(TAG, "Starting scan");
944
+ this->wifi_scan_start_(this->passive_scan_);
945
+ this->state_ = WIFI_COMPONENT_STATE_STA_SCANNING;
946
+ }
947
+
948
+ /// Comparator for WiFi scan result sorting - determines which network should be tried first
949
+ /// Returns true if 'a' should be placed before 'b' in the sorted order (a is "better" than b)
950
+ ///
951
+ /// Sorting logic (in priority order):
952
+ /// 1. Matching networks always ranked before non-matching networks
953
+ /// 2. For matching networks: Priority first (CRITICAL - tracks failure history)
954
+ /// 3. RSSI as tiebreaker for equal priority or non-matching networks
955
+ ///
956
+ /// WHY PRIORITY MUST BE CHECKED FIRST:
957
+ /// The priority field tracks connection failure history via priority degradation:
958
+ /// - Initial priority: 0.0 (from config or default)
959
+ /// - Each connection failure: priority -= 1.0 (becomes -1.0, -2.0, -3.0, etc.)
960
+ /// - Failed BSSIDs sorted lower → naturally try different BSSID on next scan
961
+ ///
962
+ /// This enables automatic BSSID cycling for various real-world failure scenarios:
963
+ /// - Crashed/hung AP (visible but not responding)
964
+ /// - Misconfigured mesh node (accepts auth but no DHCP/routing)
965
+ /// - Capacity limits (AP refuses new clients)
966
+ /// - Rogue AP (same SSID, wrong password or malicious)
967
+ /// - Intermittent hardware issues (flaky radio, overheating)
968
+ ///
969
+ /// Example mesh network: 3 APs with same SSID "home", all at priority 0.0 initially
970
+ /// - Try strongest BSSID A (sorted by RSSI) → fails → priority A becomes -1.0
971
+ /// - Next scan: BSSID B and C (priority 0.0) sorted BEFORE A (priority -1.0)
972
+ /// - Try next strongest BSSID B → succeeds or fails and gets deprioritized
973
+ /// - System naturally cycles through all BSSIDs via priority degradation
974
+ /// - Eventually finds working AP or tries all options before restarting adapter
975
+ ///
976
+ /// If we checked RSSI first (Bug in PR #9963):
977
+ /// - Same failed BSSID would keep being selected if it has strongest signal
978
+ /// - Device stuck connecting to crashed AP with -30dBm while working AP at -50dBm ignored
979
+ /// - Priority degradation would be useless
980
+ /// - Mesh networks would never recover from single AP failure
981
+ [[nodiscard]] inline static bool wifi_scan_result_is_better(const WiFiScanResult &a, const WiFiScanResult &b) {
982
+ // Matching networks always come before non-matching
983
+ if (a.get_matches() && !b.get_matches())
984
+ return true;
985
+ if (!a.get_matches() && b.get_matches())
986
+ return false;
987
+
988
+ // Both matching: check priority first (tracks connection failures via priority degradation)
989
+ // Priority is decreased when a BSSID fails to connect, so lower priority = previously failed
990
+ if (a.get_matches() && b.get_matches() && a.get_priority() != b.get_priority()) {
991
+ return a.get_priority() > b.get_priority();
992
+ }
993
+
994
+ // Use RSSI as tiebreaker (for equal-priority matching networks or all non-matching networks)
995
+ return a.get_rssi() > b.get_rssi();
996
+ }
997
+
998
+ // Helper function for insertion sort of WiFi scan results
999
+ // Using insertion sort instead of std::stable_sort saves flash memory
1000
+ // by avoiding template instantiations (std::rotate, std::stable_sort, lambdas)
1001
+ // IMPORTANT: This sort is stable (preserves relative order of equal elements)
1002
+ template<typename VectorType> static void insertion_sort_scan_results(VectorType &results) {
1003
+ const size_t size = results.size();
1004
+ for (size_t i = 1; i < size; i++) {
1005
+ // Make a copy to avoid issues with move semantics during comparison
1006
+ WiFiScanResult key = results[i];
1007
+ int32_t j = i - 1;
1008
+
1009
+ // Move elements that are worse than key to the right
1010
+ // For stability, we only move if key is strictly better than results[j]
1011
+ while (j >= 0 && wifi_scan_result_is_better(key, results[j])) {
1012
+ results[j + 1] = results[j];
1013
+ j--;
1014
+ }
1015
+ results[j + 1] = key;
1016
+ }
1017
+ }
1018
+
1019
+ // Helper function to log scan results - marked noinline to prevent re-inlining into loop
1020
+ __attribute__((noinline)) static void log_scan_result(const WiFiScanResult &res) {
1021
+ char bssid_s[18];
1022
+ auto bssid = res.get_bssid();
1023
+ format_mac_addr_upper(bssid.data(), bssid_s);
1024
+
1025
+ if (res.get_matches()) {
1026
+ ESP_LOGI(TAG, "- '%s' %s" LOG_SECRET("(%s) ") "%s", res.get_ssid().c_str(),
1027
+ res.get_is_hidden() ? LOG_STR_LITERAL("(HIDDEN) ") : LOG_STR_LITERAL(""), bssid_s,
1028
+ LOG_STR_ARG(get_signal_bars(res.get_rssi())));
1029
+ ESP_LOGD(TAG, " Channel: %2u, RSSI: %3d dB, Priority: %4d", res.get_channel(), res.get_rssi(), res.get_priority());
1030
+ } else {
1031
+ ESP_LOGD(TAG, "- " LOG_SECRET("'%s'") " " LOG_SECRET("(%s) ") "%s", res.get_ssid().c_str(), bssid_s,
1032
+ LOG_STR_ARG(get_signal_bars(res.get_rssi())));
1033
+ }
1034
+ }
1035
+
1036
+ void WiFiComponent::check_scanning_finished() {
1037
+ if (!this->scan_done_) {
1038
+ if (millis() - this->action_started_ > 30000) {
1039
+ ESP_LOGE(TAG, "Scan timeout");
1040
+ this->retry_connect();
1041
+ }
1042
+ return;
1043
+ }
1044
+ this->scan_done_ = false;
1045
+ this->did_scan_this_cycle_ = true;
1046
+
1047
+ if (this->scan_result_.empty()) {
1048
+ ESP_LOGW(TAG, "No networks found");
1049
+ this->retry_connect();
1050
+ return;
1051
+ }
1052
+
1053
+ ESP_LOGD(TAG, "Found networks:");
1054
+ for (auto &res : this->scan_result_) {
1055
+ for (auto &ap : this->sta_) {
1056
+ if (res.matches(ap)) {
1057
+ res.set_matches(true);
1058
+ // Cache priority lookup - do single search instead of 2 separate searches
1059
+ const bssid_t &bssid = res.get_bssid();
1060
+ if (!this->has_sta_priority(bssid)) {
1061
+ this->set_sta_priority(bssid, ap.get_priority());
1062
+ }
1063
+ res.set_priority(this->get_sta_priority(bssid));
1064
+ break;
1065
+ }
1066
+ }
1067
+ }
1068
+
1069
+ // Sort scan results using insertion sort for better memory efficiency
1070
+ insertion_sort_scan_results(this->scan_result_);
1071
+
1072
+ for (auto &res : this->scan_result_) {
1073
+ log_scan_result(res);
1074
+ }
1075
+
1076
+ // SYNCHRONIZATION POINT: Establish link between scan_result_[0] and selected_sta_index_
1077
+ // After sorting, scan_result_[0] contains the best network. Now find which sta_[i] config
1078
+ // matches that network and record it in selected_sta_index_. This keeps the two indices
1079
+ // synchronized so build_params_for_current_phase_() can safely use both to build connection parameters.
1080
+ const WiFiScanResult &scan_res = this->scan_result_[0];
1081
+ bool found_match = false;
1082
+ if (scan_res.get_matches()) {
1083
+ for (size_t i = 0; i < this->sta_.size(); i++) {
1084
+ if (scan_res.matches(this->sta_[i])) {
1085
+ // Safe cast: sta_.size() limited to MAX_WIFI_NETWORKS (127) in __init__.py validation
1086
+ // No overflow check needed - YAML validation prevents >127 networks
1087
+ this->selected_sta_index_ = static_cast<int8_t>(i); // Links scan_result_[0] with sta_[i]
1088
+ found_match = true;
1089
+ break;
1090
+ }
1091
+ }
1092
+ }
1093
+
1094
+ if (!found_match) {
1095
+ ESP_LOGW(TAG, "No matching network found");
1096
+ // No scan results matched our configured networks - transition directly to hidden mode
1097
+ // Don't call retry_connect() since we never attempted a connection (no BSSID to penalize)
1098
+ this->transition_to_phase_(WiFiRetryPhase::RETRY_HIDDEN);
1099
+ // If no hidden networks to try, skip connection attempt (will be handled on next loop)
1100
+ if (this->selected_sta_index_ == -1) {
1101
+ return;
1102
+ }
1103
+ // Now start connection attempt in hidden mode
1104
+ } else if (this->transition_to_phase_(WiFiRetryPhase::SCAN_CONNECTING)) {
1105
+ return; // scan started, wait for next loop iteration
1106
+ }
1107
+
1108
+ yield();
1109
+
1110
+ WiFiAP params = this->build_params_for_current_phase_();
1111
+ // Ensure we're in SCAN_CONNECTING phase when connecting with scan results
1112
+ // (needed when scan was started directly without transition_to_phase_, e.g., initial scan)
1113
+ this->start_connecting(params);
1114
+ }
1115
+
1116
+ void WiFiComponent::dump_config() {
1117
+ ESP_LOGCONFIG(TAG,
1118
+ "WiFi:\n"
1119
+ " Connected: %s",
1120
+ YESNO(this->is_connected()));
1121
+ this->print_connect_params_();
1122
+ }
1123
+
1124
+ void WiFiComponent::check_connecting_finished() {
1125
+ auto status = this->wifi_sta_connect_status_();
1126
+
1127
+ if (status == WiFiSTAConnectStatus::CONNECTED) {
1128
+ if (wifi_ssid().empty()) {
1129
+ ESP_LOGW(TAG, "Connection incomplete");
1130
+ this->retry_connect();
1131
+ return;
1132
+ }
1133
+
1134
+ ESP_LOGI(TAG, "Connected");
1135
+ // Warn if we had to retry with hidden network mode for a network that's not marked hidden
1136
+ // Only warn if we actually connected without scan data (SSID only), not if scan succeeded on retry
1137
+ if (const WiFiAP *config = this->get_selected_sta_(); this->retry_phase_ == WiFiRetryPhase::RETRY_HIDDEN &&
1138
+ config && !config->get_hidden() &&
1139
+ this->scan_result_.empty()) {
1140
+ ESP_LOGW(TAG, LOG_SECRET("'%s'") " should be marked hidden", config->get_ssid().c_str());
1141
+ }
1142
+ // Reset to initial phase on successful connection (don't log transition, just reset state)
1143
+ this->retry_phase_ = WiFiRetryPhase::INITIAL_CONNECT;
1144
+ this->num_retried_ = 0;
1145
+ // Ensure next connection attempt does not inherit error state
1146
+ // so when WiFi disconnects later we start fresh and don't see
1147
+ // the first connection as a failure.
1148
+ this->error_from_callback_ = false;
1149
+
1150
+ this->print_connect_params_();
1151
+
1152
+ if (this->has_ap()) {
1153
+ #ifdef USE_CAPTIVE_PORTAL
1154
+ if (this->is_captive_portal_active_()) {
1155
+ captive_portal::global_captive_portal->end();
1156
+ }
1157
+ #endif
1158
+ ESP_LOGD(TAG, "Disabling AP");
1159
+ this->wifi_mode_({}, false);
1160
+ }
1161
+ #ifdef USE_IMPROV
1162
+ if (this->is_esp32_improv_active_()) {
1163
+ esp32_improv::global_improv_component->stop();
1164
+ }
1165
+ #endif
1166
+
1167
+ this->state_ = WIFI_COMPONENT_STATE_STA_CONNECTED;
1168
+ this->num_retried_ = 0;
1169
+
1170
+ // Clear priority tracking if all priorities are at minimum
1171
+ this->clear_priorities_if_all_min_();
1172
+
1173
+ #ifdef USE_WIFI_FAST_CONNECT
1174
+ this->save_fast_connect_settings_();
1175
+ #endif
1176
+
1177
+ // Free scan results memory unless a component needs them
1178
+ if (!this->keep_scan_results_) {
1179
+ this->scan_result_.clear();
1180
+ this->scan_result_.shrink_to_fit();
1181
+ }
1182
+
1183
+ return;
1184
+ }
1185
+
1186
+ uint32_t now = millis();
1187
+ if (now - this->action_started_ > 30000) {
1188
+ ESP_LOGW(TAG, "Connection timeout");
1189
+ this->retry_connect();
1190
+ return;
1191
+ }
1192
+
1193
+ if (this->error_from_callback_) {
1194
+ ESP_LOGW(TAG, "Connecting to network failed (callback)");
1195
+ this->retry_connect();
1196
+ return;
1197
+ }
1198
+
1199
+ if (status == WiFiSTAConnectStatus::CONNECTING) {
1200
+ return;
1201
+ }
1202
+
1203
+ if (status == WiFiSTAConnectStatus::ERROR_NETWORK_NOT_FOUND) {
1204
+ ESP_LOGW(TAG, "Network no longer found");
1205
+ this->retry_connect();
1206
+ return;
1207
+ }
1208
+
1209
+ if (status == WiFiSTAConnectStatus::ERROR_CONNECT_FAILED) {
1210
+ ESP_LOGW(TAG, "Connecting to network failed");
1211
+ this->retry_connect();
1212
+ return;
1213
+ }
1214
+
1215
+ ESP_LOGW(TAG, "Unknown connection status %d", (int) status);
1216
+ this->retry_connect();
1217
+ }
1218
+
1219
+ /// Determine the next retry phase based on current state and failure conditions
1220
+ /// This function examines the current retry phase, number of retries, and failure reasons
1221
+ /// to decide what phase to move to next. It does not modify any state - it only returns
1222
+ /// the recommended next phase.
1223
+ ///
1224
+ /// @return The next WiFiRetryPhase to transition to (may be same as current phase if should retry)
1225
+ WiFiRetryPhase WiFiComponent::determine_next_phase_() {
1226
+ switch (this->retry_phase_) {
1227
+ case WiFiRetryPhase::INITIAL_CONNECT:
1228
+ #ifdef USE_WIFI_FAST_CONNECT
1229
+ case WiFiRetryPhase::FAST_CONNECT_CYCLING_APS:
1230
+ // INITIAL_CONNECT and FAST_CONNECT_CYCLING_APS: no retries, try next AP or fall back to scan
1231
+ if (this->selected_sta_index_ < static_cast<int8_t>(this->sta_.size()) - 1) {
1232
+ return WiFiRetryPhase::FAST_CONNECT_CYCLING_APS; // Move to next AP
1233
+ }
1234
+ #endif
1235
+ // Check if we should try explicit hidden networks before scanning
1236
+ // This handles reconnection after connection loss where first network is hidden
1237
+ if (!this->sta_.empty() && this->sta_[0].get_hidden()) {
1238
+ return WiFiRetryPhase::EXPLICIT_HIDDEN;
1239
+ }
1240
+ // No more APs to try, fall back to scan
1241
+ return WiFiRetryPhase::SCAN_CONNECTING;
1242
+
1243
+ case WiFiRetryPhase::EXPLICIT_HIDDEN: {
1244
+ // Try all explicitly hidden networks before scanning
1245
+ if (this->num_retried_ + 1 < WIFI_RETRY_COUNT_PER_SSID) {
1246
+ return WiFiRetryPhase::EXPLICIT_HIDDEN; // Keep retrying same SSID
1247
+ }
1248
+
1249
+ // Exhausted retries on current SSID - check for more explicitly hidden networks
1250
+ // Stop when we reach a visible network (proceed to scanning)
1251
+ size_t next_index = this->selected_sta_index_ + 1;
1252
+ if (next_index < this->sta_.size() && this->sta_[next_index].get_hidden()) {
1253
+ // Found another explicitly hidden network
1254
+ return WiFiRetryPhase::EXPLICIT_HIDDEN;
1255
+ }
1256
+
1257
+ // No more consecutive explicitly hidden networks
1258
+ // If ALL networks are hidden, skip scanning and go directly to restart
1259
+ if (this->find_first_non_hidden_index_() < 0) {
1260
+ return WiFiRetryPhase::RESTARTING_ADAPTER;
1261
+ }
1262
+ // Otherwise proceed to scanning for non-hidden networks
1263
+ return WiFiRetryPhase::SCAN_CONNECTING;
1264
+ }
1265
+
1266
+ case WiFiRetryPhase::SCAN_CONNECTING:
1267
+ // If scan found no networks or no matching networks, skip to hidden network mode
1268
+ if (this->scan_result_.empty() || !this->scan_result_[0].get_matches()) {
1269
+ return WiFiRetryPhase::RETRY_HIDDEN;
1270
+ }
1271
+
1272
+ if (this->num_retried_ + 1 < WIFI_RETRY_COUNT_PER_BSSID) {
1273
+ return WiFiRetryPhase::SCAN_CONNECTING; // Keep retrying same BSSID
1274
+ }
1275
+
1276
+ // Exhausted retries on current BSSID (scan_result_[0])
1277
+ // Its priority has been decreased, so on next scan it will be sorted lower
1278
+ // and we'll try the next best BSSID.
1279
+ // Check if there are any potentially hidden networks to try
1280
+ if (this->find_next_hidden_sta_(-1) >= 0) {
1281
+ return WiFiRetryPhase::RETRY_HIDDEN; // Found hidden networks to try
1282
+ }
1283
+ // No hidden networks - always go through RESTARTING_ADAPTER phase
1284
+ // This ensures num_retried_ gets reset and a fresh scan is triggered
1285
+ // The actual adapter restart will be skipped if captive portal/improv is active
1286
+ return WiFiRetryPhase::RESTARTING_ADAPTER;
1287
+
1288
+ case WiFiRetryPhase::RETRY_HIDDEN:
1289
+ // If no hidden SSIDs to try (selected_sta_index_ == -1), skip directly to rescan
1290
+ if (this->selected_sta_index_ >= 0) {
1291
+ if (this->num_retried_ + 1 < WIFI_RETRY_COUNT_PER_SSID) {
1292
+ return WiFiRetryPhase::RETRY_HIDDEN; // Keep retrying same SSID
1293
+ }
1294
+
1295
+ // Exhausted retries on current SSID - check if there are more potentially hidden SSIDs to try
1296
+ if (this->selected_sta_index_ < static_cast<int8_t>(this->sta_.size()) - 1) {
1297
+ // Check if find_next_hidden_sta_() would actually find another hidden SSID
1298
+ // as it might have been seen in the scan results and we want to skip those
1299
+ // otherwise we will get stuck in RETRY_HIDDEN phase
1300
+ if (this->find_next_hidden_sta_(this->selected_sta_index_) != -1) {
1301
+ // More hidden SSIDs available - stay in RETRY_HIDDEN, advance will happen in retry_connect()
1302
+ return WiFiRetryPhase::RETRY_HIDDEN;
1303
+ }
1304
+ }
1305
+ }
1306
+ // Exhausted all potentially hidden SSIDs - always go through RESTARTING_ADAPTER
1307
+ // This ensures num_retried_ gets reset and a fresh scan is triggered
1308
+ // The actual adapter restart will be skipped if captive portal/improv is active
1309
+ return WiFiRetryPhase::RESTARTING_ADAPTER;
1310
+
1311
+ case WiFiRetryPhase::RESTARTING_ADAPTER:
1312
+ // After restart, go back to explicit hidden if we went through it initially
1313
+ if (this->went_through_explicit_hidden_phase_()) {
1314
+ return WiFiRetryPhase::EXPLICIT_HIDDEN;
1315
+ }
1316
+ // Skip scanning when captive portal/improv is active to avoid disrupting AP
1317
+ // Even passive scans can cause brief AP disconnections on ESP32
1318
+ if (this->is_captive_portal_active_() || this->is_esp32_improv_active_()) {
1319
+ return WiFiRetryPhase::RETRY_HIDDEN;
1320
+ }
1321
+ return WiFiRetryPhase::SCAN_CONNECTING;
1322
+ }
1323
+
1324
+ // Should never reach here
1325
+ return WiFiRetryPhase::SCAN_CONNECTING;
1326
+ }
1327
+
1328
+ /// Transition from current retry phase to a new phase with logging and phase-specific setup
1329
+ /// This function handles the actual state change, including:
1330
+ /// - Logging the phase transition
1331
+ /// - Resetting the retry counter
1332
+ /// - Performing phase-specific initialization (e.g., advancing AP index, starting scans)
1333
+ ///
1334
+ /// @param new_phase The phase we're transitioning TO
1335
+ /// @return true if connection attempt should be skipped (scan started or no networks to try)
1336
+ /// false if caller can proceed with connection attempt
1337
+ bool WiFiComponent::transition_to_phase_(WiFiRetryPhase new_phase) {
1338
+ WiFiRetryPhase old_phase = this->retry_phase_;
1339
+
1340
+ // No-op if staying in same phase
1341
+ if (old_phase == new_phase) {
1342
+ return false;
1343
+ }
1344
+
1345
+ ESP_LOGD(TAG, "Retry phase: %s → %s", LOG_STR_ARG(retry_phase_to_log_string(old_phase)),
1346
+ LOG_STR_ARG(retry_phase_to_log_string(new_phase)));
1347
+
1348
+ this->retry_phase_ = new_phase;
1349
+ this->num_retried_ = 0; // Reset retry counter on phase change
1350
+
1351
+ // Phase-specific setup
1352
+ switch (new_phase) {
1353
+ #ifdef USE_WIFI_FAST_CONNECT
1354
+ case WiFiRetryPhase::FAST_CONNECT_CYCLING_APS:
1355
+ // Move to next configured AP - clear old scan data so new AP is tried with config only
1356
+ this->selected_sta_index_++;
1357
+ this->scan_result_.clear();
1358
+ break;
1359
+ #endif
1360
+
1361
+ case WiFiRetryPhase::EXPLICIT_HIDDEN:
1362
+ // Starting explicit hidden phase - reset to first network
1363
+ this->selected_sta_index_ = 0;
1364
+ break;
1365
+
1366
+ case WiFiRetryPhase::SCAN_CONNECTING:
1367
+ // Transitioning to scan-based connection
1368
+ #ifdef USE_WIFI_FAST_CONNECT
1369
+ if (old_phase == WiFiRetryPhase::FAST_CONNECT_CYCLING_APS) {
1370
+ ESP_LOGI(TAG, "Fast connect exhausted, falling back to scan");
1371
+ }
1372
+ #endif
1373
+ // Trigger scan if we don't have scan results OR if transitioning from phases that need fresh scan
1374
+ if (this->scan_result_.empty() || old_phase == WiFiRetryPhase::EXPLICIT_HIDDEN ||
1375
+ old_phase == WiFiRetryPhase::RETRY_HIDDEN || old_phase == WiFiRetryPhase::RESTARTING_ADAPTER) {
1376
+ this->selected_sta_index_ = -1; // Will be set after scan completes
1377
+ this->start_scanning();
1378
+ return true; // Started scan, wait for completion
1379
+ }
1380
+ // Already have scan results - selected_sta_index_ should already be synchronized
1381
+ // (set in check_scanning_finished() when scan completed)
1382
+ // No need to reset it here
1383
+ break;
1384
+
1385
+ case WiFiRetryPhase::RETRY_HIDDEN:
1386
+ // Starting hidden mode - find first SSID that wasn't in scan results
1387
+ if (old_phase == WiFiRetryPhase::SCAN_CONNECTING) {
1388
+ // Keep scan results so we can skip SSIDs that were visible in the scan
1389
+ // Don't clear scan_result_ - we need it to know which SSIDs are NOT hidden
1390
+
1391
+ // If first network is marked hidden, we went through EXPLICIT_HIDDEN phase
1392
+ // In that case, skip networks marked hidden:true (already tried)
1393
+ // Otherwise, include them (they haven't been tried yet)
1394
+ this->selected_sta_index_ = this->find_next_hidden_sta_(-1);
1395
+
1396
+ if (this->selected_sta_index_ == -1) {
1397
+ ESP_LOGD(TAG, "All SSIDs visible or already tried, skipping hidden mode");
1398
+ }
1399
+ }
1400
+ break;
1401
+
1402
+ case WiFiRetryPhase::RESTARTING_ADAPTER:
1403
+ // Skip actual adapter restart if captive portal/improv is active
1404
+ // This allows state machine to reset num_retried_ and trigger fresh scan
1405
+ // without disrupting the captive portal/improv connection
1406
+ if (!this->is_captive_portal_active_() && !this->is_esp32_improv_active_()) {
1407
+ this->restart_adapter();
1408
+ }
1409
+ // Clear scan flag - we're starting a new retry cycle
1410
+ this->did_scan_this_cycle_ = false;
1411
+ // Always enter cooldown after restart (or skip-restart) to allow stabilization
1412
+ // Use extended cooldown when AP is active to avoid constant scanning that blocks DNS
1413
+ this->state_ = WIFI_COMPONENT_STATE_COOLDOWN;
1414
+ this->action_started_ = millis();
1415
+ // Return true to indicate we should wait (go to COOLDOWN) instead of immediately connecting
1416
+ return true;
1417
+
1418
+ default:
1419
+ break;
1420
+ }
1421
+
1422
+ return false; // Did not start scan, can proceed with connection
1423
+ }
1424
+
1425
+ /// Clear BSSID priority tracking if all priorities are at minimum (saves memory)
1426
+ /// At minimum priority, all BSSIDs are equally bad, so priority tracking is useless
1427
+ /// Called after successful connection or after failed connection attempts
1428
+ void WiFiComponent::clear_priorities_if_all_min_() {
1429
+ if (this->sta_priorities_.empty()) {
1430
+ return;
1431
+ }
1432
+
1433
+ int8_t first_priority = this->sta_priorities_[0].priority;
1434
+
1435
+ // Only clear if all priorities have been decremented to the minimum value
1436
+ // At this point, all BSSIDs have been equally penalized and priority info is useless
1437
+ if (first_priority != std::numeric_limits<int8_t>::min()) {
1438
+ return;
1439
+ }
1440
+
1441
+ for (const auto &pri : this->sta_priorities_) {
1442
+ if (pri.priority != first_priority) {
1443
+ return; // Not all same, nothing to do
1444
+ }
1445
+ }
1446
+
1447
+ // All priorities are at minimum - clear the vector to save memory and reset
1448
+ ESP_LOGD(TAG, "Clearing BSSID priorities (all at minimum)");
1449
+ this->sta_priorities_.clear();
1450
+ this->sta_priorities_.shrink_to_fit();
1451
+ }
1452
+
1453
+ /// Log failed connection attempt and decrease BSSID priority to avoid repeated failures
1454
+ /// This function identifies which BSSID was attempted (from scan results or config),
1455
+ /// decreases its priority by 1.0 to discourage future attempts, and logs the change.
1456
+ ///
1457
+ /// The priority degradation system ensures that failed BSSIDs are automatically sorted
1458
+ /// lower in subsequent scans, naturally cycling through different APs without explicit
1459
+ /// BSSID tracking within a scan cycle.
1460
+ ///
1461
+ /// Priority sources:
1462
+ /// - SCAN_CONNECTING phase: Uses BSSID from scan_result_[0] (best match after sorting)
1463
+ /// - Other phases: Uses BSSID from config if explicitly specified by user or fast_connect
1464
+ ///
1465
+ /// If no BSSID is available (SSID-only connection), priority adjustment is skipped.
1466
+ ///
1467
+ /// IMPORTANT: Priority is only decreased on the LAST attempt for a BSSID in SCAN_CONNECTING phase.
1468
+ /// This prevents false positives from transient WiFi stack state issues after scanning.
1469
+ /// Single failures don't necessarily mean the AP is bad - two genuine failures provide
1470
+ /// higher confidence before degrading priority and skipping the BSSID in future scans.
1471
+ void WiFiComponent::log_and_adjust_priority_for_failed_connect_() {
1472
+ // Determine which BSSID we tried to connect to
1473
+ optional<bssid_t> failed_bssid;
1474
+
1475
+ if (this->retry_phase_ == WiFiRetryPhase::SCAN_CONNECTING && !this->scan_result_.empty()) {
1476
+ // Scan-based phase: always use best result (index 0)
1477
+ failed_bssid = this->scan_result_[0].get_bssid();
1478
+ } else if (const WiFiAP *config = this->get_selected_sta_(); config && config->get_bssid()) {
1479
+ // Config has specific BSSID (fast_connect or user-specified)
1480
+ failed_bssid = *config->get_bssid();
1481
+ }
1482
+
1483
+ if (!failed_bssid.has_value()) {
1484
+ return; // No BSSID to penalize
1485
+ }
1486
+
1487
+ // Get SSID for logging
1488
+ std::string ssid;
1489
+ if (this->retry_phase_ == WiFiRetryPhase::SCAN_CONNECTING && !this->scan_result_.empty()) {
1490
+ ssid = this->scan_result_[0].get_ssid();
1491
+ } else if (const WiFiAP *config = this->get_selected_sta_()) {
1492
+ ssid = config->get_ssid();
1493
+ }
1494
+
1495
+ // Only decrease priority on the last attempt for this phase
1496
+ // This prevents false positives from transient WiFi stack issues
1497
+ uint8_t max_retries = get_max_retries_for_phase(this->retry_phase_);
1498
+ bool is_last_attempt = (this->num_retried_ + 1 >= max_retries);
1499
+
1500
+ // Decrease priority only on last attempt to avoid false positives from transient failures
1501
+ int8_t old_priority = this->get_sta_priority(failed_bssid.value());
1502
+ int8_t new_priority = old_priority;
1503
+
1504
+ if (is_last_attempt) {
1505
+ // Decrease priority, but clamp to int8_t::min to prevent overflow
1506
+ new_priority =
1507
+ (old_priority > std::numeric_limits<int8_t>::min()) ? (old_priority - 1) : std::numeric_limits<int8_t>::min();
1508
+ this->set_sta_priority(failed_bssid.value(), new_priority);
1509
+ }
1510
+ char bssid_s[18];
1511
+ format_mac_addr_upper(failed_bssid.value().data(), bssid_s);
1512
+ ESP_LOGD(TAG, "Failed " LOG_SECRET("'%s'") " " LOG_SECRET("(%s)") ", priority %d → %d", ssid.c_str(), bssid_s,
1513
+ old_priority, new_priority);
1514
+
1515
+ // After adjusting priority, check if all priorities are now at minimum
1516
+ // If so, clear the vector to save memory and reset for fresh start
1517
+ this->clear_priorities_if_all_min_();
1518
+ }
1519
+
1520
+ /// Handle target advancement or retry counter increment when staying in the same phase
1521
+ /// This function is called when a connection attempt fails and determine_next_phase_() indicates
1522
+ /// we should stay in the current phase. It decides whether to:
1523
+ /// - Advance to the next target (AP in fast_connect, SSID in hidden mode)
1524
+ /// - Or increment the retry counter to try the same target again
1525
+ ///
1526
+ /// Phase-specific behavior:
1527
+ /// - FAST_CONNECT_CYCLING_APS: Always advance to next AP (no retries per AP)
1528
+ /// - RETRY_HIDDEN: Advance to next SSID after exhausting retries on current SSID
1529
+ /// - Other phases: Increment retry counter (will retry same target)
1530
+ void WiFiComponent::advance_to_next_target_or_increment_retry_() {
1531
+ WiFiRetryPhase current_phase = this->retry_phase_;
1532
+
1533
+ // Check if we need to advance to next AP/SSID within the same phase
1534
+ #ifdef USE_WIFI_FAST_CONNECT
1535
+ if (current_phase == WiFiRetryPhase::FAST_CONNECT_CYCLING_APS) {
1536
+ // Fast connect: always advance to next AP (no retries per AP)
1537
+ this->selected_sta_index_++;
1538
+ this->num_retried_ = 0;
1539
+ ESP_LOGD(TAG, "Next AP in %s", LOG_STR_ARG(retry_phase_to_log_string(this->retry_phase_)));
1540
+ return;
1541
+ }
1542
+ #endif
1543
+
1544
+ if (current_phase == WiFiRetryPhase::EXPLICIT_HIDDEN && this->num_retried_ + 1 >= WIFI_RETRY_COUNT_PER_SSID) {
1545
+ // Explicit hidden: exhausted retries on current SSID, find next explicitly hidden network
1546
+ // Stop when we reach a visible network (proceed to scanning)
1547
+ size_t next_index = this->selected_sta_index_ + 1;
1548
+ if (next_index < this->sta_.size() && this->sta_[next_index].get_hidden()) {
1549
+ this->selected_sta_index_ = static_cast<int8_t>(next_index);
1550
+ this->num_retried_ = 0;
1551
+ ESP_LOGD(TAG, "Next explicit hidden network at index %d", static_cast<int>(next_index));
1552
+ return;
1553
+ }
1554
+ // No more consecutive explicit hidden networks found - fall through to trigger phase change
1555
+ }
1556
+
1557
+ if (current_phase == WiFiRetryPhase::RETRY_HIDDEN && this->num_retried_ + 1 >= WIFI_RETRY_COUNT_PER_SSID) {
1558
+ // Hidden mode: exhausted retries on current SSID, find next potentially hidden SSID
1559
+ // If first network is marked hidden, we went through EXPLICIT_HIDDEN phase
1560
+ // In that case, skip networks marked hidden:true (already tried)
1561
+ // Otherwise, include them (they haven't been tried yet)
1562
+ int8_t next_index = this->find_next_hidden_sta_(this->selected_sta_index_);
1563
+ if (next_index != -1) {
1564
+ // Found another potentially hidden SSID
1565
+ this->selected_sta_index_ = next_index;
1566
+ this->num_retried_ = 0;
1567
+ return;
1568
+ }
1569
+ // No more potentially hidden SSIDs - set selected_sta_index_ to -1 to trigger phase change
1570
+ // This ensures determine_next_phase_() will skip the RETRY_HIDDEN logic and transition out
1571
+ this->selected_sta_index_ = -1;
1572
+ // Return early - phase change will happen on next wifi_loop() iteration
1573
+ return;
1574
+ }
1575
+
1576
+ // Don't increment retry counter if we're in a scan phase with no valid targets
1577
+ if (this->needs_scan_results_()) {
1578
+ return;
1579
+ }
1580
+
1581
+ // Increment retry counter to try the same target again
1582
+ this->num_retried_++;
1583
+ ESP_LOGD(TAG, "Retry attempt %u/%u in phase %s", this->num_retried_ + 1,
1584
+ get_max_retries_for_phase(this->retry_phase_), LOG_STR_ARG(retry_phase_to_log_string(this->retry_phase_)));
1585
+ }
1586
+
1587
+ void WiFiComponent::retry_connect() {
1588
+ this->log_and_adjust_priority_for_failed_connect_();
1589
+
1590
+ // Determine next retry phase based on current state
1591
+ WiFiRetryPhase current_phase = this->retry_phase_;
1592
+ WiFiRetryPhase next_phase = this->determine_next_phase_();
1593
+
1594
+ // Handle phase transitions (transition_to_phase_ handles same-phase no-op internally)
1595
+ if (this->transition_to_phase_(next_phase)) {
1596
+ return; // Scan started or adapter restarted (which sets its own state)
1597
+ }
1598
+
1599
+ if (next_phase == current_phase) {
1600
+ this->advance_to_next_target_or_increment_retry_();
1601
+ }
1602
+
1603
+ this->error_from_callback_ = false;
1604
+
1605
+ yield();
1606
+ // Check if we have a valid target before building params
1607
+ // After exhausting all networks in a phase, selected_sta_index_ may be -1
1608
+ // In that case, skip connection and let next wifi_loop() handle phase transition
1609
+ if (this->selected_sta_index_ >= 0) {
1610
+ WiFiAP params = this->build_params_for_current_phase_();
1611
+ this->start_connecting(params);
1612
+ }
1613
+ }
1614
+
1615
+ #ifdef USE_RP2040
1616
+ // RP2040's mDNS library (LEAmDNS) relies on LwipIntf::stateUpCB() to restart
1617
+ // mDNS when the network interface reconnects. However, this callback is disabled
1618
+ // in the arduino-pico framework. As a workaround, we block component setup until
1619
+ // WiFi is connected, ensuring mDNS.begin() is called with an active connection.
1620
+
1621
+ bool WiFiComponent::can_proceed() {
1622
+ if (!this->has_sta() || this->state_ == WIFI_COMPONENT_STATE_DISABLED || this->ap_setup_) {
1623
+ return true;
1624
+ }
1625
+ return this->is_connected();
1626
+ }
1627
+ #endif
1628
+
1629
+ void WiFiComponent::set_reboot_timeout(uint32_t reboot_timeout) { this->reboot_timeout_ = reboot_timeout; }
1630
+ bool WiFiComponent::is_connected() {
1631
+ return this->state_ == WIFI_COMPONENT_STATE_STA_CONNECTED &&
1632
+ this->wifi_sta_connect_status_() == WiFiSTAConnectStatus::CONNECTED && !this->error_from_callback_;
1633
+ }
1634
+ void WiFiComponent::set_power_save_mode(WiFiPowerSaveMode power_save) {
1635
+ this->power_save_ = power_save;
1636
+ #if defined(USE_ESP32) && defined(USE_WIFI_RUNTIME_POWER_SAVE)
1637
+ this->configured_power_save_ = power_save;
1638
+ #endif
1639
+ }
1640
+
1641
+ void WiFiComponent::set_passive_scan(bool passive) { this->passive_scan_ = passive; }
1642
+
1643
+ bool WiFiComponent::is_captive_portal_active_() {
1644
+ #ifdef USE_CAPTIVE_PORTAL
1645
+ return captive_portal::global_captive_portal != nullptr && captive_portal::global_captive_portal->is_active();
1646
+ #else
1647
+ return false;
1648
+ #endif
1649
+ }
1650
+ bool WiFiComponent::is_esp32_improv_active_() {
1651
+ #ifdef USE_IMPROV
1652
+ return esp32_improv::global_improv_component != nullptr && esp32_improv::global_improv_component->is_active();
1653
+ #else
1654
+ return false;
1655
+ #endif
1656
+ }
1657
+
1658
+ #if defined(USE_ESP32) && defined(USE_WIFI_RUNTIME_POWER_SAVE)
1659
+ bool WiFiComponent::request_high_performance() {
1660
+ // Already configured for high performance - request satisfied
1661
+ if (this->configured_power_save_ == WIFI_POWER_SAVE_NONE) {
1662
+ return true;
1663
+ }
1664
+
1665
+ // Semaphore initialization failed
1666
+ if (this->high_performance_semaphore_ == nullptr) {
1667
+ return false;
1668
+ }
1669
+
1670
+ // Give the semaphore (non-blocking). This increments the count.
1671
+ return xSemaphoreGive(this->high_performance_semaphore_) == pdTRUE;
1672
+ }
1673
+
1674
+ bool WiFiComponent::release_high_performance() {
1675
+ // Already configured for high performance - nothing to release
1676
+ if (this->configured_power_save_ == WIFI_POWER_SAVE_NONE) {
1677
+ return true;
1678
+ }
1679
+
1680
+ // Semaphore initialization failed
1681
+ if (this->high_performance_semaphore_ == nullptr) {
1682
+ return false;
1683
+ }
1684
+
1685
+ // Take the semaphore (non-blocking). This decrements the count.
1686
+ return xSemaphoreTake(this->high_performance_semaphore_, 0) == pdTRUE;
1687
+ }
1688
+ #endif // USE_ESP32 && USE_WIFI_RUNTIME_POWER_SAVE
1689
+
1690
+ #ifdef USE_WIFI_FAST_CONNECT
1691
+ bool WiFiComponent::load_fast_connect_settings_(WiFiAP &params) {
1692
+ SavedWifiFastConnectSettings fast_connect_save{};
1693
+
1694
+ if (this->fast_connect_pref_.load(&fast_connect_save)) {
1695
+ // Validate saved AP index
1696
+ if (fast_connect_save.ap_index < 0 || static_cast<size_t>(fast_connect_save.ap_index) >= this->sta_.size()) {
1697
+ ESP_LOGW(TAG, "AP index out of bounds");
1698
+ return false;
1699
+ }
1700
+
1701
+ // Set selected index for future operations (save, retry, etc)
1702
+ this->selected_sta_index_ = fast_connect_save.ap_index;
1703
+
1704
+ // Copy entire config, then override with fast connect data
1705
+ params = this->sta_[fast_connect_save.ap_index];
1706
+
1707
+ // Override with saved BSSID/channel from fast connect (SSID/password/etc already copied from config)
1708
+ bssid_t bssid{};
1709
+ std::copy(fast_connect_save.bssid, fast_connect_save.bssid + 6, bssid.begin());
1710
+ params.set_bssid(bssid);
1711
+ params.set_channel(fast_connect_save.channel);
1712
+ // Fast connect uses specific BSSID+channel, not hidden network probe (even if config has hidden: true)
1713
+ params.set_hidden(false);
1714
+
1715
+ ESP_LOGD(TAG, "Loaded fast_connect settings");
1716
+ return true;
1717
+ }
1718
+
1719
+ return false;
1720
+ }
1721
+
1722
+ void WiFiComponent::save_fast_connect_settings_() {
1723
+ bssid_t bssid = wifi_bssid();
1724
+ uint8_t channel = get_wifi_channel();
1725
+ // selected_sta_index_ is always valid here (called only after successful connection)
1726
+ // Fallback to 0 is defensive programming for robustness
1727
+ int8_t ap_index = this->selected_sta_index_ >= 0 ? this->selected_sta_index_ : 0;
1728
+
1729
+ // Skip save if settings haven't changed (compare with previously saved settings to reduce flash wear)
1730
+ SavedWifiFastConnectSettings previous_save{};
1731
+ if (this->fast_connect_pref_.load(&previous_save) && memcmp(previous_save.bssid, bssid.data(), 6) == 0 &&
1732
+ previous_save.channel == channel && previous_save.ap_index == ap_index) {
1733
+ return; // No change, nothing to save
1734
+ }
1735
+
1736
+ SavedWifiFastConnectSettings fast_connect_save{};
1737
+ memcpy(fast_connect_save.bssid, bssid.data(), 6);
1738
+ fast_connect_save.channel = channel;
1739
+ fast_connect_save.ap_index = ap_index;
1740
+
1741
+ this->fast_connect_pref_.save(&fast_connect_save);
1742
+
1743
+ ESP_LOGD(TAG, "Saved fast_connect settings");
1744
+ }
1745
+ #endif
1746
+
1747
+ void WiFiAP::set_ssid(const std::string &ssid) { this->ssid_ = ssid; }
1748
+ void WiFiAP::set_bssid(bssid_t bssid) { this->bssid_ = bssid; }
1749
+ void WiFiAP::set_bssid(optional<bssid_t> bssid) { this->bssid_ = bssid; }
1750
+ void WiFiAP::set_password(const std::string &password) { this->password_ = password; }
1751
+ #ifdef USE_WIFI_WPA2_EAP
1752
+ void WiFiAP::set_eap(optional<EAPAuth> eap_auth) { this->eap_ = std::move(eap_auth); }
1753
+ #endif
1754
+ void WiFiAP::set_channel(optional<uint8_t> channel) { this->channel_ = channel; }
1755
+ #ifdef USE_WIFI_MANUAL_IP
1756
+ void WiFiAP::set_manual_ip(optional<ManualIP> manual_ip) { this->manual_ip_ = manual_ip; }
1757
+ #endif
1758
+ void WiFiAP::set_hidden(bool hidden) { this->hidden_ = hidden; }
1759
+ const std::string &WiFiAP::get_ssid() const { return this->ssid_; }
1760
+ const optional<bssid_t> &WiFiAP::get_bssid() const { return this->bssid_; }
1761
+ const std::string &WiFiAP::get_password() const { return this->password_; }
1762
+ #ifdef USE_WIFI_WPA2_EAP
1763
+ const optional<EAPAuth> &WiFiAP::get_eap() const { return this->eap_; }
1764
+ #endif
1765
+ const optional<uint8_t> &WiFiAP::get_channel() const { return this->channel_; }
1766
+ #ifdef USE_WIFI_MANUAL_IP
1767
+ const optional<ManualIP> &WiFiAP::get_manual_ip() const { return this->manual_ip_; }
1768
+ #endif
1769
+ bool WiFiAP::get_hidden() const { return this->hidden_; }
1770
+
1771
+ WiFiScanResult::WiFiScanResult(const bssid_t &bssid, std::string ssid, uint8_t channel, int8_t rssi, bool with_auth,
1772
+ bool is_hidden)
1773
+ : bssid_(bssid),
1774
+ channel_(channel),
1775
+ rssi_(rssi),
1776
+ ssid_(std::move(ssid)),
1777
+ with_auth_(with_auth),
1778
+ is_hidden_(is_hidden) {}
1779
+ bool WiFiScanResult::matches(const WiFiAP &config) const {
1780
+ if (config.get_hidden()) {
1781
+ // User configured a hidden network, only match actually hidden networks
1782
+ // don't match SSID
1783
+ if (!this->is_hidden_)
1784
+ return false;
1785
+ } else if (!config.get_ssid().empty()) {
1786
+ // check if SSID matches
1787
+ if (config.get_ssid() != this->ssid_)
1788
+ return false;
1789
+ } else {
1790
+ // network is configured without SSID - match other settings
1791
+ }
1792
+ // If BSSID configured, only match for correct BSSIDs
1793
+ if (config.get_bssid().has_value() && *config.get_bssid() != this->bssid_)
1794
+ return false;
1795
+
1796
+ #ifdef USE_WIFI_WPA2_EAP
1797
+ // BSSID requires auth but no PSK or EAP credentials given
1798
+ if (this->with_auth_ && (config.get_password().empty() && !config.get_eap().has_value()))
1799
+ return false;
1800
+
1801
+ // BSSID does not require auth, but PSK or EAP credentials given
1802
+ if (!this->with_auth_ && (!config.get_password().empty() || config.get_eap().has_value()))
1803
+ return false;
1804
+ #else
1805
+ // If PSK given, only match for networks with auth (and vice versa)
1806
+ if (config.get_password().empty() == this->with_auth_)
1807
+ return false;
1808
+ #endif
1809
+
1810
+ // If channel configured, only match networks on that channel.
1811
+ if (config.get_channel().has_value() && *config.get_channel() != this->channel_) {
1812
+ return false;
1813
+ }
1814
+ return true;
1815
+ }
1816
+ bool WiFiScanResult::get_matches() const { return this->matches_; }
1817
+ void WiFiScanResult::set_matches(bool matches) { this->matches_ = matches; }
1818
+ const bssid_t &WiFiScanResult::get_bssid() const { return this->bssid_; }
1819
+ const std::string &WiFiScanResult::get_ssid() const { return this->ssid_; }
1820
+ uint8_t WiFiScanResult::get_channel() const { return this->channel_; }
1821
+ int8_t WiFiScanResult::get_rssi() const { return this->rssi_; }
1822
+ bool WiFiScanResult::get_with_auth() const { return this->with_auth_; }
1823
+ bool WiFiScanResult::get_is_hidden() const { return this->is_hidden_; }
1824
+
1825
+ bool WiFiScanResult::operator==(const WiFiScanResult &rhs) const { return this->bssid_ == rhs.bssid_; }
1826
+
1827
+ WiFiComponent *global_wifi_component; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
1828
+
1829
+ } // namespace esphome::wifi
1830
+ #endif