Huge ISY994 platform cleanup, fixes support for 5.0.10 firmware (#11243)
* Huge ISY994 platform cleanup, fixes support for 5.0.10 firmware # * No more globals - store on hass.data # * Parent ISY994 component handles categorizing nodes in to Hass components, rather than each individual domain filtering all nodes themselves # * Remove hidden string, replace with ignore string. Hidden should be done via the customize block; ignore fully prevents the node from getting a Hass entity # * Removed a few unused methods in the ISYDevice class # * Cleaned up the hostname parsing # * Removed broken logic in the fan Program component. It was setting properties that have no setters # * Added the missing SUPPORTED_FEATURES to the fan component to indicate that it can set speed # * Added better error handling and a log warning when an ISY994 program entity fails to initialize # * Cleaned up a few instances of unecessarily complicated logic paths, and other cases of unnecessary logic that is already handled by base classes * Use `super()` instead of explicit base class calls * Move `hass` argument to first position * Use str.format instead of string addition * Move program structure building and validation to component Removes the need for a bunch of duplicate exception handling in each individual platform * Fix climate nodes, fix climate names, add config to disable climate Sensor platform was crashing when the ISY reported climate nodes. Logic has been fixed. Also added a config option to prevent climate sensors from getting imported from the ISY. Also replace the underscore from climate node names with spaces so they default to friendly names. * Space missing in error message * Fix string comparison to use `==` * Explicitly check for attributes rather than catch AttributeError Also removes two stray debug lines * Remove null checks on hass.data, as they are always null at this point
This commit is contained in:
parent
a59b02b6b4
commit
d687bc073e
8 changed files with 358 additions and 348 deletions
|
@ -7,9 +7,11 @@ https://home-assistant.io/components/sensor.isy994/
|
|||
import logging
|
||||
from typing import Callable # noqa
|
||||
|
||||
import homeassistant.components.isy994 as isy
|
||||
from homeassistant.components.sensor import DOMAIN
|
||||
from homeassistant.components.isy994 import (ISY994_NODES, ISY994_WEATHER,
|
||||
ISYDevice)
|
||||
from homeassistant.const import (
|
||||
TEMP_CELSIUS, TEMP_FAHRENHEIT, STATE_OFF, STATE_ON, UNIT_UV_INDEX)
|
||||
TEMP_CELSIUS, TEMP_FAHRENHEIT, UNIT_UV_INDEX)
|
||||
from homeassistant.helpers.typing import ConfigType
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
@ -232,37 +234,29 @@ UOM_TO_STATES = {
|
|||
}
|
||||
}
|
||||
|
||||
BINARY_UOM = ['2', '78']
|
||||
|
||||
|
||||
# pylint: disable=unused-argument
|
||||
def setup_platform(hass, config: ConfigType,
|
||||
add_devices: Callable[[list], None], discovery_info=None):
|
||||
"""Set up the ISY994 sensor platform."""
|
||||
if isy.ISY is None or not isy.ISY.connected:
|
||||
_LOGGER.error("A connection has not been made to the ISY controller")
|
||||
return False
|
||||
|
||||
devices = []
|
||||
|
||||
for node in isy.SENSOR_NODES:
|
||||
if (not node.uom or node.uom[0] not in BINARY_UOM) and \
|
||||
STATE_OFF not in node.uom and STATE_ON not in node.uom:
|
||||
_LOGGER.debug("Loading %s", node.name)
|
||||
devices.append(ISYSensorDevice(node))
|
||||
for node in hass.data[ISY994_NODES][DOMAIN]:
|
||||
_LOGGER.debug("Loading %s", node.name)
|
||||
devices.append(ISYSensorDevice(node))
|
||||
|
||||
for node in isy.WEATHER_NODES:
|
||||
for node in hass.data[ISY994_WEATHER]:
|
||||
devices.append(ISYWeatherDevice(node))
|
||||
|
||||
add_devices(devices)
|
||||
|
||||
|
||||
class ISYSensorDevice(isy.ISYDevice):
|
||||
class ISYSensorDevice(ISYDevice):
|
||||
"""Representation of an ISY994 sensor device."""
|
||||
|
||||
def __init__(self, node) -> None:
|
||||
"""Initialize the ISY994 sensor device."""
|
||||
isy.ISYDevice.__init__(self, node)
|
||||
super().__init__(node)
|
||||
|
||||
@property
|
||||
def raw_unit_of_measurement(self) -> str:
|
||||
|
@ -316,14 +310,12 @@ class ISYSensorDevice(isy.ISYDevice):
|
|||
return raw_units
|
||||
|
||||
|
||||
class ISYWeatherDevice(isy.ISYDevice):
|
||||
class ISYWeatherDevice(ISYDevice):
|
||||
"""Representation of an ISY994 weather device."""
|
||||
|
||||
_domain = 'sensor'
|
||||
|
||||
def __init__(self, node) -> None:
|
||||
"""Initialize the ISY994 weather device."""
|
||||
isy.ISYDevice.__init__(self, node)
|
||||
super().__init__(node)
|
||||
|
||||
@property
|
||||
def unique_id(self) -> str:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue