From 93395f9b68def0b1d4dce76014367b2bd8fd61c8 Mon Sep 17 00:00:00 2001 From: Tim Rightnour <6556271+garbled1@users.noreply.github.com> Date: Wed, 10 Nov 2021 01:44:05 -0700 Subject: [PATCH] Add support for PRESSURE_CBAR (centibars) (#58762) * Add support for PRESSURE_CBAR (centibars). This is the standard UOM for tensiometers. While the data could be converted into something like MBAR, and displayed like that, the correct UOM for this type of sensor is CBAR. Displaying it as MBAR would be the same as displaying air pressure as feet of Hg, while technically correct, it's hard to understand when reading. Adding support for this UOM will fix errors in the UI(statistics) about the unit not matching a unit of the device_class. * Add tests for PRESSURE_CBAR --- homeassistant/components/onewire/const.py | 2 -- homeassistant/components/onewire/sensor.py | 2 +- homeassistant/const.py | 1 + homeassistant/util/pressure.py | 3 +++ tests/components/onewire/const.py | 2 +- tests/util/test_pressure.py | 11 +++++++++++ 6 files changed, 17 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/onewire/const.py b/homeassistant/components/onewire/const.py index 4904d1568e..f9f40e49ce 100644 --- a/homeassistant/components/onewire/const.py +++ b/homeassistant/components/onewire/const.py @@ -43,8 +43,6 @@ MANUFACTURER_MAXIM = "Maxim Integrated" MANUFACTURER_HOBBYBOARDS = "Hobby Boards" MANUFACTURER_EDS = "Embedded Data Systems" -PRESSURE_CBAR = "cbar" - READ_MODE_BOOL = "bool" READ_MODE_FLOAT = "float" READ_MODE_INT = "int" diff --git a/homeassistant/components/onewire/sensor.py b/homeassistant/components/onewire/sensor.py index fa477ff27e..54528cf05f 100644 --- a/homeassistant/components/onewire/sensor.py +++ b/homeassistant/components/onewire/sensor.py @@ -34,6 +34,7 @@ from homeassistant.const import ( ELECTRIC_POTENTIAL_VOLT, LIGHT_LUX, PERCENTAGE, + PRESSURE_CBAR, PRESSURE_MBAR, TEMP_CELSIUS, ) @@ -47,7 +48,6 @@ from .const import ( CONF_TYPE_OWSERVER, CONF_TYPE_SYSBUS, DOMAIN, - PRESSURE_CBAR, READ_MODE_FLOAT, READ_MODE_INT, ) diff --git a/homeassistant/const.py b/homeassistant/const.py index 302cf3b00a..2142556a21 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -479,6 +479,7 @@ PRESSURE_PA: Final = "Pa" PRESSURE_HPA: Final = "hPa" PRESSURE_KPA: Final = "kPa" PRESSURE_BAR: Final = "bar" +PRESSURE_CBAR: Final = "cbar" PRESSURE_MBAR: Final = "mbar" PRESSURE_INHG: Final = "inHg" PRESSURE_PSI: Final = "psi" diff --git a/homeassistant/util/pressure.py b/homeassistant/util/pressure.py index 53bbbffc01..8ff3f9f5f9 100644 --- a/homeassistant/util/pressure.py +++ b/homeassistant/util/pressure.py @@ -6,6 +6,7 @@ from numbers import Number from homeassistant.const import ( PRESSURE, PRESSURE_BAR, + PRESSURE_CBAR, PRESSURE_HPA, PRESSURE_INHG, PRESSURE_KPA, @@ -20,6 +21,7 @@ VALID_UNITS: tuple[str, ...] = ( PRESSURE_HPA, PRESSURE_KPA, PRESSURE_BAR, + PRESSURE_CBAR, PRESSURE_MBAR, PRESSURE_INHG, PRESSURE_PSI, @@ -30,6 +32,7 @@ UNIT_CONVERSION: dict[str, float] = { PRESSURE_HPA: 1 / 100, PRESSURE_KPA: 1 / 1000, PRESSURE_BAR: 1 / 100000, + PRESSURE_CBAR: 1 / 1000, PRESSURE_MBAR: 1 / 100, PRESSURE_INHG: 1 / 3386.389, PRESSURE_PSI: 1 / 6894.757, diff --git a/tests/components/onewire/const.py b/tests/components/onewire/const.py index 1d0bf0f8e8..55663c65d3 100644 --- a/tests/components/onewire/const.py +++ b/tests/components/onewire/const.py @@ -8,7 +8,6 @@ from homeassistant.components.onewire.const import ( MANUFACTURER_EDS, MANUFACTURER_HOBBYBOARDS, MANUFACTURER_MAXIM, - PRESSURE_CBAR, ) from homeassistant.components.sensor import ( ATTR_STATE_CLASS, @@ -37,6 +36,7 @@ from homeassistant.const import ( ELECTRIC_POTENTIAL_VOLT, LIGHT_LUX, PERCENTAGE, + PRESSURE_CBAR, PRESSURE_MBAR, STATE_OFF, STATE_ON, diff --git a/tests/util/test_pressure.py b/tests/util/test_pressure.py index d6211fa534..0109d045a5 100644 --- a/tests/util/test_pressure.py +++ b/tests/util/test_pressure.py @@ -2,6 +2,7 @@ import pytest from homeassistant.const import ( + PRESSURE_CBAR, PRESSURE_HPA, PRESSURE_INHG, PRESSURE_KPA, @@ -22,6 +23,7 @@ def test_convert_same_unit(): assert pressure_util.convert(4, PRESSURE_MBAR, PRESSURE_MBAR) == 4 assert pressure_util.convert(5, PRESSURE_INHG, PRESSURE_INHG) == 5 assert pressure_util.convert(6, PRESSURE_KPA, PRESSURE_KPA) == 6 + assert pressure_util.convert(7, PRESSURE_CBAR, PRESSURE_CBAR) == 7 def test_convert_invalid_unit(): @@ -57,6 +59,9 @@ def test_convert_from_hpascals(): assert pressure_util.convert( hpascals, PRESSURE_HPA, PRESSURE_MBAR ) == pytest.approx(1000) + assert pressure_util.convert( + hpascals, PRESSURE_HPA, PRESSURE_CBAR + ) == pytest.approx(100) def test_convert_from_kpascals(): @@ -77,6 +82,9 @@ def test_convert_from_kpascals(): assert pressure_util.convert( kpascals, PRESSURE_KPA, PRESSURE_MBAR ) == pytest.approx(1000) + assert pressure_util.convert( + kpascals, PRESSURE_KPA, PRESSURE_CBAR + ) == pytest.approx(100) def test_convert_from_inhg(): @@ -97,3 +105,6 @@ def test_convert_from_inhg(): assert pressure_util.convert(inhg, PRESSURE_INHG, PRESSURE_MBAR) == pytest.approx( 1015.9167 ) + assert pressure_util.convert(inhg, PRESSURE_INHG, PRESSURE_CBAR) == pytest.approx( + 101.59167 + )