From 5c4422dc720681c510080087ff9857f1a0dcf721 Mon Sep 17 00:00:00 2001 From: einarhauks Date: Wed, 1 Dec 2021 18:21:56 +0000 Subject: [PATCH] Remove power sensor from Tesla Wall Connector (#60775) Add voltage and current sensors for each phase --- .../components/tesla_wall_connector/sensor.py | 70 ++++++++++++------- .../tesla_wall_connector/test_sensor.py | 38 ++++++---- 2 files changed, 72 insertions(+), 36 deletions(-) diff --git a/homeassistant/components/tesla_wall_connector/sensor.py b/homeassistant/components/tesla_wall_connector/sensor.py index db4064c8c31..b2353681291 100644 --- a/homeassistant/components/tesla_wall_connector/sensor.py +++ b/homeassistant/components/tesla_wall_connector/sensor.py @@ -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", diff --git a/tests/components/tesla_wall_connector/test_sensor.py b/tests/components/tesla_wall_connector/test_sensor.py index 37d6c7d9cd1..6763f685441 100644 --- a/tests/components/tesla_wall_connector/test_sensor.py +++ b/tests/components/tesla_wall_connector/test_sensor.py @@ -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