Improve ISY994 NodeServer sorting and format sensor display values (#42050)

This commit is contained in:
shbatm 2020-10-18 13:33:45 -05:00 committed by GitHub
parent a17da16dd2
commit c4821bfa74
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 3 deletions

View file

@ -162,6 +162,9 @@ async def async_setup_entry(
if not isy.connected: if not isy.connected:
return False return False
# Trigger a status update for all nodes, not done automatically in PyISY v2.x
await hass.async_add_executor_job(isy.nodes.update)
_categorize_nodes(hass_isy_data, isy.nodes, ignore_identifier, sensor_identifier) _categorize_nodes(hass_isy_data, isy.nodes, ignore_identifier, sensor_identifier)
_categorize_programs(hass_isy_data, isy.programs) _categorize_programs(hass_isy_data, isy.programs)
_categorize_variables(hass_isy_data, isy.variables, variable_identifier) _categorize_variables(hass_isy_data, isy.variables, variable_identifier)

View file

@ -200,7 +200,7 @@ UOM_ON_OFF = "2"
# Z-Wave Categories: https://www.universal-devices.com/developers/wsdk/5.0.4/4_fam.xml # Z-Wave Categories: https://www.universal-devices.com/developers/wsdk/5.0.4/4_fam.xml
NODE_FILTERS = { NODE_FILTERS = {
BINARY_SENSOR: { BINARY_SENSOR: {
FILTER_UOM: [], FILTER_UOM: [UOM_ON_OFF],
FILTER_STATES: [], FILTER_STATES: [],
FILTER_NODE_DEF_ID: [ FILTER_NODE_DEF_ID: [
"BinaryAlarm", "BinaryAlarm",
@ -282,7 +282,7 @@ NODE_FILTERS = {
FILTER_ZWAVE_CAT: ["109", "119"], FILTER_ZWAVE_CAT: ["109", "119"],
}, },
SWITCH: { SWITCH: {
FILTER_UOM: [UOM_ON_OFF, "78"], FILTER_UOM: ["78"],
FILTER_STATES: ["on", "off"], FILTER_STATES: ["on", "off"],
FILTER_NODE_DEF_ID: [ FILTER_NODE_DEF_ID: [
"AlertModuleArmed", "AlertModuleArmed",
@ -322,6 +322,7 @@ NODE_FILTERS = {
UOM_FRIENDLY_NAME = { UOM_FRIENDLY_NAME = {
"1": "A", "1": "A",
UOM_ON_OFF: "", # Binary, no unit
"3": f"btu/{TIME_HOURS}", "3": f"btu/{TIME_HOURS}",
"4": TEMP_CELSIUS, "4": TEMP_CELSIUS,
"5": LENGTH_CENTIMETERS, "5": LENGTH_CENTIMETERS,

View file

@ -15,6 +15,8 @@ from .const import (
ISY994_VARIABLES, ISY994_VARIABLES,
UOM_DOUBLE_TEMP, UOM_DOUBLE_TEMP,
UOM_FRIENDLY_NAME, UOM_FRIENDLY_NAME,
UOM_INDEX,
UOM_ON_OFF,
UOM_TO_STATES, UOM_TO_STATES,
) )
from .entity import ISYEntity, ISYNodeEntity from .entity import ISYEntity, ISYNodeEntity
@ -58,6 +60,9 @@ class ISYSensorEntity(ISYNodeEntity):
if isy_states: if isy_states:
return isy_states return isy_states
if uom in [UOM_ON_OFF, UOM_INDEX]:
return uom
return UOM_FRIENDLY_NAME.get(uom) return UOM_FRIENDLY_NAME.get(uom)
@property @property
@ -74,6 +79,9 @@ class ISYSensorEntity(ISYNodeEntity):
if isinstance(uom, dict): if isinstance(uom, dict):
return uom.get(value, value) return uom.get(value, value)
if uom in [UOM_INDEX, UOM_ON_OFF]:
return self._node.formatted
# Handle ISY precision and rounding # Handle ISY precision and rounding
value = convert_isy_value_to_hass(value, uom, self._node.prec) value = convert_isy_value_to_hass(value, uom, self._node.prec)
@ -88,7 +96,7 @@ class ISYSensorEntity(ISYNodeEntity):
"""Get the Home Assistant unit of measurement for the device.""" """Get the Home Assistant unit of measurement for the device."""
raw_units = self.raw_unit_of_measurement raw_units = self.raw_unit_of_measurement
# Check if this is a known index pair UOM # Check if this is a known index pair UOM
if isinstance(raw_units, dict): if isinstance(raw_units, dict) or raw_units in [UOM_ON_OFF, UOM_INDEX]:
return None return None
if raw_units in (TEMP_FAHRENHEIT, TEMP_CELSIUS, UOM_DOUBLE_TEMP): if raw_units in (TEMP_FAHRENHEIT, TEMP_CELSIUS, UOM_DOUBLE_TEMP):
return self.hass.config.units.temperature_unit return self.hass.config.units.temperature_unit