Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Small cleanup in Plugwise switch #65845

Merged
merged 1 commit into from
Feb 6, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 30 additions & 29 deletions homeassistant/components/plugwise/switch.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
"""Plugwise Switch component for HomeAssistant."""
from __future__ import annotations

from typing import Any

from plugwise import Smile
from plugwise.exceptions import PlugwiseException

from homeassistant.components.switch import SwitchEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator

from .const import COORDINATOR, DOMAIN, LOGGER, SWITCH_ICON
from .entity import PlugwiseEntity
Expand All @@ -15,12 +21,6 @@ async def async_setup_entry(
config_entry: ConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the Smile switches from a config entry."""
# PLACEHOLDER USB entry setup
return await async_setup_entry_gateway(hass, config_entry, async_add_entities)


async def async_setup_entry_gateway(hass, config_entry, async_add_entities):
"""Set up the Smile switches from a config entry."""
api = hass.data[DOMAIN][config_entry.entry_id]["api"]
coordinator = hass.data[DOMAIN][config_entry.entry_id][COORDINATOR]
Expand Down Expand Up @@ -55,60 +55,61 @@ async def async_setup_entry_gateway(hass, config_entry, async_add_entities):
class GwSwitch(PlugwiseEntity, SwitchEntity):
"""Representation of a Plugwise plug."""

def __init__(self, api, coordinator, name, dev_id, members, model):
_attr_icon = SWITCH_ICON

def __init__(
self,
api: Smile,
coordinator: DataUpdateCoordinator,
name: str,
dev_id: str,
members: list[str] | None,
model: str | None,
) -> None:
"""Set up the Plugwise API."""
super().__init__(api, coordinator, name, dev_id)
self._attr_unique_id = f"{dev_id}-plug"

self._members = members
self._model = model

self._is_on = False
self._icon = SWITCH_ICON

@property
def is_on(self):
"""Return true if device is on."""
return self._is_on
self._attr_is_on = False

@property
def icon(self):
"""Return the icon of this entity."""
return self._icon

async def async_turn_on(self, **kwargs):
async def async_turn_on(self, **kwargs: Any) -> None:
"""Turn the device on."""
try:
state_on = await self._api.set_relay_state(
self._dev_id, self._members, "on"
)
if state_on:
self._is_on = True
self.async_write_ha_state()
except PlugwiseException:
LOGGER.error("Error while communicating to device")
else:
if state_on:
self._attr_is_on = True
self.async_write_ha_state()

async def async_turn_off(self, **kwargs):
async def async_turn_off(self, **kwargs: Any) -> None:
"""Turn the device off."""
try:
state_off = await self._api.set_relay_state(
self._dev_id, self._members, "off"
)
if state_off:
self._is_on = False
self.async_write_ha_state()
except PlugwiseException:
LOGGER.error("Error while communicating to device")
else:
if state_off:
self._attr_is_on = False
self.async_write_ha_state()

@callback
def _async_process_data(self):
def _async_process_data(self) -> None:
"""Update the data from the Plugs."""
if not (data := self._api.get_device_data(self._dev_id)):
LOGGER.error("Received no data for device %s", self._name)
self.async_write_ha_state()
return

if "relay" in data:
self._is_on = data["relay"]
self._attr_is_on = data["relay"]

self.async_write_ha_state()