esphome 2025.6.3__py3-none-any.whl → 2025.7.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- esphome/__main__.py +1 -3
- esphome/codegen.py +2 -0
- esphome/components/ac_dimmer/ac_dimmer.cpp +6 -6
- esphome/components/adc/__init__.py +25 -1
- esphome/components/adc/adc_sensor.h +11 -11
- esphome/components/adc/adc_sensor_common.cpp +1 -1
- esphome/components/adc/adc_sensor_esp32.cpp +16 -8
- esphome/components/ade7880/ade7880.h +0 -2
- esphome/components/ads1115/ads1115.h +0 -1
- esphome/components/ads1118/ads1118.h +0 -1
- esphome/components/ags10/ags10.h +0 -2
- esphome/components/aic3204/aic3204.h +0 -1
- esphome/components/alarm_control_panel/__init__.py +5 -2
- esphome/components/alpha3/alpha3.h +0 -1
- esphome/components/am43/cover/am43_cover.h +0 -1
- esphome/components/am43/sensor/am43_sensor.h +0 -1
- esphome/components/analog_threshold/analog_threshold_binary_sensor.h +0 -2
- esphome/components/anova/anova.cpp +5 -1
- esphome/components/anova/anova.h +0 -1
- esphome/components/apds9960/apds9960.cpp +1 -1
- esphome/components/api/__init__.py +57 -21
- esphome/components/api/api_connection.cpp +344 -539
- esphome/components/api/api_connection.h +224 -141
- esphome/components/api/api_frame_helper.cpp +91 -127
- esphome/components/api/api_frame_helper.h +64 -54
- esphome/components/api/api_pb2.cpp +1837 -9044
- esphome/components/api/api_pb2.h +532 -685
- esphome/components/api/api_pb2_dump.cpp +4432 -0
- esphome/components/api/api_pb2_service.cpp +184 -425
- esphome/components/api/api_pb2_service.h +13 -6
- esphome/components/api/api_server.cpp +131 -167
- esphome/components/api/api_server.h +38 -10
- esphome/components/api/client.py +8 -2
- esphome/components/api/custom_api_device.h +8 -0
- esphome/components/api/list_entities.cpp +37 -104
- esphome/components/api/list_entities.h +33 -23
- esphome/components/api/proto.h +532 -26
- esphome/components/api/subscribe_state.cpp +23 -29
- esphome/components/api/subscribe_state.h +26 -19
- esphome/components/api/user_services.h +2 -0
- esphome/components/as3935_spi/as3935_spi.h +0 -2
- esphome/components/as5600/as5600.h +0 -1
- esphome/components/async_tcp/__init__.py +14 -5
- esphome/components/atc_mithermometer/atc_mithermometer.h +0 -1
- esphome/components/atm90e32/atm90e32.cpp +2 -1
- esphome/components/audio/audio_decoder.cpp +1 -1
- esphome/components/audio/audio_transfer_buffer.cpp +2 -2
- esphome/components/b_parasite/b_parasite.h +0 -1
- esphome/components/bedjet/bedjet_hub.cpp +5 -1
- esphome/components/bedjet/climate/bedjet_climate.cpp +5 -1
- esphome/components/beken_spi_led_strip/led_strip.cpp +4 -2
- esphome/components/bh1750/bh1750.cpp +5 -5
- esphome/components/binary_sensor/__init__.py +82 -5
- esphome/components/binary_sensor/automation.h +19 -1
- esphome/components/binary_sensor/binary_sensor.cpp +12 -30
- esphome/components/binary_sensor/binary_sensor.h +11 -25
- esphome/components/binary_sensor/filter.cpp +29 -24
- esphome/components/binary_sensor/filter.h +20 -10
- esphome/components/ble_client/output/ble_binary_output.h +0 -1
- esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +5 -1
- esphome/components/ble_client/sensor/ble_rssi_sensor.h +0 -1
- esphome/components/ble_client/sensor/ble_sensor.cpp +5 -1
- esphome/components/ble_client/sensor/ble_sensor.h +0 -1
- esphome/components/ble_client/switch/ble_switch.h +0 -1
- esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +5 -1
- esphome/components/ble_client/text_sensor/ble_text_sensor.h +0 -1
- esphome/components/ble_presence/ble_presence_device.h +0 -1
- esphome/components/ble_rssi/ble_rssi_sensor.h +0 -1
- esphome/components/ble_scanner/ble_scanner.h +0 -1
- esphome/components/bluetooth_proxy/bluetooth_connection.h +9 -2
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -6
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +8 -2
- esphome/components/bme680/sensor.py +1 -1
- esphome/components/bmp581/bmp581.h +0 -2
- esphome/components/button/__init__.py +5 -2
- esphome/components/camera/__init__.py +1 -0
- esphome/components/camera/camera.cpp +22 -0
- esphome/components/camera/camera.h +80 -0
- esphome/components/canbus/__init__.py +1 -0
- esphome/components/cap1188/cap1188.h +0 -1
- esphome/components/captive_portal/__init__.py +12 -2
- esphome/components/captive_portal/captive_portal.cpp +12 -2
- esphome/components/captive_portal/captive_portal.h +5 -2
- esphome/components/ccs811/ccs811.h +0 -2
- esphome/components/climate/__init__.py +5 -2
- esphome/components/cm1106/sensor.py +2 -2
- esphome/components/const/__init__.py +2 -0
- esphome/components/copy/binary_sensor/copy_binary_sensor.h +0 -1
- esphome/components/copy/button/copy_button.h +0 -1
- esphome/components/copy/cover/copy_cover.h +0 -1
- esphome/components/copy/fan/copy_fan.h +0 -1
- esphome/components/copy/lock/copy_lock.h +0 -1
- esphome/components/copy/number/copy_number.h +0 -1
- esphome/components/copy/select/copy_select.h +0 -1
- esphome/components/copy/sensor/copy_sensor.h +0 -1
- esphome/components/copy/switch/copy_switch.h +0 -1
- esphome/components/copy/text/copy_text.h +0 -1
- esphome/components/copy/text_sensor/copy_text_sensor.h +0 -1
- esphome/components/cover/__init__.py +5 -2
- esphome/components/cs5460a/cs5460a.h +0 -1
- esphome/components/datetime/__init__.py +4 -2
- esphome/components/debug/__init__.py +20 -0
- esphome/components/debug/debug_esp32.cpp +2 -0
- esphome/components/deep_sleep/__init__.py +43 -9
- esphome/components/demo/__init__.py +2 -2
- esphome/components/display/display.cpp +4 -3
- esphome/components/display/display.h +0 -2
- esphome/components/display/display_buffer.cpp +1 -1
- esphome/components/ds2484/__init__.py +1 -0
- esphome/components/ds2484/ds2484.cpp +209 -0
- esphome/components/ds2484/ds2484.h +43 -0
- esphome/components/ds2484/one_wire.py +37 -0
- esphome/components/duty_time/duty_time_sensor.h +0 -1
- esphome/components/ens160_base/ens160_base.h +0 -1
- esphome/components/es7210/es7210.h +0 -1
- esphome/components/es7243e/es7243e.h +0 -1
- esphome/components/es8156/es8156.h +0 -1
- esphome/components/es8311/es8311.h +0 -1
- esphome/components/es8388/es8388.h +0 -1
- esphome/components/esp32/__init__.py +103 -135
- esphome/components/esp32/core.cpp +0 -4
- esphome/components/esp32/gpio.h +1 -1
- esphome/components/esp32/helpers.cpp +69 -0
- esphome/components/esp32_ble/ble.cpp +5 -6
- esphome/components/esp32_ble/ble.h +29 -14
- esphome/components/esp32_ble/ble_event.h +6 -6
- esphome/components/esp32_ble_client/ble_client_base.cpp +21 -6
- esphome/components/esp32_ble_client/ble_client_base.h +24 -9
- esphome/components/esp32_ble_tracker/__init__.py +2 -8
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +5 -5
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +11 -7
- esphome/components/esp32_camera/__init__.py +112 -98
- esphome/components/esp32_camera/esp32_camera.cpp +41 -31
- esphome/components/esp32_camera/esp32_camera.h +35 -30
- esphome/components/esp32_camera_web_server/__init__.py +2 -1
- esphome/components/esp32_camera_web_server/camera_web_server.cpp +8 -8
- esphome/components/esp32_camera_web_server/camera_web_server.h +3 -3
- esphome/components/esp32_hall/sensor.py +2 -21
- esphome/components/esp32_hosted/__init__.py +101 -0
- esphome/components/esp32_hosted/esp32_hosted.py.script +12 -0
- esphome/components/esp32_improv/esp32_improv_component.cpp +3 -0
- esphome/components/esp32_rmt/__init__.py +0 -58
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +77 -63
- esphome/components/esp32_rmt_led_strip/led_strip.h +11 -17
- esphome/components/esp32_rmt_led_strip/light.py +14 -76
- esphome/components/esp32_touch/esp32_touch.h +174 -28
- esphome/components/esp32_touch/esp32_touch_common.cpp +162 -0
- esphome/components/esp32_touch/esp32_touch_v1.cpp +240 -0
- esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
- esphome/components/esp8266/__init__.py +2 -0
- esphome/components/esp8266/gpio.cpp +10 -10
- esphome/components/esp8266/helpers.cpp +31 -0
- esphome/components/esp_ldo/__init__.py +10 -8
- esphome/components/esp_ldo/esp_ldo.h +3 -0
- esphome/components/esphome/ota/__init__.py +1 -0
- esphome/components/esphome/ota/ota_esphome.cpp +24 -19
- esphome/components/ethernet/__init__.py +42 -23
- esphome/components/ethernet/esp_eth_phy_jl1101.c +0 -16
- esphome/components/ethernet/ethernet_component.cpp +69 -29
- esphome/components/ethernet/ethernet_component.h +18 -10
- esphome/components/event/__init__.py +5 -2
- esphome/components/ezo/ezo.h +0 -1
- esphome/components/ezo_pmp/ezo_pmp.h +0 -1
- esphome/components/fan/__init__.py +5 -2
- esphome/components/fan/fan.cpp +4 -0
- esphome/components/feedback/feedback_cover.h +0 -1
- esphome/components/font/__init__.py +92 -82
- esphome/components/font/font.cpp +9 -2
- esphome/components/font/font.h +20 -5
- esphome/components/fs3000/fs3000.h +0 -1
- esphome/components/gcja5/gcja5.h +0 -1
- esphome/components/gl_r01_i2c/__init__.py +0 -0
- esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +68 -0
- esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
- esphome/components/gl_r01_i2c/sensor.py +36 -0
- esphome/components/gp8403/gp8403.h +0 -1
- esphome/components/gpio/binary_sensor/__init__.py +39 -1
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +77 -3
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +40 -0
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +0 -2
- esphome/components/he60r/he60r.h +0 -1
- esphome/components/heatpumpir/climate.py +2 -1
- esphome/components/heatpumpir/heatpumpir.cpp +1 -0
- esphome/components/heatpumpir/heatpumpir.h +1 -0
- esphome/components/honeywellabp2_i2c/honeywellabp2.h +0 -1
- esphome/components/host/__init__.py +3 -1
- esphome/components/host/helpers.cpp +57 -0
- esphome/components/http_request/__init__.py +19 -1
- esphome/components/http_request/http_request.h +1 -1
- esphome/components/http_request/http_request_arduino.h +1 -0
- esphome/components/http_request/ota/ota_http_request.cpp +1 -1
- esphome/components/http_request/update/http_request_update.cpp +35 -16
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +3 -9
- esphome/components/hydreon_rgxx/sensor.py +1 -1
- esphome/components/i2c/__init__.py +23 -11
- esphome/components/i2c/i2c_bus.h +8 -1
- esphome/components/i2c/i2c_bus_arduino.cpp +4 -3
- esphome/components/i2c/i2c_bus_arduino.h +6 -3
- esphome/components/i2c/i2c_bus_esp_idf.h +5 -3
- esphome/components/i2c_device/i2c_device.h +0 -1
- esphome/components/i2s_audio/__init__.py +2 -10
- esphome/components/i2s_audio/i2s_audio.cpp +1 -5
- esphome/components/i2s_audio/media_player/__init__.py +2 -2
- esphome/components/i2s_audio/speaker/__init__.py +1 -1
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +2 -2
- esphome/components/iaqcore/iaqcore.h +0 -2
- esphome/components/image/__init__.py +123 -24
- esphome/components/improv_serial/improv_serial_component.cpp +0 -4
- esphome/components/ina219/ina219.cpp +7 -0
- esphome/components/ina219/ina219.h +1 -0
- esphome/components/ina260/ina260.h +0 -2
- esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.h +0 -1
- esphome/components/inkplate6/display.py +15 -0
- esphome/components/inkplate6/inkplate.cpp +2 -2
- esphome/components/integration/integration_sensor.h +0 -1
- esphome/components/internal_temperature/internal_temperature.cpp +8 -27
- esphome/components/internal_temperature/sensor.py +0 -26
- esphome/components/interval/interval.h +0 -2
- esphome/components/json/__init__.py +1 -1
- esphome/components/json/json_util.cpp +56 -63
- esphome/components/ld2410/button/__init__.py +3 -3
- esphome/components/ld2410/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2410/button/{reset_button.h → factory_reset_button.h} +2 -2
- esphome/components/ld2410/ld2410.cpp +421 -268
- esphome/components/ld2410/ld2410.h +44 -146
- esphome/components/ld2410/number/__init__.py +2 -2
- esphome/components/ld2410/sensor.py +1 -1
- esphome/components/ld2410/switch/__init__.py +1 -1
- esphome/components/ld2420/binary_sensor/ld2420_binary_sensor.cpp +2 -2
- esphome/components/ld2420/button/reconfig_buttons.cpp +1 -1
- esphome/components/ld2420/ld2420.cpp +252 -147
- esphome/components/ld2420/ld2420.h +52 -126
- esphome/components/ld2420/number/__init__.py +2 -2
- esphome/components/ld2420/number/gate_config_number.cpp +1 -1
- esphome/components/ld2420/select/operating_mode_select.cpp +1 -1
- esphome/components/ld2420/sensor/__init__.py +6 -2
- esphome/components/ld2420/sensor/ld2420_sensor.cpp +2 -2
- esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
- esphome/components/ld2420/text_sensor/text_sensor.cpp +2 -2
- esphome/components/ld2450/button/__init__.py +3 -3
- esphome/components/ld2450/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2450/button/{reset_button.h → factory_reset_button.h} +2 -2
- esphome/components/ld2450/ld2450.cpp +384 -232
- esphome/components/ld2450/ld2450.h +60 -69
- esphome/components/ld2450/switch/__init__.py +1 -1
- esphome/components/ledc/ledc_output.cpp +1 -63
- esphome/components/libretiny/__init__.py +5 -3
- esphome/components/libretiny/const.py +5 -0
- esphome/components/libretiny/generate_components.py +1 -0
- esphome/components/libretiny/helpers.cpp +35 -0
- esphome/components/libretiny/lt_component.cpp +5 -3
- esphome/components/light/__init__.py +4 -2
- esphome/components/light/addressable_light.h +3 -3
- esphome/components/light/light_call.cpp +180 -243
- esphome/components/light/light_call.h +72 -20
- esphome/components/light/light_color_values.h +14 -14
- esphome/components/light/light_json_schema.cpp +17 -16
- esphome/components/light/light_state.h +15 -13
- esphome/components/light/transformers.h +2 -2
- esphome/components/ln882x/__init__.py +52 -0
- esphome/components/ln882x/boards.py +285 -0
- esphome/components/lock/__init__.py +5 -2
- esphome/components/logger/__init__.py +40 -3
- esphome/components/logger/logger.cpp +47 -12
- esphome/components/logger/logger.h +80 -49
- esphome/components/logger/logger_esp32.cpp +3 -3
- esphome/components/lps22/__init__.py +0 -0
- esphome/components/lps22/lps22.cpp +75 -0
- esphome/components/lps22/lps22.h +27 -0
- esphome/components/lps22/sensor.py +58 -0
- esphome/components/ltr390/ltr390.h +0 -1
- esphome/components/ltr501/ltr501.h +0 -1
- esphome/components/ltr_als_ps/ltr_als_ps.h +0 -1
- esphome/components/lvgl/__init__.py +1 -1
- esphome/components/lvgl/schemas.py +66 -6
- esphome/components/lvgl/styles.py +24 -16
- esphome/components/lvgl/widgets/__init__.py +12 -2
- esphome/components/lvgl/widgets/lv_bar.py +40 -19
- esphome/components/lvgl/widgets/meter.py +20 -13
- esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +1 -1
- esphome/components/max9611/max9611.h +0 -1
- esphome/components/mcp23016/__init__.py +1 -1
- esphome/components/mcp23xxx_base/__init__.py +1 -1
- esphome/components/mcp4461/__init__.py +1 -1
- esphome/components/mcp4461/output/__init__.py +3 -2
- esphome/components/mcp9600/mcp9600.h +0 -2
- esphome/components/md5/md5.cpp +3 -3
- esphome/components/md5/md5.h +1 -6
- esphome/components/mdns/__init__.py +22 -11
- esphome/components/media_player/__init__.py +4 -3
- esphome/components/micro_wake_word/__init__.py +1 -5
- esphome/components/micro_wake_word/streaming_model.cpp +2 -2
- esphome/components/microphone/microphone.cpp +7 -9
- esphome/components/microphone/microphone.h +0 -2
- esphome/components/mipi_spi/display.py +1 -0
- esphome/components/mmc5603/mmc5603.cpp +1 -1
- esphome/components/modbus/modbus.cpp +33 -15
- esphome/components/modbus/modbus.h +9 -0
- esphome/components/modbus_controller/__init__.py +42 -10
- esphome/components/modbus_controller/modbus_controller.cpp +92 -11
- esphome/components/modbus_controller/modbus_controller.h +61 -7
- esphome/components/mopeka_pro_check/mopeka_pro_check.h +0 -1
- esphome/components/mopeka_std_check/mopeka_std_check.h +0 -1
- esphome/components/mpl3115a2/mpl3115a2.h +0 -2
- esphome/components/mqtt/__init__.py +16 -0
- esphome/components/mqtt/mqtt_alarm_control_panel.cpp +2 -1
- esphome/components/mqtt/mqtt_backend.h +2 -1
- esphome/components/mqtt/mqtt_backend_esp32.cpp +132 -47
- esphome/components/mqtt/mqtt_backend_esp32.h +106 -4
- esphome/components/mqtt/mqtt_binary_sensor.cpp +1 -0
- esphome/components/mqtt/mqtt_button.cpp +4 -1
- esphome/components/mqtt/mqtt_client.cpp +17 -9
- esphome/components/mqtt/mqtt_client.h +8 -3
- esphome/components/mqtt/mqtt_climate.cpp +6 -4
- esphome/components/mqtt/mqtt_component.cpp +3 -1
- esphome/components/mqtt/mqtt_cover.cpp +1 -0
- esphome/components/mqtt/mqtt_date.cpp +4 -3
- esphome/components/mqtt/mqtt_datetime.cpp +7 -6
- esphome/components/mqtt/mqtt_event.cpp +6 -3
- esphome/components/mqtt/mqtt_fan.cpp +1 -0
- esphome/components/mqtt/mqtt_light.cpp +8 -4
- esphome/components/mqtt/mqtt_lock.cpp +3 -1
- esphome/components/mqtt/mqtt_number.cpp +1 -0
- esphome/components/mqtt/mqtt_select.cpp +2 -1
- esphome/components/mqtt/mqtt_sensor.cpp +3 -1
- esphome/components/mqtt/mqtt_switch.cpp +3 -1
- esphome/components/mqtt/mqtt_text.cpp +1 -0
- esphome/components/mqtt/mqtt_text_sensor.cpp +3 -1
- esphome/components/mqtt/mqtt_time.cpp +4 -3
- esphome/components/mqtt/mqtt_update.cpp +1 -0
- esphome/components/mqtt/mqtt_valve.cpp +3 -1
- esphome/components/ms8607/ms8607.cpp +1 -1
- esphome/components/ms8607/ms8607.h +0 -1
- esphome/components/neopixelbus/light.py +4 -1
- esphome/components/neopixelbus/neopixelbus_light.h +1 -1
- esphome/components/network/__init__.py +4 -1
- esphome/components/network/ip_address.h +1 -0
- esphome/components/nextion/__init__.py +16 -0
- esphome/components/nextion/base_component.py +1 -0
- esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +1 -1
- esphome/components/nextion/display.py +14 -4
- esphome/components/nextion/nextion.cpp +166 -101
- esphome/components/nextion/nextion.h +84 -53
- esphome/components/nextion/nextion_commands.cpp +11 -10
- esphome/components/nextion/nextion_component.cpp +28 -28
- esphome/components/nextion/nextion_component.h +53 -18
- esphome/components/nextion/nextion_component_base.h +3 -0
- esphome/components/nextion/nextion_upload.cpp +36 -0
- esphome/components/nextion/nextion_upload_arduino.cpp +10 -35
- esphome/components/nextion/nextion_upload_idf.cpp +9 -33
- esphome/components/nextion/sensor/nextion_sensor.cpp +1 -1
- esphome/components/nextion/switch/nextion_switch.cpp +1 -1
- esphome/components/nextion/text_sensor/nextion_textsensor.cpp +1 -1
- esphome/components/nfc/nfc.cpp +3 -22
- esphome/components/nfc/nfc.h +3 -3
- esphome/components/number/__init__.py +5 -2
- esphome/components/online_image/__init__.py +9 -1
- esphome/components/online_image/online_image.cpp +17 -7
- esphome/components/online_image/online_image.h +10 -2
- esphome/components/opentherm/opentherm.cpp +7 -12
- esphome/components/opentherm/output/output.cpp +1 -1
- esphome/components/openthread/__init__.py +47 -40
- esphome/components/openthread/const.py +1 -0
- esphome/components/openthread/openthread_esp.cpp +27 -5
- esphome/components/opt3001/__init__.py +0 -0
- esphome/components/opt3001/opt3001.cpp +122 -0
- esphome/components/opt3001/opt3001.h +27 -0
- esphome/components/opt3001/sensor.py +35 -0
- esphome/components/ota/__init__.py +17 -0
- esphome/components/ota/ota_backend.h +27 -1
- esphome/components/ota/ota_backend_arduino_esp32.cpp +12 -2
- esphome/components/ota/ota_backend_arduino_esp32.h +3 -0
- esphome/components/ota/ota_backend_arduino_esp8266.cpp +18 -4
- esphome/components/ota/ota_backend_arduino_esp8266.h +3 -0
- esphome/components/ota/ota_backend_arduino_libretiny.cpp +12 -2
- esphome/components/ota/ota_backend_arduino_libretiny.h +3 -0
- esphome/components/ota/ota_backend_arduino_rp2040.cpp +9 -2
- esphome/components/ota/ota_backend_arduino_rp2040.h +3 -0
- esphome/components/ota/ota_backend_esp_idf.cpp +10 -16
- esphome/components/ota/ota_backend_esp_idf.h +1 -0
- esphome/components/packages/__init__.py +5 -2
- esphome/components/packet_transport/binary_sensor.py +61 -4
- esphome/components/packet_transport/packet_transport.cpp +34 -1
- esphome/components/packet_transport/packet_transport.h +11 -5
- esphome/components/pcf8574/__init__.py +1 -1
- esphome/components/pi4ioe5v6408/__init__.py +84 -0
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +171 -0
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.h +70 -0
- esphome/components/pmsa003i/pmsa003i.h +0 -1
- esphome/components/pmsx003/pmsx003.h +0 -1
- esphome/components/pn7150/pn7150.cpp +7 -7
- esphome/components/pn7150/pn7150.h +0 -1
- esphome/components/pn7160/pn7160.cpp +7 -7
- esphome/components/pn7160/pn7160.h +0 -1
- esphome/components/preferences/syncer.h +2 -0
- esphome/components/prometheus/prometheus_handler.h +1 -1
- esphome/components/psram/psram.cpp +0 -20
- esphome/components/pulse_counter/pulse_counter_sensor.h +0 -1
- esphome/components/pulse_meter/pulse_meter_sensor.cpp +8 -4
- esphome/components/pulse_width/pulse_width.h +0 -1
- esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +0 -4
- esphome/components/pvvx_mithermometer/display/pvvx_display.h +0 -2
- esphome/components/pvvx_mithermometer/pvvx_mithermometer.h +0 -1
- esphome/components/qr_code/__init__.py +13 -10
- esphome/components/qwiic_pir/qwiic_pir.h +0 -1
- esphome/components/radon_eye_ble/radon_eye_listener.cpp +1 -1
- esphome/components/rc522/rc522.h +0 -1
- esphome/components/rdm6300/rdm6300.h +0 -2
- esphome/components/remote_base/__init__.py +7 -5
- esphome/components/remote_base/remote_base.cpp +24 -21
- esphome/components/remote_base/remote_base.h +3 -26
- esphome/components/remote_receiver/__init__.py +40 -46
- esphome/components/remote_receiver/remote_receiver.h +4 -18
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -87
- esphome/components/remote_receiver/remote_receiver_esp8266.cpp +1 -1
- esphome/components/remote_transmitter/__init__.py +42 -43
- esphome/components/remote_transmitter/remote_transmitter.h +2 -14
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -77
- esphome/components/resistance/resistance_sensor.h +0 -1
- esphome/components/rp2040/__init__.py +2 -0
- esphome/components/rp2040/helpers.cpp +55 -0
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +2 -2
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -4
- esphome/components/rtttl/__init__.py +4 -4
- esphome/components/rtttl/rtttl.cpp +10 -1
- esphome/components/ruuvitag/ruuvitag.h +0 -1
- esphome/components/safe_mode/safe_mode.cpp +2 -0
- esphome/components/safe_mode/safe_mode.h +4 -1
- esphome/components/scd30/scd30.h +0 -1
- esphome/components/scd30/sensor.py +2 -2
- esphome/components/scd4x/scd4x.cpp +61 -54
- esphome/components/scd4x/scd4x.h +17 -15
- esphome/components/scd4x/sensor.py +4 -4
- esphome/components/script/script.h +0 -2
- esphome/components/sdp3x/sensor.py +1 -1
- esphome/components/select/__init__.py +5 -2
- esphome/components/sen5x/sen5x.h +0 -1
- esphome/components/senseair/senseair.h +0 -1
- esphome/components/sensor/__init__.py +4 -2
- esphome/components/sensor/filter.cpp +1 -1
- esphome/components/sensor/sensor.cpp +12 -6
- esphome/components/sensor/sensor.h +13 -5
- esphome/components/servo/servo.cpp +2 -2
- esphome/components/servo/servo.h +0 -1
- esphome/components/sfa30/sfa30.h +0 -1
- esphome/components/sgp30/sgp30.h +0 -1
- esphome/components/sgp4x/sgp4x.h +0 -1
- esphome/components/shelly_dimmer/stm32flash.cpp +1 -2
- esphome/components/sht4x/sht4x.h +0 -1
- esphome/components/sm300d2/sm300d2.h +0 -2
- esphome/components/smt100/sensor.py +8 -4
- esphome/components/smt100/smt100.cpp +5 -5
- esphome/components/smt100/smt100.h +3 -3
- esphome/components/sn74hc595/__init__.py +1 -1
- esphome/components/sn74hc595/sn74hc595.cpp +5 -4
- esphome/components/sntp/sntp_component.cpp +9 -3
- esphome/components/sntp/time.py +2 -0
- esphome/components/socket/__init__.py +17 -0
- esphome/components/spi/__init__.py +27 -6
- esphome/components/spi/spi.cpp +3 -2
- esphome/components/spi/spi.h +9 -3
- esphome/components/spi/spi_arduino.cpp +3 -5
- esphome/components/spi/spi_esp_idf.cpp +40 -21
- esphome/components/spi_led_strip/spi_led_strip.cpp +1 -1
- esphome/components/sps30/sps30.h +0 -1
- esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
- esphome/components/st7701s/st7701s.cpp +0 -4
- esphome/components/status/status_binary_sensor.h +0 -2
- esphome/components/substitutions/__init__.py +81 -21
- esphome/components/substitutions/jinja.py +99 -0
- esphome/components/sun/sun.cpp +3 -4
- esphome/components/switch/__init__.py +5 -2
- esphome/components/switch/binary_sensor/switch_binary_sensor.h +0 -1
- esphome/components/sx126x/__init__.py +317 -0
- esphome/components/sx126x/automation.h +62 -0
- esphome/components/sx126x/packet_transport/__init__.py +26 -0
- esphome/components/sx126x/packet_transport/sx126x_transport.cpp +26 -0
- esphome/components/sx126x/packet_transport/sx126x_transport.h +25 -0
- esphome/components/sx126x/sx126x.cpp +523 -0
- esphome/components/sx126x/sx126x.h +140 -0
- esphome/components/sx126x/sx126x_reg.h +163 -0
- esphome/components/sx127x/__init__.py +325 -0
- esphome/components/sx127x/automation.h +62 -0
- esphome/components/sx127x/packet_transport/__init__.py +26 -0
- esphome/components/sx127x/packet_transport/sx127x_transport.cpp +26 -0
- esphome/components/sx127x/packet_transport/sx127x_transport.h +25 -0
- esphome/components/sx127x/sx127x.cpp +498 -0
- esphome/components/sx127x/sx127x.h +128 -0
- esphome/components/sx127x/sx127x_reg.h +295 -0
- esphome/components/syslog/esphome_syslog.cpp +5 -3
- esphome/components/syslog/esphome_syslog.h +1 -1
- esphome/components/tca9555/__init__.py +1 -1
- esphome/components/template/binary_sensor/template_binary_sensor.cpp +1 -9
- esphome/components/text/__init__.py +5 -2
- esphome/components/text_sensor/__init__.py +5 -2
- esphome/components/thermostat/thermostat_climate.cpp +34 -31
- esphome/components/thermostat/thermostat_climate.h +43 -39
- esphome/components/time/__init__.py +16 -2
- esphome/components/time/real_time_clock.cpp +4 -0
- esphome/components/time/real_time_clock.h +5 -1
- esphome/components/tlc5971/tlc5971.cpp +4 -1
- esphome/components/tmp1075/tmp1075.h +0 -2
- esphome/components/tof10120/tof10120_sensor.h +0 -1
- esphome/components/tormatic/tormatic_cover.h +0 -1
- esphome/components/total_daily_energy/total_daily_energy.h +0 -1
- esphome/components/tsl2591/tsl2591.cpp +1 -1
- esphome/components/ttp229_bsf/ttp229_bsf.h +0 -1
- esphome/components/ttp229_lsf/ttp229_lsf.h +0 -1
- esphome/components/tx20/tx20.cpp +2 -2
- esphome/components/uart/__init__.py +18 -0
- esphome/components/uart/uart_component_esp_idf.cpp +0 -4
- esphome/components/update/__init__.py +5 -2
- esphome/components/update/update_entity.h +8 -0
- esphome/components/usb_host/__init__.py +5 -2
- esphome/components/usb_host/usb_host_client.cpp +10 -10
- esphome/components/usb_uart/cp210x.cpp +1 -1
- esphome/components/usb_uart/usb_uart.cpp +41 -44
- esphome/components/usb_uart/usb_uart.h +4 -3
- esphome/components/valve/__init__.py +5 -2
- esphome/components/vbus/vbus.h +0 -1
- esphome/components/veml3235/veml3235.h +0 -1
- esphome/components/veml7700/veml7700.h +0 -1
- esphome/components/vl53l0x/vl53l0x_sensor.h +0 -1
- esphome/components/voice_assistant/voice_assistant.cpp +4 -4
- esphome/components/watchdog/watchdog.cpp +0 -4
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +6 -6
- esphome/components/web_server/__init__.py +34 -19
- esphome/components/web_server/ota/__init__.py +32 -0
- esphome/components/web_server/ota/ota_web_server.cpp +210 -0
- esphome/components/web_server/ota/ota_web_server.h +26 -0
- esphome/components/web_server/web_server.cpp +318 -436
- esphome/components/web_server/web_server.h +33 -23
- esphome/components/web_server/web_server_v1.cpp +4 -5
- esphome/components/web_server_base/__init__.py +5 -2
- esphome/components/web_server_base/web_server_base.cpp +2 -94
- esphome/components/web_server_base/web_server_base.h +5 -25
- esphome/components/web_server_idf/multipart.cpp +254 -0
- esphome/components/web_server_idf/multipart.h +86 -0
- esphome/components/web_server_idf/utils.cpp +32 -0
- esphome/components/web_server_idf/utils.h +10 -0
- esphome/components/web_server_idf/web_server_idf.cpp +164 -16
- esphome/components/web_server_idf/web_server_idf.h +11 -10
- esphome/components/wiegand/wiegand.cpp +2 -2
- esphome/components/wifi/__init__.py +18 -0
- esphome/components/wifi/wifi_component.cpp +17 -22
- esphome/components/wifi/wifi_component.h +27 -23
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +52 -59
- esphome/components/wifi/wifi_component_esp8266.cpp +46 -46
- esphome/components/wifi/wifi_component_esp_idf.cpp +35 -36
- esphome/components/wifi/wifi_component_libretiny.cpp +26 -27
- esphome/components/wifi/wifi_component_pico_w.cpp +3 -3
- esphome/components/wifi_info/wifi_info_text_sensor.cpp +6 -6
- esphome/components/wireguard/__init__.py +2 -11
- esphome/components/xiaomi_ble/xiaomi_ble.cpp +13 -1
- esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
- esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +0 -1
- esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +0 -1
- esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +0 -1
- esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +0 -1
- esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +0 -1
- esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +0 -1
- esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +0 -1
- esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +0 -1
- esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +0 -1
- esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +0 -1
- esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +0 -1
- esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +0 -1
- esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +0 -1
- esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +0 -1
- esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +0 -1
- esphome/components/xiaomi_miscale/xiaomi_miscale.h +0 -1
- esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +0 -1
- esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +0 -1
- esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +0 -1
- esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +0 -1
- esphome/components/xiaomi_xmwsdj04mmc/__init__.py +0 -0
- esphome/components/xiaomi_xmwsdj04mmc/sensor.py +77 -0
- esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.cpp +77 -0
- esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.h +36 -0
- esphome/components/zio_ultrasonic/zio_ultrasonic.h +0 -2
- esphome/components/zyaura/zyaura.h +0 -1
- esphome/config.py +88 -22
- esphome/config_helpers.py +74 -1
- esphome/config_validation.py +12 -1
- esphome/const.py +65 -10
- esphome/core/__init__.py +18 -2
- esphome/core/application.cpp +169 -10
- esphome/core/application.h +145 -165
- esphome/core/area.h +19 -0
- esphome/core/automation.h +58 -9
- esphome/core/color.cpp +3 -5
- esphome/core/color.h +16 -16
- esphome/core/component.cpp +156 -22
- esphome/core/component.h +98 -4
- esphome/core/component_iterator.cpp +11 -9
- esphome/core/component_iterator.h +12 -10
- esphome/core/config.py +155 -6
- esphome/core/controller.cpp +4 -2
- esphome/core/controller.h +1 -1
- esphome/core/datatypes.h +2 -2
- esphome/core/defines.h +17 -2
- esphome/core/device.h +20 -0
- esphome/core/entity_base.cpp +20 -15
- esphome/core/entity_base.h +76 -0
- esphome/core/entity_helpers.py +168 -1
- esphome/core/event_pool.h +81 -0
- esphome/core/helpers.cpp +75 -230
- esphome/core/helpers.h +165 -105
- esphome/core/lock_free_queue.h +151 -0
- esphome/core/log.cpp +2 -2
- esphome/core/log.h +2 -0
- esphome/core/optional.h +5 -0
- esphome/core/ring_buffer.cpp +2 -2
- esphome/core/scheduler.cpp +275 -103
- esphome/core/scheduler.h +154 -17
- esphome/core/time.cpp +5 -5
- esphome/core/time.h +5 -5
- esphome/cpp_generator.py +17 -0
- esphome/cpp_helpers.py +0 -22
- esphome/cpp_types.py +3 -1
- esphome/dashboard/entries.py +1 -1
- esphome/dashboard/util/text.py +5 -21
- esphome/dashboard/web_server.py +9 -1
- esphome/helpers.py +47 -0
- esphome/loader.py +15 -1
- esphome/pins.py +14 -8
- esphome/platformio_api.py +2 -0
- esphome/wizard.py +17 -4
- esphome/writer.py +44 -3
- esphome/yaml_util.py +0 -2
- {esphome-2025.6.3.dist-info → esphome-2025.7.0.dist-info}/METADATA +10 -9
- {esphome-2025.6.3.dist-info → esphome-2025.7.0.dist-info}/RECORD +637 -578
- esphome/components/api/api_pb2_size.h +0 -361
- esphome/components/esp32_ble/ble_event_pool.h +0 -72
- esphome/components/esp32_ble/queue.h +0 -85
- esphome/components/esp32_hall/esp32_hall.cpp +0 -25
- esphome/components/esp32_hall/esp32_hall.h +0 -23
- esphome/components/esp32_touch/esp32_touch.cpp +0 -355
- esphome/components/ld2410/button/reset_button.cpp +0 -9
- esphome/components/ld2450/button/reset_button.cpp +0 -9
- esphome/components/openthread/tlv.py +0 -65
- /esphome/{dashboard/enum.py → enum.py} +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0.dist-info}/WHEEL +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0.dist-info}/entry_points.txt +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0.dist-info}/top_level.txt +0 -0
|
@@ -3,6 +3,8 @@ import esphome.codegen as cg
|
|
|
3
3
|
from esphome.components import i2c, sensirion_common, sensor
|
|
4
4
|
import esphome.config_validation as cv
|
|
5
5
|
from esphome.const import (
|
|
6
|
+
CONF_AMBIENT_PRESSURE_COMPENSATION,
|
|
7
|
+
CONF_AUTOMATIC_SELF_CALIBRATION,
|
|
6
8
|
CONF_CO2,
|
|
7
9
|
CONF_HUMIDITY,
|
|
8
10
|
CONF_ID,
|
|
@@ -18,8 +20,6 @@ from esphome.const import (
|
|
|
18
20
|
UNIT_CELSIUS,
|
|
19
21
|
UNIT_PARTS_PER_MILLION,
|
|
20
22
|
UNIT_PERCENT,
|
|
21
|
-
CONF_AUTOMATIC_SELF_CALIBRATION,
|
|
22
|
-
CONF_AMBIENT_PRESSURE_COMPENSATION,
|
|
23
23
|
)
|
|
24
24
|
|
|
25
25
|
DEPENDENCIES = ["i2c"]
|
|
@@ -7,6 +7,8 @@ namespace scd4x {
|
|
|
7
7
|
|
|
8
8
|
static const char *const TAG = "scd4x";
|
|
9
9
|
|
|
10
|
+
static const uint16_t SCD41_ID = 0x1408;
|
|
11
|
+
static const uint16_t SCD40_ID = 0x440;
|
|
10
12
|
static const uint16_t SCD4X_CMD_GET_SERIAL_NUMBER = 0x3682;
|
|
11
13
|
static const uint16_t SCD4X_CMD_TEMPERATURE_OFFSET = 0x241d;
|
|
12
14
|
static const uint16_t SCD4X_CMD_ALTITUDE_COMPENSATION = 0x2427;
|
|
@@ -23,8 +25,6 @@ static const uint16_t SCD4X_CMD_STOP_MEASUREMENTS = 0x3f86;
|
|
|
23
25
|
static const uint16_t SCD4X_CMD_FACTORY_RESET = 0x3632;
|
|
24
26
|
static const uint16_t SCD4X_CMD_GET_FEATURESET = 0x202f;
|
|
25
27
|
static const float SCD4X_TEMPERATURE_OFFSET_MULTIPLIER = (1 << 16) / 175.0f;
|
|
26
|
-
static const uint16_t SCD41_ID = 0x1408;
|
|
27
|
-
static const uint16_t SCD40_ID = 0x440;
|
|
28
28
|
|
|
29
29
|
void SCD4XComponent::setup() {
|
|
30
30
|
ESP_LOGCONFIG(TAG, "Running setup");
|
|
@@ -51,47 +51,66 @@ void SCD4XComponent::setup() {
|
|
|
51
51
|
|
|
52
52
|
if (!this->write_command(SCD4X_CMD_TEMPERATURE_OFFSET,
|
|
53
53
|
(uint16_t) (temperature_offset_ * SCD4X_TEMPERATURE_OFFSET_MULTIPLIER))) {
|
|
54
|
-
ESP_LOGE(TAG, "Error setting temperature offset
|
|
54
|
+
ESP_LOGE(TAG, "Error setting temperature offset");
|
|
55
55
|
this->error_code_ = MEASUREMENT_INIT_FAILED;
|
|
56
56
|
this->mark_failed();
|
|
57
57
|
return;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
// If pressure compensation available use it
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
ESP_LOGE(TAG, "Error setting ambient pressure compensation.");
|
|
60
|
+
// If pressure compensation available use it, else use altitude
|
|
61
|
+
if (this->ambient_pressure_) {
|
|
62
|
+
if (!this->update_ambient_pressure_compensation_(this->ambient_pressure_)) {
|
|
63
|
+
ESP_LOGE(TAG, "Error setting ambient pressure compensation");
|
|
65
64
|
this->error_code_ = MEASUREMENT_INIT_FAILED;
|
|
66
65
|
this->mark_failed();
|
|
67
66
|
return;
|
|
68
67
|
}
|
|
69
68
|
} else {
|
|
70
|
-
if (!this->write_command(SCD4X_CMD_ALTITUDE_COMPENSATION, altitude_compensation_)) {
|
|
71
|
-
ESP_LOGE(TAG, "Error setting altitude compensation
|
|
69
|
+
if (!this->write_command(SCD4X_CMD_ALTITUDE_COMPENSATION, this->altitude_compensation_)) {
|
|
70
|
+
ESP_LOGE(TAG, "Error setting altitude compensation");
|
|
72
71
|
this->error_code_ = MEASUREMENT_INIT_FAILED;
|
|
73
72
|
this->mark_failed();
|
|
74
73
|
return;
|
|
75
74
|
}
|
|
76
75
|
}
|
|
77
76
|
|
|
78
|
-
if (!this->write_command(SCD4X_CMD_AUTOMATIC_SELF_CALIBRATION, enable_asc_ ? 1 : 0)) {
|
|
79
|
-
ESP_LOGE(TAG, "Error setting automatic self calibration
|
|
77
|
+
if (!this->write_command(SCD4X_CMD_AUTOMATIC_SELF_CALIBRATION, this->enable_asc_ ? 1 : 0)) {
|
|
78
|
+
ESP_LOGE(TAG, "Error setting automatic self calibration");
|
|
80
79
|
this->error_code_ = MEASUREMENT_INIT_FAILED;
|
|
81
80
|
this->mark_failed();
|
|
82
81
|
return;
|
|
83
82
|
}
|
|
84
83
|
|
|
85
|
-
initialized_ = true;
|
|
84
|
+
this->initialized_ = true;
|
|
86
85
|
// Finally start sensor measurements
|
|
87
86
|
this->start_measurement_();
|
|
88
|
-
ESP_LOGD(TAG, "Sensor initialized");
|
|
89
87
|
});
|
|
90
88
|
});
|
|
91
89
|
}
|
|
92
90
|
|
|
93
91
|
void SCD4XComponent::dump_config() {
|
|
94
|
-
|
|
92
|
+
static const char *const MM_PERIODIC_STR = "Periodic (5s)";
|
|
93
|
+
static const char *const MM_LOW_POWER_PERIODIC_STR = "Low power periodic (30s)";
|
|
94
|
+
static const char *const MM_SINGLE_SHOT_STR = "Single shot";
|
|
95
|
+
static const char *const MM_SINGLE_SHOT_RHT_ONLY_STR = "Single shot rht only";
|
|
96
|
+
const char *measurement_mode_str = MM_PERIODIC_STR;
|
|
97
|
+
|
|
98
|
+
switch (this->measurement_mode_) {
|
|
99
|
+
case PERIODIC:
|
|
100
|
+
// measurement_mode_str = MM_PERIODIC_STR;
|
|
101
|
+
break;
|
|
102
|
+
case LOW_POWER_PERIODIC:
|
|
103
|
+
measurement_mode_str = MM_LOW_POWER_PERIODIC_STR;
|
|
104
|
+
break;
|
|
105
|
+
case SINGLE_SHOT:
|
|
106
|
+
measurement_mode_str = MM_SINGLE_SHOT_STR;
|
|
107
|
+
break;
|
|
108
|
+
case SINGLE_SHOT_RHT_ONLY:
|
|
109
|
+
measurement_mode_str = MM_SINGLE_SHOT_RHT_ONLY_STR;
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
ESP_LOGCONFIG(TAG, "SCD4X:");
|
|
95
114
|
LOG_I2C_DEVICE(this);
|
|
96
115
|
if (this->is_failed()) {
|
|
97
116
|
switch (this->error_code_) {
|
|
@@ -102,19 +121,23 @@ void SCD4XComponent::dump_config() {
|
|
|
102
121
|
ESP_LOGW(TAG, "Measurement Initialization failed");
|
|
103
122
|
break;
|
|
104
123
|
case SERIAL_NUMBER_IDENTIFICATION_FAILED:
|
|
105
|
-
ESP_LOGW(TAG, "Unable to read
|
|
124
|
+
ESP_LOGW(TAG, "Unable to read firmware version");
|
|
106
125
|
break;
|
|
107
126
|
default:
|
|
108
127
|
ESP_LOGW(TAG, "Unknown setup error");
|
|
109
128
|
break;
|
|
110
129
|
}
|
|
111
130
|
}
|
|
112
|
-
ESP_LOGCONFIG(TAG,
|
|
131
|
+
ESP_LOGCONFIG(TAG,
|
|
132
|
+
" Automatic self calibration: %s\n"
|
|
133
|
+
" Measurement mode: %s\n"
|
|
134
|
+
" Temperature offset: %.2f °C",
|
|
135
|
+
ONOFF(this->enable_asc_), measurement_mode_str, this->temperature_offset_);
|
|
113
136
|
if (this->ambient_pressure_source_ != nullptr) {
|
|
114
|
-
ESP_LOGCONFIG(TAG, " Dynamic ambient pressure compensation using
|
|
137
|
+
ESP_LOGCONFIG(TAG, " Dynamic ambient pressure compensation using '%s'",
|
|
115
138
|
this->ambient_pressure_source_->get_name().c_str());
|
|
116
139
|
} else {
|
|
117
|
-
if (this->
|
|
140
|
+
if (this->ambient_pressure_) {
|
|
118
141
|
ESP_LOGCONFIG(TAG,
|
|
119
142
|
" Altitude compensation disabled\n"
|
|
120
143
|
" Ambient pressure compensation: %dmBar",
|
|
@@ -126,21 +149,6 @@ void SCD4XComponent::dump_config() {
|
|
|
126
149
|
this->altitude_compensation_);
|
|
127
150
|
}
|
|
128
151
|
}
|
|
129
|
-
switch (this->measurement_mode_) {
|
|
130
|
-
case PERIODIC:
|
|
131
|
-
ESP_LOGCONFIG(TAG, " Measurement mode: periodic (5s)");
|
|
132
|
-
break;
|
|
133
|
-
case LOW_POWER_PERIODIC:
|
|
134
|
-
ESP_LOGCONFIG(TAG, " Measurement mode: low power periodic (30s)");
|
|
135
|
-
break;
|
|
136
|
-
case SINGLE_SHOT:
|
|
137
|
-
ESP_LOGCONFIG(TAG, " Measurement mode: single shot");
|
|
138
|
-
break;
|
|
139
|
-
case SINGLE_SHOT_RHT_ONLY:
|
|
140
|
-
ESP_LOGCONFIG(TAG, " Measurement mode: single shot rht only");
|
|
141
|
-
break;
|
|
142
|
-
}
|
|
143
|
-
ESP_LOGCONFIG(TAG, " Temperature offset: %.2f °C", this->temperature_offset_);
|
|
144
152
|
LOG_UPDATE_INTERVAL(this);
|
|
145
153
|
LOG_SENSOR(" ", "CO2", this->co2_sensor_);
|
|
146
154
|
LOG_SENSOR(" ", "Temperature", this->temperature_sensor_);
|
|
@@ -148,20 +156,20 @@ void SCD4XComponent::dump_config() {
|
|
|
148
156
|
}
|
|
149
157
|
|
|
150
158
|
void SCD4XComponent::update() {
|
|
151
|
-
if (!initialized_) {
|
|
159
|
+
if (!this->initialized_) {
|
|
152
160
|
return;
|
|
153
161
|
}
|
|
154
162
|
|
|
155
163
|
if (this->ambient_pressure_source_ != nullptr) {
|
|
156
164
|
float pressure = this->ambient_pressure_source_->state;
|
|
157
165
|
if (!std::isnan(pressure)) {
|
|
158
|
-
set_ambient_pressure_compensation(pressure);
|
|
166
|
+
this->set_ambient_pressure_compensation(pressure);
|
|
159
167
|
}
|
|
160
168
|
}
|
|
161
169
|
|
|
162
170
|
uint32_t wait_time = 0;
|
|
163
171
|
if (this->measurement_mode_ == SINGLE_SHOT || this->measurement_mode_ == SINGLE_SHOT_RHT_ONLY) {
|
|
164
|
-
start_measurement_();
|
|
172
|
+
this->start_measurement_();
|
|
165
173
|
wait_time =
|
|
166
174
|
this->measurement_mode_ == SINGLE_SHOT ? 5000 : 50; // Single shot measurement takes 5 secs rht mode 50 ms
|
|
167
175
|
}
|
|
@@ -176,12 +184,12 @@ void SCD4XComponent::update() {
|
|
|
176
184
|
|
|
177
185
|
if (!this->read_data(raw_read_status) || raw_read_status == 0x00) {
|
|
178
186
|
this->status_set_warning();
|
|
179
|
-
ESP_LOGW(TAG, "Data not ready
|
|
187
|
+
ESP_LOGW(TAG, "Data not ready");
|
|
180
188
|
return;
|
|
181
189
|
}
|
|
182
190
|
|
|
183
191
|
if (!this->write_command(SCD4X_CMD_READ_MEASUREMENT)) {
|
|
184
|
-
ESP_LOGW(TAG, "Error reading measurement
|
|
192
|
+
ESP_LOGW(TAG, "Error reading measurement");
|
|
185
193
|
this->status_set_warning();
|
|
186
194
|
return; // NO RETRY
|
|
187
195
|
}
|
|
@@ -218,19 +226,19 @@ bool SCD4XComponent::perform_forced_calibration(uint16_t current_co2_concentrati
|
|
|
218
226
|
}
|
|
219
227
|
this->set_timeout(500, [this, current_co2_concentration]() {
|
|
220
228
|
if (this->write_command(SCD4X_CMD_PERFORM_FORCED_CALIBRATION, current_co2_concentration)) {
|
|
221
|
-
ESP_LOGD(TAG, "
|
|
229
|
+
ESP_LOGD(TAG, "Setting forced calibration Co2 level %d ppm", current_co2_concentration);
|
|
222
230
|
// frc takes 400 ms
|
|
223
231
|
// because this method will be used very rarly
|
|
224
232
|
// the simple approach with delay is ok
|
|
225
|
-
delay(400); // NOLINT
|
|
233
|
+
delay(400); // NOLINT
|
|
226
234
|
if (!this->start_measurement_()) {
|
|
227
235
|
return false;
|
|
228
236
|
} else {
|
|
229
|
-
ESP_LOGD(TAG, "
|
|
237
|
+
ESP_LOGD(TAG, "Forced calibration complete");
|
|
230
238
|
}
|
|
231
239
|
return true;
|
|
232
240
|
} else {
|
|
233
|
-
ESP_LOGE(TAG, "
|
|
241
|
+
ESP_LOGE(TAG, "Force calibration failed");
|
|
234
242
|
this->error_code_ = FRC_FAILED;
|
|
235
243
|
this->status_set_warning();
|
|
236
244
|
return false;
|
|
@@ -259,27 +267,26 @@ bool SCD4XComponent::factory_reset() {
|
|
|
259
267
|
}
|
|
260
268
|
|
|
261
269
|
void SCD4XComponent::set_ambient_pressure_compensation(float pressure_in_hpa) {
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
ambient_pressure_ = new_ambient_pressure;
|
|
270
|
+
uint16_t new_ambient_pressure = static_cast<uint16_t>(pressure_in_hpa);
|
|
271
|
+
if (!this->initialized_) {
|
|
272
|
+
this->ambient_pressure_ = new_ambient_pressure;
|
|
266
273
|
return;
|
|
267
274
|
}
|
|
268
275
|
// Only send pressure value if it has changed since last update
|
|
269
|
-
if (new_ambient_pressure != ambient_pressure_) {
|
|
270
|
-
update_ambient_pressure_compensation_(new_ambient_pressure);
|
|
271
|
-
ambient_pressure_ = new_ambient_pressure;
|
|
276
|
+
if (new_ambient_pressure != this->ambient_pressure_) {
|
|
277
|
+
this->update_ambient_pressure_compensation_(new_ambient_pressure);
|
|
278
|
+
this->ambient_pressure_ = new_ambient_pressure;
|
|
272
279
|
} else {
|
|
273
|
-
ESP_LOGD(TAG, "
|
|
280
|
+
ESP_LOGD(TAG, "Ambient pressure compensation skipped; no change required");
|
|
274
281
|
}
|
|
275
282
|
}
|
|
276
283
|
|
|
277
284
|
bool SCD4XComponent::update_ambient_pressure_compensation_(uint16_t pressure_in_hpa) {
|
|
278
285
|
if (this->write_command(SCD4X_CMD_AMBIENT_PRESSURE_COMPENSATION, pressure_in_hpa)) {
|
|
279
|
-
ESP_LOGD(TAG, "
|
|
286
|
+
ESP_LOGD(TAG, "Setting ambient pressure compensation to %d hPa", pressure_in_hpa);
|
|
280
287
|
return true;
|
|
281
288
|
} else {
|
|
282
|
-
ESP_LOGE(TAG, "Error setting ambient pressure compensation
|
|
289
|
+
ESP_LOGE(TAG, "Error setting ambient pressure compensation");
|
|
283
290
|
return false;
|
|
284
291
|
}
|
|
285
292
|
}
|
|
@@ -304,7 +311,7 @@ bool SCD4XComponent::start_measurement_() {
|
|
|
304
311
|
static uint8_t remaining_retries = 3;
|
|
305
312
|
while (remaining_retries) {
|
|
306
313
|
if (!this->write_command(measurement_command)) {
|
|
307
|
-
ESP_LOGE(TAG, "Error starting measurements
|
|
314
|
+
ESP_LOGE(TAG, "Error starting measurements");
|
|
308
315
|
this->error_code_ = MEASUREMENT_INIT_FAILED;
|
|
309
316
|
this->status_set_warning();
|
|
310
317
|
if (--remaining_retries == 0)
|
esphome/components/scd4x/scd4x.h
CHANGED
|
@@ -8,18 +8,23 @@
|
|
|
8
8
|
namespace esphome {
|
|
9
9
|
namespace scd4x {
|
|
10
10
|
|
|
11
|
-
enum
|
|
11
|
+
enum ErrorCode : uint8_t {
|
|
12
12
|
COMMUNICATION_FAILED,
|
|
13
13
|
SERIAL_NUMBER_IDENTIFICATION_FAILED,
|
|
14
14
|
MEASUREMENT_INIT_FAILED,
|
|
15
15
|
FRC_FAILED,
|
|
16
|
-
UNKNOWN
|
|
16
|
+
UNKNOWN,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
enum MeasurementMode : uint8_t {
|
|
20
|
+
PERIODIC,
|
|
21
|
+
LOW_POWER_PERIODIC,
|
|
22
|
+
SINGLE_SHOT,
|
|
23
|
+
SINGLE_SHOT_RHT_ONLY,
|
|
17
24
|
};
|
|
18
|
-
enum MeasurementMode { PERIODIC, LOW_POWER_PERIODIC, SINGLE_SHOT, SINGLE_SHOT_RHT_ONLY };
|
|
19
25
|
|
|
20
26
|
class SCD4XComponent : public PollingComponent, public sensirion_common::SensirionI2CDevice {
|
|
21
27
|
public:
|
|
22
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
23
28
|
void setup() override;
|
|
24
29
|
void dump_config() override;
|
|
25
30
|
void update() override;
|
|
@@ -40,21 +45,18 @@ class SCD4XComponent : public PollingComponent, public sensirion_common::Sensiri
|
|
|
40
45
|
protected:
|
|
41
46
|
bool update_ambient_pressure_compensation_(uint16_t pressure_in_hpa);
|
|
42
47
|
bool start_measurement_();
|
|
43
|
-
ERRORCODE error_code_;
|
|
44
48
|
|
|
45
|
-
bool initialized_{false};
|
|
46
|
-
|
|
47
|
-
float temperature_offset_;
|
|
48
|
-
uint16_t altitude_compensation_;
|
|
49
|
-
bool ambient_pressure_compensation_;
|
|
50
|
-
uint16_t ambient_pressure_;
|
|
51
|
-
bool enable_asc_;
|
|
52
|
-
MeasurementMode measurement_mode_{PERIODIC};
|
|
53
49
|
sensor::Sensor *co2_sensor_{nullptr};
|
|
54
50
|
sensor::Sensor *temperature_sensor_{nullptr};
|
|
55
51
|
sensor::Sensor *humidity_sensor_{nullptr};
|
|
56
|
-
// used for compensation
|
|
57
|
-
|
|
52
|
+
sensor::Sensor *ambient_pressure_source_{nullptr}; // used for compensation
|
|
53
|
+
float temperature_offset_;
|
|
54
|
+
uint16_t altitude_compensation_{0};
|
|
55
|
+
uint16_t ambient_pressure_{0}; // Per datasheet, valid values are 700 to 1200 hPa; 0 is a valid sentinel value
|
|
56
|
+
bool initialized_{false};
|
|
57
|
+
bool enable_asc_{false};
|
|
58
|
+
ErrorCode error_code_;
|
|
59
|
+
MeasurementMode measurement_mode_{PERIODIC};
|
|
58
60
|
};
|
|
59
61
|
|
|
60
62
|
} // namespace scd4x
|
|
@@ -4,9 +4,13 @@ import esphome.codegen as cg
|
|
|
4
4
|
from esphome.components import i2c, sensirion_common, sensor
|
|
5
5
|
import esphome.config_validation as cv
|
|
6
6
|
from esphome.const import (
|
|
7
|
+
CONF_AMBIENT_PRESSURE_COMPENSATION,
|
|
8
|
+
CONF_AMBIENT_PRESSURE_COMPENSATION_SOURCE,
|
|
9
|
+
CONF_AUTOMATIC_SELF_CALIBRATION,
|
|
7
10
|
CONF_CO2,
|
|
8
11
|
CONF_HUMIDITY,
|
|
9
12
|
CONF_ID,
|
|
13
|
+
CONF_MEASUREMENT_MODE,
|
|
10
14
|
CONF_TEMPERATURE,
|
|
11
15
|
CONF_TEMPERATURE_OFFSET,
|
|
12
16
|
CONF_VALUE,
|
|
@@ -20,10 +24,6 @@ from esphome.const import (
|
|
|
20
24
|
UNIT_CELSIUS,
|
|
21
25
|
UNIT_PARTS_PER_MILLION,
|
|
22
26
|
UNIT_PERCENT,
|
|
23
|
-
CONF_AUTOMATIC_SELF_CALIBRATION,
|
|
24
|
-
CONF_AMBIENT_PRESSURE_COMPENSATION,
|
|
25
|
-
CONF_AMBIENT_PRESSURE_COMPENSATION_SOURCE,
|
|
26
|
-
CONF_MEASUREMENT_MODE,
|
|
27
27
|
)
|
|
28
28
|
|
|
29
29
|
CODEOWNERS = ["@sjtrny", "@martgras"]
|
|
@@ -239,8 +239,6 @@ template<class C, typename... Ts> class ScriptWaitAction : public Action<Ts...>,
|
|
|
239
239
|
this->play_next_tuple_(this->var_);
|
|
240
240
|
}
|
|
241
241
|
|
|
242
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
243
|
-
|
|
244
242
|
void play(Ts... x) override { /* ignore - see play_complex */
|
|
245
243
|
}
|
|
246
244
|
|
|
@@ -2,10 +2,10 @@ import esphome.codegen as cg
|
|
|
2
2
|
from esphome.components import i2c, sensirion_common, sensor
|
|
3
3
|
import esphome.config_validation as cv
|
|
4
4
|
from esphome.const import (
|
|
5
|
+
CONF_MEASUREMENT_MODE,
|
|
5
6
|
DEVICE_CLASS_PRESSURE,
|
|
6
7
|
STATE_CLASS_MEASUREMENT,
|
|
7
8
|
UNIT_HECTOPASCAL,
|
|
8
|
-
CONF_MEASUREMENT_MODE,
|
|
9
9
|
)
|
|
10
10
|
|
|
11
11
|
DEPENDENCIES = ["i2c"]
|
|
@@ -17,8 +17,8 @@ from esphome.const import (
|
|
|
17
17
|
CONF_WEB_SERVER,
|
|
18
18
|
)
|
|
19
19
|
from esphome.core import CORE, coroutine_with_priority
|
|
20
|
+
from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
|
|
20
21
|
from esphome.cpp_generator import MockObjClass
|
|
21
|
-
from esphome.cpp_helpers import setup_entity
|
|
22
22
|
|
|
23
23
|
CODEOWNERS = ["@esphome/core"]
|
|
24
24
|
IS_PLATFORM_COMPONENT = True
|
|
@@ -65,6 +65,9 @@ _SELECT_SCHEMA = (
|
|
|
65
65
|
)
|
|
66
66
|
|
|
67
67
|
|
|
68
|
+
_SELECT_SCHEMA.add_extra(entity_duplicate_validator("select"))
|
|
69
|
+
|
|
70
|
+
|
|
68
71
|
def select_schema(
|
|
69
72
|
class_: MockObjClass,
|
|
70
73
|
*,
|
|
@@ -89,7 +92,7 @@ SELECT_SCHEMA.add_extra(cv.deprecated_schema_constant("select"))
|
|
|
89
92
|
|
|
90
93
|
|
|
91
94
|
async def setup_select_core_(var, config, *, options: list[str]):
|
|
92
|
-
await setup_entity(var, config)
|
|
95
|
+
await setup_entity(var, config, "select")
|
|
93
96
|
|
|
94
97
|
cg.add(var.traits.set_options(options))
|
|
95
98
|
|
esphome/components/sen5x/sen5x.h
CHANGED
|
@@ -48,7 +48,6 @@ struct TemperatureCompensation {
|
|
|
48
48
|
|
|
49
49
|
class SEN5XComponent : public PollingComponent, public sensirion_common::SensirionI2CDevice {
|
|
50
50
|
public:
|
|
51
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
52
51
|
void setup() override;
|
|
53
52
|
void dump_config() override;
|
|
54
53
|
void update() override;
|
|
@@ -10,7 +10,6 @@ namespace senseair {
|
|
|
10
10
|
|
|
11
11
|
class SenseAirComponent : public PollingComponent, public uart::UARTDevice {
|
|
12
12
|
public:
|
|
13
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
14
13
|
void set_co2_sensor(sensor::Sensor *co2_sensor) { co2_sensor_ = co2_sensor; }
|
|
15
14
|
|
|
16
15
|
void update() override;
|
|
@@ -101,8 +101,8 @@ from esphome.const import (
|
|
|
101
101
|
ENTITY_CATEGORY_CONFIG,
|
|
102
102
|
)
|
|
103
103
|
from esphome.core import CORE, coroutine_with_priority
|
|
104
|
+
from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
|
|
104
105
|
from esphome.cpp_generator import MockObjClass
|
|
105
|
-
from esphome.cpp_helpers import setup_entity
|
|
106
106
|
from esphome.util import Registry
|
|
107
107
|
|
|
108
108
|
CODEOWNERS = ["@esphome/core"]
|
|
@@ -318,6 +318,8 @@ _SENSOR_SCHEMA = (
|
|
|
318
318
|
)
|
|
319
319
|
)
|
|
320
320
|
|
|
321
|
+
_SENSOR_SCHEMA.add_extra(entity_duplicate_validator("sensor"))
|
|
322
|
+
|
|
321
323
|
|
|
322
324
|
def sensor_schema(
|
|
323
325
|
class_: MockObjClass = cv.UNDEFINED,
|
|
@@ -787,7 +789,7 @@ async def build_filters(config):
|
|
|
787
789
|
|
|
788
790
|
|
|
789
791
|
async def setup_sensor_core_(var, config):
|
|
790
|
-
await setup_entity(var, config)
|
|
792
|
+
await setup_entity(var, config, "sensor")
|
|
791
793
|
|
|
792
794
|
if (device_class := config.get(CONF_DEVICE_CLASS)) is not None:
|
|
793
795
|
cg.add(var.set_device_class(device_class))
|
|
@@ -118,7 +118,7 @@ optional<float> QuantileFilter::new_value(float value) {
|
|
|
118
118
|
size_t queue_size = quantile_queue.size();
|
|
119
119
|
if (queue_size) {
|
|
120
120
|
size_t position = ceilf(queue_size * this->quantile_) - 1;
|
|
121
|
-
ESP_LOGVV(TAG, "QuantileFilter(%p)::position: %
|
|
121
|
+
ESP_LOGVV(TAG, "QuantileFilter(%p)::position: %zu/%zu", this, position + 1, queue_size);
|
|
122
122
|
result = quantile_queue[position];
|
|
123
123
|
}
|
|
124
124
|
}
|
|
@@ -23,16 +23,22 @@ std::string state_class_to_string(StateClass state_class) {
|
|
|
23
23
|
Sensor::Sensor() : state(NAN), raw_state(NAN) {}
|
|
24
24
|
|
|
25
25
|
int8_t Sensor::get_accuracy_decimals() {
|
|
26
|
-
if (this->
|
|
27
|
-
return
|
|
26
|
+
if (this->sensor_flags_.has_accuracy_override)
|
|
27
|
+
return this->accuracy_decimals_;
|
|
28
28
|
return 0;
|
|
29
29
|
}
|
|
30
|
-
void Sensor::set_accuracy_decimals(int8_t accuracy_decimals) {
|
|
30
|
+
void Sensor::set_accuracy_decimals(int8_t accuracy_decimals) {
|
|
31
|
+
this->accuracy_decimals_ = accuracy_decimals;
|
|
32
|
+
this->sensor_flags_.has_accuracy_override = true;
|
|
33
|
+
}
|
|
31
34
|
|
|
32
|
-
void Sensor::set_state_class(StateClass state_class) {
|
|
35
|
+
void Sensor::set_state_class(StateClass state_class) {
|
|
36
|
+
this->state_class_ = state_class;
|
|
37
|
+
this->sensor_flags_.has_state_class_override = true;
|
|
38
|
+
}
|
|
33
39
|
StateClass Sensor::get_state_class() {
|
|
34
|
-
if (this->
|
|
35
|
-
return
|
|
40
|
+
if (this->sensor_flags_.has_state_class_override)
|
|
41
|
+
return this->state_class_;
|
|
36
42
|
return StateClass::STATE_CLASS_NONE;
|
|
37
43
|
}
|
|
38
44
|
|
|
@@ -80,9 +80,9 @@ class Sensor : public EntityBase, public EntityBase_DeviceClass, public EntityBa
|
|
|
80
80
|
* state changes to the database when they are published, even if the state is the
|
|
81
81
|
* same as before.
|
|
82
82
|
*/
|
|
83
|
-
bool get_force_update() const { return
|
|
83
|
+
bool get_force_update() const { return sensor_flags_.force_update; }
|
|
84
84
|
/// Set force update mode.
|
|
85
|
-
void set_force_update(bool force_update) {
|
|
85
|
+
void set_force_update(bool force_update) { sensor_flags_.force_update = force_update; }
|
|
86
86
|
|
|
87
87
|
/// Add a filter to the filter chain. Will be appended to the back.
|
|
88
88
|
void add_filter(Filter *filter);
|
|
@@ -155,9 +155,17 @@ class Sensor : public EntityBase, public EntityBase_DeviceClass, public EntityBa
|
|
|
155
155
|
|
|
156
156
|
Filter *filter_list_{nullptr}; ///< Store all active filters.
|
|
157
157
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
158
|
+
// Group small members together to avoid padding
|
|
159
|
+
int8_t accuracy_decimals_{-1}; ///< Accuracy in decimals (-1 = not set)
|
|
160
|
+
StateClass state_class_{STATE_CLASS_NONE}; ///< State class (STATE_CLASS_NONE = not set)
|
|
161
|
+
|
|
162
|
+
// Bit-packed flags for sensor-specific settings
|
|
163
|
+
struct SensorFlags {
|
|
164
|
+
uint8_t has_accuracy_override : 1;
|
|
165
|
+
uint8_t has_state_class_override : 1;
|
|
166
|
+
uint8_t force_update : 1;
|
|
167
|
+
uint8_t reserved : 5; // Reserved for future use
|
|
168
|
+
} sensor_flags_{};
|
|
161
169
|
};
|
|
162
170
|
|
|
163
171
|
} // namespace sensor
|
|
@@ -88,9 +88,9 @@ void Servo::internal_write(float value) {
|
|
|
88
88
|
value = clamp(value, -1.0f, 1.0f);
|
|
89
89
|
float level;
|
|
90
90
|
if (value < 0.0) {
|
|
91
|
-
level = lerp(
|
|
91
|
+
level = std::lerp(this->idle_level_, this->min_level_, -value);
|
|
92
92
|
} else {
|
|
93
|
-
level = lerp(
|
|
93
|
+
level = std::lerp(this->idle_level_, this->max_level_, value);
|
|
94
94
|
}
|
|
95
95
|
this->output_->set_level(level);
|
|
96
96
|
this->current_value_ = value;
|
esphome/components/servo/servo.h
CHANGED
|
@@ -20,7 +20,6 @@ class Servo : public Component {
|
|
|
20
20
|
void detach();
|
|
21
21
|
void setup() override;
|
|
22
22
|
void dump_config() override;
|
|
23
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
24
23
|
void set_min_level(float min_level) { min_level_ = min_level; }
|
|
25
24
|
void set_idle_level(float idle_level) { idle_level_ = idle_level; }
|
|
26
25
|
void set_max_level(float max_level) { max_level_ = max_level; }
|
esphome/components/sfa30/sfa30.h
CHANGED
|
@@ -11,7 +11,6 @@ class SFA30Component : public PollingComponent, public sensirion_common::Sensiri
|
|
|
11
11
|
enum ErrorCode { DEVICE_MARKING_READ_FAILED, MEASUREMENT_INIT_FAILED, UNKNOWN };
|
|
12
12
|
|
|
13
13
|
public:
|
|
14
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
15
14
|
void setup() override;
|
|
16
15
|
void dump_config() override;
|
|
17
16
|
void update() override;
|
esphome/components/sgp30/sgp30.h
CHANGED
|
@@ -32,7 +32,6 @@ class SGP30Component : public PollingComponent, public sensirion_common::Sensiri
|
|
|
32
32
|
void setup() override;
|
|
33
33
|
void update() override;
|
|
34
34
|
void dump_config() override;
|
|
35
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
36
35
|
|
|
37
36
|
protected:
|
|
38
37
|
void send_env_data_();
|
esphome/components/sgp4x/sgp4x.h
CHANGED
|
@@ -75,7 +75,6 @@ class SGP4xComponent : public PollingComponent, public sensor::Sensor, public se
|
|
|
75
75
|
void update() override;
|
|
76
76
|
void take_sample();
|
|
77
77
|
void dump_config() override;
|
|
78
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
79
78
|
void set_store_baseline(bool store_baseline) { store_baseline_ = store_baseline; }
|
|
80
79
|
void set_voc_sensor(sensor::Sensor *voc_sensor) { voc_sensor_ = voc_sensor; }
|
|
81
80
|
void set_nox_sensor(sensor::Sensor *nox_sensor) { nox_sensor_ = nox_sensor; }
|
|
@@ -445,8 +445,7 @@ template<typename T> stm32_err_t stm32_check_ack_timeout(const stm32_err_t s_err
|
|
|
445
445
|
return STM32_ERR_OK;
|
|
446
446
|
case STM32_ERR_NACK:
|
|
447
447
|
log();
|
|
448
|
-
|
|
449
|
-
/* fallthrough */
|
|
448
|
+
[[fallthrough]];
|
|
450
449
|
default:
|
|
451
450
|
return STM32_ERR_UNKNOWN;
|
|
452
451
|
}
|
esphome/components/sht4x/sht4x.h
CHANGED
|
@@ -17,7 +17,6 @@ enum SHT4XHEATERTIME : uint16_t { SHT4X_HEATERTIME_LONG = 1100, SHT4X_HEATERTIME
|
|
|
17
17
|
|
|
18
18
|
class SHT4XComponent : public PollingComponent, public sensirion_common::SensirionI2CDevice {
|
|
19
19
|
public:
|
|
20
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
21
20
|
void setup() override;
|
|
22
21
|
void dump_config() override;
|
|
23
22
|
void update() override;
|
|
@@ -9,8 +9,6 @@ namespace sm300d2 {
|
|
|
9
9
|
|
|
10
10
|
class SM300D2Sensor : public PollingComponent, public uart::UARTDevice {
|
|
11
11
|
public:
|
|
12
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
13
|
-
|
|
14
12
|
void set_co2_sensor(sensor::Sensor *co2_sensor) { co2_sensor_ = co2_sensor; }
|
|
15
13
|
void set_formaldehyde_sensor(sensor::Sensor *formaldehyde_sensor) { formaldehyde_sensor_ = formaldehyde_sensor; }
|
|
16
14
|
void set_tvoc_sensor(sensor::Sensor *tvoc_sensor) { tvoc_sensor_ = tvoc_sensor; }
|
|
@@ -6,6 +6,7 @@ from esphome.const import (
|
|
|
6
6
|
CONF_DIELECTRIC_CONSTANT,
|
|
7
7
|
CONF_ID,
|
|
8
8
|
CONF_MOISTURE,
|
|
9
|
+
CONF_PERMITTIVITY,
|
|
9
10
|
CONF_TEMPERATURE,
|
|
10
11
|
CONF_VOLTAGE,
|
|
11
12
|
DEVICE_CLASS_TEMPERATURE,
|
|
@@ -33,7 +34,10 @@ CONFIG_SCHEMA = (
|
|
|
33
34
|
accuracy_decimals=0,
|
|
34
35
|
state_class=STATE_CLASS_MEASUREMENT,
|
|
35
36
|
),
|
|
36
|
-
cv.Optional(CONF_DIELECTRIC_CONSTANT):
|
|
37
|
+
cv.Optional(CONF_DIELECTRIC_CONSTANT): cv.invalid(
|
|
38
|
+
"Use 'permittivity' instead"
|
|
39
|
+
),
|
|
40
|
+
cv.Optional(CONF_PERMITTIVITY): sensor.sensor_schema(
|
|
37
41
|
unit_of_measurement=UNIT_EMPTY,
|
|
38
42
|
accuracy_decimals=2,
|
|
39
43
|
state_class=STATE_CLASS_MEASUREMENT,
|
|
@@ -76,9 +80,9 @@ async def to_code(config):
|
|
|
76
80
|
sens = await sensor.new_sensor(config[CONF_COUNTS])
|
|
77
81
|
cg.add(var.set_counts_sensor(sens))
|
|
78
82
|
|
|
79
|
-
if
|
|
80
|
-
sens = await sensor.new_sensor(config[
|
|
81
|
-
cg.add(var.
|
|
83
|
+
if CONF_PERMITTIVITY in config:
|
|
84
|
+
sens = await sensor.new_sensor(config[CONF_PERMITTIVITY])
|
|
85
|
+
cg.add(var.set_permittivity_sensor(sens))
|
|
82
86
|
|
|
83
87
|
if CONF_TEMPERATURE in config:
|
|
84
88
|
sens = await sensor.new_sensor(config[CONF_TEMPERATURE])
|