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 4904d1568ef..f9f40e49ced 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 fa477ff27e0..54528cf05f3 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 302cf3b00ab..2142556a217 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 53bbbffc01e..8ff3f9f5f93 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 1d0bf0f8e84..55663c65d36 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 d6211fa5343..0109d045a55 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 + )