mirror of
https://github.com/home-assistant/core.git
synced 2025-07-28 15:47:12 +00:00
Add pan/tilt features to tplink integration (#133829)
This commit is contained in:
parent
0f18f128fd
commit
ebcb478f52
@ -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}
|
||||
|
@ -73,13 +73,6 @@ EXCLUDED_FEATURES = {
|
||||
"check_latest_firmware",
|
||||
# siren
|
||||
"alarm",
|
||||
# camera
|
||||
"pan_left",
|
||||
"pan_right",
|
||||
"pan_step",
|
||||
"tilt_up",
|
||||
"tilt_down",
|
||||
"tilt_step",
|
||||
}
|
||||
|
||||
|
||||
|
@ -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"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -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}
|
||||
|
@ -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"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -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,
|
||||
|
@ -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({
|
||||
|
Loading…
x
Reference in New Issue
Block a user