diff --git a/homeassistant/components/homewizard/sensor.py b/homeassistant/components/homewizard/sensor.py index 75bafa5ddb1a0..cadcbda29b7cf 100644 --- a/homeassistant/components/homewizard/sensor.py +++ b/homeassistant/components/homewizard/sensor.py @@ -7,6 +7,7 @@ from datetime import datetime, timedelta from typing import Final +from homewizard_energy.const import Model from homewizard_energy.models import CombinedModels, ExternalDevice from homeassistant.components.sensor import ( @@ -703,6 +704,44 @@ async def async_setup_entry( for description in SENSORS if description.has_fn(entry.runtime_data.data) ] + # Add optional production power sensor for supported energy monitoring devices + # or plug-in battery + if entry.runtime_data.data.device.product_type in ( + Model.ENERGY_SOCKET, + Model.ENERGY_METER_1_PHASE, + Model.ENERGY_METER_3_PHASE, + Model.ENERGY_METER_EASTRON_SDM230, + Model.ENERGY_METER_EASTRON_SDM630, + Model.BATTERY, + ): + active_prodution_power_sensor_description = HomeWizardSensorEntityDescription( + key="active_production_power_w", + translation_key="active_production_power_w", + native_unit_of_measurement=UnitOfPower.WATT, + device_class=SensorDeviceClass.POWER, + state_class=SensorStateClass.MEASUREMENT, + suggested_display_precision=0, + entity_registry_enabled_default=( + entry.runtime_data.data.device.product_type == Model.BATTERY + or ( + ( + total_export + := entry.runtime_data.data.measurement.energy_export_kwh + ) + is not None + and total_export > 0 + ) + ), + has_fn=lambda x: True, + value_fn=lambda data: power_w * -1 + if (power_w := data.measurement.power_w) + else power_w, + ) + entities.append( + HomeWizardSensorEntity( + entry.runtime_data, active_prodution_power_sensor_description + ) + ) # Initialize external devices measurement = entry.runtime_data.data.measurement diff --git a/homeassistant/components/homewizard/strings.json b/homeassistant/components/homewizard/strings.json index cea3d3a3e5027..5c03df7fa1066 100644 --- a/homeassistant/components/homewizard/strings.json +++ b/homeassistant/components/homewizard/strings.json @@ -90,6 +90,9 @@ "active_power_phase_w": { "name": "Power phase {phase}" }, + "active_production_power_w": { + "name": "Production power" + }, "active_reactive_power_phase_var": { "name": "Reactive power phase {phase}" }, diff --git a/tests/components/homewizard/snapshots/test_sensor.ambr b/tests/components/homewizard/snapshots/test_sensor.ambr index 4ee0a4feb5cdc..75762620b0479 100644 --- a/tests/components/homewizard/snapshots/test_sensor.ambr +++ b/tests/components/homewizard/snapshots/test_sensor.ambr @@ -540,6 +540,97 @@ 'state': '123.0', }) # --- +# name: test_sensors[HWE-BAT-entity_ids10][sensor.device_production_power:device-registry] + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + tuple( + 'mac', + '5c:2f:af:ab:cd:ef', + ), + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'homewizard', + '5c2fafabcdef', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'HomeWizard', + 'model': 'Plug-In Battery', + 'model_id': 'HWE-BAT', + 'name': 'Device', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': '1.00', + 'via_device_id': None, + }) +# --- +# name: test_sensors[HWE-BAT-entity_ids10][sensor.device_production_power:entity-registry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.device_production_power', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + 'sensor': dict({ + 'suggested_display_precision': 0, + }), + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Production power', + 'platform': 'homewizard', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'active_production_power_w', + 'unique_id': 'HWE-P1_5c2fafabcdef_active_production_power_w', + 'unit_of_measurement': , + }) +# --- +# name: test_sensors[HWE-BAT-entity_ids10][sensor.device_production_power:state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power', + 'friendly_name': 'Device Production power', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.device_production_power', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '-123.0', + }) +# --- # name: test_sensors[HWE-BAT-entity_ids10][sensor.device_state_of_charge:device-registry] DeviceRegistryEntrySnapshot({ 'area_id': None, @@ -1610,6 +1701,97 @@ 'state': '61.1', }) # --- +# name: test_sensors[HWE-KWH1-entity_ids7][sensor.device_production_power:device-registry] + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + tuple( + 'mac', + '5c:2f:af:ab:cd:ef', + ), + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'homewizard', + '5c2fafabcdef', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'HomeWizard', + 'model': 'Wi-Fi kWh Meter 1-phase', + 'model_id': 'HWE-KWH1', + 'name': 'Device', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': '3.06', + 'via_device_id': None, + }) +# --- +# name: test_sensors[HWE-KWH1-entity_ids7][sensor.device_production_power:entity-registry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.device_production_power', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + 'sensor': dict({ + 'suggested_display_precision': 0, + }), + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Production power', + 'platform': 'homewizard', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'active_production_power_w', + 'unique_id': 'HWE-P1_5c2fafabcdef_active_production_power_w', + 'unit_of_measurement': , + }) +# --- +# name: test_sensors[HWE-KWH1-entity_ids7][sensor.device_production_power:state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power', + 'friendly_name': 'Device Production power', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.device_production_power', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '1058.296', + }) +# --- # name: test_sensors[HWE-KWH1-entity_ids7][sensor.device_reactive_power:device-registry] DeviceRegistryEntrySnapshot({ 'area_id': None, @@ -3591,6 +3773,97 @@ 'state': '0.0', }) # --- +# name: test_sensors[HWE-KWH3-entity_ids8][sensor.device_production_power:device-registry] + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + tuple( + 'mac', + '5c:2f:af:ab:cd:ef', + ), + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'homewizard', + '5c2fafabcdef', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'HomeWizard', + 'model': 'Wi-Fi kWh Meter 3-phase', + 'model_id': 'HWE-KWH3', + 'name': 'Device', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': '3.06', + 'via_device_id': None, + }) +# --- +# name: test_sensors[HWE-KWH3-entity_ids8][sensor.device_production_power:entity-registry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.device_production_power', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + 'sensor': dict({ + 'suggested_display_precision': 0, + }), + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Production power', + 'platform': 'homewizard', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'active_production_power_w', + 'unique_id': 'HWE-P1_5c2fafabcdef_active_production_power_w', + 'unit_of_measurement': , + }) +# --- +# name: test_sensors[HWE-KWH3-entity_ids8][sensor.device_production_power:state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power', + 'friendly_name': 'Device Production power', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.device_production_power', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '900.194', + }) +# --- # name: test_sensors[HWE-KWH3-entity_ids8][sensor.device_reactive_power:device-registry] DeviceRegistryEntrySnapshot({ 'area_id': None, @@ -15525,7 +15798,7 @@ 'state': '1457.277', }) # --- -# name: test_sensors[HWE-SKT-11-entity_ids2][sensor.device_wi_fi_ssid:device-registry] +# name: test_sensors[HWE-SKT-11-entity_ids2][sensor.device_production_power:device-registry] DeviceRegistryEntrySnapshot({ 'area_id': None, 'config_entries': , @@ -15560,20 +15833,111 @@ 'via_device_id': None, }) # --- -# name: test_sensors[HWE-SKT-11-entity_ids2][sensor.device_wi_fi_ssid:entity-registry] +# name: test_sensors[HWE-SKT-11-entity_ids2][sensor.device_production_power:entity-registry] EntityRegistryEntrySnapshot({ 'aliases': set({ }), 'area_id': None, - 'capabilities': None, + 'capabilities': dict({ + 'state_class': , + }), 'config_entry_id': , 'config_subentry_id': , 'device_class': None, 'device_id': , 'disabled_by': None, 'domain': 'sensor', - 'entity_category': , - 'entity_id': 'sensor.device_wi_fi_ssid', + 'entity_category': None, + 'entity_id': 'sensor.device_production_power', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + 'sensor': dict({ + 'suggested_display_precision': 0, + }), + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Production power', + 'platform': 'homewizard', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'active_production_power_w', + 'unique_id': 'HWE-P1_5c2fafabcdef_active_production_power_w', + 'unit_of_measurement': , + }) +# --- +# name: test_sensors[HWE-SKT-11-entity_ids2][sensor.device_production_power:state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power', + 'friendly_name': 'Device Production power', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.device_production_power', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '-1457.277', + }) +# --- +# name: test_sensors[HWE-SKT-11-entity_ids2][sensor.device_wi_fi_ssid:device-registry] + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + tuple( + 'mac', + '5c:2f:af:ab:cd:ef', + ), + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'homewizard', + '5c2fafabcdef', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'HomeWizard', + 'model': 'Wi-Fi Energy Socket', + 'model_id': 'HWE-SKT', + 'name': 'Device', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': '3.03', + 'via_device_id': None, + }) +# --- +# name: test_sensors[HWE-SKT-11-entity_ids2][sensor.device_wi_fi_ssid:entity-registry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': , + 'entity_id': 'sensor.device_wi_fi_ssid', 'has_entity_name': True, 'hidden_by': None, 'icon': None, @@ -16420,6 +16784,97 @@ 'state': '543.312', }) # --- +# name: test_sensors[HWE-SKT-21-entity_ids3][sensor.device_production_power:device-registry] + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + tuple( + 'mac', + '5c:2f:af:ab:cd:ef', + ), + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'homewizard', + '5c2fafabcdef', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'HomeWizard', + 'model': 'Wi-Fi Energy Socket', + 'model_id': 'HWE-SKT', + 'name': 'Device', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': '4.07', + 'via_device_id': None, + }) +# --- +# name: test_sensors[HWE-SKT-21-entity_ids3][sensor.device_production_power:entity-registry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.device_production_power', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + 'sensor': dict({ + 'suggested_display_precision': 0, + }), + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Production power', + 'platform': 'homewizard', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'active_production_power_w', + 'unique_id': 'HWE-P1_5c2fafabcdef_active_production_power_w', + 'unit_of_measurement': , + }) +# --- +# name: test_sensors[HWE-SKT-21-entity_ids3][sensor.device_production_power:state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power', + 'friendly_name': 'Device Production power', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.device_production_power', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '-543.312', + }) +# --- # name: test_sensors[HWE-SKT-21-entity_ids3][sensor.device_reactive_power:device-registry] DeviceRegistryEntrySnapshot({ 'area_id': None, @@ -17754,6 +18209,97 @@ 'state': '61.1', }) # --- +# name: test_sensors[SDM230-entity_ids5][sensor.device_production_power:device-registry] + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + tuple( + 'mac', + '5c:2f:af:ab:cd:ef', + ), + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'homewizard', + '5c2fafabcdef', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'HomeWizard', + 'model': 'Wi-Fi kWh Meter 1-phase', + 'model_id': 'SDM230-wifi', + 'name': 'Device', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': '3.06', + 'via_device_id': None, + }) +# --- +# name: test_sensors[SDM230-entity_ids5][sensor.device_production_power:entity-registry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.device_production_power', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + 'sensor': dict({ + 'suggested_display_precision': 0, + }), + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Production power', + 'platform': 'homewizard', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'active_production_power_w', + 'unique_id': 'HWE-P1_5c2fafabcdef_active_production_power_w', + 'unit_of_measurement': , + }) +# --- +# name: test_sensors[SDM230-entity_ids5][sensor.device_production_power:state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power', + 'friendly_name': 'Device Production power', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.device_production_power', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '1058.296', + }) +# --- # name: test_sensors[SDM230-entity_ids5][sensor.device_reactive_power:device-registry] DeviceRegistryEntrySnapshot({ 'area_id': None, @@ -19735,6 +20281,97 @@ 'state': '0.0', }) # --- +# name: test_sensors[SDM630-entity_ids6][sensor.device_production_power:device-registry] + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + tuple( + 'mac', + '5c:2f:af:ab:cd:ef', + ), + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'homewizard', + '5c2fafabcdef', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'HomeWizard', + 'model': 'Wi-Fi kWh Meter 3-phase', + 'model_id': 'SDM630-wifi', + 'name': 'Device', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': '3.06', + 'via_device_id': None, + }) +# --- +# name: test_sensors[SDM630-entity_ids6][sensor.device_production_power:entity-registry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.device_production_power', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + 'sensor': dict({ + 'suggested_display_precision': 0, + }), + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Production power', + 'platform': 'homewizard', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'active_production_power_w', + 'unique_id': 'HWE-P1_5c2fafabcdef_active_production_power_w', + 'unit_of_measurement': , + }) +# --- +# name: test_sensors[SDM630-entity_ids6][sensor.device_production_power:state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power', + 'friendly_name': 'Device Production power', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.device_production_power', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '900.194', + }) +# --- # name: test_sensors[SDM630-entity_ids6][sensor.device_reactive_power:device-registry] DeviceRegistryEntrySnapshot({ 'area_id': None, diff --git a/tests/components/homewizard/test_sensor.py b/tests/components/homewizard/test_sensor.py index 84f224d9edeb4..1f3d613ccd6b3 100644 --- a/tests/components/homewizard/test_sensor.py +++ b/tests/components/homewizard/test_sensor.py @@ -120,6 +120,7 @@ "sensor.device_energy_import", "sensor.device_power_phase_1", "sensor.device_power", + "sensor.device_production_power", "sensor.device_wi_fi_ssid", "sensor.device_wi_fi_strength", ], @@ -135,6 +136,7 @@ "sensor.device_power_factor", "sensor.device_power_phase_1", "sensor.device_power", + "sensor.device_production_power", "sensor.device_reactive_power", "sensor.device_voltage", "sensor.device_wi_fi_ssid", @@ -160,6 +162,7 @@ "sensor.device_frequency", "sensor.device_power_factor", "sensor.device_power", + "sensor.device_production_power", "sensor.device_reactive_power", "sensor.device_voltage", "sensor.device_wi_fi_ssid", @@ -187,6 +190,7 @@ "sensor.device_power_phase_2", "sensor.device_power_phase_3", "sensor.device_power", + "sensor.device_production_power", "sensor.device_reactive_power_phase_1", "sensor.device_reactive_power_phase_2", "sensor.device_reactive_power_phase_3", @@ -208,6 +212,7 @@ "sensor.device_frequency", "sensor.device_power_factor", "sensor.device_power", + "sensor.device_production_power", "sensor.device_reactive_power", "sensor.device_voltage", "sensor.device_wi_fi_ssid", @@ -235,6 +240,7 @@ "sensor.device_power_phase_2", "sensor.device_power_phase_3", "sensor.device_power", + "sensor.device_production_power", "sensor.device_reactive_power_phase_1", "sensor.device_reactive_power_phase_2", "sensor.device_reactive_power_phase_3", @@ -304,6 +310,7 @@ "sensor.device_energy_import", "sensor.device_frequency", "sensor.device_power", + "sensor.device_production_power", "sensor.device_state_of_charge", "sensor.device_uptime", "sensor.device_voltage",