diff --git a/homeassistant/components/blink/sensor.py b/homeassistant/components/blink/sensor.py index 35cc2d0d5a5d..3c3adf6d990e 100644 --- a/homeassistant/components/blink/sensor.py +++ b/homeassistant/components/blink/sensor.py @@ -4,6 +4,7 @@ import logging from homeassistant.const import ( DEVICE_CLASS_SIGNAL_STRENGTH, DEVICE_CLASS_TEMPERATURE, + SIGNAL_STRENGTH_DECIBELS_MILLIWATT, TEMP_FAHRENHEIT, ) from homeassistant.helpers.entity import Entity @@ -14,7 +15,11 @@ _LOGGER = logging.getLogger(__name__) SENSORS = { TYPE_TEMPERATURE: ["Temperature", TEMP_FAHRENHEIT, DEVICE_CLASS_TEMPERATURE], - TYPE_WIFI_STRENGTH: ["Wifi Signal", "dBm", DEVICE_CLASS_SIGNAL_STRENGTH], + TYPE_WIFI_STRENGTH: [ + "Wifi Signal", + SIGNAL_STRENGTH_DECIBELS_MILLIWATT, + DEVICE_CLASS_SIGNAL_STRENGTH, + ], } diff --git a/homeassistant/components/canary/sensor.py b/homeassistant/components/canary/sensor.py index 6ec9f3a87ff0..99dcdf48fced 100644 --- a/homeassistant/components/canary/sensor.py +++ b/homeassistant/components/canary/sensor.py @@ -10,6 +10,7 @@ from homeassistant.const import ( DEVICE_CLASS_SIGNAL_STRENGTH, DEVICE_CLASS_TEMPERATURE, PERCENTAGE, + SIGNAL_STRENGTH_DECIBELS_MILLIWATT, TEMP_CELSIUS, ) from homeassistant.helpers.entity import Entity @@ -35,7 +36,13 @@ SENSOR_TYPES = [ ["temperature", TEMP_CELSIUS, None, DEVICE_CLASS_TEMPERATURE, [CANARY_PRO]], ["humidity", PERCENTAGE, None, DEVICE_CLASS_HUMIDITY, [CANARY_PRO]], ["air_quality", None, "mdi:weather-windy", None, [CANARY_PRO]], - ["wifi", "dBm", None, DEVICE_CLASS_SIGNAL_STRENGTH, [CANARY_FLEX]], + [ + "wifi", + SIGNAL_STRENGTH_DECIBELS_MILLIWATT, + None, + DEVICE_CLASS_SIGNAL_STRENGTH, + [CANARY_FLEX], + ], ["battery", PERCENTAGE, None, DEVICE_CLASS_BATTERY, [CANARY_FLEX]], ] diff --git a/homeassistant/components/netgear_lte/sensor_types.py b/homeassistant/components/netgear_lte/sensor_types.py index e354c84e715d..644fe35c8c3e 100644 --- a/homeassistant/components/netgear_lte/sensor_types.py +++ b/homeassistant/components/netgear_lte/sensor_types.py @@ -1,7 +1,11 @@ """Define possible sensor types.""" from homeassistant.components.binary_sensor import DEVICE_CLASS_CONNECTIVITY -from homeassistant.const import DATA_MEBIBYTES, PERCENTAGE +from homeassistant.const import ( + DATA_MEBIBYTES, + PERCENTAGE, + SIGNAL_STRENGTH_DECIBELS_MILLIWATT, +) SENSOR_SMS = "sms" SENSOR_SMS_TOTAL = "sms_total" @@ -12,8 +16,8 @@ SENSOR_UNITS = { SENSOR_SMS_TOTAL: "messages", SENSOR_USAGE: DATA_MEBIBYTES, "radio_quality": PERCENTAGE, - "rx_level": "dBm", - "tx_level": "dBm", + "rx_level": SIGNAL_STRENGTH_DECIBELS_MILLIWATT, + "tx_level": SIGNAL_STRENGTH_DECIBELS_MILLIWATT, "upstream": None, "connection_text": None, "connection_type": None, diff --git a/homeassistant/components/rfxtrx/__init__.py b/homeassistant/components/rfxtrx/__init__.py index c12a6380f202..ccdf79772aa3 100644 --- a/homeassistant/components/rfxtrx/__init__.py +++ b/homeassistant/components/rfxtrx/__init__.py @@ -27,6 +27,7 @@ from homeassistant.const import ( PERCENTAGE, POWER_WATT, PRESSURE_HPA, + SIGNAL_STRENGTH_DECIBELS_MILLIWATT, SPEED_METERS_PER_SECOND, TEMP_CELSIUS, TIME_HOURS, @@ -86,7 +87,7 @@ DATA_TYPES = OrderedDict( ("Voltage", VOLT), ("Current", ELECTRICAL_CURRENT_AMPERE), ("Battery numeric", PERCENTAGE), - ("Rssi numeric", "dBm"), + ("Rssi numeric", SIGNAL_STRENGTH_DECIBELS_MILLIWATT), ] ) diff --git a/homeassistant/components/ring/sensor.py b/homeassistant/components/ring/sensor.py index 24a5cd3b6fb7..f59c3b2e61d2 100644 --- a/homeassistant/components/ring/sensor.py +++ b/homeassistant/components/ring/sensor.py @@ -1,7 +1,7 @@ """This component provides HA sensor support for Ring Door Bell/Chimes.""" import logging -from homeassistant.const import PERCENTAGE +from homeassistant.const import PERCENTAGE, SIGNAL_STRENGTH_DECIBELS_MILLIWATT from homeassistant.core import callback from homeassistant.helpers.entity import Entity from homeassistant.helpers.icon import icon_for_battery_level @@ -256,7 +256,7 @@ SENSOR_TYPES = { "wifi_signal_strength": [ "WiFi Signal Strength", ["chimes", "doorbots", "authorized_doorbots", "stickup_cams"], - "dBm", + SIGNAL_STRENGTH_DECIBELS_MILLIWATT, "wifi", None, "signal_strength", diff --git a/homeassistant/components/sms/sensor.py b/homeassistant/components/sms/sensor.py index 64d2bf9bd987..eaad395eaa69 100644 --- a/homeassistant/components/sms/sensor.py +++ b/homeassistant/components/sms/sensor.py @@ -3,7 +3,7 @@ import logging import gammu # pylint: disable=import-error, no-member -from homeassistant.const import DEVICE_CLASS_SIGNAL_STRENGTH +from homeassistant.const import DEVICE_CLASS_SIGNAL_STRENGTH, SIGNAL_STRENGTH_DECIBELS from homeassistant.helpers.entity import Entity from .const import DOMAIN, SMS_GATEWAY @@ -50,7 +50,7 @@ class GSMSignalSensor(Entity): @property def unit_of_measurement(self): """Return the unit the value is expressed in.""" - return "dB" + return SIGNAL_STRENGTH_DECIBELS @property def device_class(self): diff --git a/homeassistant/components/wirelesstag/__init__.py b/homeassistant/components/wirelesstag/__init__.py index 702479c4112c..ba45844597b7 100644 --- a/homeassistant/components/wirelesstag/__init__.py +++ b/homeassistant/components/wirelesstag/__init__.py @@ -12,6 +12,7 @@ from homeassistant.const import ( CONF_PASSWORD, CONF_USERNAME, PERCENTAGE, + SIGNAL_STRENGTH_DECIBELS_MILLIWATT, VOLT, ) import homeassistant.helpers.config_validation as cv @@ -281,7 +282,7 @@ class WirelessTagBaseSensor(Entity): return { ATTR_BATTERY_LEVEL: int(self._tag.battery_remaining * 100), ATTR_VOLTAGE: f"{self._tag.battery_volts:.2f}{VOLT}", - ATTR_TAG_SIGNAL_STRENGTH: f"{self._tag.signal_strength}dBm", + ATTR_TAG_SIGNAL_STRENGTH: f"{self._tag.signal_strength}{SIGNAL_STRENGTH_DECIBELS_MILLIWATT}", ATTR_TAG_OUT_OF_RANGE: not self._tag.is_in_range, ATTR_TAG_POWER_CONSUMPTION: f"{self._tag.power_consumption:.2f}{PERCENTAGE}", } diff --git a/homeassistant/components/wled/const.py b/homeassistant/components/wled/const.py index 6006952a5801..f50e17c01cca 100644 --- a/homeassistant/components/wled/const.py +++ b/homeassistant/components/wled/const.py @@ -26,7 +26,6 @@ ATTR_UDP_PORT = "udp_port" # Units of measurement CURRENT_MA = "mA" -SIGNAL_DBM = "dBm" # Services SERVICE_EFFECT = "effect" diff --git a/homeassistant/components/wled/sensor.py b/homeassistant/components/wled/sensor.py index 63a253e6efc1..06445d03ba94 100644 --- a/homeassistant/components/wled/sensor.py +++ b/homeassistant/components/wled/sensor.py @@ -10,13 +10,14 @@ from homeassistant.const import ( DEVICE_CLASS_SIGNAL_STRENGTH, DEVICE_CLASS_TIMESTAMP, PERCENTAGE, + SIGNAL_STRENGTH_DECIBELS_MILLIWATT, ) from homeassistant.helpers.entity import Entity from homeassistant.helpers.typing import HomeAssistantType from homeassistant.util.dt import utcnow from . import WLEDDataUpdateCoordinator, WLEDDeviceEntity -from .const import ATTR_LED_COUNT, ATTR_MAX_POWER, CURRENT_MA, DOMAIN, SIGNAL_DBM +from .const import ATTR_LED_COUNT, ATTR_MAX_POWER, CURRENT_MA, DOMAIN _LOGGER = logging.getLogger(__name__) @@ -192,7 +193,7 @@ class WLEDWifiRSSISensor(WLEDSensor): icon="mdi:wifi", key="wifi_rssi", name=f"{coordinator.data.info.name} Wi-Fi RSSI", - unit_of_measurement=SIGNAL_DBM, + unit_of_measurement=SIGNAL_STRENGTH_DECIBELS_MILLIWATT, ) @property diff --git a/homeassistant/const.py b/homeassistant/const.py index f845bc2bd0f0..6099a28a7c81 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -472,6 +472,10 @@ SPEED_METERS_PER_SECOND = f"{LENGTH_METERS}/{TIME_SECONDS}" SPEED_KILOMETERS_PER_HOUR = f"{LENGTH_KILOMETERS}/{TIME_HOURS}" SPEED_MILES_PER_HOUR = "mph" +# Signal_strength units +SIGNAL_STRENGTH_DECIBELS = "dB" +SIGNAL_STRENGTH_DECIBELS_MILLIWATT = "dBm" + # Data units DATA_BITS = "bit" DATA_KILOBITS = "kbit" diff --git a/tests/components/canary/test_sensor.py b/tests/components/canary/test_sensor.py index c17db7b88c90..d32741d3705e 100644 --- a/tests/components/canary/test_sensor.py +++ b/tests/components/canary/test_sensor.py @@ -15,6 +15,7 @@ from homeassistant.const import ( DEVICE_CLASS_SIGNAL_STRENGTH, DEVICE_CLASS_TEMPERATURE, PERCENTAGE, + SIGNAL_STRENGTH_DECIBELS_MILLIWATT, TEMP_CELSIUS, ) from homeassistant.setup import async_setup_component @@ -187,7 +188,7 @@ async def test_sensors_flex(hass, canary) -> None: "home_dining_room_wifi": ( "20_wifi", "-57.0", - "dBm", + SIGNAL_STRENGTH_DECIBELS_MILLIWATT, DEVICE_CLASS_SIGNAL_STRENGTH, None, ), diff --git a/tests/components/huawei_lte/test_sensor.py b/tests/components/huawei_lte/test_sensor.py index f98343497503..92bb8cbac5e0 100644 --- a/tests/components/huawei_lte/test_sensor.py +++ b/tests/components/huawei_lte/test_sensor.py @@ -3,11 +3,19 @@ import pytest from homeassistant.components.huawei_lte import sensor +from homeassistant.const import ( + SIGNAL_STRENGTH_DECIBELS, + SIGNAL_STRENGTH_DECIBELS_MILLIWATT, +) @pytest.mark.parametrize( ("value", "expected"), - (("-71 dBm", (-71, "dBm")), ("15dB", (15, "dB")), (">=-51dBm", (-51, "dBm"))), + ( + ("-71 dBm", (-71, SIGNAL_STRENGTH_DECIBELS_MILLIWATT)), + ("15dB", (15, SIGNAL_STRENGTH_DECIBELS)), + (">=-51dBm", (-51, SIGNAL_STRENGTH_DECIBELS_MILLIWATT)), + ), ) def test_format_default(value, expected): """Test that default formatter copes with expected values.""" diff --git a/tests/components/rfxtrx/test_sensor.py b/tests/components/rfxtrx/test_sensor.py index c1bb3222b790..77f9960de49e 100644 --- a/tests/components/rfxtrx/test_sensor.py +++ b/tests/components/rfxtrx/test_sensor.py @@ -3,7 +3,12 @@ import pytest from homeassistant.components.rfxtrx import DOMAIN from homeassistant.components.rfxtrx.const import ATTR_EVENT -from homeassistant.const import ATTR_UNIT_OF_MEASUREMENT, PERCENTAGE, TEMP_CELSIUS +from homeassistant.const import ( + ATTR_UNIT_OF_MEASUREMENT, + PERCENTAGE, + SIGNAL_STRENGTH_DECIBELS_MILLIWATT, + TEMP_CELSIUS, +) from homeassistant.core import State from tests.common import MockConfigEntry, mock_restore_cache @@ -100,7 +105,10 @@ async def test_one_sensor_no_datatype(hass, rfxtrx): assert state assert state.state == "unknown" assert state.attributes.get("friendly_name") == f"{base_name} Rssi numeric" - assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == "dBm" + assert ( + state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) + == SIGNAL_STRENGTH_DECIBELS_MILLIWATT + ) state = hass.states.get(f"{base_id}_battery_numeric") assert state @@ -174,7 +182,10 @@ async def test_discover_sensor(hass, rfxtrx_automatic): state = hass.states.get(f"{base_id}_rssi_numeric") assert state assert state.state == "-64" - assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == "dBm" + assert ( + state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) + == SIGNAL_STRENGTH_DECIBELS_MILLIWATT + ) state = hass.states.get(f"{base_id}_temperature") assert state @@ -203,7 +214,10 @@ async def test_discover_sensor(hass, rfxtrx_automatic): state = hass.states.get(f"{base_id}_rssi_numeric") assert state assert state.state == "-64" - assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == "dBm" + assert ( + state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) + == SIGNAL_STRENGTH_DECIBELS_MILLIWATT + ) state = hass.states.get(f"{base_id}_temperature") assert state @@ -232,7 +246,10 @@ async def test_discover_sensor(hass, rfxtrx_automatic): state = hass.states.get(f"{base_id}_rssi_numeric") assert state assert state.state == "-64" - assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == "dBm" + assert ( + state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) + == SIGNAL_STRENGTH_DECIBELS_MILLIWATT + ) state = hass.states.get(f"{base_id}_temperature") assert state @@ -315,13 +332,19 @@ async def test_rssi_sensor(hass, rfxtrx): assert state assert state.state == "unknown" assert state.attributes.get("friendly_name") == "PT2262 22670e Rssi numeric" - assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == "dBm" + assert ( + state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) + == SIGNAL_STRENGTH_DECIBELS_MILLIWATT + ) state = hass.states.get("sensor.ac_213c7f2_48_rssi_numeric") assert state assert state.state == "unknown" assert state.attributes.get("friendly_name") == "AC 213c7f2:48 Rssi numeric" - assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == "dBm" + assert ( + state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) + == SIGNAL_STRENGTH_DECIBELS_MILLIWATT + ) await rfxtrx.signal("0913000022670e013b70") await rfxtrx.signal("0b1100cd0213c7f230010f71") diff --git a/tests/components/wled/test_sensor.py b/tests/components/wled/test_sensor.py index 39cde51dbfd5..d5c1c738d2f3 100644 --- a/tests/components/wled/test_sensor.py +++ b/tests/components/wled/test_sensor.py @@ -12,7 +12,6 @@ from homeassistant.components.wled.const import ( ATTR_MAX_POWER, CURRENT_MA, DOMAIN, - SIGNAL_DBM, ) from homeassistant.const import ( ATTR_DEVICE_CLASS, @@ -20,6 +19,7 @@ from homeassistant.const import ( ATTR_UNIT_OF_MEASUREMENT, DATA_BYTES, PERCENTAGE, + SIGNAL_STRENGTH_DECIBELS_MILLIWATT, ) from homeassistant.core import HomeAssistant from homeassistant.util import dt as dt_util @@ -138,7 +138,10 @@ async def test_sensors( state = hass.states.get("sensor.wled_rgb_light_wifi_rssi") assert state assert state.attributes.get(ATTR_ICON) == "mdi:wifi" - assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == SIGNAL_DBM + assert ( + state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) + == SIGNAL_STRENGTH_DECIBELS_MILLIWATT + ) assert state.state == "-62" entry = registry.async_get("sensor.wled_rgb_light_wifi_rssi") diff --git a/tests/testing_config/custom_components/test/sensor.py b/tests/testing_config/custom_components/test/sensor.py index d9ed47844afe..d467a93fd621 100644 --- a/tests/testing_config/custom_components/test/sensor.py +++ b/tests/testing_config/custom_components/test/sensor.py @@ -4,7 +4,7 @@ Provide a mock sensor platform. Call init before using it in your tests to ensure clean test data. """ import homeassistant.components.sensor as sensor -from homeassistant.const import PERCENTAGE, PRESSURE_HPA +from homeassistant.const import PERCENTAGE, PRESSURE_HPA, SIGNAL_STRENGTH_DECIBELS from tests.common import MockEntity @@ -15,7 +15,7 @@ UNITS_OF_MEASUREMENT = { sensor.DEVICE_CLASS_BATTERY: PERCENTAGE, # % of battery that is left sensor.DEVICE_CLASS_HUMIDITY: PERCENTAGE, # % of humidity in the air sensor.DEVICE_CLASS_ILLUMINANCE: "lm", # current light level (lx/lm) - sensor.DEVICE_CLASS_SIGNAL_STRENGTH: "dB", # signal strength (dB/dBm) + sensor.DEVICE_CLASS_SIGNAL_STRENGTH: SIGNAL_STRENGTH_DECIBELS, # signal strength (dB/dBm) sensor.DEVICE_CLASS_TEMPERATURE: "C", # temperature (C/F) sensor.DEVICE_CLASS_TIMESTAMP: "hh:mm:ss", # timestamp (ISO8601) sensor.DEVICE_CLASS_PRESSURE: PRESSURE_HPA, # pressure (hPa/mbar)