Files

89 lines
2.6 KiB
Python

"""Platform for switch integration."""
import logging
from typing import Any, override
from triggercmd import client, ha
from homeassistant.components.switch import SwitchEntity
from homeassistant.core import HomeAssistant
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from . import TriggercmdConfigEntry
from .const import DOMAIN
_LOGGER = logging.getLogger(__name__)
async def async_setup_entry(
hass: HomeAssistant,
config_entry: TriggercmdConfigEntry,
async_add_entities: AddConfigEntryEntitiesCallback,
) -> None:
"""Add switch for passed config_entry in HA."""
hub = config_entry.runtime_data
async_add_entities(TRIGGERcmdSwitch(trigger) for trigger in hub.triggers)
class TRIGGERcmdSwitch(SwitchEntity):
"""Representation of a Switch."""
_attr_has_entity_name = True
_attr_assumed_state = True
_attr_should_poll = False
computer_id: str
trigger_id: str
firmware_version: str
model: str
hub: ha.Hub
def __init__(self, trigger: TRIGGERcmdSwitch) -> None:
"""Initialize the switch."""
self._switch = trigger
self._attr_is_on = False
self._attr_unique_id = f"{trigger.computer_id}.{trigger.trigger_id}"
self._attr_name = trigger.trigger_id
self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, trigger.computer_id)},
name=trigger.computer_id.capitalize(),
sw_version=trigger.firmware_version,
model=trigger.model,
manufacturer=trigger.hub.manufacturer,
)
@property
@override
def available(self) -> bool:
"""Return True if hub is available."""
return self._switch.hub.online
@override
async def async_turn_on(self, **kwargs: Any) -> None:
"""Turn the switch on."""
await self.trigger("on")
self._attr_is_on = True
self.async_write_ha_state()
@override
async def async_turn_off(self, **kwargs: Any) -> None:
"""Turn the switch off."""
await self.trigger("off")
self._attr_is_on = False
self.async_write_ha_state()
async def trigger(self, params: str):
"""Trigger the command."""
r = await client.async_trigger(
self._switch.hub.token,
{
"computer": self._switch.computer_id,
"trigger": self._switch.trigger_id,
"params": params,
"sender": "Home Assistant",
},
self._switch.hub.httpx_client,
)
_LOGGER.debug("TRIGGERcmd trigger response: %s", r.json())