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 ( from homeassistant.const import (
DEVICE_CLASS_ENERGY, DEVICE_CLASS_ENERGY,
DEVICE_CLASS_POWER,
DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_TEMPERATURE,
DEVICE_CLASS_VOLTAGE, DEVICE_CLASS_VOLTAGE,
ELECTRIC_CURRENT_AMPERE,
ELECTRIC_POTENTIAL_VOLT, ELECTRIC_POTENTIAL_VOLT,
ENERGY_KILO_WATT_HOUR, ENERGY_KILO_WATT_HOUR,
ENTITY_CATEGORY_DIAGNOSTIC, ENTITY_CATEGORY_DIAGNOSTIC,
FREQUENCY_HERTZ, FREQUENCY_HERTZ,
POWER_KILO_WATT,
TEMP_CELSIUS, TEMP_CELSIUS,
) )
@ -73,29 +72,52 @@ WALL_CONNECTOR_SENSORS = [
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
), ),
WallConnectorSensorDescription( WallConnectorSensorDescription(
key="power", key="current_a_a",
name=prefix_entity_name("Power"), name=prefix_entity_name("Phase A Current"),
native_unit_of_measurement=POWER_KILO_WATT, native_unit_of_measurement=ELECTRIC_CURRENT_AMPERE,
value_fn=lambda data: round( value_fn=lambda data: data[WALLCONNECTOR_DATA_VITALS].currentA_a,
(
(
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,
state_class=STATE_CLASS_MEASUREMENT, 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( WallConnectorSensorDescription(
key="total_energy_kWh", key="total_energy_kWh",

View File

@ -23,10 +23,27 @@ async def test_sensors(hass: HomeAssistant) -> None:
EntityAndExpectedValues( EntityAndExpectedValues(
"sensor.tesla_wall_connector_grid_frequency", "50.021", "49.981" "sensor.tesla_wall_connector_grid_frequency", "50.021", "49.981"
), ),
EntityAndExpectedValues("sensor.tesla_wall_connector_power", "7.6", "7.6"),
EntityAndExpectedValues( EntityAndExpectedValues(
"sensor.tesla_wall_connector_total_energy", "988.022", "989.0" "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() 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.handle_temp_c = 25.51
mock_vitals_first_update.grid_v = 230.15 mock_vitals_first_update.grid_v = 230.15
mock_vitals_first_update.grid_hz = 50.021 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.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.voltageC_v = 232.1
mock_vitals_first_update.currentA_a = 10 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_first_update.currentC_a = 12
mock_vitals_second_update = get_vitals_mock() 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.handle_temp_c = -1.42
mock_vitals_second_update.grid_v = 229.21 mock_vitals_second_update.grid_v = 229.21
mock_vitals_second_update.grid_hz = 49.981 mock_vitals_second_update.grid_hz = 49.981
# (228.1*10) + (229.1*11) + (230.1*12) = 7562.3 W mock_vitals_second_update.voltageA_v = 228.1
mock_vitals_second_update.voltageB_v = 228.1 mock_vitals_second_update.voltageB_v = 229.1
mock_vitals_second_update.voltageC_v = 229.1 mock_vitals_second_update.voltageC_v = 230
mock_vitals_second_update.voltageA_v = 230.1 mock_vitals_second_update.currentA_a = 7
mock_vitals_second_update.currentA_a = 10 mock_vitals_second_update.currentB_a = 8
mock_vitals_second_update.currentB_a = 11 mock_vitals_second_update.currentC_a = 9
mock_vitals_second_update.currentC_a = 12
lifetime_mock_first_update = get_lifetime_mock() lifetime_mock_first_update = get_lifetime_mock()
lifetime_mock_first_update.energy_wh = 988022 lifetime_mock_first_update.energy_wh = 988022