Add downtime and uptime sensors for Husqvarna Automower (#140804)

* Add downtime and uptime sensors for Husqvarna Automower

* add strings
This commit is contained in:
Thomas55555 2025-03-24 17:08:39 +01:00 committed by GitHub
parent e9cf4a209e
commit c3bab1f316
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 150 additions and 4 deletions

View File

@ -295,6 +295,18 @@ MOWER_SENSOR_TYPES: tuple[AutomowerSensorEntityDescription, ...] = (
exists_fn=lambda data: data.statistics.cutting_blade_usage_time is not None,
value_fn=attrgetter("statistics.cutting_blade_usage_time"),
),
AutomowerSensorEntityDescription(
key="downtime",
translation_key="downtime",
state_class=SensorStateClass.TOTAL,
device_class=SensorDeviceClass.DURATION,
entity_registry_enabled_default=False,
native_unit_of_measurement=UnitOfTime.SECONDS,
suggested_display_precision=0,
suggested_unit_of_measurement=UnitOfTime.HOURS,
exists_fn=lambda data: data.statistics.downtime is not None,
value_fn=attrgetter("statistics.downtime"),
),
AutomowerSensorEntityDescription(
key="total_charging_time",
translation_key="total_charging_time",
@ -367,6 +379,18 @@ MOWER_SENSOR_TYPES: tuple[AutomowerSensorEntityDescription, ...] = (
exists_fn=lambda data: data.statistics.total_drive_distance is not None,
value_fn=attrgetter("statistics.total_drive_distance"),
),
AutomowerSensorEntityDescription(
key="uptime",
translation_key="uptime",
state_class=SensorStateClass.TOTAL,
device_class=SensorDeviceClass.DURATION,
entity_registry_enabled_default=False,
native_unit_of_measurement=UnitOfTime.SECONDS,
suggested_display_precision=0,
suggested_unit_of_measurement=UnitOfTime.HOURS,
exists_fn=lambda data: data.statistics.uptime is not None,
value_fn=attrgetter("statistics.uptime"),
),
AutomowerSensorEntityDescription(
key="next_start_timestamp",
translation_key="next_start_timestamp",

View File

@ -221,6 +221,9 @@
"cutting_blade_usage_time": {
"name": "Cutting blade usage time"
},
"downtime": {
"name": "Downtime"
},
"restricted_reason": {
"name": "Restricted reason",
"state": {
@ -263,6 +266,9 @@
"demo": "Demo"
}
},
"uptime": {
"name": "Uptime"
},
"work_area": {
"name": "Work area",
"state": {

View File

@ -176,7 +176,7 @@
],
"statistics": {
"cuttingBladeUsageTime": 123,
"downTime": 123,
"downTime": 3600,
"numberOfChargingCycles": 1380,
"numberOfCollisions": 11396,
"totalChargingTime": 4334400,
@ -184,7 +184,7 @@
"totalDriveDistance": 1780272,
"totalRunningTime": 4564800,
"totalSearchingTime": 370800,
"upTime": 456
"upTime": 7200
},
"stayOutZones": {
"dirty": false,

View File

@ -95,7 +95,7 @@
}),
'statistics': dict({
'cutting_blade_usage_time': 123,
'downtime': 123,
'downtime': 3600,
'number_of_charging_cycles': 1380,
'number_of_collisions': 11396,
'total_charging_time': 4334400,
@ -103,7 +103,7 @@
'total_drive_distance': 1780272,
'total_running_time': 4564800,
'total_searching_time': 370800,
'uptime': 456,
'uptime': 7200,
}),
'stay_out_zones': dict({
'dirty': False,

View File

@ -106,6 +106,64 @@
'state': '0.034',
})
# ---
# name: test_sensor_snapshot[sensor.test_mower_1_downtime-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.TOTAL: 'total'>,
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.test_mower_1_downtime',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 0,
}),
'sensor.private': dict({
'suggested_unit_of_measurement': <UnitOfTime.HOURS: 'h'>,
}),
}),
'original_device_class': <SensorDeviceClass.DURATION: 'duration'>,
'original_icon': None,
'original_name': 'Downtime',
'platform': 'husqvarna_automower',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'downtime',
'unique_id': 'c7233734-b219-4287-a173-08e3643f89f0_downtime',
'unit_of_measurement': <UnitOfTime.HOURS: 'h'>,
})
# ---
# name: test_sensor_snapshot[sensor.test_mower_1_downtime-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'duration',
'friendly_name': 'Test Mower 1 Downtime',
'state_class': <SensorStateClass.TOTAL: 'total'>,
'unit_of_measurement': <UnitOfTime.HOURS: 'h'>,
}),
'context': <ANY>,
'entity_id': 'sensor.test_mower_1_downtime',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '1.0',
})
# ---
# name: test_sensor_snapshot[sensor.test_mower_1_error-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@ -1208,6 +1266,64 @@
'state': '103.000',
})
# ---
# name: test_sensor_snapshot[sensor.test_mower_1_uptime-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.TOTAL: 'total'>,
}),
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.test_mower_1_uptime',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 0,
}),
'sensor.private': dict({
'suggested_unit_of_measurement': <UnitOfTime.HOURS: 'h'>,
}),
}),
'original_device_class': <SensorDeviceClass.DURATION: 'duration'>,
'original_icon': None,
'original_name': 'Uptime',
'platform': 'husqvarna_automower',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'uptime',
'unique_id': 'c7233734-b219-4287-a173-08e3643f89f0_uptime',
'unit_of_measurement': <UnitOfTime.HOURS: 'h'>,
})
# ---
# name: test_sensor_snapshot[sensor.test_mower_1_uptime-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'duration',
'friendly_name': 'Test Mower 1 Uptime',
'state_class': <SensorStateClass.TOTAL: 'total'>,
'unit_of_measurement': <UnitOfTime.HOURS: 'h'>,
}),
'context': <ANY>,
'entity_id': 'sensor.test_mower_1_uptime',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '2.0',
})
# ---
# name: test_sensor_snapshot[sensor.test_mower_1_work_area-entry]
EntityRegistryEntrySnapshot({
'aliases': set({