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.
- esphome/components/ac_dimmer/ac_dimmer.cpp +3 -2
- esphome/components/adc/__init__.py +51 -34
- esphome/components/airthings_wave_base/__init__.py +1 -1
- esphome/components/alarm_control_panel/__init__.py +37 -2
- esphome/components/am43/cover/__init__.py +4 -5
- esphome/components/analog_threshold/analog_threshold_binary_sensor.cpp +6 -4
- esphome/components/analog_threshold/analog_threshold_binary_sensor.h +4 -5
- esphome/components/analog_threshold/binary_sensor.py +10 -8
- esphome/components/anova/climate.py +4 -5
- esphome/components/api/__init__.py +25 -8
- esphome/components/api/api_connection.cpp +77 -10
- esphome/components/api/api_connection.h +6 -1
- esphome/components/api/api_frame_helper.cpp +98 -130
- esphome/components/api/api_frame_helper.h +12 -2
- esphome/components/api/api_noise_context.h +13 -4
- esphome/components/api/api_pb2.cpp +1422 -1
- esphome/components/api/api_pb2.h +255 -1
- esphome/components/api/api_pb2_service.cpp +162 -49
- esphome/components/api/api_pb2_service.h +90 -51
- esphome/components/api/api_pb2_size.h +361 -0
- esphome/components/api/api_server.cpp +110 -34
- esphome/components/api/api_server.h +8 -0
- esphome/components/api/proto.h +38 -9
- esphome/components/as3935_i2c/as3935_i2c.h +0 -3
- esphome/components/as7341/as7341.h +1 -1
- esphome/components/atm90e32/__init__.py +1 -0
- esphome/components/atm90e32/atm90e32.cpp +576 -199
- esphome/components/atm90e32/atm90e32.h +128 -31
- esphome/components/atm90e32/atm90e32_reg.h +4 -2
- esphome/components/atm90e32/button/__init__.py +62 -10
- esphome/components/atm90e32/button/atm90e32_button.cpp +63 -4
- esphome/components/atm90e32/button/atm90e32_button.h +36 -4
- esphome/components/atm90e32/number/__init__.py +130 -0
- esphome/components/atm90e32/number/atm90e32_number.h +16 -0
- esphome/components/atm90e32/sensor.py +21 -4
- esphome/components/atm90e32/text_sensor/__init__.py +48 -0
- esphome/components/audio/__init__.py +96 -49
- esphome/components/audio/audio.h +48 -0
- esphome/components/audio/audio_decoder.cpp +1 -1
- esphome/components/audio/audio_resampler.cpp +2 -0
- esphome/components/audio/audio_resampler.h +1 -0
- esphome/components/ballu/climate.py +2 -9
- esphome/components/bang_bang/climate.py +5 -6
- esphome/components/bedjet/climate/__init__.py +3 -8
- esphome/components/bedjet/fan/__init__.py +2 -11
- esphome/components/binary/fan/__init__.py +13 -16
- esphome/components/binary_sensor/__init__.py +13 -10
- esphome/components/binary_sensor/binary_sensor.cpp +6 -10
- esphome/components/binary_sensor/binary_sensor.h +1 -1
- esphome/components/binary_sensor/filter.cpp +21 -21
- esphome/components/binary_sensor/filter.h +10 -10
- esphome/components/bl0906/constants.h +16 -16
- esphome/components/ble_client/text_sensor/__init__.py +3 -5
- esphome/components/bluetooth_proxy/bluetooth_connection.cpp +4 -6
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +135 -21
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +7 -0
- esphome/components/button/__init__.py +11 -8
- esphome/components/canbus/canbus.cpp +3 -0
- esphome/components/canbus/canbus.h +16 -0
- esphome/components/climate/__init__.py +35 -2
- esphome/components/climate/climate_mode.h +1 -1
- esphome/components/climate/climate_traits.h +63 -57
- esphome/components/climate_ir/__init__.py +57 -17
- esphome/components/climate_ir_lg/climate.py +2 -5
- esphome/components/climate_ir_lg/climate_ir_lg.cpp +7 -7
- esphome/components/climate_ir_lg/climate_ir_lg.h +1 -1
- esphome/components/color/__init__.py +2 -0
- esphome/components/const/__init__.py +5 -0
- esphome/components/coolix/climate.py +2 -9
- esphome/components/copy/cover/__init__.py +10 -9
- esphome/components/copy/fan/__init__.py +11 -9
- esphome/components/copy/lock/__init__.py +11 -9
- esphome/components/copy/text/__init__.py +9 -6
- esphome/components/cover/__init__.py +37 -2
- esphome/components/cst226/binary_sensor/__init__.py +28 -0
- esphome/components/cst226/binary_sensor/cs226_button.h +22 -0
- esphome/components/cst226/binary_sensor/cstt6_button.cpp +19 -0
- esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +27 -5
- esphome/components/cst226/touchscreen/cst226_touchscreen.h +10 -10
- esphome/components/current_based/cover.py +37 -36
- esphome/components/daikin/climate.py +2 -9
- esphome/components/daikin/daikin.cpp +15 -9
- esphome/components/daikin/daikin.h +5 -5
- esphome/components/daikin_arc/climate.py +2 -7
- esphome/components/daikin_brc/climate.py +3 -5
- esphome/components/dallas_temp/dallas_temp.cpp +17 -24
- esphome/components/dallas_temp/dallas_temp.h +0 -1
- esphome/components/debug/debug_component.cpp +5 -0
- esphome/components/debug/debug_component.h +6 -0
- esphome/components/debug/debug_esp32.cpp +109 -254
- esphome/components/debug/sensor.py +14 -0
- esphome/components/deep_sleep/deep_sleep_esp32.cpp +13 -1
- esphome/components/delonghi/climate.py +2 -9
- esphome/components/demo/__init__.py +18 -20
- esphome/components/dfrobot_sen0395/switch/__init__.py +21 -22
- esphome/components/display/rect.cpp +4 -9
- esphome/components/display/rect.h +1 -1
- esphome/components/emmeti/climate.py +2 -9
- esphome/components/endstop/cover.py +17 -16
- esphome/components/esp32/__init__.py +60 -3
- esphome/components/esp32/core.cpp +11 -5
- esphome/components/esp32/gpio.cpp +86 -24
- esphome/components/esp32/gpio.py +15 -16
- esphome/components/esp32/gpio_esp32.py +1 -2
- esphome/components/esp32/gpio_esp32_c2.py +1 -1
- esphome/components/esp32/gpio_esp32_c3.py +1 -1
- esphome/components/esp32/gpio_esp32_c6.py +1 -1
- esphome/components/esp32/gpio_esp32_h2.py +1 -1
- esphome/components/esp32_ble/ble.cpp +1 -8
- esphome/components/esp32_ble/ble.h +5 -3
- esphome/components/esp32_ble/ble_advertising.h +1 -0
- esphome/components/esp32_ble_server/__init__.py +3 -0
- esphome/components/esp32_ble_tracker/__init__.py +7 -1
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +192 -118
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +29 -3
- esphome/components/esp32_can/esp32_can.cpp +1 -1
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +1 -1
- esphome/components/esp32_rmt_led_strip/led_strip.h +7 -5
- esphome/components/esp32_rmt_led_strip/light.py +9 -1
- esphome/components/esp8266/gpio.cpp +69 -8
- esphome/components/event/__init__.py +13 -10
- esphome/components/factory_reset/switch/__init__.py +7 -21
- esphome/components/fan/__init__.py +52 -5
- esphome/components/fastled_base/__init__.py +1 -4
- esphome/components/fastled_base/fastled_light.cpp +1 -1
- esphome/components/feedback/cover.py +38 -33
- esphome/components/fujitsu_general/climate.py +2 -9
- esphome/components/gpio/one_wire/gpio_one_wire.cpp +45 -43
- esphome/components/gpio/one_wire/gpio_one_wire.h +2 -1
- esphome/components/gpio_expander/cached_gpio.h +22 -7
- esphome/components/gps/__init__.py +11 -2
- esphome/components/gps/gps.cpp +11 -8
- esphome/components/gps/gps.h +9 -6
- esphome/components/graph/__init__.py +1 -2
- esphome/components/gree/climate.py +4 -6
- esphome/components/gree/gree.cpp +16 -2
- esphome/components/gree/gree.h +2 -2
- esphome/components/haier/climate.py +37 -34
- esphome/components/hbridge/fan/__init__.py +19 -17
- esphome/components/he60r/cover.py +4 -5
- esphome/components/heatpumpir/climate.py +3 -6
- esphome/components/hitachi_ac344/climate.py +2 -9
- esphome/components/hitachi_ac424/climate.py +2 -9
- esphome/components/hlw8012/hlw8012.cpp +1 -1
- esphome/components/hm3301/hm3301.h +1 -1
- esphome/components/http_request/__init__.py +39 -6
- esphome/components/http_request/http_request.cpp +20 -0
- esphome/components/http_request/http_request.h +57 -15
- esphome/components/http_request/http_request_arduino.cpp +22 -6
- esphome/components/http_request/http_request_arduino.h +4 -3
- esphome/components/http_request/http_request_host.cpp +141 -0
- esphome/components/http_request/http_request_host.h +37 -0
- esphome/components/http_request/http_request_idf.cpp +35 -3
- esphome/components/http_request/http_request_idf.h +10 -3
- esphome/components/http_request/httplib.h +9691 -0
- esphome/components/http_request/update/__init__.py +11 -8
- esphome/components/i2c/i2c.h +4 -0
- esphome/components/i2c/i2c_bus_esp_idf.cpp +1 -1
- esphome/components/i2s_audio/__init__.py +131 -22
- esphome/components/i2s_audio/i2s_audio.h +44 -4
- esphome/components/i2s_audio/media_player/__init__.py +19 -9
- esphome/components/i2s_audio/microphone/__init__.py +63 -5
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +351 -61
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +40 -6
- esphome/components/i2s_audio/speaker/__init__.py +31 -5
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +155 -19
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +17 -4
- esphome/components/ili9xxx/ili9xxx_init.h +1 -1
- esphome/components/image/__init__.py +37 -17
- esphome/components/image/image.cpp +25 -8
- esphome/components/internal_temperature/internal_temperature.cpp +6 -4
- esphome/components/key_collector/__init__.py +35 -0
- esphome/components/key_collector/key_collector.cpp +8 -0
- esphome/components/key_collector/key_collector.h +10 -0
- esphome/components/ld2410/ld2410.h +1 -1
- esphome/components/ld2450/ld2450.h +1 -1
- esphome/components/light/__init__.py +57 -0
- esphome/components/lock/__init__.py +51 -4
- esphome/components/lock/automation.h +2 -13
- esphome/components/logger/__init__.py +21 -0
- esphome/components/logger/logger.cpp +125 -95
- esphome/components/logger/logger.h +160 -35
- esphome/components/logger/task_log_buffer.cpp +138 -0
- esphome/components/logger/task_log_buffer.h +69 -0
- esphome/components/lvgl/__init__.py +13 -5
- esphome/components/lvgl/automation.py +50 -1
- esphome/components/lvgl/defines.py +0 -1
- esphome/components/lvgl/lv_validation.py +10 -1
- esphome/components/lvgl/lvgl_esphome.cpp +5 -1
- esphome/components/lvgl/schemas.py +14 -14
- esphome/components/lvgl/text/__init__.py +1 -2
- esphome/components/lvgl/widgets/arc.py +7 -6
- esphome/components/lvgl/widgets/buttonmatrix.py +3 -3
- esphome/components/lvgl/widgets/checkbox.py +2 -2
- esphome/components/lvgl/widgets/dropdown.py +2 -1
- esphome/components/lvgl/widgets/img.py +15 -12
- esphome/components/mapping/__init__.py +134 -0
- esphome/components/max7219digit/max7219digit.cpp +27 -27
- esphome/components/mdns/__init__.py +11 -5
- esphome/components/mdns/mdns_component.cpp +11 -5
- esphome/components/mdns/mdns_component.h +3 -2
- esphome/components/mdns/mdns_esp32.cpp +4 -3
- esphome/components/mdns/mdns_esp8266.cpp +4 -2
- esphome/components/mdns/mdns_libretiny.cpp +4 -2
- esphome/components/mdns/mdns_rp2040.cpp +4 -2
- esphome/components/media_player/__init__.py +40 -6
- esphome/components/micro_wake_word/__init__.py +99 -31
- esphome/components/micro_wake_word/automation.h +54 -0
- esphome/components/micro_wake_word/micro_wake_word.cpp +331 -319
- esphome/components/micro_wake_word/micro_wake_word.h +58 -105
- esphome/components/micro_wake_word/preprocessor_settings.h +19 -2
- esphome/components/micro_wake_word/streaming_model.cpp +158 -41
- esphome/components/micro_wake_word/streaming_model.h +85 -13
- esphome/components/microphone/__init__.py +139 -9
- esphome/components/microphone/automation.h +14 -2
- esphome/components/microphone/microphone.cpp +21 -0
- esphome/components/microphone/microphone.h +14 -5
- esphome/components/microphone/microphone_source.cpp +95 -0
- esphome/components/microphone/microphone_source.h +80 -0
- esphome/components/mics_4514/sensor.py +25 -14
- esphome/components/midea/climate.py +3 -4
- esphome/components/midea_ir/climate.py +3 -5
- esphome/components/mipi_spi/__init__.py +15 -0
- esphome/components/mipi_spi/display.py +474 -0
- esphome/components/mipi_spi/mipi_spi.cpp +481 -0
- esphome/components/mipi_spi/mipi_spi.h +171 -0
- esphome/components/mipi_spi/models/__init__.py +65 -0
- esphome/components/mipi_spi/models/amoled.py +72 -0
- esphome/components/mipi_spi/models/commands.py +82 -0
- esphome/components/mipi_spi/models/cyd.py +10 -0
- esphome/components/mipi_spi/models/ili.py +749 -0
- esphome/components/mipi_spi/models/jc.py +260 -0
- esphome/components/mipi_spi/models/lanbon.py +15 -0
- esphome/components/mipi_spi/models/lilygo.py +60 -0
- esphome/components/mipi_spi/models/waveshare.py +139 -0
- esphome/components/mitsubishi/climate.py +2 -5
- esphome/components/mitsubishi/mitsubishi.cpp +9 -9
- esphome/components/mixer/speaker/mixer_speaker.cpp +12 -22
- esphome/components/mixer/speaker/mixer_speaker.h +1 -3
- esphome/components/mlx90393/sensor.py +5 -0
- esphome/components/mlx90393/sensor_mlx90393.cpp +195 -13
- esphome/components/mlx90393/sensor_mlx90393.h +21 -4
- esphome/components/mqtt/__init__.py +1 -1
- esphome/components/mqtt/mqtt_client.cpp +5 -1
- esphome/components/mqtt/mqtt_const.h +4 -0
- esphome/components/mqtt/mqtt_fan.cpp +39 -0
- esphome/components/mqtt/mqtt_fan.h +2 -0
- esphome/components/network/__init__.py +1 -1
- esphome/components/nextion/base_component.py +17 -16
- esphome/components/nextion/display.py +11 -2
- esphome/components/nextion/nextion.cpp +39 -1
- esphome/components/nextion/nextion.h +50 -0
- esphome/components/noblex/climate.py +2 -9
- esphome/components/number/__init__.py +12 -9
- esphome/components/one_wire/one_wire_bus.cpp +14 -10
- esphome/components/one_wire/one_wire_bus.h +14 -8
- esphome/components/online_image/bmp_image.cpp +48 -11
- esphome/components/online_image/bmp_image.h +2 -0
- esphome/components/opentherm/binary_sensor/__init__.py +2 -4
- esphome/components/opentherm/number/__init__.py +11 -20
- esphome/components/opentherm/sensor/__init__.py +3 -3
- esphome/components/opentherm/switch/__init__.py +3 -5
- esphome/components/output/lock/__init__.py +11 -9
- esphome/components/packages/__init__.py +33 -31
- esphome/components/packet_transport/__init__.py +201 -0
- esphome/components/packet_transport/binary_sensor.py +19 -0
- esphome/components/packet_transport/packet_transport.cpp +534 -0
- esphome/components/packet_transport/packet_transport.h +154 -0
- esphome/components/packet_transport/sensor.py +19 -0
- esphome/components/pca9685/pca9685_output.cpp +2 -1
- esphome/components/pid/climate.py +2 -4
- esphome/components/pm2005/__init__.py +1 -0
- esphome/components/pm2005/pm2005.cpp +123 -0
- esphome/components/pm2005/pm2005.h +46 -0
- esphome/components/pm2005/sensor.py +86 -0
- esphome/components/pmsa003i/pmsa003i.cpp +43 -16
- esphome/components/pmsa003i/pmsa003i.h +25 -25
- esphome/components/pmsx003/pmsx003.cpp +193 -229
- esphome/components/pmsx003/pmsx003.h +51 -33
- esphome/components/pmsx003/sensor.py +21 -11
- esphome/components/pn7150/pn7150.h +2 -2
- esphome/components/pn7160/pn7160.h +2 -2
- esphome/components/prometheus/prometheus_handler.cpp +174 -0
- esphome/components/prometheus/prometheus_handler.h +17 -0
- esphome/components/psram/__init__.py +7 -5
- esphome/components/pulse_meter/pulse_meter_sensor.cpp +32 -12
- esphome/components/pulse_meter/pulse_meter_sensor.h +5 -5
- esphome/components/qspi_dbi/__init__.py +0 -1
- esphome/components/qspi_dbi/display.py +2 -1
- esphome/components/qspi_dbi/models.py +1 -2
- esphome/components/remote_base/__init__.py +91 -0
- esphome/components/remote_base/beo4_protocol.cpp +153 -0
- esphome/components/remote_base/beo4_protocol.h +43 -0
- esphome/components/remote_base/gobox_protocol.cpp +131 -0
- esphome/components/remote_base/gobox_protocol.h +54 -0
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +16 -9
- esphome/components/resampler/speaker/resampler_speaker.cpp +12 -10
- esphome/components/resampler/speaker/resampler_speaker.h +1 -1
- esphome/components/scd30/sensor.py +2 -3
- esphome/components/scd4x/sensor.py +4 -5
- esphome/components/sdp3x/sensor.py +2 -1
- esphome/components/select/__init__.py +19 -20
- esphome/components/sen5x/sensor.py +1 -1
- esphome/components/sensor/__init__.py +158 -14
- esphome/components/sensor/filter.cpp +23 -0
- esphome/components/sensor/filter.h +22 -0
- esphome/components/sgp4x/sensor.py +1 -1
- esphome/components/sht4x/sht4x.cpp +43 -22
- esphome/components/sht4x/sht4x.h +1 -1
- esphome/components/sml/text_sensor/__init__.py +4 -6
- esphome/components/sound_level/__init__.py +0 -0
- esphome/components/sound_level/sensor.py +97 -0
- esphome/components/sound_level/sound_level.cpp +194 -0
- esphome/components/sound_level/sound_level.h +73 -0
- esphome/components/speaker/media_player/__init__.py +4 -8
- esphome/components/speaker/media_player/speaker_media_player.cpp +0 -18
- esphome/components/speaker/media_player/speaker_media_player.h +0 -11
- esphome/components/speaker/speaker.h +4 -7
- esphome/components/speed/fan/__init__.py +17 -16
- esphome/components/spi/spi.h +11 -1
- esphome/components/sprinkler/__init__.py +18 -19
- esphome/components/switch/__init__.py +32 -42
- esphome/components/syslog/__init__.py +41 -0
- esphome/components/syslog/esphome_syslog.cpp +49 -0
- esphome/components/syslog/esphome_syslog.h +27 -0
- esphome/components/tca9555/tca9555.cpp +11 -6
- esphome/components/tcl112/climate.py +2 -9
- esphome/components/template/alarm_control_panel/__init__.py +7 -6
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +21 -17
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +2 -1
- esphome/components/template/cover/__init__.py +27 -21
- esphome/components/template/fan/__init__.py +14 -12
- esphome/components/template/lock/__init__.py +20 -25
- esphome/components/template/lock/automation.h +18 -0
- esphome/components/template/text/__init__.py +4 -3
- esphome/components/template/valve/__init__.py +32 -21
- esphome/components/template/valve/automation.h +24 -0
- esphome/components/text/__init__.py +32 -1
- esphome/components/text_sensor/__init__.py +24 -29
- esphome/components/thermostat/climate.py +5 -5
- esphome/components/time_based/cover.py +17 -16
- esphome/components/tm1638/switch/__init__.py +10 -7
- esphome/components/tormatic/cover.py +4 -5
- esphome/components/toshiba/climate.py +3 -5
- esphome/components/touchscreen/touchscreen.cpp +3 -1
- esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
- esphome/components/tuya/climate/__init__.py +5 -6
- esphome/components/tuya/cover/__init__.py +6 -11
- esphome/components/tuya/select/__init__.py +15 -5
- esphome/components/tuya/select/tuya_select.cpp +6 -1
- esphome/components/tuya/select/tuya_select.h +5 -1
- esphome/components/uart/packet_transport/__init__.py +20 -0
- esphome/components/uart/packet_transport/uart_transport.cpp +88 -0
- esphome/components/uart/packet_transport/uart_transport.h +41 -0
- esphome/components/udp/__init__.py +126 -128
- esphome/components/udp/automation.h +40 -0
- esphome/components/udp/binary_sensor.py +3 -25
- esphome/components/udp/packet_transport/__init__.py +29 -0
- esphome/components/udp/packet_transport/udp_transport.cpp +36 -0
- esphome/components/udp/packet_transport/udp_transport.h +28 -0
- esphome/components/udp/sensor.py +3 -25
- esphome/components/udp/udp_component.cpp +26 -470
- esphome/components/udp/udp_component.h +21 -128
- esphome/components/update/__init__.py +31 -1
- esphome/components/uponor_smatrix/climate/__init__.py +4 -9
- esphome/components/uptime/text_sensor/__init__.py +47 -7
- esphome/components/uptime/text_sensor/uptime_text_sensor.cpp +12 -7
- esphome/components/uptime/text_sensor/uptime_text_sensor.h +19 -0
- esphome/components/valve/__init__.py +34 -3
- esphome/components/valve/automation.h +1 -19
- esphome/components/vl53l0x/sensor.py +11 -0
- esphome/components/vl53l0x/vl53l0x_sensor.cpp +5 -1
- esphome/components/vl53l0x/vl53l0x_sensor.h +2 -1
- esphome/components/voice_assistant/__init__.py +36 -10
- esphome/components/voice_assistant/voice_assistant.cpp +170 -144
- esphome/components/voice_assistant/voice_assistant.h +26 -25
- esphome/components/waveshare_epaper/display.py +6 -0
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +439 -37
- esphome/components/waveshare_epaper/waveshare_epaper.h +60 -11
- esphome/components/whirlpool/climate.py +3 -5
- esphome/components/whynter/climate.py +3 -5
- esphome/components/xpt2046/touchscreen/xpt2046.cpp +1 -1
- esphome/components/yashima/climate.py +6 -6
- esphome/components/zhlt01/climate.py +2 -7
- esphome/config_validation.py +38 -58
- esphome/const.py +15 -1
- esphome/core/__init__.py +2 -0
- esphome/core/application.cpp +1 -0
- esphome/core/application.h +4 -0
- esphome/core/automation.h +4 -3
- esphome/core/component.cpp +19 -3
- esphome/core/component.h +5 -0
- esphome/core/defines.h +23 -17
- esphome/core/macros.h +4 -0
- esphome/core/scheduler.cpp +3 -0
- esphome/cpp_generator.py +6 -2
- esphome/dashboard/web_server.py +3 -3
- esphome/helpers.py +39 -0
- esphome/loader.py +4 -0
- esphome/mqtt.py +21 -8
- esphome/platformio_api.py +1 -1
- esphome/schema_extractors.py +0 -1
- esphome/vscode.py +15 -0
- esphome/wizard.py +2 -2
- esphome/zeroconf.py +7 -3
- {esphome-2025.4.1.dist-info → esphome-2025.5.0b2.dist-info}/METADATA +10 -11
- {esphome-2025.4.1.dist-info → esphome-2025.5.0b2.dist-info}/RECORD +411 -352
- {esphome-2025.4.1.dist-info → esphome-2025.5.0b2.dist-info}/WHEEL +1 -1
- esphome/components/esp32_ble/const_esp32c6.h +0 -74
- {esphome-2025.4.1.dist-info → esphome-2025.5.0b2.dist-info}/entry_points.txt +0 -0
- {esphome-2025.4.1.dist-info → esphome-2025.5.0b2.dist-info}/licenses/LICENSE +0 -0
- {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 =
|
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.
|
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 =
|
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 (
|
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() {
|
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
|
-
|
79
|
-
uint8_t buffer[num_bytes];
|
92
|
+
uint8_t buffer[COUNT_DATA_BYTES];
|
80
93
|
|
81
|
-
this->read_bytes_raw(buffer,
|
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] !=
|
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
|
-
//
|
91
|
-
|
92
|
-
for (uint8_t i = 0; i <
|
93
|
-
|
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[
|
98
|
-
for (uint8_t i = 0; i <
|
99
|
-
|
100
|
-
buffer_u16[i]
|
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,
|
131
|
+
memcpy((void *) data, (void *) buffer_u16, COUNT_16_BIT_VALUES * 2);
|
105
132
|
|
106
|
-
return
|
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;
|
14
|
-
uint16_t pm10_standard
|
15
|
-
|
16
|
-
|
17
|
-
uint16_t pm10_env
|
18
|
-
|
19
|
-
|
20
|
-
uint16_t particles_03um
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
uint16_t unused;
|
27
|
-
uint16_t 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);
|