Fix voltage and current values for Fritz!DECT smart plugs (#73608)

fix voltage and current values
This commit is contained in:
Michael 2022-06-17 07:40:02 +02:00 committed by GitHub
parent cdd5a5f68b
commit e30478457b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 48 additions and 21 deletions

View file

@ -96,7 +96,7 @@ SENSOR_TYPES: Final[tuple[FritzSensorEntityDescription, ...]] = (
device_class=SensorDeviceClass.VOLTAGE,
state_class=SensorStateClass.MEASUREMENT,
suitable=lambda device: device.has_powermeter, # type: ignore[no-any-return]
native_value=lambda device: device.voltage / 1000
native_value=lambda device: device.voltage
if getattr(device, "voltage", None)
else 0.0,
),
@ -107,7 +107,7 @@ SENSOR_TYPES: Final[tuple[FritzSensorEntityDescription, ...]] = (
device_class=SensorDeviceClass.CURRENT,
state_class=SensorStateClass.MEASUREMENT,
suitable=lambda device: device.has_powermeter, # type: ignore[no-any-return]
native_value=lambda device: device.power / device.voltage
native_value=lambda device: device.power / device.voltage / 1000
if device.power and getattr(device, "voltage", None)
else 0.0,
),

View file

@ -16,6 +16,8 @@ from homeassistant.const import (
ATTR_FRIENDLY_NAME,
ATTR_UNIT_OF_MEASUREMENT,
CONF_DEVICES,
ELECTRIC_CURRENT_AMPERE,
ELECTRIC_POTENTIAL_VOLT,
ENERGY_KILO_WATT_HOUR,
POWER_WATT,
SERVICE_TURN_OFF,
@ -48,29 +50,54 @@ async def test_setup(hass: HomeAssistant, fritz: Mock):
assert state.attributes[ATTR_FRIENDLY_NAME] == CONF_FAKE_NAME
assert ATTR_STATE_CLASS not in state.attributes
state = hass.states.get(f"{SENSOR_DOMAIN}.{CONF_FAKE_NAME}_temperature")
assert state
assert state.state == "1.23"
assert state.attributes[ATTR_FRIENDLY_NAME] == f"{CONF_FAKE_NAME} Temperature"
assert state.attributes[ATTR_UNIT_OF_MEASUREMENT] == TEMP_CELSIUS
assert state.attributes[ATTR_STATE_CLASS] == SensorStateClass.MEASUREMENT
state = hass.states.get(f"{ENTITY_ID}_humidity")
assert state is None
state = hass.states.get(f"{SENSOR_DOMAIN}.{CONF_FAKE_NAME}_power_consumption")
assert state
assert state.state == "5.678"
assert state.attributes[ATTR_FRIENDLY_NAME] == f"{CONF_FAKE_NAME} Power Consumption"
assert state.attributes[ATTR_UNIT_OF_MEASUREMENT] == POWER_WATT
assert state.attributes[ATTR_STATE_CLASS] == SensorStateClass.MEASUREMENT
sensors = (
[
f"{SENSOR_DOMAIN}.{CONF_FAKE_NAME}_temperature",
"1.23",
f"{CONF_FAKE_NAME} Temperature",
TEMP_CELSIUS,
SensorStateClass.MEASUREMENT,
],
[
f"{SENSOR_DOMAIN}.{CONF_FAKE_NAME}_power_consumption",
"5.678",
f"{CONF_FAKE_NAME} Power Consumption",
POWER_WATT,
SensorStateClass.MEASUREMENT,
],
[
f"{SENSOR_DOMAIN}.{CONF_FAKE_NAME}_total_energy",
"1.234",
f"{CONF_FAKE_NAME} Total Energy",
ENERGY_KILO_WATT_HOUR,
SensorStateClass.TOTAL_INCREASING,
],
[
f"{SENSOR_DOMAIN}.{CONF_FAKE_NAME}_voltage",
"230",
f"{CONF_FAKE_NAME} Voltage",
ELECTRIC_POTENTIAL_VOLT,
SensorStateClass.MEASUREMENT,
],
[
f"{SENSOR_DOMAIN}.{CONF_FAKE_NAME}_electric_current",
"0.0246869565217391",
f"{CONF_FAKE_NAME} Electric Current",
ELECTRIC_CURRENT_AMPERE,
SensorStateClass.MEASUREMENT,
],
)
state = hass.states.get(f"{SENSOR_DOMAIN}.{CONF_FAKE_NAME}_total_energy")
assert state
assert state.state == "1.234"
assert state.attributes[ATTR_FRIENDLY_NAME] == f"{CONF_FAKE_NAME} Total Energy"
assert state.attributes[ATTR_UNIT_OF_MEASUREMENT] == ENERGY_KILO_WATT_HOUR
assert state.attributes[ATTR_STATE_CLASS] == SensorStateClass.TOTAL_INCREASING
for sensor in sensors:
state = hass.states.get(sensor[0])
assert state
assert state.state == sensor[1]
assert state.attributes[ATTR_FRIENDLY_NAME] == sensor[2]
assert state.attributes[ATTR_UNIT_OF_MEASUREMENT] == sensor[3]
assert state.attributes[ATTR_STATE_CLASS] == sensor[4]
async def test_turn_on(hass: HomeAssistant, fritz: Mock):