esphome 2025.4.1__py3-none-any.whl → 2025.5.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 (412) hide show
  1. esphome/components/ac_dimmer/ac_dimmer.cpp +3 -2
  2. esphome/components/adc/__init__.py +51 -34
  3. esphome/components/airthings_wave_base/__init__.py +1 -1
  4. esphome/components/alarm_control_panel/__init__.py +37 -2
  5. esphome/components/am43/cover/__init__.py +4 -5
  6. esphome/components/analog_threshold/analog_threshold_binary_sensor.cpp +6 -4
  7. esphome/components/analog_threshold/analog_threshold_binary_sensor.h +4 -5
  8. esphome/components/analog_threshold/binary_sensor.py +10 -8
  9. esphome/components/anova/climate.py +4 -5
  10. esphome/components/api/__init__.py +25 -8
  11. esphome/components/api/api_connection.cpp +77 -10
  12. esphome/components/api/api_connection.h +6 -1
  13. esphome/components/api/api_frame_helper.cpp +98 -130
  14. esphome/components/api/api_frame_helper.h +12 -2
  15. esphome/components/api/api_noise_context.h +13 -4
  16. esphome/components/api/api_pb2.cpp +1422 -1
  17. esphome/components/api/api_pb2.h +255 -1
  18. esphome/components/api/api_pb2_service.cpp +162 -49
  19. esphome/components/api/api_pb2_service.h +90 -51
  20. esphome/components/api/api_pb2_size.h +361 -0
  21. esphome/components/api/api_server.cpp +110 -34
  22. esphome/components/api/api_server.h +8 -0
  23. esphome/components/api/proto.h +38 -9
  24. esphome/components/as3935_i2c/as3935_i2c.h +0 -3
  25. esphome/components/as7341/as7341.h +1 -1
  26. esphome/components/atm90e32/__init__.py +1 -0
  27. esphome/components/atm90e32/atm90e32.cpp +576 -199
  28. esphome/components/atm90e32/atm90e32.h +128 -31
  29. esphome/components/atm90e32/atm90e32_reg.h +4 -2
  30. esphome/components/atm90e32/button/__init__.py +62 -10
  31. esphome/components/atm90e32/button/atm90e32_button.cpp +63 -4
  32. esphome/components/atm90e32/button/atm90e32_button.h +36 -4
  33. esphome/components/atm90e32/number/__init__.py +130 -0
  34. esphome/components/atm90e32/number/atm90e32_number.h +16 -0
  35. esphome/components/atm90e32/sensor.py +21 -4
  36. esphome/components/atm90e32/text_sensor/__init__.py +48 -0
  37. esphome/components/audio/__init__.py +96 -49
  38. esphome/components/audio/audio.h +48 -0
  39. esphome/components/audio/audio_decoder.cpp +1 -1
  40. esphome/components/audio/audio_resampler.cpp +2 -0
  41. esphome/components/audio/audio_resampler.h +1 -0
  42. esphome/components/ballu/climate.py +2 -9
  43. esphome/components/bang_bang/climate.py +5 -6
  44. esphome/components/bedjet/climate/__init__.py +3 -8
  45. esphome/components/bedjet/fan/__init__.py +2 -11
  46. esphome/components/binary/fan/__init__.py +13 -16
  47. esphome/components/binary_sensor/__init__.py +13 -10
  48. esphome/components/binary_sensor/binary_sensor.cpp +6 -10
  49. esphome/components/binary_sensor/binary_sensor.h +1 -1
  50. esphome/components/binary_sensor/filter.cpp +21 -21
  51. esphome/components/binary_sensor/filter.h +10 -10
  52. esphome/components/bl0906/constants.h +16 -16
  53. esphome/components/ble_client/text_sensor/__init__.py +3 -5
  54. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +4 -6
  55. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +135 -21
  56. esphome/components/bluetooth_proxy/bluetooth_proxy.h +7 -0
  57. esphome/components/button/__init__.py +11 -8
  58. esphome/components/canbus/canbus.cpp +3 -0
  59. esphome/components/canbus/canbus.h +16 -0
  60. esphome/components/climate/__init__.py +35 -2
  61. esphome/components/climate/climate_mode.h +1 -1
  62. esphome/components/climate/climate_traits.h +63 -57
  63. esphome/components/climate_ir/__init__.py +57 -17
  64. esphome/components/climate_ir_lg/climate.py +2 -5
  65. esphome/components/climate_ir_lg/climate_ir_lg.cpp +7 -7
  66. esphome/components/climate_ir_lg/climate_ir_lg.h +1 -1
  67. esphome/components/color/__init__.py +2 -0
  68. esphome/components/const/__init__.py +5 -0
  69. esphome/components/coolix/climate.py +2 -9
  70. esphome/components/copy/cover/__init__.py +10 -9
  71. esphome/components/copy/fan/__init__.py +11 -9
  72. esphome/components/copy/lock/__init__.py +11 -9
  73. esphome/components/copy/text/__init__.py +9 -6
  74. esphome/components/cover/__init__.py +37 -2
  75. esphome/components/cst226/binary_sensor/__init__.py +28 -0
  76. esphome/components/cst226/binary_sensor/cs226_button.h +22 -0
  77. esphome/components/cst226/binary_sensor/cstt6_button.cpp +19 -0
  78. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +27 -5
  79. esphome/components/cst226/touchscreen/cst226_touchscreen.h +10 -10
  80. esphome/components/current_based/cover.py +37 -36
  81. esphome/components/daikin/climate.py +2 -9
  82. esphome/components/daikin/daikin.cpp +15 -9
  83. esphome/components/daikin/daikin.h +5 -5
  84. esphome/components/daikin_arc/climate.py +2 -7
  85. esphome/components/daikin_brc/climate.py +3 -5
  86. esphome/components/dallas_temp/dallas_temp.cpp +17 -24
  87. esphome/components/dallas_temp/dallas_temp.h +0 -1
  88. esphome/components/debug/debug_component.cpp +5 -0
  89. esphome/components/debug/debug_component.h +6 -0
  90. esphome/components/debug/debug_esp32.cpp +109 -254
  91. esphome/components/debug/sensor.py +14 -0
  92. esphome/components/deep_sleep/deep_sleep_esp32.cpp +13 -1
  93. esphome/components/delonghi/climate.py +2 -9
  94. esphome/components/demo/__init__.py +18 -20
  95. esphome/components/dfrobot_sen0395/switch/__init__.py +21 -22
  96. esphome/components/display/rect.cpp +4 -9
  97. esphome/components/display/rect.h +1 -1
  98. esphome/components/emmeti/climate.py +2 -9
  99. esphome/components/endstop/cover.py +17 -16
  100. esphome/components/esp32/__init__.py +60 -3
  101. esphome/components/esp32/core.cpp +11 -5
  102. esphome/components/esp32/gpio.cpp +86 -24
  103. esphome/components/esp32/gpio.py +15 -16
  104. esphome/components/esp32/gpio_esp32.py +1 -2
  105. esphome/components/esp32/gpio_esp32_c2.py +1 -1
  106. esphome/components/esp32/gpio_esp32_c3.py +1 -1
  107. esphome/components/esp32/gpio_esp32_c6.py +1 -1
  108. esphome/components/esp32/gpio_esp32_h2.py +1 -1
  109. esphome/components/esp32_ble/ble.cpp +1 -8
  110. esphome/components/esp32_ble/ble.h +5 -3
  111. esphome/components/esp32_ble/ble_advertising.h +1 -0
  112. esphome/components/esp32_ble_server/__init__.py +3 -0
  113. esphome/components/esp32_ble_tracker/__init__.py +7 -1
  114. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +192 -118
  115. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +29 -3
  116. esphome/components/esp32_can/esp32_can.cpp +1 -1
  117. esphome/components/esp32_rmt_led_strip/led_strip.cpp +1 -1
  118. esphome/components/esp32_rmt_led_strip/led_strip.h +7 -5
  119. esphome/components/esp32_rmt_led_strip/light.py +9 -1
  120. esphome/components/esp8266/gpio.cpp +69 -8
  121. esphome/components/event/__init__.py +13 -10
  122. esphome/components/factory_reset/switch/__init__.py +7 -21
  123. esphome/components/fan/__init__.py +52 -5
  124. esphome/components/fastled_base/__init__.py +1 -4
  125. esphome/components/fastled_base/fastled_light.cpp +1 -1
  126. esphome/components/feedback/cover.py +38 -33
  127. esphome/components/fujitsu_general/climate.py +2 -9
  128. esphome/components/gpio/one_wire/gpio_one_wire.cpp +45 -43
  129. esphome/components/gpio/one_wire/gpio_one_wire.h +2 -1
  130. esphome/components/gpio_expander/cached_gpio.h +22 -7
  131. esphome/components/gps/__init__.py +11 -2
  132. esphome/components/gps/gps.cpp +11 -8
  133. esphome/components/gps/gps.h +9 -6
  134. esphome/components/graph/__init__.py +1 -2
  135. esphome/components/gree/climate.py +4 -6
  136. esphome/components/gree/gree.cpp +16 -2
  137. esphome/components/gree/gree.h +2 -2
  138. esphome/components/haier/climate.py +37 -34
  139. esphome/components/hbridge/fan/__init__.py +19 -17
  140. esphome/components/he60r/cover.py +4 -5
  141. esphome/components/heatpumpir/climate.py +3 -6
  142. esphome/components/hitachi_ac344/climate.py +2 -9
  143. esphome/components/hitachi_ac424/climate.py +2 -9
  144. esphome/components/hlw8012/hlw8012.cpp +1 -1
  145. esphome/components/hm3301/hm3301.h +1 -1
  146. esphome/components/http_request/__init__.py +39 -6
  147. esphome/components/http_request/http_request.cpp +20 -0
  148. esphome/components/http_request/http_request.h +57 -15
  149. esphome/components/http_request/http_request_arduino.cpp +22 -6
  150. esphome/components/http_request/http_request_arduino.h +4 -3
  151. esphome/components/http_request/http_request_host.cpp +141 -0
  152. esphome/components/http_request/http_request_host.h +37 -0
  153. esphome/components/http_request/http_request_idf.cpp +35 -3
  154. esphome/components/http_request/http_request_idf.h +10 -3
  155. esphome/components/http_request/httplib.h +9691 -0
  156. esphome/components/http_request/update/__init__.py +11 -8
  157. esphome/components/i2c/i2c.h +4 -0
  158. esphome/components/i2c/i2c_bus_esp_idf.cpp +1 -1
  159. esphome/components/i2s_audio/__init__.py +131 -22
  160. esphome/components/i2s_audio/i2s_audio.h +44 -4
  161. esphome/components/i2s_audio/media_player/__init__.py +19 -9
  162. esphome/components/i2s_audio/microphone/__init__.py +63 -5
  163. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +351 -61
  164. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +40 -6
  165. esphome/components/i2s_audio/speaker/__init__.py +31 -5
  166. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +155 -19
  167. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +17 -4
  168. esphome/components/ili9xxx/ili9xxx_init.h +1 -1
  169. esphome/components/image/__init__.py +37 -17
  170. esphome/components/image/image.cpp +25 -8
  171. esphome/components/internal_temperature/internal_temperature.cpp +6 -4
  172. esphome/components/key_collector/__init__.py +35 -0
  173. esphome/components/key_collector/key_collector.cpp +8 -0
  174. esphome/components/key_collector/key_collector.h +10 -0
  175. esphome/components/ld2410/ld2410.h +1 -1
  176. esphome/components/ld2450/ld2450.h +1 -1
  177. esphome/components/light/__init__.py +57 -0
  178. esphome/components/lock/__init__.py +51 -4
  179. esphome/components/lock/automation.h +2 -13
  180. esphome/components/logger/__init__.py +21 -0
  181. esphome/components/logger/logger.cpp +125 -95
  182. esphome/components/logger/logger.h +160 -35
  183. esphome/components/logger/task_log_buffer.cpp +138 -0
  184. esphome/components/logger/task_log_buffer.h +69 -0
  185. esphome/components/lvgl/__init__.py +13 -5
  186. esphome/components/lvgl/automation.py +50 -1
  187. esphome/components/lvgl/defines.py +0 -1
  188. esphome/components/lvgl/lv_validation.py +10 -1
  189. esphome/components/lvgl/lvgl_esphome.cpp +5 -1
  190. esphome/components/lvgl/schemas.py +14 -14
  191. esphome/components/lvgl/text/__init__.py +1 -2
  192. esphome/components/lvgl/widgets/arc.py +7 -6
  193. esphome/components/lvgl/widgets/buttonmatrix.py +3 -3
  194. esphome/components/lvgl/widgets/checkbox.py +2 -2
  195. esphome/components/lvgl/widgets/dropdown.py +2 -1
  196. esphome/components/lvgl/widgets/img.py +15 -12
  197. esphome/components/mapping/__init__.py +134 -0
  198. esphome/components/max7219digit/max7219digit.cpp +27 -27
  199. esphome/components/mdns/__init__.py +11 -5
  200. esphome/components/mdns/mdns_component.cpp +11 -5
  201. esphome/components/mdns/mdns_component.h +3 -2
  202. esphome/components/mdns/mdns_esp32.cpp +4 -3
  203. esphome/components/mdns/mdns_esp8266.cpp +4 -2
  204. esphome/components/mdns/mdns_libretiny.cpp +4 -2
  205. esphome/components/mdns/mdns_rp2040.cpp +4 -2
  206. esphome/components/media_player/__init__.py +40 -6
  207. esphome/components/micro_wake_word/__init__.py +99 -31
  208. esphome/components/micro_wake_word/automation.h +54 -0
  209. esphome/components/micro_wake_word/micro_wake_word.cpp +331 -319
  210. esphome/components/micro_wake_word/micro_wake_word.h +58 -105
  211. esphome/components/micro_wake_word/preprocessor_settings.h +19 -2
  212. esphome/components/micro_wake_word/streaming_model.cpp +158 -41
  213. esphome/components/micro_wake_word/streaming_model.h +85 -13
  214. esphome/components/microphone/__init__.py +139 -9
  215. esphome/components/microphone/automation.h +14 -2
  216. esphome/components/microphone/microphone.cpp +21 -0
  217. esphome/components/microphone/microphone.h +14 -5
  218. esphome/components/microphone/microphone_source.cpp +95 -0
  219. esphome/components/microphone/microphone_source.h +80 -0
  220. esphome/components/mics_4514/sensor.py +25 -14
  221. esphome/components/midea/climate.py +3 -4
  222. esphome/components/midea_ir/climate.py +3 -5
  223. esphome/components/mipi_spi/__init__.py +15 -0
  224. esphome/components/mipi_spi/display.py +474 -0
  225. esphome/components/mipi_spi/mipi_spi.cpp +481 -0
  226. esphome/components/mipi_spi/mipi_spi.h +171 -0
  227. esphome/components/mipi_spi/models/__init__.py +65 -0
  228. esphome/components/mipi_spi/models/amoled.py +72 -0
  229. esphome/components/mipi_spi/models/commands.py +82 -0
  230. esphome/components/mipi_spi/models/cyd.py +10 -0
  231. esphome/components/mipi_spi/models/ili.py +749 -0
  232. esphome/components/mipi_spi/models/jc.py +260 -0
  233. esphome/components/mipi_spi/models/lanbon.py +15 -0
  234. esphome/components/mipi_spi/models/lilygo.py +60 -0
  235. esphome/components/mipi_spi/models/waveshare.py +139 -0
  236. esphome/components/mitsubishi/climate.py +2 -5
  237. esphome/components/mitsubishi/mitsubishi.cpp +9 -9
  238. esphome/components/mixer/speaker/mixer_speaker.cpp +12 -22
  239. esphome/components/mixer/speaker/mixer_speaker.h +1 -3
  240. esphome/components/mlx90393/sensor.py +5 -0
  241. esphome/components/mlx90393/sensor_mlx90393.cpp +195 -13
  242. esphome/components/mlx90393/sensor_mlx90393.h +21 -4
  243. esphome/components/mqtt/__init__.py +1 -1
  244. esphome/components/mqtt/mqtt_client.cpp +5 -1
  245. esphome/components/mqtt/mqtt_const.h +4 -0
  246. esphome/components/mqtt/mqtt_fan.cpp +39 -0
  247. esphome/components/mqtt/mqtt_fan.h +2 -0
  248. esphome/components/network/__init__.py +1 -1
  249. esphome/components/nextion/base_component.py +17 -16
  250. esphome/components/nextion/display.py +11 -2
  251. esphome/components/nextion/nextion.cpp +39 -1
  252. esphome/components/nextion/nextion.h +50 -0
  253. esphome/components/noblex/climate.py +2 -9
  254. esphome/components/number/__init__.py +12 -9
  255. esphome/components/one_wire/one_wire_bus.cpp +14 -10
  256. esphome/components/one_wire/one_wire_bus.h +14 -8
  257. esphome/components/online_image/bmp_image.cpp +48 -11
  258. esphome/components/online_image/bmp_image.h +2 -0
  259. esphome/components/opentherm/binary_sensor/__init__.py +2 -4
  260. esphome/components/opentherm/number/__init__.py +11 -20
  261. esphome/components/opentherm/sensor/__init__.py +3 -3
  262. esphome/components/opentherm/switch/__init__.py +3 -5
  263. esphome/components/output/lock/__init__.py +11 -9
  264. esphome/components/packages/__init__.py +33 -31
  265. esphome/components/packet_transport/__init__.py +201 -0
  266. esphome/components/packet_transport/binary_sensor.py +19 -0
  267. esphome/components/packet_transport/packet_transport.cpp +534 -0
  268. esphome/components/packet_transport/packet_transport.h +154 -0
  269. esphome/components/packet_transport/sensor.py +19 -0
  270. esphome/components/pca9685/pca9685_output.cpp +2 -1
  271. esphome/components/pid/climate.py +2 -4
  272. esphome/components/pm2005/__init__.py +1 -0
  273. esphome/components/pm2005/pm2005.cpp +123 -0
  274. esphome/components/pm2005/pm2005.h +46 -0
  275. esphome/components/pm2005/sensor.py +86 -0
  276. esphome/components/pmsa003i/pmsa003i.cpp +43 -16
  277. esphome/components/pmsa003i/pmsa003i.h +25 -25
  278. esphome/components/pmsx003/pmsx003.cpp +193 -229
  279. esphome/components/pmsx003/pmsx003.h +51 -33
  280. esphome/components/pmsx003/sensor.py +21 -11
  281. esphome/components/pn7150/pn7150.h +2 -2
  282. esphome/components/pn7160/pn7160.h +2 -2
  283. esphome/components/prometheus/prometheus_handler.cpp +174 -0
  284. esphome/components/prometheus/prometheus_handler.h +17 -0
  285. esphome/components/psram/__init__.py +7 -5
  286. esphome/components/pulse_meter/pulse_meter_sensor.cpp +32 -12
  287. esphome/components/pulse_meter/pulse_meter_sensor.h +5 -5
  288. esphome/components/qspi_dbi/__init__.py +0 -1
  289. esphome/components/qspi_dbi/display.py +2 -1
  290. esphome/components/qspi_dbi/models.py +1 -2
  291. esphome/components/remote_base/__init__.py +91 -0
  292. esphome/components/remote_base/beo4_protocol.cpp +153 -0
  293. esphome/components/remote_base/beo4_protocol.h +43 -0
  294. esphome/components/remote_base/gobox_protocol.cpp +131 -0
  295. esphome/components/remote_base/gobox_protocol.h +54 -0
  296. esphome/components/remote_receiver/remote_receiver_esp32.cpp +16 -9
  297. esphome/components/resampler/speaker/resampler_speaker.cpp +12 -10
  298. esphome/components/resampler/speaker/resampler_speaker.h +1 -1
  299. esphome/components/scd30/sensor.py +2 -3
  300. esphome/components/scd4x/sensor.py +4 -5
  301. esphome/components/sdp3x/sensor.py +2 -1
  302. esphome/components/select/__init__.py +19 -20
  303. esphome/components/sen5x/sensor.py +1 -1
  304. esphome/components/sensor/__init__.py +158 -14
  305. esphome/components/sensor/filter.cpp +23 -0
  306. esphome/components/sensor/filter.h +22 -0
  307. esphome/components/sgp4x/sensor.py +1 -1
  308. esphome/components/sht4x/sht4x.cpp +43 -22
  309. esphome/components/sht4x/sht4x.h +1 -1
  310. esphome/components/sml/text_sensor/__init__.py +4 -6
  311. esphome/components/sound_level/__init__.py +0 -0
  312. esphome/components/sound_level/sensor.py +97 -0
  313. esphome/components/sound_level/sound_level.cpp +194 -0
  314. esphome/components/sound_level/sound_level.h +73 -0
  315. esphome/components/speaker/media_player/__init__.py +4 -8
  316. esphome/components/speaker/media_player/speaker_media_player.cpp +0 -18
  317. esphome/components/speaker/media_player/speaker_media_player.h +0 -11
  318. esphome/components/speaker/speaker.h +4 -7
  319. esphome/components/speed/fan/__init__.py +17 -16
  320. esphome/components/spi/spi.h +11 -1
  321. esphome/components/sprinkler/__init__.py +18 -19
  322. esphome/components/switch/__init__.py +32 -42
  323. esphome/components/syslog/__init__.py +41 -0
  324. esphome/components/syslog/esphome_syslog.cpp +49 -0
  325. esphome/components/syslog/esphome_syslog.h +27 -0
  326. esphome/components/tca9555/tca9555.cpp +11 -6
  327. esphome/components/tcl112/climate.py +2 -9
  328. esphome/components/template/alarm_control_panel/__init__.py +7 -6
  329. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +21 -17
  330. esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +2 -1
  331. esphome/components/template/cover/__init__.py +27 -21
  332. esphome/components/template/fan/__init__.py +14 -12
  333. esphome/components/template/lock/__init__.py +20 -25
  334. esphome/components/template/lock/automation.h +18 -0
  335. esphome/components/template/text/__init__.py +4 -3
  336. esphome/components/template/valve/__init__.py +32 -21
  337. esphome/components/template/valve/automation.h +24 -0
  338. esphome/components/text/__init__.py +32 -1
  339. esphome/components/text_sensor/__init__.py +24 -29
  340. esphome/components/thermostat/climate.py +5 -5
  341. esphome/components/time_based/cover.py +17 -16
  342. esphome/components/tm1638/switch/__init__.py +10 -7
  343. esphome/components/tormatic/cover.py +4 -5
  344. esphome/components/toshiba/climate.py +3 -5
  345. esphome/components/touchscreen/touchscreen.cpp +3 -1
  346. esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
  347. esphome/components/tuya/climate/__init__.py +5 -6
  348. esphome/components/tuya/cover/__init__.py +6 -11
  349. esphome/components/tuya/select/__init__.py +15 -5
  350. esphome/components/tuya/select/tuya_select.cpp +6 -1
  351. esphome/components/tuya/select/tuya_select.h +5 -1
  352. esphome/components/uart/packet_transport/__init__.py +20 -0
  353. esphome/components/uart/packet_transport/uart_transport.cpp +88 -0
  354. esphome/components/uart/packet_transport/uart_transport.h +41 -0
  355. esphome/components/udp/__init__.py +126 -128
  356. esphome/components/udp/automation.h +40 -0
  357. esphome/components/udp/binary_sensor.py +3 -25
  358. esphome/components/udp/packet_transport/__init__.py +29 -0
  359. esphome/components/udp/packet_transport/udp_transport.cpp +36 -0
  360. esphome/components/udp/packet_transport/udp_transport.h +28 -0
  361. esphome/components/udp/sensor.py +3 -25
  362. esphome/components/udp/udp_component.cpp +26 -470
  363. esphome/components/udp/udp_component.h +21 -128
  364. esphome/components/update/__init__.py +31 -1
  365. esphome/components/uponor_smatrix/climate/__init__.py +4 -9
  366. esphome/components/uptime/text_sensor/__init__.py +47 -7
  367. esphome/components/uptime/text_sensor/uptime_text_sensor.cpp +12 -7
  368. esphome/components/uptime/text_sensor/uptime_text_sensor.h +19 -0
  369. esphome/components/valve/__init__.py +34 -3
  370. esphome/components/valve/automation.h +1 -19
  371. esphome/components/vl53l0x/sensor.py +11 -0
  372. esphome/components/vl53l0x/vl53l0x_sensor.cpp +5 -1
  373. esphome/components/vl53l0x/vl53l0x_sensor.h +2 -1
  374. esphome/components/voice_assistant/__init__.py +36 -10
  375. esphome/components/voice_assistant/voice_assistant.cpp +170 -144
  376. esphome/components/voice_assistant/voice_assistant.h +26 -25
  377. esphome/components/waveshare_epaper/display.py +6 -0
  378. esphome/components/waveshare_epaper/waveshare_epaper.cpp +439 -37
  379. esphome/components/waveshare_epaper/waveshare_epaper.h +60 -11
  380. esphome/components/whirlpool/climate.py +3 -5
  381. esphome/components/whynter/climate.py +3 -5
  382. esphome/components/xpt2046/touchscreen/xpt2046.cpp +1 -1
  383. esphome/components/yashima/climate.py +6 -6
  384. esphome/components/zhlt01/climate.py +2 -7
  385. esphome/config_validation.py +38 -58
  386. esphome/const.py +15 -1
  387. esphome/core/__init__.py +2 -0
  388. esphome/core/application.cpp +1 -0
  389. esphome/core/application.h +4 -0
  390. esphome/core/automation.h +4 -3
  391. esphome/core/component.cpp +19 -3
  392. esphome/core/component.h +5 -0
  393. esphome/core/defines.h +23 -17
  394. esphome/core/macros.h +4 -0
  395. esphome/core/scheduler.cpp +3 -0
  396. esphome/cpp_generator.py +6 -2
  397. esphome/dashboard/web_server.py +3 -3
  398. esphome/helpers.py +39 -0
  399. esphome/loader.py +4 -0
  400. esphome/mqtt.py +21 -8
  401. esphome/platformio_api.py +1 -1
  402. esphome/schema_extractors.py +0 -1
  403. esphome/vscode.py +15 -0
  404. esphome/wizard.py +2 -2
  405. esphome/zeroconf.py +7 -3
  406. {esphome-2025.4.1.dist-info → esphome-2025.5.0b2.dist-info}/METADATA +10 -11
  407. {esphome-2025.4.1.dist-info → esphome-2025.5.0b2.dist-info}/RECORD +411 -352
  408. {esphome-2025.4.1.dist-info → esphome-2025.5.0b2.dist-info}/WHEEL +1 -1
  409. esphome/components/esp32_ble/const_esp32c6.h +0 -74
  410. {esphome-2025.4.1.dist-info → esphome-2025.5.0b2.dist-info}/entry_points.txt +0 -0
  411. {esphome-2025.4.1.dist-info → esphome-2025.5.0b2.dist-info}/licenses/LICENSE +0 -0
  412. {esphome-2025.4.1.dist-info → esphome-2025.5.0b2.dist-info}/top_level.txt +0 -0
@@ -101,8 +101,9 @@ void PCA9685Output::loop() {
101
101
  return;
102
102
 
103
103
  const uint16_t num_channels = this->max_channel_ - this->min_channel_ + 1;
104
+ const uint16_t phase_delta_begin = 4096 / num_channels;
104
105
  for (uint8_t channel = this->min_channel_; channel <= this->max_channel_; channel++) {
105
- uint16_t phase_begin = uint16_t(channel - this->min_channel_) / num_channels * 4096;
106
+ uint16_t phase_begin = (channel - this->min_channel_) * phase_delta_begin;
106
107
  uint16_t phase_end;
107
108
  uint16_t amount = this->pwm_amounts_[channel];
108
109
  if (amount == 0) {
@@ -41,9 +41,8 @@ CONF_KI_MULTIPLIER = "ki_multiplier"
41
41
  CONF_KD_MULTIPLIER = "kd_multiplier"
42
42
 
43
43
  CONFIG_SCHEMA = cv.All(
44
- climate.CLIMATE_SCHEMA.extend(
44
+ climate.climate_schema(PIDClimate).extend(
45
45
  {
46
- cv.GenerateID(): cv.declare_id(PIDClimate),
47
46
  cv.Required(CONF_SENSOR): cv.use_id(sensor.Sensor),
48
47
  cv.Optional(CONF_HUMIDITY_SENSOR): cv.use_id(sensor.Sensor),
49
48
  cv.Required(CONF_DEFAULT_TARGET_TEMPERATURE): cv.temperature,
@@ -80,9 +79,8 @@ CONFIG_SCHEMA = cv.All(
80
79
 
81
80
 
82
81
  async def to_code(config):
83
- var = cg.new_Pvariable(config[CONF_ID])
82
+ var = await climate.new_climate(config)
84
83
  await cg.register_component(var, config)
85
- await climate.register_climate(var, config)
86
84
 
87
85
  sens = await cg.get_variable(config[CONF_SENSOR])
88
86
  cg.add(var.set_sensor(sens))
@@ -0,0 +1 @@
1
+ """PM2005/2105 component for ESPHome."""
@@ -0,0 +1,123 @@
1
+ #include "esphome/core/log.h"
2
+ #include "pm2005.h"
3
+
4
+ namespace esphome {
5
+ namespace pm2005 {
6
+
7
+ static const char *const TAG = "pm2005";
8
+
9
+ // Converts a sensor situation to a human readable string
10
+ static const LogString *pm2005_get_situation_string(int status) {
11
+ switch (status) {
12
+ case 1:
13
+ return LOG_STR("Close");
14
+ case 2:
15
+ return LOG_STR("Malfunction");
16
+ case 3:
17
+ return LOG_STR("Under detecting");
18
+ case 0x80:
19
+ return LOG_STR("Detecting completed");
20
+ default:
21
+ return LOG_STR("Invalid");
22
+ }
23
+ }
24
+
25
+ // Converts a sensor measuring mode to a human readable string
26
+ static const LogString *pm2005_get_measuring_mode_string(int status) {
27
+ switch (status) {
28
+ case 2:
29
+ return LOG_STR("Single");
30
+ case 3:
31
+ return LOG_STR("Continuous");
32
+ case 5:
33
+ return LOG_STR("Dynamic");
34
+ default:
35
+ return LOG_STR("Timing");
36
+ }
37
+ }
38
+
39
+ static inline uint16_t get_sensor_value(const uint8_t *data, uint8_t i) { return data[i] * 0x100 + data[i + 1]; }
40
+
41
+ void PM2005Component::setup() {
42
+ if (this->sensor_type_ == PM2005) {
43
+ ESP_LOGCONFIG(TAG, "Setting up PM2005...");
44
+
45
+ this->situation_value_index_ = 3;
46
+ this->pm_1_0_value_index_ = 4;
47
+ this->pm_2_5_value_index_ = 6;
48
+ this->pm_10_0_value_index_ = 8;
49
+ this->measuring_value_index_ = 10;
50
+ } else {
51
+ ESP_LOGCONFIG(TAG, "Setting up PM2105...");
52
+
53
+ this->situation_value_index_ = 2;
54
+ this->pm_1_0_value_index_ = 3;
55
+ this->pm_2_5_value_index_ = 5;
56
+ this->pm_10_0_value_index_ = 7;
57
+ this->measuring_value_index_ = 9;
58
+ }
59
+
60
+ if (this->read(this->data_buffer_, 12) != i2c::ERROR_OK) {
61
+ ESP_LOGE(TAG, "Communication failed!");
62
+ this->mark_failed();
63
+ return;
64
+ }
65
+ }
66
+
67
+ void PM2005Component::update() {
68
+ if (this->read(this->data_buffer_, 12) != i2c::ERROR_OK) {
69
+ ESP_LOGW(TAG, "Read result failed.");
70
+ this->status_set_warning();
71
+ return;
72
+ }
73
+
74
+ if (this->sensor_situation_ == this->data_buffer_[this->situation_value_index_]) {
75
+ return;
76
+ }
77
+
78
+ this->sensor_situation_ = this->data_buffer_[this->situation_value_index_];
79
+ ESP_LOGD(TAG, "Sensor situation: %s.", LOG_STR_ARG(pm2005_get_situation_string(this->sensor_situation_)));
80
+ if (this->sensor_situation_ == 2) {
81
+ this->status_set_warning();
82
+ return;
83
+ }
84
+ if (this->sensor_situation_ != 0x80) {
85
+ return;
86
+ }
87
+
88
+ uint16_t pm1 = get_sensor_value(this->data_buffer_, this->pm_1_0_value_index_);
89
+ uint16_t pm25 = get_sensor_value(this->data_buffer_, this->pm_2_5_value_index_);
90
+ uint16_t pm10 = get_sensor_value(this->data_buffer_, this->pm_10_0_value_index_);
91
+ uint16_t sensor_measuring_mode = get_sensor_value(this->data_buffer_, this->measuring_value_index_);
92
+ ESP_LOGD(TAG, "PM1.0: %d, PM2.5: %d, PM10: %d, Measuring mode: %s.", pm1, pm25, pm10,
93
+ LOG_STR_ARG(pm2005_get_measuring_mode_string(sensor_measuring_mode)));
94
+
95
+ if (this->pm_1_0_sensor_ != nullptr) {
96
+ this->pm_1_0_sensor_->publish_state(pm1);
97
+ }
98
+ if (this->pm_2_5_sensor_ != nullptr) {
99
+ this->pm_2_5_sensor_->publish_state(pm25);
100
+ }
101
+ if (this->pm_10_0_sensor_ != nullptr) {
102
+ this->pm_10_0_sensor_->publish_state(pm10);
103
+ }
104
+
105
+ this->status_clear_warning();
106
+ }
107
+
108
+ void PM2005Component::dump_config() {
109
+ ESP_LOGCONFIG(TAG, "PM2005:");
110
+ ESP_LOGCONFIG(TAG, " Type: PM2%u05", this->sensor_type_ == PM2105);
111
+
112
+ LOG_I2C_DEVICE(this);
113
+ if (this->is_failed()) {
114
+ ESP_LOGE(TAG, "Communication with PM2%u05 failed!", this->sensor_type_ == PM2105);
115
+ }
116
+
117
+ LOG_SENSOR(" ", "PM1.0", this->pm_1_0_sensor_);
118
+ LOG_SENSOR(" ", "PM2.5", this->pm_2_5_sensor_);
119
+ LOG_SENSOR(" ", "PM10 ", this->pm_10_0_sensor_);
120
+ }
121
+
122
+ } // namespace pm2005
123
+ } // namespace esphome
@@ -0,0 +1,46 @@
1
+ #pragma once
2
+
3
+ #include "esphome/core/component.h"
4
+ #include "esphome/components/sensor/sensor.h"
5
+ #include "esphome/components/i2c/i2c.h"
6
+
7
+ namespace esphome {
8
+ namespace pm2005 {
9
+
10
+ enum SensorType {
11
+ PM2005,
12
+ PM2105,
13
+ };
14
+
15
+ class PM2005Component : public PollingComponent, public i2c::I2CDevice {
16
+ public:
17
+ float get_setup_priority() const override { return esphome::setup_priority::DATA; }
18
+
19
+ void set_sensor_type(SensorType sensor_type) { this->sensor_type_ = sensor_type; }
20
+
21
+ void set_pm_1_0_sensor(sensor::Sensor *pm_1_0_sensor) { this->pm_1_0_sensor_ = pm_1_0_sensor; }
22
+ void set_pm_2_5_sensor(sensor::Sensor *pm_2_5_sensor) { this->pm_2_5_sensor_ = pm_2_5_sensor; }
23
+ void set_pm_10_0_sensor(sensor::Sensor *pm_10_0_sensor) { this->pm_10_0_sensor_ = pm_10_0_sensor; }
24
+
25
+ void setup() override;
26
+ void dump_config() override;
27
+ void update() override;
28
+
29
+ protected:
30
+ uint8_t sensor_situation_{0};
31
+ uint8_t data_buffer_[12];
32
+ SensorType sensor_type_{PM2005};
33
+
34
+ sensor::Sensor *pm_1_0_sensor_{nullptr};
35
+ sensor::Sensor *pm_2_5_sensor_{nullptr};
36
+ sensor::Sensor *pm_10_0_sensor_{nullptr};
37
+
38
+ uint8_t situation_value_index_{3};
39
+ uint8_t pm_1_0_value_index_{4};
40
+ uint8_t pm_2_5_value_index_{6};
41
+ uint8_t pm_10_0_value_index_{8};
42
+ uint8_t measuring_value_index_{10};
43
+ };
44
+
45
+ } // namespace pm2005
46
+ } // namespace esphome
@@ -0,0 +1,86 @@
1
+ """PM2005/2105 Sensor component for ESPHome."""
2
+
3
+ import esphome.codegen as cg
4
+ import esphome.config_validation as cv
5
+ from esphome.components import i2c, sensor
6
+ from esphome.const import (
7
+ CONF_ID,
8
+ CONF_PM_1_0,
9
+ CONF_PM_2_5,
10
+ CONF_PM_10_0,
11
+ CONF_TYPE,
12
+ DEVICE_CLASS_PM1,
13
+ DEVICE_CLASS_PM10,
14
+ DEVICE_CLASS_PM25,
15
+ ICON_CHEMICAL_WEAPON,
16
+ STATE_CLASS_MEASUREMENT,
17
+ UNIT_MICROGRAMS_PER_CUBIC_METER,
18
+ )
19
+
20
+ DEPENDENCIES = ["i2c"]
21
+ CODEOWNERS = ["@andrewjswan"]
22
+
23
+ pm2005_ns = cg.esphome_ns.namespace("pm2005")
24
+ PM2005Component = pm2005_ns.class_(
25
+ "PM2005Component", cg.PollingComponent, i2c.I2CDevice
26
+ )
27
+
28
+ SensorType = pm2005_ns.enum("SensorType")
29
+ SENSOR_TYPE = {
30
+ "PM2005": SensorType.PM2005,
31
+ "PM2105": SensorType.PM2105,
32
+ }
33
+
34
+
35
+ CONFIG_SCHEMA = cv.All(
36
+ cv.Schema(
37
+ {
38
+ cv.GenerateID(): cv.declare_id(PM2005Component),
39
+ cv.Optional(CONF_TYPE, default="PM2005"): cv.enum(SENSOR_TYPE, upper=True),
40
+ cv.Optional(CONF_PM_1_0): sensor.sensor_schema(
41
+ unit_of_measurement=UNIT_MICROGRAMS_PER_CUBIC_METER,
42
+ icon=ICON_CHEMICAL_WEAPON,
43
+ accuracy_decimals=0,
44
+ device_class=DEVICE_CLASS_PM1,
45
+ state_class=STATE_CLASS_MEASUREMENT,
46
+ ),
47
+ cv.Optional(CONF_PM_2_5): sensor.sensor_schema(
48
+ unit_of_measurement=UNIT_MICROGRAMS_PER_CUBIC_METER,
49
+ icon=ICON_CHEMICAL_WEAPON,
50
+ accuracy_decimals=0,
51
+ device_class=DEVICE_CLASS_PM25,
52
+ state_class=STATE_CLASS_MEASUREMENT,
53
+ ),
54
+ cv.Optional(CONF_PM_10_0): sensor.sensor_schema(
55
+ unit_of_measurement=UNIT_MICROGRAMS_PER_CUBIC_METER,
56
+ icon=ICON_CHEMICAL_WEAPON,
57
+ accuracy_decimals=0,
58
+ device_class=DEVICE_CLASS_PM10,
59
+ state_class=STATE_CLASS_MEASUREMENT,
60
+ ),
61
+ },
62
+ )
63
+ .extend(cv.polling_component_schema("60s"))
64
+ .extend(i2c.i2c_device_schema(0x28)),
65
+ )
66
+
67
+
68
+ async def to_code(config) -> None:
69
+ """Code generation entry point."""
70
+ var = cg.new_Pvariable(config[CONF_ID])
71
+ await cg.register_component(var, config)
72
+ await i2c.register_i2c_device(var, config)
73
+
74
+ cg.add(var.set_sensor_type(config[CONF_TYPE]))
75
+
76
+ if pm_1_0_config := config.get(CONF_PM_1_0):
77
+ sens = await sensor.new_sensor(pm_1_0_config)
78
+ cg.add(var.set_pm_1_0_sensor(sens))
79
+
80
+ if pm_2_5_config := config.get(CONF_PM_2_5):
81
+ sens = await sensor.new_sensor(pm_2_5_config)
82
+ cg.add(var.set_pm_2_5_sensor(sens))
83
+
84
+ if pm_10_0_config := config.get(CONF_PM_10_0):
85
+ sens = await sensor.new_sensor(pm_10_0_config)
86
+ cg.add(var.set_pm_10_0_sensor(sens))
@@ -1,5 +1,6 @@
1
1
  #include "pmsa003i.h"
2
2
  #include "esphome/core/log.h"
3
+ #include "esphome/core/helpers.h"
3
4
  #include <cstring>
4
5
 
5
6
  namespace esphome {
@@ -7,6 +8,16 @@ namespace pmsa003i {
7
8
 
8
9
  static const char *const TAG = "pmsa003i";
9
10
 
11
+ static const uint8_t COUNT_PAYLOAD_BYTES = 28;
12
+ static const uint8_t COUNT_PAYLOAD_LENGTH_BYTES = 2;
13
+ static const uint8_t COUNT_START_CHARACTER_BYTES = 2;
14
+ static const uint8_t COUNT_DATA_BYTES = COUNT_START_CHARACTER_BYTES + COUNT_PAYLOAD_LENGTH_BYTES + COUNT_PAYLOAD_BYTES;
15
+ static const uint8_t CHECKSUM_START_INDEX = COUNT_DATA_BYTES - 2;
16
+ static const uint8_t COUNT_16_BIT_VALUES = (COUNT_PAYLOAD_LENGTH_BYTES + COUNT_PAYLOAD_BYTES) / 2;
17
+ static const uint8_t START_CHARACTER_1 = 0x42;
18
+ static const uint8_t START_CHARACTER_2 = 0x4D;
19
+ static const uint8_t READ_DATA_RETRY_COUNT = 3;
20
+
10
21
  void PMSA003IComponent::setup() {
11
22
  ESP_LOGCONFIG(TAG, "Setting up pmsa003i...");
12
23
 
@@ -14,7 +25,7 @@ void PMSA003IComponent::setup() {
14
25
  bool successful_read = this->read_data_(&data);
15
26
 
16
27
  if (!successful_read) {
17
- for (int i = 0; i < 3; i++) {
28
+ for (uint8_t i = 0; i < READ_DATA_RETRY_COUNT; i++) {
18
29
  successful_read = this->read_data_(&data);
19
30
  if (successful_read) {
20
31
  break;
@@ -28,7 +39,10 @@ void PMSA003IComponent::setup() {
28
39
  }
29
40
  }
30
41
 
31
- void PMSA003IComponent::dump_config() { LOG_I2C_DEVICE(this); }
42
+ void PMSA003IComponent::dump_config() {
43
+ ESP_LOGCONFIG(TAG, "PMSA003I:");
44
+ LOG_I2C_DEVICE(this);
45
+ }
32
46
 
33
47
  void PMSA003IComponent::update() {
34
48
  PM25AQIData data;
@@ -75,35 +89,48 @@ void PMSA003IComponent::update() {
75
89
  }
76
90
 
77
91
  bool PMSA003IComponent::read_data_(PM25AQIData *data) {
78
- const uint8_t num_bytes = 32;
79
- uint8_t buffer[num_bytes];
92
+ uint8_t buffer[COUNT_DATA_BYTES];
80
93
 
81
- this->read_bytes_raw(buffer, num_bytes);
94
+ this->read_bytes_raw(buffer, COUNT_DATA_BYTES);
82
95
 
83
96
  // https://github.com/adafruit/Adafruit_PM25AQI
84
97
 
85
98
  // Check that start byte is correct!
86
- if (buffer[0] != 0x42) {
99
+ if (buffer[0] != START_CHARACTER_1 || buffer[1] != START_CHARACTER_2) {
100
+ ESP_LOGW(TAG, "Start character mismatch: %02X %02X != %02X %02X", buffer[0], buffer[1], START_CHARACTER_1,
101
+ START_CHARACTER_2);
102
+ return false;
103
+ }
104
+
105
+ const uint16_t payload_length = encode_uint16(buffer[2], buffer[3]);
106
+ if (payload_length != COUNT_PAYLOAD_BYTES) {
107
+ ESP_LOGW(TAG, "Payload length mismatch: %u != %u", payload_length, COUNT_PAYLOAD_BYTES);
87
108
  return false;
88
109
  }
89
110
 
90
- // get checksum ready
91
- int16_t sum = 0;
92
- for (uint8_t i = 0; i < 30; i++) {
93
- sum += buffer[i];
111
+ // Calculate checksum
112
+ uint16_t checksum = 0;
113
+ for (uint8_t i = 0; i < CHECKSUM_START_INDEX; i++) {
114
+ checksum += buffer[i];
115
+ }
116
+
117
+ const uint16_t check = encode_uint16(buffer[CHECKSUM_START_INDEX], buffer[CHECKSUM_START_INDEX + 1]);
118
+ if (checksum != check) {
119
+ ESP_LOGW(TAG, "Checksum mismatch: %u != %u", checksum, check);
120
+ return false;
94
121
  }
95
122
 
96
123
  // The data comes in endian'd, this solves it so it works on all platforms
97
- uint16_t buffer_u16[15];
98
- for (uint8_t i = 0; i < 15; i++) {
99
- buffer_u16[i] = buffer[2 + i * 2 + 1];
100
- buffer_u16[i] += (buffer[2 + i * 2] << 8);
124
+ uint16_t buffer_u16[COUNT_16_BIT_VALUES];
125
+ for (uint8_t i = 0; i < COUNT_16_BIT_VALUES; i++) {
126
+ const uint8_t buffer_index = COUNT_START_CHARACTER_BYTES + i * 2;
127
+ buffer_u16[i] = encode_uint16(buffer[buffer_index], buffer[buffer_index + 1]);
101
128
  }
102
129
 
103
130
  // put it into a nice struct :)
104
- memcpy((void *) data, (void *) buffer_u16, 30);
131
+ memcpy((void *) data, (void *) buffer_u16, COUNT_16_BIT_VALUES * 2);
105
132
 
106
- return (sum == data->checksum);
133
+ return true;
107
134
  }
108
135
 
109
136
  } // namespace pmsa003i
@@ -10,21 +10,21 @@ namespace pmsa003i {
10
10
  /**! Structure holding Plantower's standard packet **/
11
11
  // From https://github.com/adafruit/Adafruit_PM25AQI
12
12
  struct PM25AQIData {
13
- uint16_t framelen; ///< How long this data chunk is
14
- uint16_t pm10_standard, ///< Standard PM1.0
15
- pm25_standard, ///< Standard PM2.5
16
- pm100_standard; ///< Standard PM10.0
17
- uint16_t pm10_env, ///< Environmental PM1.0
18
- pm25_env, ///< Environmental PM2.5
19
- pm100_env; ///< Environmental PM10.0
20
- uint16_t particles_03um, ///> 0.3um Particle Count
21
- particles_05um, ///> 0.5um Particle Count
22
- particles_10um, ///> 1.0um Particle Count
23
- particles_25um, ///> 2.5um Particle Count
24
- particles_50um, ///> 5.0um Particle Count
25
- particles_100um; ///> 10.0um Particle Count
26
- uint16_t unused; ///< Unused
27
- uint16_t checksum; ///< Packet checksum
13
+ uint16_t framelen; ///< How long this data chunk is
14
+ uint16_t pm10_standard; ///< Standard PM1.0
15
+ uint16_t pm25_standard; ///< Standard PM2.5
16
+ uint16_t pm100_standard; ///< Standard PM10.0
17
+ uint16_t pm10_env; ///< Environmental PM1.0
18
+ uint16_t pm25_env; ///< Environmental PM2.5
19
+ uint16_t pm100_env; ///< Environmental PM10.0
20
+ uint16_t particles_03um; ///< 0.3um Particle Count
21
+ uint16_t particles_05um; ///< 0.5um Particle Count
22
+ uint16_t particles_10um; ///< 1.0um Particle Count
23
+ uint16_t particles_25um; ///< 2.5um Particle Count
24
+ uint16_t particles_50um; ///< 5.0um Particle Count
25
+ uint16_t particles_100um; ///< 10.0um Particle Count
26
+ uint16_t unused; ///< Unused
27
+ uint16_t checksum; ///< Packet checksum
28
28
  };
29
29
 
30
30
  class PMSA003IComponent : public PollingComponent, public i2c::I2CDevice {
@@ -34,18 +34,18 @@ class PMSA003IComponent : public PollingComponent, public i2c::I2CDevice {
34
34
  void update() override;
35
35
  float get_setup_priority() const override { return setup_priority::DATA; }
36
36
 
37
- void set_standard_units(bool standard_units) { standard_units_ = standard_units; }
37
+ void set_standard_units(bool standard_units) { this->standard_units_ = standard_units; }
38
38
 
39
- void set_pm_1_0_sensor(sensor::Sensor *pm_1_0) { pm_1_0_sensor_ = pm_1_0; }
40
- void set_pm_2_5_sensor(sensor::Sensor *pm_2_5) { pm_2_5_sensor_ = pm_2_5; }
41
- void set_pm_10_0_sensor(sensor::Sensor *pm_10_0) { pm_10_0_sensor_ = pm_10_0; }
39
+ void set_pm_1_0_sensor(sensor::Sensor *pm_1_0) { this->pm_1_0_sensor_ = pm_1_0; }
40
+ void set_pm_2_5_sensor(sensor::Sensor *pm_2_5) { this->pm_2_5_sensor_ = pm_2_5; }
41
+ void set_pm_10_0_sensor(sensor::Sensor *pm_10_0) { this->pm_10_0_sensor_ = pm_10_0; }
42
42
 
43
- void set_pmc_0_3_sensor(sensor::Sensor *pmc_0_3) { pmc_0_3_sensor_ = pmc_0_3; }
44
- void set_pmc_0_5_sensor(sensor::Sensor *pmc_0_5) { pmc_0_5_sensor_ = pmc_0_5; }
45
- void set_pmc_1_0_sensor(sensor::Sensor *pmc_1_0) { pmc_1_0_sensor_ = pmc_1_0; }
46
- void set_pmc_2_5_sensor(sensor::Sensor *pmc_2_5) { pmc_2_5_sensor_ = pmc_2_5; }
47
- void set_pmc_5_0_sensor(sensor::Sensor *pmc_5_0) { pmc_5_0_sensor_ = pmc_5_0; }
48
- void set_pmc_10_0_sensor(sensor::Sensor *pmc_10_0) { pmc_10_0_sensor_ = pmc_10_0; }
43
+ void set_pmc_0_3_sensor(sensor::Sensor *pmc_0_3) { this->pmc_0_3_sensor_ = pmc_0_3; }
44
+ void set_pmc_0_5_sensor(sensor::Sensor *pmc_0_5) { this->pmc_0_5_sensor_ = pmc_0_5; }
45
+ void set_pmc_1_0_sensor(sensor::Sensor *pmc_1_0) { this->pmc_1_0_sensor_ = pmc_1_0; }
46
+ void set_pmc_2_5_sensor(sensor::Sensor *pmc_2_5) { this->pmc_2_5_sensor_ = pmc_2_5; }
47
+ void set_pmc_5_0_sensor(sensor::Sensor *pmc_5_0) { this->pmc_5_0_sensor_ = pmc_5_0; }
48
+ void set_pmc_10_0_sensor(sensor::Sensor *pmc_10_0) { this->pmc_10_0_sensor_ = pmc_10_0; }
49
49
 
50
50
  protected:
51
51
  bool read_data_(PM25AQIData *data);