diff --git a/homeassistant/components/skybell/binary_sensor.py b/homeassistant/components/skybell/binary_sensor.py index 7e075fba38a..c6e8200c812 100644 --- a/homeassistant/components/skybell/binary_sensor.py +++ b/homeassistant/components/skybell/binary_sensor.py @@ -1,5 +1,8 @@ """Binary sensor support for the Skybell HD Doorbell.""" +from __future__ import annotations + from datetime import timedelta +from typing import NamedTuple import voluptuous as vol @@ -16,10 +19,26 @@ from . import DEFAULT_ENTITY_NAMESPACE, DOMAIN as SKYBELL_DOMAIN, SkybellDevice SCAN_INTERVAL = timedelta(seconds=10) -# Sensor types: Name, device_class, event + +class SkybellBinarySensorMetadata(NamedTuple): + """Metadata for an individual Skybell binary_sensor.""" + + name: str + device_class: str + event: str + + SENSOR_TYPES = { - "button": ["Button", DEVICE_CLASS_OCCUPANCY, "device:sensor:button"], - "motion": ["Motion", DEVICE_CLASS_MOTION, "device:sensor:motion"], + "button": SkybellBinarySensorMetadata( + "Button", + device_class=DEVICE_CLASS_OCCUPANCY, + event="device:sensor:button", + ), + "motion": SkybellBinarySensorMetadata( + "Motion", + device_class=DEVICE_CLASS_MOTION, + event="device:sensor:motion", + ), } PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( @@ -53,18 +72,12 @@ class SkybellBinarySensor(SkybellDevice, BinarySensorEntity): """Initialize a binary sensor for a Skybell device.""" super().__init__(device) self._sensor_type = sensor_type - self._name = "{} {}".format( - self._device.name, SENSOR_TYPES[self._sensor_type][0] - ) - self._device_class = SENSOR_TYPES[self._sensor_type][1] + self._metadata = SENSOR_TYPES[self._sensor_type] + self._attr_name = f"{self._device.name} {self._metadata.name}" + self._device_class = self._metadata.device_class self._event = {} self._state = None - @property - def name(self): - """Return the name of the sensor.""" - return self._name - @property def is_on(self): """Return True if the binary sensor is on.""" @@ -88,7 +101,7 @@ class SkybellBinarySensor(SkybellDevice, BinarySensorEntity): """Get the latest data and updates the state.""" super().update() - event = self._device.latest(SENSOR_TYPES[self._sensor_type][2]) + event = self._device.latest(self._metadata.event) self._state = bool(event and event.get("id") != self._event.get("id")) diff --git a/homeassistant/components/skybell/switch.py b/homeassistant/components/skybell/switch.py index 1ad13af9249..5f9706de4d1 100644 --- a/homeassistant/components/skybell/switch.py +++ b/homeassistant/components/skybell/switch.py @@ -1,4 +1,8 @@ """Switch support for the Skybell HD Doorbell.""" +from __future__ import annotations + +from typing import NamedTuple + import voluptuous as vol from homeassistant.components.switch import PLATFORM_SCHEMA, SwitchEntity @@ -7,10 +11,20 @@ import homeassistant.helpers.config_validation as cv from . import DEFAULT_ENTITY_NAMESPACE, DOMAIN as SKYBELL_DOMAIN, SkybellDevice -# Switch types: Name + +class SkybellSwitchMetadata(NamedTuple): + """Metadata for an individual Skybell switch.""" + + name: str + + SWITCH_TYPES = { - "do_not_disturb": ["Do Not Disturb"], - "motion_sensor": ["Motion Sensor"], + "do_not_disturb": SkybellSwitchMetadata( + "Do Not Disturb", + ), + "motion_sensor": SkybellSwitchMetadata( + "Motion Sensor", + ), } PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( @@ -44,14 +58,8 @@ class SkybellSwitch(SkybellDevice, SwitchEntity): """Initialize a light for a Skybell device.""" super().__init__(device) self._switch_type = switch_type - self._name = "{} {}".format( - self._device.name, SWITCH_TYPES[self._switch_type][0] - ) - - @property - def name(self): - """Return the name of the sensor.""" - return self._name + metadata = SWITCH_TYPES[self._switch_type] + self._attr_name = f"{self._device.name} {metadata.name}" def turn_on(self, **kwargs): """Turn on the switch."""