From b919b692f7f3687d161ad020c47ee384993abfc6 Mon Sep 17 00:00:00 2001 From: zerafachris Date: Mon, 19 Oct 2026 09:54:33 +0200 Subject: [PATCH] [scd4x] Fix ambient_pressure_compensation unit handling (#19888) Co-authored-by: Claude Sonnet 4.6 Co-authored-by: J. Nick Koston Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- esphome/components/scd4x/sensor.py | 13 ++++++++++++- tests/components/scd4x/common.yaml | 16 ++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/esphome/components/scd4x/sensor.py b/esphome/components/scd4x/sensor.py index 4b67319efb1..f1c7beaea8b 100644 --- a/esphome/components/scd4x/sensor.py +++ b/esphome/components/scd4x/sensor.py @@ -42,6 +42,15 @@ MEASUREMENT_MODE_OPTIONS = MeasurementMode.options( ) +def pressure_hpa(value: str | float) -> float: + """Pressure in hPa. A bare number is hPa, matching what the C++ sends to the sensor.""" + try: + return cv.float_(value) + except cv.Invalid: + pass + return cv.pressure(value) * 1000 # bar, mbar, mBar + + CONFIG_SCHEMA = ( cv.Schema( { @@ -72,7 +81,9 @@ CONFIG_SCHEMA = ( cv.float_with_unit("altitude", "(m|m a.s.l.|MAMSL|MASL)"), cv.int_range(min=0, max=0xFFFF, max_included=False), ), - cv.Optional(CONF_AMBIENT_PRESSURE_COMPENSATION): cv.pressure, + cv.Optional(CONF_AMBIENT_PRESSURE_COMPENSATION): cv.All( + pressure_hpa, cv.Any(cv.float_range(min=700, max=1200), 0) + ), cv.Optional(CONF_TEMPERATURE_OFFSET, default="4°C"): cv.temperature_delta, cv.Optional(CONF_AMBIENT_PRESSURE_COMPENSATION_SOURCE): cv.use_id( sensor.Sensor diff --git a/tests/components/scd4x/common.yaml b/tests/components/scd4x/common.yaml index cedb88977ea..e875cb0cc57 100644 --- a/tests/components/scd4x/common.yaml +++ b/tests/components/scd4x/common.yaml @@ -14,3 +14,19 @@ sensor: ambient_pressure_compensation: 961mBar temperature_offset: 4.2C update_interval: 15s + - platform: scd4x + i2c_id: i2c_bus + co2: + name: SCD4X CO2 (bare hPa) + ambient_pressure_compensation: 961 + - platform: scd4x + i2c_id: i2c_bus + co2: + name: SCD4X CO2 (bar) + ambient_pressure_compensation: 0.961bar + - platform: scd4x + i2c_id: i2c_bus + co2: + name: SCD4X CO2 (altitude only) + altitude_compensation: 500m + ambient_pressure_compensation: 0