Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Tweak geniushub and bump client to v0.6.26 (#26640)
* use state attribute rather than type * HA style tweaks * small tweak * bump client * add more device_state_attributes * bump client * small tweak * bump client for concurrent IO * force snake_case, and refactor (consolidate) Devices/Zones * force snake_case, and refactor (consolidate) Devices/Zones 2 * force snake_case, and refactor (consolidate) Devices/Zones 3 * refactor last_comms / wakeup_interval check * movement sensor is dynamic, and tweaking * tweak * bump client to v0.6.20 * dummy * dummy 2 * bump client to handle another edge case * use entity_id fro zones * small tweak * bump client to 0.6.22 * add recursive snake_case converter * fix regression * fix regression 2 * fix regression 3 * remove Awaitables * don't dynamically create function every scan_interval * log kast_comms as localtime, delint dt_util * add sensors fro v1 API * tweak entity_id * bump client * bump client to v0.6.24 * bump client to v0.6.25 * explicit device attrs, dt as UTC * add unique_id, remove entity_id * Bump client to 0.6.26 - add Hub UID * remove convert_dict() * add mac_address (uid) for v1 API * tweak var names * add UID.upper() to avoid unwanted unique_id changes * Update homeassistant/components/geniushub/__init__.py Co-Authored-By: Martin Hjelmare <marhje52@kth.se> * Update homeassistant/components/geniushub/__init__.py Co-Authored-By: Martin Hjelmare <marhje52@kth.se> * remove underscores * refactor for broker * ready now * validate UID (MAC address) * move uid to broker * use existing constant * pass client to broker
- Loading branch information
Showing
7 changed files
with
284 additions
and
256 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,52 +1,45 @@ | ||
"""Support for Genius Hub binary_sensor devices.""" | ||
from typing import Any, Dict | ||
|
||
from homeassistant.components.binary_sensor import BinarySensorDevice | ||
from homeassistant.util.dt import utc_from_timestamp | ||
from homeassistant.helpers.typing import ConfigType, HomeAssistantType | ||
|
||
from . import DOMAIN, GeniusEntity | ||
from . import DOMAIN, GeniusDevice | ||
|
||
GH_IS_SWITCH = ["Dual Channel Receiver", "Electric Switch", "Smart Plug"] | ||
GH_STATE_ATTR = "outputOnOff" | ||
|
||
|
||
async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): | ||
async def async_setup_platform( | ||
hass: HomeAssistantType, config: ConfigType, async_add_entities, discovery_info=None | ||
) -> None: | ||
"""Set up the Genius Hub sensor entities.""" | ||
client = hass.data[DOMAIN]["client"] | ||
if discovery_info is None: | ||
return | ||
|
||
broker = hass.data[DOMAIN]["broker"] | ||
|
||
switches = [ | ||
GeniusBinarySensor(d) for d in client.device_objs if d.type[:21] in GH_IS_SWITCH | ||
GeniusBinarySensor(broker, d, GH_STATE_ATTR) | ||
for d in broker.client.device_objs | ||
if GH_STATE_ATTR in d.data["state"] | ||
] | ||
|
||
async_add_entities(switches) | ||
async_add_entities(switches, update_before_add=True) | ||
|
||
|
||
class GeniusBinarySensor(GeniusEntity, BinarySensorDevice): | ||
class GeniusBinarySensor(GeniusDevice, BinarySensorDevice): | ||
"""Representation of a Genius Hub binary_sensor.""" | ||
|
||
def __init__(self, device) -> None: | ||
def __init__(self, broker, device, state_attr) -> None: | ||
"""Initialize the binary sensor.""" | ||
super().__init__() | ||
super().__init__(broker, device) | ||
|
||
self._state_attr = state_attr | ||
|
||
self._device = device | ||
if device.type[:21] == "Dual Channel Receiver": | ||
self._name = f"Dual Channel Receiver {device.id}" | ||
self._name = f"{device.type[:21]} {device.id}" | ||
else: | ||
self._name = f"{device.type} {device.id}" | ||
|
||
@property | ||
def is_on(self) -> bool: | ||
"""Return the status of the sensor.""" | ||
return self._device.data["state"]["outputOnOff"] | ||
|
||
@property | ||
def device_state_attributes(self) -> Dict[str, Any]: | ||
"""Return the device state attributes.""" | ||
attrs = {} | ||
attrs["assigned_zone"] = self._device.data["assignedZones"][0]["name"] | ||
|
||
# pylint: disable=protected-access | ||
last_comms = self._device._raw["childValues"]["lastComms"]["val"] | ||
if last_comms != 0: | ||
attrs["last_comms"] = utc_from_timestamp(last_comms).isoformat() | ||
|
||
return {**attrs} | ||
return self._device.data["state"][self._state_attr] |
Oops, something went wrong.