Skip to content

Commit 22d09ea

Browse files
N3rdixdrc38
andauthored
Fix missing state class for reactive power sensors after #1417 (#1451)
* fix state_class * add test for reactive sensor * Revert test_init.py * Add HA unit * Add OCPP to HA unit mapping * add assert vor reactive unit * add separate sensor test --------- Co-authored-by: drc38 <[email protected]>
1 parent e74c918 commit 22d09ea

File tree

4 files changed

+41
-2
lines changed

4 files changed

+41
-2
lines changed

custom_components/ocpp/const.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@
113113
UnitOfMeasure.kw: ha.UnitOfPower.KILO_WATT,
114114
UnitOfMeasure.va: ha.UnitOfApparentPower.VOLT_AMPERE,
115115
UnitOfMeasure.kva: UnitOfMeasure.kva,
116-
UnitOfMeasure.var: UnitOfMeasure.var,
116+
UnitOfMeasure.var: ha.UnitOfReactivePower.VOLT_AMPERE_REACTIVE,
117117
UnitOfMeasure.kvar: UnitOfMeasure.kvar,
118118
UnitOfMeasure.a: ha.UnitOfElectricCurrent.AMPERE,
119119
UnitOfMeasure.v: ha.UnitOfElectricPotential.VOLT,
@@ -130,5 +130,6 @@
130130
SensorDeviceClass.FREQUENCY: ha.UnitOfFrequency.HERTZ,
131131
SensorDeviceClass.BATTERY: ha.PERCENTAGE,
132132
SensorDeviceClass.POWER: ha.UnitOfPower.KILO_WATT,
133+
SensorDeviceClass.REACTIVE_POWER: ha.UnitOfReactivePower.VOLT_AMPERE_REACTIVE,
133134
SensorDeviceClass.ENERGY: ha.UnitOfEnergy.KILO_WATT_HOUR,
134135
}

custom_components/ocpp/sensor.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ def state_class(self):
137137
SensorDeviceClass.CURRENT,
138138
SensorDeviceClass.VOLTAGE,
139139
SensorDeviceClass.POWER,
140+
SensorDeviceClass.REACTIVE_POWER,
140141
SensorDeviceClass.TEMPERATURE,
141142
SensorDeviceClass.BATTERY,
142143
SensorDeviceClass.FREQUENCY,

tests/test_charge_point_v16.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,8 @@ async def test_services(hass, cs, socket_enabled):
268268
assert int(cs.get_metric("test_cpid", "Current.Import")) == 0
269269
assert int(cs.get_metric("test_cpid", "Voltage")) == 228
270270
assert cs.get_unit("test_cpid", "Energy.Active.Import.Register") == "kWh"
271+
assert cs.get_ha_unit("test_cpid", "Power.Reactive.Import") == "var"
272+
assert cs.get_unit("test_cpid", "Power.Reactive.Import") == "var"
271273
assert cs.get_metric("unknown_cpid", "Energy.Active.Import.Register") is None
272274
assert cs.get_unit("unknown_cpid", "Energy.Active.Import.Register") is None
273275
assert cs.get_extra_attr("unknown_cpid", "Energy.Active.Import.Register") is None
@@ -821,7 +823,7 @@ async def send_meter_periodic_data(self):
821823
"value": "89.00",
822824
"context": "Sample.Periodic",
823825
"measurand": "Power.Reactive.Import",
824-
"unit": "W",
826+
"unit": "var",
825827
},
826828
{
827829
"value": "0.010",

tests/test_sensor.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
"""Test sensor for ocpp integration."""
2+
3+
from pytest_homeassistant_custom_component.common import MockConfigEntry
4+
5+
from custom_components.ocpp.const import DOMAIN as OCPP_DOMAIN
6+
7+
from homeassistant.const import ATTR_DEVICE_CLASS
8+
from homeassistant.components.sensor.const import (
9+
SensorDeviceClass,
10+
SensorStateClass,
11+
ATTR_STATE_CLASS,
12+
)
13+
from .const import MOCK_CONFIG_DATA
14+
15+
16+
async def test_sensor(hass, socket_enabled):
17+
"""Test sensor."""
18+
config_entry = MockConfigEntry(
19+
domain=OCPP_DOMAIN,
20+
data=MOCK_CONFIG_DATA,
21+
entry_id="test_cms",
22+
title="test_cms",
23+
)
24+
config_entry.add_to_hass(hass)
25+
assert await hass.config_entries.async_setup(config_entry.entry_id)
26+
await hass.async_block_till_done()
27+
28+
# Test reactive power sensor
29+
state = hass.states.get("sensor.test_cpid_power_reactive_import")
30+
assert state.attributes.get(ATTR_DEVICE_CLASS) == SensorDeviceClass.REACTIVE_POWER
31+
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
32+
# Test reactive energx sensor, not having own device class yet
33+
state = hass.states.get("sensor.test_cpid_energy_reactive_import_register")
34+
assert state.attributes.get(ATTR_DEVICE_CLASS) is None
35+
assert state.attributes.get(ATTR_STATE_CLASS) is None

0 commit comments

Comments
 (0)