Add pan/tilt features to tplink integration (#133829)

This commit is contained in:
Steven B. 2024-12-22 20:53:14 +00:00 committed by GitHub
parent 0f18f128fd
commit ebcb478f52
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 350 additions and 7 deletions

View File

@ -50,6 +50,18 @@ BUTTON_DESCRIPTIONS: Final = [
key="reboot",
device_class=ButtonDeviceClass.RESTART,
),
TPLinkButtonEntityDescription(
key="pan_left",
),
TPLinkButtonEntityDescription(
key="pan_right",
),
TPLinkButtonEntityDescription(
key="tilt_up",
),
TPLinkButtonEntityDescription(
key="tilt_down",
),
]
BUTTON_DESCRIPTIONS_MAP = {desc.key: desc for desc in BUTTON_DESCRIPTIONS}

View File

@ -73,13 +73,6 @@ EXCLUDED_FEATURES = {
"check_latest_firmware",
# siren
"alarm",
# camera
"pan_left",
"pan_right",
"pan_step",
"tilt_up",
"tilt_down",
"tilt_step",
}

View File

@ -20,6 +20,18 @@
},
"stop_alarm": {
"default": "mdi:bell-cancel"
},
"pan_left": {
"default": "mdi:chevron-left"
},
"pan_right": {
"default": "mdi:chevron-right"
},
"tilt_up": {
"default": "mdi:chevron-up"
},
"tilt_down": {
"default": "mdi:chevron-down"
}
},
"select": {
@ -117,6 +129,12 @@
},
"target_temperature": {
"default": "mdi:thermometer"
},
"pan_step": {
"default": "mdi:unfold-more-vertical"
},
"tilt_step": {
"default": "mdi:unfold-more-horizontal"
}
}
},

View File

@ -51,6 +51,14 @@ NUMBER_DESCRIPTIONS: Final = (
key="temperature_offset",
mode=NumberMode.BOX,
),
TPLinkNumberEntityDescription(
key="pan_step",
mode=NumberMode.BOX,
),
TPLinkNumberEntityDescription(
key="tilt_step",
mode=NumberMode.BOX,
),
)
NUMBER_DESCRIPTIONS_MAP = {desc.key: desc for desc in NUMBER_DESCRIPTIONS}

View File

@ -120,6 +120,18 @@
},
"stop_alarm": {
"name": "Stop alarm"
},
"pan_left": {
"name": "Pan left"
},
"pan_right": {
"name": "Pan right"
},
"tilt_up": {
"name": "Tilt up"
},
"tilt_down": {
"name": "Tilt down"
}
},
"camera": {
@ -235,6 +247,12 @@
},
"temperature_offset": {
"name": "Temperature offset"
},
"pan_step": {
"name": "Pan degrees"
},
"tilt_step": {
"name": "Tilt degrees"
}
}
},

View File

@ -1,4 +1,96 @@
# serializer version: 1
# name: test_states[button.my_device_pan_left-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'button.my_device_pan_left',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Pan left',
'platform': 'tplink',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'pan_left',
'unique_id': '123456789ABCDEFGH_pan_left',
'unit_of_measurement': None,
})
# ---
# name: test_states[button.my_device_pan_left-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'my_device Pan left',
}),
'context': <ANY>,
'entity_id': 'button.my_device_pan_left',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_states[button.my_device_pan_right-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'button.my_device_pan_right',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Pan right',
'platform': 'tplink',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'pan_right',
'unique_id': '123456789ABCDEFGH_pan_right',
'unit_of_measurement': None,
})
# ---
# name: test_states[button.my_device_pan_right-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'my_device Pan right',
}),
'context': <ANY>,
'entity_id': 'button.my_device_pan_right',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_states[button.my_device_restart-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@ -124,6 +216,98 @@
'state': 'unknown',
})
# ---
# name: test_states[button.my_device_tilt_down-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'button.my_device_tilt_down',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Tilt down',
'platform': 'tplink',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'tilt_down',
'unique_id': '123456789ABCDEFGH_tilt_down',
'unit_of_measurement': None,
})
# ---
# name: test_states[button.my_device_tilt_down-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'my_device Tilt down',
}),
'context': <ANY>,
'entity_id': 'button.my_device_tilt_down',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_states[button.my_device_tilt_up-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'button.my_device_tilt_up',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Tilt up',
'platform': 'tplink',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'tilt_up',
'unique_id': '123456789ABCDEFGH_tilt_up',
'unit_of_measurement': None,
})
# ---
# name: test_states[button.my_device_tilt_up-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'my_device Tilt up',
}),
'context': <ANY>,
'entity_id': 'button.my_device_tilt_up',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_states[my_device-entry]
DeviceRegistryEntrySnapshot({
'area_id': None,

View File

@ -35,6 +35,61 @@
'via_device_id': None,
})
# ---
# name: test_states[number.my_device_pan_degrees-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'max': 65536,
'min': 0,
'mode': <NumberMode.BOX: 'box'>,
'step': 1.0,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'number',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'number.my_device_pan_degrees',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Pan degrees',
'platform': 'tplink',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'pan_step',
'unique_id': '123456789ABCDEFGH_pan_step',
'unit_of_measurement': None,
})
# ---
# name: test_states[number.my_device_pan_degrees-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'my_device Pan degrees',
'max': 65536,
'min': 0,
'mode': <NumberMode.BOX: 'box'>,
'step': 1.0,
}),
'context': <ANY>,
'entity_id': 'number.my_device_pan_degrees',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '10',
})
# ---
# name: test_states[number.my_device_smooth_off-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@ -200,6 +255,61 @@
'state': 'False',
})
# ---
# name: test_states[number.my_device_tilt_degrees-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'max': 65536,
'min': 0,
'mode': <NumberMode.BOX: 'box'>,
'step': 1.0,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'number',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'number.my_device_tilt_degrees',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Tilt degrees',
'platform': 'tplink',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'tilt_step',
'unique_id': '123456789ABCDEFGH_tilt_step',
'unit_of_measurement': None,
})
# ---
# name: test_states[number.my_device_tilt_degrees-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'my_device Tilt degrees',
'max': 65536,
'min': 0,
'mode': <NumberMode.BOX: 'box'>,
'step': 1.0,
}),
'context': <ANY>,
'entity_id': 'number.my_device_tilt_degrees',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '10',
})
# ---
# name: test_states[number.my_device_turn_off_in-entry]
EntityRegistryEntrySnapshot({
'aliases': set({