diff --git a/homeassistant/components/pyload/const.py b/homeassistant/components/pyload/const.py index 9419786fd88..a0b66687bd0 100644 --- a/homeassistant/components/pyload/const.py +++ b/homeassistant/components/pyload/const.py @@ -10,3 +10,5 @@ ISSUE_PLACEHOLDER = {"url": "/config/integrations/dashboard/add?domain=pyload"} MANUFACTURER = "pyLoad Team" SERVICE_NAME = "pyLoad" + +UNIT_DOWNLOADS = "downloads" diff --git a/homeassistant/components/pyload/sensor.py b/homeassistant/components/pyload/sensor.py index 83585a60c6d..bc90fdb7ccb 100644 --- a/homeassistant/components/pyload/sensor.py +++ b/homeassistant/components/pyload/sensor.py @@ -11,6 +11,7 @@ from homeassistant.components.sensor import ( SensorDeviceClass, SensorEntity, SensorEntityDescription, + SensorStateClass, ) from homeassistant.config_entries import SOURCE_IMPORT from homeassistant.const import ( @@ -42,6 +43,7 @@ from .const import ( ISSUE_PLACEHOLDER, MANUFACTURER, SERVICE_NAME, + UNIT_DOWNLOADS, ) from .coordinator import PyLoadCoordinator @@ -68,14 +70,20 @@ SENSOR_DESCRIPTIONS: tuple[SensorEntityDescription, ...] = ( SensorEntityDescription( key=PyLoadSensorEntity.ACTIVE, translation_key=PyLoadSensorEntity.ACTIVE, + native_unit_of_measurement=UNIT_DOWNLOADS, + state_class=SensorStateClass.MEASUREMENT, ), SensorEntityDescription( key=PyLoadSensorEntity.QUEUE, translation_key=PyLoadSensorEntity.QUEUE, + native_unit_of_measurement=UNIT_DOWNLOADS, + state_class=SensorStateClass.MEASUREMENT, ), SensorEntityDescription( key=PyLoadSensorEntity.TOTAL, translation_key=PyLoadSensorEntity.TOTAL, + native_unit_of_measurement=UNIT_DOWNLOADS, + state_class=SensorStateClass.MEASUREMENT, ), SensorEntityDescription( key=PyLoadSensorEntity.FREE_SPACE, diff --git a/tests/components/pyload/snapshots/test_sensor.ambr b/tests/components/pyload/snapshots/test_sensor.ambr index 159309041e0..c1e5a9d6c3a 100644 --- a/tests/components/pyload/snapshots/test_sensor.ambr +++ b/tests/components/pyload/snapshots/test_sensor.ambr @@ -4,7 +4,9 @@ 'aliases': set({ }), 'area_id': None, - 'capabilities': None, + 'capabilities': dict({ + 'state_class': , + }), 'config_entry_id': , 'device_class': None, 'device_id': , @@ -29,13 +31,15 @@ 'supported_features': 0, 'translation_key': , 'unique_id': 'XXXXXXXXXXXXXX_active', - 'unit_of_measurement': None, + 'unit_of_measurement': 'downloads', }) # --- # name: test_sensor_update_exceptions[CannotConnect][sensor.pyload_active_downloads-state] StateSnapshot({ 'attributes': ReadOnlyDict({ 'friendly_name': 'pyLoad Active downloads', + 'state_class': , + 'unit_of_measurement': 'downloads', }), 'context': , 'entity_id': 'sensor.pyload_active_downloads', @@ -50,7 +54,9 @@ 'aliases': set({ }), 'area_id': None, - 'capabilities': None, + 'capabilities': dict({ + 'state_class': , + }), 'config_entry_id': , 'device_class': None, 'device_id': , @@ -75,13 +81,15 @@ 'supported_features': 0, 'translation_key': , 'unique_id': 'XXXXXXXXXXXXXX_queue', - 'unit_of_measurement': None, + 'unit_of_measurement': 'downloads', }) # --- # name: test_sensor_update_exceptions[CannotConnect][sensor.pyload_downloads_in_queue-state] StateSnapshot({ 'attributes': ReadOnlyDict({ 'friendly_name': 'pyLoad Downloads in queue', + 'state_class': , + 'unit_of_measurement': 'downloads', }), 'context': , 'entity_id': 'sensor.pyload_downloads_in_queue', @@ -96,7 +104,9 @@ 'aliases': set({ }), 'area_id': None, - 'capabilities': None, + 'capabilities': dict({ + 'state_class': , + }), 'config_entry_id': , 'device_class': None, 'device_id': , @@ -121,13 +131,15 @@ 'supported_features': 0, 'translation_key': , 'unique_id': 'XXXXXXXXXXXXXX_total', - 'unit_of_measurement': None, + 'unit_of_measurement': 'downloads', }) # --- # name: test_sensor_update_exceptions[CannotConnect][sensor.pyload_finished_downloads-state] StateSnapshot({ 'attributes': ReadOnlyDict({ 'friendly_name': 'pyLoad Finished downloads', + 'state_class': , + 'unit_of_measurement': 'downloads', }), 'context': , 'entity_id': 'sensor.pyload_finished_downloads', @@ -250,7 +262,9 @@ 'aliases': set({ }), 'area_id': None, - 'capabilities': None, + 'capabilities': dict({ + 'state_class': , + }), 'config_entry_id': , 'device_class': None, 'device_id': , @@ -275,13 +289,15 @@ 'supported_features': 0, 'translation_key': , 'unique_id': 'XXXXXXXXXXXXXX_active', - 'unit_of_measurement': None, + 'unit_of_measurement': 'downloads', }) # --- # name: test_sensor_update_exceptions[InvalidAuth][sensor.pyload_active_downloads-state] StateSnapshot({ 'attributes': ReadOnlyDict({ 'friendly_name': 'pyLoad Active downloads', + 'state_class': , + 'unit_of_measurement': 'downloads', }), 'context': , 'entity_id': 'sensor.pyload_active_downloads', @@ -296,7 +312,9 @@ 'aliases': set({ }), 'area_id': None, - 'capabilities': None, + 'capabilities': dict({ + 'state_class': , + }), 'config_entry_id': , 'device_class': None, 'device_id': , @@ -321,13 +339,15 @@ 'supported_features': 0, 'translation_key': , 'unique_id': 'XXXXXXXXXXXXXX_queue', - 'unit_of_measurement': None, + 'unit_of_measurement': 'downloads', }) # --- # name: test_sensor_update_exceptions[InvalidAuth][sensor.pyload_downloads_in_queue-state] StateSnapshot({ 'attributes': ReadOnlyDict({ 'friendly_name': 'pyLoad Downloads in queue', + 'state_class': , + 'unit_of_measurement': 'downloads', }), 'context': , 'entity_id': 'sensor.pyload_downloads_in_queue', @@ -342,7 +362,9 @@ 'aliases': set({ }), 'area_id': None, - 'capabilities': None, + 'capabilities': dict({ + 'state_class': , + }), 'config_entry_id': , 'device_class': None, 'device_id': , @@ -367,13 +389,15 @@ 'supported_features': 0, 'translation_key': , 'unique_id': 'XXXXXXXXXXXXXX_total', - 'unit_of_measurement': None, + 'unit_of_measurement': 'downloads', }) # --- # name: test_sensor_update_exceptions[InvalidAuth][sensor.pyload_finished_downloads-state] StateSnapshot({ 'attributes': ReadOnlyDict({ 'friendly_name': 'pyLoad Finished downloads', + 'state_class': , + 'unit_of_measurement': 'downloads', }), 'context': , 'entity_id': 'sensor.pyload_finished_downloads', @@ -496,7 +520,9 @@ 'aliases': set({ }), 'area_id': None, - 'capabilities': None, + 'capabilities': dict({ + 'state_class': , + }), 'config_entry_id': , 'device_class': None, 'device_id': , @@ -521,13 +547,15 @@ 'supported_features': 0, 'translation_key': , 'unique_id': 'XXXXXXXXXXXXXX_active', - 'unit_of_measurement': None, + 'unit_of_measurement': 'downloads', }) # --- # name: test_sensor_update_exceptions[ParserError][sensor.pyload_active_downloads-state] StateSnapshot({ 'attributes': ReadOnlyDict({ 'friendly_name': 'pyLoad Active downloads', + 'state_class': , + 'unit_of_measurement': 'downloads', }), 'context': , 'entity_id': 'sensor.pyload_active_downloads', @@ -542,7 +570,9 @@ 'aliases': set({ }), 'area_id': None, - 'capabilities': None, + 'capabilities': dict({ + 'state_class': , + }), 'config_entry_id': , 'device_class': None, 'device_id': , @@ -567,13 +597,15 @@ 'supported_features': 0, 'translation_key': , 'unique_id': 'XXXXXXXXXXXXXX_queue', - 'unit_of_measurement': None, + 'unit_of_measurement': 'downloads', }) # --- # name: test_sensor_update_exceptions[ParserError][sensor.pyload_downloads_in_queue-state] StateSnapshot({ 'attributes': ReadOnlyDict({ 'friendly_name': 'pyLoad Downloads in queue', + 'state_class': , + 'unit_of_measurement': 'downloads', }), 'context': , 'entity_id': 'sensor.pyload_downloads_in_queue', @@ -588,7 +620,9 @@ 'aliases': set({ }), 'area_id': None, - 'capabilities': None, + 'capabilities': dict({ + 'state_class': , + }), 'config_entry_id': , 'device_class': None, 'device_id': , @@ -613,13 +647,15 @@ 'supported_features': 0, 'translation_key': , 'unique_id': 'XXXXXXXXXXXXXX_total', - 'unit_of_measurement': None, + 'unit_of_measurement': 'downloads', }) # --- # name: test_sensor_update_exceptions[ParserError][sensor.pyload_finished_downloads-state] StateSnapshot({ 'attributes': ReadOnlyDict({ 'friendly_name': 'pyLoad Finished downloads', + 'state_class': , + 'unit_of_measurement': 'downloads', }), 'context': , 'entity_id': 'sensor.pyload_finished_downloads', @@ -742,7 +778,9 @@ 'aliases': set({ }), 'area_id': None, - 'capabilities': None, + 'capabilities': dict({ + 'state_class': , + }), 'config_entry_id': , 'device_class': None, 'device_id': , @@ -767,13 +805,15 @@ 'supported_features': 0, 'translation_key': , 'unique_id': 'XXXXXXXXXXXXXX_active', - 'unit_of_measurement': None, + 'unit_of_measurement': 'downloads', }) # --- # name: test_setup[sensor.pyload_active_downloads-state] StateSnapshot({ 'attributes': ReadOnlyDict({ 'friendly_name': 'pyLoad Active downloads', + 'state_class': , + 'unit_of_measurement': 'downloads', }), 'context': , 'entity_id': 'sensor.pyload_active_downloads', @@ -788,7 +828,9 @@ 'aliases': set({ }), 'area_id': None, - 'capabilities': None, + 'capabilities': dict({ + 'state_class': , + }), 'config_entry_id': , 'device_class': None, 'device_id': , @@ -813,13 +855,15 @@ 'supported_features': 0, 'translation_key': , 'unique_id': 'XXXXXXXXXXXXXX_queue', - 'unit_of_measurement': None, + 'unit_of_measurement': 'downloads', }) # --- # name: test_setup[sensor.pyload_downloads_in_queue-state] StateSnapshot({ 'attributes': ReadOnlyDict({ 'friendly_name': 'pyLoad Downloads in queue', + 'state_class': , + 'unit_of_measurement': 'downloads', }), 'context': , 'entity_id': 'sensor.pyload_downloads_in_queue', @@ -834,7 +878,9 @@ 'aliases': set({ }), 'area_id': None, - 'capabilities': None, + 'capabilities': dict({ + 'state_class': , + }), 'config_entry_id': , 'device_class': None, 'device_id': , @@ -859,13 +905,15 @@ 'supported_features': 0, 'translation_key': , 'unique_id': 'XXXXXXXXXXXXXX_total', - 'unit_of_measurement': None, + 'unit_of_measurement': 'downloads', }) # --- # name: test_setup[sensor.pyload_finished_downloads-state] StateSnapshot({ 'attributes': ReadOnlyDict({ 'friendly_name': 'pyLoad Finished downloads', + 'state_class': , + 'unit_of_measurement': 'downloads', }), 'context': , 'entity_id': 'sensor.pyload_finished_downloads',