Add missing unit for signal strength (#40436)

* Added missing unit for signal strength

* Added one more unit

* Replaced string with variable

* Fixed wrong import

* Fix import

* Replaced string with variable

* Fixed wrong import

* Apply suggestions from code review

* Black

* Again a fix :-(

* iSort

* iSort after merge

Co-authored-by: springstan <46536646+springstan@users.noreply.github.com>
This commit is contained in:
Simone Chemelli 2020-10-01 16:14:29 +02:00 committed by GitHub
parent 480066ba63
commit 7554c8d6c5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 84 additions and 27 deletions

View File

@ -4,6 +4,7 @@ import logging
from homeassistant.const import ( from homeassistant.const import (
DEVICE_CLASS_SIGNAL_STRENGTH, DEVICE_CLASS_SIGNAL_STRENGTH,
DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_TEMPERATURE,
SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
TEMP_FAHRENHEIT, TEMP_FAHRENHEIT,
) )
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -14,7 +15,11 @@ _LOGGER = logging.getLogger(__name__)
SENSORS = { SENSORS = {
TYPE_TEMPERATURE: ["Temperature", TEMP_FAHRENHEIT, DEVICE_CLASS_TEMPERATURE], 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,
],
} }

View File

@ -10,6 +10,7 @@ from homeassistant.const import (
DEVICE_CLASS_SIGNAL_STRENGTH, DEVICE_CLASS_SIGNAL_STRENGTH,
DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_TEMPERATURE,
PERCENTAGE, PERCENTAGE,
SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
TEMP_CELSIUS, TEMP_CELSIUS,
) )
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -35,7 +36,13 @@ SENSOR_TYPES = [
["temperature", TEMP_CELSIUS, None, DEVICE_CLASS_TEMPERATURE, [CANARY_PRO]], ["temperature", TEMP_CELSIUS, None, DEVICE_CLASS_TEMPERATURE, [CANARY_PRO]],
["humidity", PERCENTAGE, None, DEVICE_CLASS_HUMIDITY, [CANARY_PRO]], ["humidity", PERCENTAGE, None, DEVICE_CLASS_HUMIDITY, [CANARY_PRO]],
["air_quality", None, "mdi:weather-windy", None, [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]], ["battery", PERCENTAGE, None, DEVICE_CLASS_BATTERY, [CANARY_FLEX]],
] ]

View File

@ -1,7 +1,11 @@
"""Define possible sensor types.""" """Define possible sensor types."""
from homeassistant.components.binary_sensor import DEVICE_CLASS_CONNECTIVITY 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 = "sms"
SENSOR_SMS_TOTAL = "sms_total" SENSOR_SMS_TOTAL = "sms_total"
@ -12,8 +16,8 @@ SENSOR_UNITS = {
SENSOR_SMS_TOTAL: "messages", SENSOR_SMS_TOTAL: "messages",
SENSOR_USAGE: DATA_MEBIBYTES, SENSOR_USAGE: DATA_MEBIBYTES,
"radio_quality": PERCENTAGE, "radio_quality": PERCENTAGE,
"rx_level": "dBm", "rx_level": SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
"tx_level": "dBm", "tx_level": SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
"upstream": None, "upstream": None,
"connection_text": None, "connection_text": None,
"connection_type": None, "connection_type": None,

View File

@ -27,6 +27,7 @@ from homeassistant.const import (
PERCENTAGE, PERCENTAGE,
POWER_WATT, POWER_WATT,
PRESSURE_HPA, PRESSURE_HPA,
SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
SPEED_METERS_PER_SECOND, SPEED_METERS_PER_SECOND,
TEMP_CELSIUS, TEMP_CELSIUS,
TIME_HOURS, TIME_HOURS,
@ -86,7 +87,7 @@ DATA_TYPES = OrderedDict(
("Voltage", VOLT), ("Voltage", VOLT),
("Current", ELECTRICAL_CURRENT_AMPERE), ("Current", ELECTRICAL_CURRENT_AMPERE),
("Battery numeric", PERCENTAGE), ("Battery numeric", PERCENTAGE),
("Rssi numeric", "dBm"), ("Rssi numeric", SIGNAL_STRENGTH_DECIBELS_MILLIWATT),
] ]
) )

View File

@ -1,7 +1,7 @@
"""This component provides HA sensor support for Ring Door Bell/Chimes.""" """This component provides HA sensor support for Ring Door Bell/Chimes."""
import logging import logging
from homeassistant.const import PERCENTAGE from homeassistant.const import PERCENTAGE, SIGNAL_STRENGTH_DECIBELS_MILLIWATT
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.helpers.icon import icon_for_battery_level from homeassistant.helpers.icon import icon_for_battery_level
@ -256,7 +256,7 @@ SENSOR_TYPES = {
"wifi_signal_strength": [ "wifi_signal_strength": [
"WiFi Signal Strength", "WiFi Signal Strength",
["chimes", "doorbots", "authorized_doorbots", "stickup_cams"], ["chimes", "doorbots", "authorized_doorbots", "stickup_cams"],
"dBm", SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
"wifi", "wifi",
None, None,
"signal_strength", "signal_strength",

View File

@ -3,7 +3,7 @@ import logging
import gammu # pylint: disable=import-error, no-member 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 homeassistant.helpers.entity import Entity
from .const import DOMAIN, SMS_GATEWAY from .const import DOMAIN, SMS_GATEWAY
@ -50,7 +50,7 @@ class GSMSignalSensor(Entity):
@property @property
def unit_of_measurement(self): def unit_of_measurement(self):
"""Return the unit the value is expressed in.""" """Return the unit the value is expressed in."""
return "dB" return SIGNAL_STRENGTH_DECIBELS
@property @property
def device_class(self): def device_class(self):

View File

@ -12,6 +12,7 @@ from homeassistant.const import (
CONF_PASSWORD, CONF_PASSWORD,
CONF_USERNAME, CONF_USERNAME,
PERCENTAGE, PERCENTAGE,
SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
VOLT, VOLT,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -281,7 +282,7 @@ class WirelessTagBaseSensor(Entity):
return { return {
ATTR_BATTERY_LEVEL: int(self._tag.battery_remaining * 100), ATTR_BATTERY_LEVEL: int(self._tag.battery_remaining * 100),
ATTR_VOLTAGE: f"{self._tag.battery_volts:.2f}{VOLT}", 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_OUT_OF_RANGE: not self._tag.is_in_range,
ATTR_TAG_POWER_CONSUMPTION: f"{self._tag.power_consumption:.2f}{PERCENTAGE}", ATTR_TAG_POWER_CONSUMPTION: f"{self._tag.power_consumption:.2f}{PERCENTAGE}",
} }

View File

@ -26,7 +26,6 @@ ATTR_UDP_PORT = "udp_port"
# Units of measurement # Units of measurement
CURRENT_MA = "mA" CURRENT_MA = "mA"
SIGNAL_DBM = "dBm"
# Services # Services
SERVICE_EFFECT = "effect" SERVICE_EFFECT = "effect"

View File

@ -10,13 +10,14 @@ from homeassistant.const import (
DEVICE_CLASS_SIGNAL_STRENGTH, DEVICE_CLASS_SIGNAL_STRENGTH,
DEVICE_CLASS_TIMESTAMP, DEVICE_CLASS_TIMESTAMP,
PERCENTAGE, PERCENTAGE,
SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
) )
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.helpers.typing import HomeAssistantType from homeassistant.helpers.typing import HomeAssistantType
from homeassistant.util.dt import utcnow from homeassistant.util.dt import utcnow
from . import WLEDDataUpdateCoordinator, WLEDDeviceEntity 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__) _LOGGER = logging.getLogger(__name__)
@ -192,7 +193,7 @@ class WLEDWifiRSSISensor(WLEDSensor):
icon="mdi:wifi", icon="mdi:wifi",
key="wifi_rssi", key="wifi_rssi",
name=f"{coordinator.data.info.name} Wi-Fi RSSI", name=f"{coordinator.data.info.name} Wi-Fi RSSI",
unit_of_measurement=SIGNAL_DBM, unit_of_measurement=SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
) )
@property @property

View File

@ -472,6 +472,10 @@ SPEED_METERS_PER_SECOND = f"{LENGTH_METERS}/{TIME_SECONDS}"
SPEED_KILOMETERS_PER_HOUR = f"{LENGTH_KILOMETERS}/{TIME_HOURS}" SPEED_KILOMETERS_PER_HOUR = f"{LENGTH_KILOMETERS}/{TIME_HOURS}"
SPEED_MILES_PER_HOUR = "mph" SPEED_MILES_PER_HOUR = "mph"
# Signal_strength units
SIGNAL_STRENGTH_DECIBELS = "dB"
SIGNAL_STRENGTH_DECIBELS_MILLIWATT = "dBm"
# Data units # Data units
DATA_BITS = "bit" DATA_BITS = "bit"
DATA_KILOBITS = "kbit" DATA_KILOBITS = "kbit"

View File

@ -15,6 +15,7 @@ from homeassistant.const import (
DEVICE_CLASS_SIGNAL_STRENGTH, DEVICE_CLASS_SIGNAL_STRENGTH,
DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_TEMPERATURE,
PERCENTAGE, PERCENTAGE,
SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
TEMP_CELSIUS, TEMP_CELSIUS,
) )
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
@ -187,7 +188,7 @@ async def test_sensors_flex(hass, canary) -> None:
"home_dining_room_wifi": ( "home_dining_room_wifi": (
"20_wifi", "20_wifi",
"-57.0", "-57.0",
"dBm", SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
DEVICE_CLASS_SIGNAL_STRENGTH, DEVICE_CLASS_SIGNAL_STRENGTH,
None, None,
), ),

View File

@ -3,11 +3,19 @@
import pytest import pytest
from homeassistant.components.huawei_lte import sensor from homeassistant.components.huawei_lte import sensor
from homeassistant.const import (
SIGNAL_STRENGTH_DECIBELS,
SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
)
@pytest.mark.parametrize( @pytest.mark.parametrize(
("value", "expected"), ("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): def test_format_default(value, expected):
"""Test that default formatter copes with expected values.""" """Test that default formatter copes with expected values."""

View File

@ -3,7 +3,12 @@ import pytest
from homeassistant.components.rfxtrx import DOMAIN from homeassistant.components.rfxtrx import DOMAIN
from homeassistant.components.rfxtrx.const import ATTR_EVENT 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 homeassistant.core import State
from tests.common import MockConfigEntry, mock_restore_cache 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
assert state.state == "unknown" assert state.state == "unknown"
assert state.attributes.get("friendly_name") == f"{base_name} Rssi numeric" 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") state = hass.states.get(f"{base_id}_battery_numeric")
assert state assert state
@ -174,7 +182,10 @@ async def test_discover_sensor(hass, rfxtrx_automatic):
state = hass.states.get(f"{base_id}_rssi_numeric") state = hass.states.get(f"{base_id}_rssi_numeric")
assert state assert state
assert state.state == "-64" 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") state = hass.states.get(f"{base_id}_temperature")
assert state assert state
@ -203,7 +214,10 @@ async def test_discover_sensor(hass, rfxtrx_automatic):
state = hass.states.get(f"{base_id}_rssi_numeric") state = hass.states.get(f"{base_id}_rssi_numeric")
assert state assert state
assert state.state == "-64" 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") state = hass.states.get(f"{base_id}_temperature")
assert state assert state
@ -232,7 +246,10 @@ async def test_discover_sensor(hass, rfxtrx_automatic):
state = hass.states.get(f"{base_id}_rssi_numeric") state = hass.states.get(f"{base_id}_rssi_numeric")
assert state assert state
assert state.state == "-64" 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") state = hass.states.get(f"{base_id}_temperature")
assert state assert state
@ -315,13 +332,19 @@ async def test_rssi_sensor(hass, rfxtrx):
assert state assert state
assert state.state == "unknown" assert state.state == "unknown"
assert state.attributes.get("friendly_name") == "PT2262 22670e Rssi numeric" 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") state = hass.states.get("sensor.ac_213c7f2_48_rssi_numeric")
assert state assert state
assert state.state == "unknown" assert state.state == "unknown"
assert state.attributes.get("friendly_name") == "AC 213c7f2:48 Rssi numeric" 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("0913000022670e013b70")
await rfxtrx.signal("0b1100cd0213c7f230010f71") await rfxtrx.signal("0b1100cd0213c7f230010f71")

View File

@ -12,7 +12,6 @@ from homeassistant.components.wled.const import (
ATTR_MAX_POWER, ATTR_MAX_POWER,
CURRENT_MA, CURRENT_MA,
DOMAIN, DOMAIN,
SIGNAL_DBM,
) )
from homeassistant.const import ( from homeassistant.const import (
ATTR_DEVICE_CLASS, ATTR_DEVICE_CLASS,
@ -20,6 +19,7 @@ from homeassistant.const import (
ATTR_UNIT_OF_MEASUREMENT, ATTR_UNIT_OF_MEASUREMENT,
DATA_BYTES, DATA_BYTES,
PERCENTAGE, PERCENTAGE,
SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
) )
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.util import dt as dt_util 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") state = hass.states.get("sensor.wled_rgb_light_wifi_rssi")
assert state assert state
assert state.attributes.get(ATTR_ICON) == "mdi:wifi" 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" assert state.state == "-62"
entry = registry.async_get("sensor.wled_rgb_light_wifi_rssi") entry = registry.async_get("sensor.wled_rgb_light_wifi_rssi")

View File

@ -4,7 +4,7 @@ Provide a mock sensor platform.
Call init before using it in your tests to ensure clean test data. Call init before using it in your tests to ensure clean test data.
""" """
import homeassistant.components.sensor as sensor 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 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_BATTERY: PERCENTAGE, # % of battery that is left
sensor.DEVICE_CLASS_HUMIDITY: PERCENTAGE, # % of humidity in the air sensor.DEVICE_CLASS_HUMIDITY: PERCENTAGE, # % of humidity in the air
sensor.DEVICE_CLASS_ILLUMINANCE: "lm", # current light level (lx/lm) 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_TEMPERATURE: "C", # temperature (C/F)
sensor.DEVICE_CLASS_TIMESTAMP: "hh:mm:ss", # timestamp (ISO8601) sensor.DEVICE_CLASS_TIMESTAMP: "hh:mm:ss", # timestamp (ISO8601)
sensor.DEVICE_CLASS_PRESSURE: PRESSURE_HPA, # pressure (hPa/mbar) sensor.DEVICE_CLASS_PRESSURE: PRESSURE_HPA, # pressure (hPa/mbar)