mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 13:17:32 +00:00
Remove deprecated set_doorbell_message UniFi Protect service (#91523)
* Removes deprecated service * Linting * Linting * More cleanup * Linting
This commit is contained in:
parent
9680161701
commit
fdc80e14e6
@ -3,7 +3,6 @@ from __future__ import annotations
|
||||
|
||||
from collections.abc import Callable
|
||||
from dataclasses import dataclass
|
||||
from datetime import timedelta
|
||||
from enum import Enum
|
||||
import logging
|
||||
from typing import Any, Final
|
||||
@ -25,22 +24,15 @@ from pyunifiprotect.data import (
|
||||
Sensor,
|
||||
Viewer,
|
||||
)
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.components.select import SelectEntity, SelectEntityDescription
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import ATTR_ENTITY_ID, EntityCategory
|
||||
from homeassistant.const import EntityCategory
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.exceptions import HomeAssistantError
|
||||
from homeassistant.helpers import config_validation as cv, issue_registry as ir
|
||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||
from homeassistant.helpers.entity_platform import (
|
||||
AddEntitiesCallback,
|
||||
async_get_current_platform,
|
||||
)
|
||||
from homeassistant.util.dt import utcnow
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
||||
from .const import ATTR_DURATION, ATTR_MESSAGE, DISPATCH_ADOPT, DOMAIN, TYPE_EMPTY_VALUE
|
||||
from .const import DISPATCH_ADOPT, DOMAIN, TYPE_EMPTY_VALUE
|
||||
from .data import ProtectData
|
||||
from .entity import ProtectDeviceEntity, async_all_device_entities
|
||||
from .models import PermRequired, ProtectSetableKeysMixin, T
|
||||
@ -99,16 +91,6 @@ DEVICE_RECORDING_MODES = [
|
||||
|
||||
DEVICE_CLASS_LCD_MESSAGE: Final = "unifiprotect__lcd_message"
|
||||
|
||||
SERVICE_SET_DOORBELL_MESSAGE = "set_doorbell_message"
|
||||
|
||||
SET_DOORBELL_LCD_MESSAGE_SCHEMA = vol.Schema(
|
||||
{
|
||||
vol.Required(ATTR_ENTITY_ID): cv.entity_ids,
|
||||
vol.Required(ATTR_MESSAGE): cv.string,
|
||||
vol.Optional(ATTR_DURATION, default=""): cv.string,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@dataclass
|
||||
class ProtectSelectEntityDescription(
|
||||
@ -352,12 +334,6 @@ async def async_setup_entry(
|
||||
)
|
||||
|
||||
async_add_entities(entities)
|
||||
platform = async_get_current_platform()
|
||||
platform.async_register_entity_service(
|
||||
SERVICE_SET_DOORBELL_MESSAGE,
|
||||
SET_DOORBELL_LCD_MESSAGE_SCHEMA,
|
||||
"async_set_doorbell_message",
|
||||
)
|
||||
|
||||
|
||||
class ProtectSelects(ProtectDeviceEntity, SelectEntity):
|
||||
@ -428,43 +404,3 @@ class ProtectSelects(ProtectDeviceEntity, SelectEntity):
|
||||
if self.entity_description.ufp_enum_type is not None:
|
||||
unifi_value = self.entity_description.ufp_enum_type(unifi_value)
|
||||
await self.entity_description.ufp_set(self.device, unifi_value)
|
||||
|
||||
async def async_set_doorbell_message(self, message: str, duration: str) -> None:
|
||||
"""Set LCD Message on Doorbell display."""
|
||||
|
||||
ir.async_create_issue(
|
||||
self.hass,
|
||||
DOMAIN,
|
||||
"deprecated_service_set_doorbell_message",
|
||||
breaks_in_ha_version="2023.3.0",
|
||||
is_fixable=True,
|
||||
is_persistent=True,
|
||||
severity=ir.IssueSeverity.WARNING,
|
||||
translation_placeholders={
|
||||
"link": (
|
||||
"https://www.home-assistant.io/integrations"
|
||||
"/text#service-textset_value"
|
||||
)
|
||||
},
|
||||
translation_key="deprecated_service_set_doorbell_message",
|
||||
)
|
||||
|
||||
if self.entity_description.device_class != DEVICE_CLASS_LCD_MESSAGE:
|
||||
raise HomeAssistantError("Not a doorbell text select entity")
|
||||
|
||||
assert isinstance(self.device, Camera)
|
||||
reset_at = None
|
||||
timeout_msg = ""
|
||||
if duration.isnumeric():
|
||||
reset_at = utcnow() + timedelta(minutes=int(duration))
|
||||
timeout_msg = f" with timeout of {duration} minute(s)"
|
||||
|
||||
_LOGGER.debug(
|
||||
'Setting message for %s to "%s"%s',
|
||||
self.device.display_name,
|
||||
message,
|
||||
timeout_msg,
|
||||
)
|
||||
await self.device.set_lcd_text(
|
||||
DoorbellMessageType.CUSTOM_MESSAGE, message, reset_at=reset_at
|
||||
)
|
||||
|
@ -52,38 +52,6 @@ set_default_doorbell_text:
|
||||
required: true
|
||||
selector:
|
||||
text:
|
||||
set_doorbell_message:
|
||||
name: Set Doorbell message
|
||||
description: >
|
||||
Use to dynamically set the message on a Doorbell LCD screen. This service should only be used to set dynamic messages (i.e. setting the current outdoor temperature on your Doorbell). Static messages should still be set using the Select entity and can be added/removed using the add_doorbell_text/remove_doorbell_text services.
|
||||
fields:
|
||||
entity_id:
|
||||
name: Doorbell Text
|
||||
description: The Doorbell Text select entity for your Doorbell.
|
||||
example: "select.front_doorbell_camera_doorbell_text"
|
||||
required: true
|
||||
selector:
|
||||
entity:
|
||||
integration: unifiprotect
|
||||
domain: select
|
||||
message:
|
||||
name: Message to display
|
||||
description: The message you would like to display on the LCD screen of your Doorbell. Must be less than 30 characters.
|
||||
example: "Welcome | 09:23 | 25°C"
|
||||
required: true
|
||||
selector:
|
||||
text:
|
||||
duration:
|
||||
name: Duration
|
||||
description: Number of minutes to display the message for before returning to the default message. The default is to not expire.
|
||||
example: 5
|
||||
selector:
|
||||
number:
|
||||
min: 1
|
||||
max: 120
|
||||
step: 1
|
||||
mode: slider
|
||||
unit_of_measurement: minutes
|
||||
set_chime_paired_doorbells:
|
||||
name: Set Chime Paired Doorbells
|
||||
description: >
|
||||
|
@ -3,10 +3,8 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from copy import copy
|
||||
from datetime import datetime, timedelta
|
||||
from unittest.mock import AsyncMock, Mock, patch
|
||||
from unittest.mock import AsyncMock, Mock
|
||||
|
||||
import pytest
|
||||
from pyunifiprotect.data import (
|
||||
Camera,
|
||||
DoorbellMessageType,
|
||||
@ -22,21 +20,15 @@ from pyunifiprotect.data import (
|
||||
from pyunifiprotect.data.nvr import DoorbellMessage
|
||||
|
||||
from homeassistant.components.select import ATTR_OPTIONS
|
||||
from homeassistant.components.unifiprotect.const import (
|
||||
ATTR_DURATION,
|
||||
ATTR_MESSAGE,
|
||||
DEFAULT_ATTRIBUTION,
|
||||
)
|
||||
from homeassistant.components.unifiprotect.const import DEFAULT_ATTRIBUTION
|
||||
from homeassistant.components.unifiprotect.select import (
|
||||
CAMERA_SELECTS,
|
||||
LIGHT_MODE_OFF,
|
||||
LIGHT_SELECTS,
|
||||
SERVICE_SET_DOORBELL_MESSAGE,
|
||||
VIEWER_SELECTS,
|
||||
)
|
||||
from homeassistant.const import ATTR_ATTRIBUTION, ATTR_ENTITY_ID, ATTR_OPTION, Platform
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import HomeAssistantError
|
||||
from homeassistant.helpers import entity_registry as er
|
||||
|
||||
from .utils import (
|
||||
@ -547,99 +539,3 @@ async def test_select_set_option_viewer(
|
||||
)
|
||||
|
||||
viewer.set_liveview.assert_called_once_with(liveview)
|
||||
|
||||
|
||||
async def test_select_service_doorbell_invalid(
|
||||
hass: HomeAssistant, ufp: MockUFPFixture, doorbell: Camera
|
||||
) -> None:
|
||||
"""Test Doorbell Text service (invalid)."""
|
||||
|
||||
await init_entry(hass, ufp, [doorbell])
|
||||
assert_entity_counts(hass, Platform.SELECT, 4, 4)
|
||||
|
||||
_, entity_id = ids_from_device_description(
|
||||
Platform.SELECT, doorbell, CAMERA_SELECTS[1]
|
||||
)
|
||||
|
||||
doorbell.__fields__["set_lcd_text"] = Mock(final=False)
|
||||
doorbell.set_lcd_text = AsyncMock()
|
||||
|
||||
with pytest.raises(HomeAssistantError):
|
||||
await hass.services.async_call(
|
||||
"unifiprotect",
|
||||
SERVICE_SET_DOORBELL_MESSAGE,
|
||||
{ATTR_ENTITY_ID: entity_id, ATTR_MESSAGE: "Test"},
|
||||
blocking=True,
|
||||
)
|
||||
|
||||
assert not doorbell.set_lcd_text.called
|
||||
|
||||
|
||||
async def test_select_service_doorbell_success(
|
||||
hass: HomeAssistant, ufp: MockUFPFixture, doorbell: Camera
|
||||
) -> None:
|
||||
"""Test Doorbell Text service (success)."""
|
||||
|
||||
await init_entry(hass, ufp, [doorbell])
|
||||
assert_entity_counts(hass, Platform.SELECT, 4, 4)
|
||||
|
||||
_, entity_id = ids_from_device_description(
|
||||
Platform.SELECT, doorbell, CAMERA_SELECTS[2]
|
||||
)
|
||||
|
||||
doorbell.__fields__["set_lcd_text"] = Mock(final=False)
|
||||
doorbell.set_lcd_text = AsyncMock()
|
||||
|
||||
await hass.services.async_call(
|
||||
"unifiprotect",
|
||||
SERVICE_SET_DOORBELL_MESSAGE,
|
||||
{
|
||||
ATTR_ENTITY_ID: entity_id,
|
||||
ATTR_MESSAGE: "Test",
|
||||
},
|
||||
blocking=True,
|
||||
)
|
||||
|
||||
doorbell.set_lcd_text.assert_called_once_with(
|
||||
DoorbellMessageType.CUSTOM_MESSAGE, "Test", reset_at=None
|
||||
)
|
||||
|
||||
|
||||
@patch("homeassistant.components.unifiprotect.select.utcnow")
|
||||
async def test_select_service_doorbell_with_reset(
|
||||
mock_now,
|
||||
hass: HomeAssistant,
|
||||
ufp: MockUFPFixture,
|
||||
doorbell: Camera,
|
||||
fixed_now: datetime,
|
||||
) -> None:
|
||||
"""Test Doorbell Text service (success with reset time)."""
|
||||
|
||||
mock_now.return_value = fixed_now
|
||||
|
||||
_, entity_id = ids_from_device_description(
|
||||
Platform.SELECT, doorbell, CAMERA_SELECTS[2]
|
||||
)
|
||||
|
||||
await init_entry(hass, ufp, [doorbell])
|
||||
assert_entity_counts(hass, Platform.SELECT, 4, 4)
|
||||
|
||||
doorbell.__fields__["set_lcd_text"] = Mock(final=False)
|
||||
doorbell.set_lcd_text = AsyncMock()
|
||||
|
||||
await hass.services.async_call(
|
||||
"unifiprotect",
|
||||
SERVICE_SET_DOORBELL_MESSAGE,
|
||||
{
|
||||
ATTR_ENTITY_ID: entity_id,
|
||||
ATTR_MESSAGE: "Test",
|
||||
ATTR_DURATION: 60,
|
||||
},
|
||||
blocking=True,
|
||||
)
|
||||
|
||||
doorbell.set_lcd_text.assert_called_once_with(
|
||||
DoorbellMessageType.CUSTOM_MESSAGE,
|
||||
"Test",
|
||||
reset_at=fixed_now + timedelta(minutes=60),
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user