Remove power sensor from Tesla Wall Connector (#60775)

Add voltage and current sensors for each phase
This commit is contained in:
einarhauks 2021-12-01 18:21:56 +00:00 committed by GitHub
parent 4dfdb3b96f
commit 5c4422dc72
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 72 additions and 36 deletions

View file

@ -10,14 +10,13 @@ from homeassistant.components.sensor import (
)
from homeassistant.const import (
DEVICE_CLASS_ENERGY,
DEVICE_CLASS_POWER,
DEVICE_CLASS_TEMPERATURE,
DEVICE_CLASS_VOLTAGE,
ELECTRIC_CURRENT_AMPERE,
ELECTRIC_POTENTIAL_VOLT,
ENERGY_KILO_WATT_HOUR,
ENTITY_CATEGORY_DIAGNOSTIC,
FREQUENCY_HERTZ,
POWER_KILO_WATT,
TEMP_CELSIUS,
)
@ -73,29 +72,52 @@ WALL_CONNECTOR_SENSORS = [
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
),
WallConnectorSensorDescription(
key="power",
name=prefix_entity_name("Power"),
native_unit_of_measurement=POWER_KILO_WATT,
value_fn=lambda data: round(
(
(
data[WALLCONNECTOR_DATA_VITALS].currentA_a
* data[WALLCONNECTOR_DATA_VITALS].voltageA_v
)
+ (
data[WALLCONNECTOR_DATA_VITALS].currentB_a
* data[WALLCONNECTOR_DATA_VITALS].voltageB_v
)
+ (
data[WALLCONNECTOR_DATA_VITALS].currentC_a
* data[WALLCONNECTOR_DATA_VITALS].voltageC_v
)
)
/ 1000.0,
1,
),
device_class=DEVICE_CLASS_POWER,
key="current_a_a",
name=prefix_entity_name("Phase A Current"),
native_unit_of_measurement=ELECTRIC_CURRENT_AMPERE,
value_fn=lambda data: data[WALLCONNECTOR_DATA_VITALS].currentA_a,
state_class=STATE_CLASS_MEASUREMENT,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
),
WallConnectorSensorDescription(
key="current_b_a",
name=prefix_entity_name("Phase B Current"),
native_unit_of_measurement=ELECTRIC_CURRENT_AMPERE,
value_fn=lambda data: data[WALLCONNECTOR_DATA_VITALS].currentB_a,
state_class=STATE_CLASS_MEASUREMENT,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
),
WallConnectorSensorDescription(
key="current_c_a",
name=prefix_entity_name("Phase C Current"),
native_unit_of_measurement=ELECTRIC_CURRENT_AMPERE,
value_fn=lambda data: data[WALLCONNECTOR_DATA_VITALS].currentC_a,
state_class=STATE_CLASS_MEASUREMENT,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
),
WallConnectorSensorDescription(
key="voltage_a_v",
name=prefix_entity_name("Phase A Voltage"),
native_unit_of_measurement=ELECTRIC_POTENTIAL_VOLT,
value_fn=lambda data: data[WALLCONNECTOR_DATA_VITALS].voltageA_v,
state_class=STATE_CLASS_MEASUREMENT,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
),
WallConnectorSensorDescription(
key="voltage_b_v",
name=prefix_entity_name("Phase B Voltage"),
native_unit_of_measurement=ELECTRIC_POTENTIAL_VOLT,
value_fn=lambda data: data[WALLCONNECTOR_DATA_VITALS].voltageB_v,
state_class=STATE_CLASS_MEASUREMENT,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
),
WallConnectorSensorDescription(
key="voltage_c_v",
name=prefix_entity_name("Phase C Voltage"),
native_unit_of_measurement=ELECTRIC_POTENTIAL_VOLT,
value_fn=lambda data: data[WALLCONNECTOR_DATA_VITALS].voltageC_v,
state_class=STATE_CLASS_MEASUREMENT,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
),
WallConnectorSensorDescription(
key="total_energy_kWh",

View file

@ -23,10 +23,27 @@ async def test_sensors(hass: HomeAssistant) -> None:
EntityAndExpectedValues(
"sensor.tesla_wall_connector_grid_frequency", "50.021", "49.981"
),
EntityAndExpectedValues("sensor.tesla_wall_connector_power", "7.6", "7.6"),
EntityAndExpectedValues(
"sensor.tesla_wall_connector_total_energy", "988.022", "989.0"
),
EntityAndExpectedValues(
"sensor.tesla_wall_connector_phase_a_current", "10", "7"
),
EntityAndExpectedValues(
"sensor.tesla_wall_connector_phase_b_current", "11.1", "8"
),
EntityAndExpectedValues(
"sensor.tesla_wall_connector_phase_c_current", "12", "9"
),
EntityAndExpectedValues(
"sensor.tesla_wall_connector_phase_a_voltage", "230.1", "228.1"
),
EntityAndExpectedValues(
"sensor.tesla_wall_connector_phase_b_voltage", "231", "229.1"
),
EntityAndExpectedValues(
"sensor.tesla_wall_connector_phase_c_voltage", "232.1", "230"
),
]
mock_vitals_first_update = get_vitals_mock()
@ -34,13 +51,11 @@ async def test_sensors(hass: HomeAssistant) -> None:
mock_vitals_first_update.handle_temp_c = 25.51
mock_vitals_first_update.grid_v = 230.15
mock_vitals_first_update.grid_hz = 50.021
# to calculate power, we calculate power of each phase and sum up
# (230.1*10) + (231.1*11) + (232.1*12) = 7628.3 W
mock_vitals_first_update.voltageA_v = 230.1
mock_vitals_first_update.voltageB_v = 231.1
mock_vitals_first_update.voltageB_v = 231
mock_vitals_first_update.voltageC_v = 232.1
mock_vitals_first_update.currentA_a = 10
mock_vitals_first_update.currentB_a = 11
mock_vitals_first_update.currentB_a = 11.1
mock_vitals_first_update.currentC_a = 12
mock_vitals_second_update = get_vitals_mock()
@ -48,13 +63,12 @@ async def test_sensors(hass: HomeAssistant) -> None:
mock_vitals_second_update.handle_temp_c = -1.42
mock_vitals_second_update.grid_v = 229.21
mock_vitals_second_update.grid_hz = 49.981
# (228.1*10) + (229.1*11) + (230.1*12) = 7562.3 W
mock_vitals_second_update.voltageB_v = 228.1
mock_vitals_second_update.voltageC_v = 229.1
mock_vitals_second_update.voltageA_v = 230.1
mock_vitals_second_update.currentA_a = 10
mock_vitals_second_update.currentB_a = 11
mock_vitals_second_update.currentC_a = 12
mock_vitals_second_update.voltageA_v = 228.1
mock_vitals_second_update.voltageB_v = 229.1
mock_vitals_second_update.voltageC_v = 230
mock_vitals_second_update.currentA_a = 7
mock_vitals_second_update.currentB_a = 8
mock_vitals_second_update.currentC_a = 9
lifetime_mock_first_update = get_lifetime_mock()
lifetime_mock_first_update.energy_wh = 988022