Fix KNX async I/O (#4267)

This commit is contained in:
Paulus Schoutsen 2016-11-08 21:00:33 -08:00 committed by GitHub
parent 1e0025acae
commit 6d0e08cf7d
3 changed files with 25 additions and 11 deletions

View File

@ -56,6 +56,8 @@ class KNXThermostat(KNXMultiAddressDevice, ClimateDevice):
self._unit_of_measurement = TEMP_CELSIUS # KNX always used celsius self._unit_of_measurement = TEMP_CELSIUS # KNX always used celsius
self._away = False # not yet supported self._away = False # not yet supported
self._is_fan_on = False # not yet supported self._is_fan_on = False # not yet supported
self._current_temp = None
self._target_temp = None
@property @property
def should_poll(self): def should_poll(self):
@ -70,16 +72,12 @@ class KNXThermostat(KNXMultiAddressDevice, ClimateDevice):
@property @property
def current_temperature(self): def current_temperature(self):
"""Return the current temperature.""" """Return the current temperature."""
from knxip.conversion import knx2_to_float return self._current_temp
return knx2_to_float(self.value('temperature'))
@property @property
def target_temperature(self): def target_temperature(self):
"""Return the temperature we try to reach.""" """Return the temperature we try to reach."""
from knxip.conversion import knx2_to_float return self._target_temp
return knx2_to_float(self.value('setpoint'))
def set_temperature(self, **kwargs): def set_temperature(self, **kwargs):
"""Set new target temperature.""" """Set new target temperature."""
@ -94,3 +92,12 @@ class KNXThermostat(KNXMultiAddressDevice, ClimateDevice):
def set_operation_mode(self, operation_mode): def set_operation_mode(self, operation_mode):
"""Set operation mode.""" """Set operation mode."""
raise NotImplementedError() raise NotImplementedError()
def update(self):
"""Update KNX climate."""
from knxip.conversion import knx2_to_float
super().update()
self._current_temp = knx2_to_float(self.value('temperature'))
self._target_temp = knx2_to_float(self.value('setpoint'))

View File

@ -161,8 +161,6 @@ class KNXGroupAddress(Entity):
@property @property
def is_on(self): def is_on(self):
"""Return True if the value is not 0 is on, else False.""" """Return True if the value is not 0 is on, else False."""
if self.should_poll:
self.update()
return self._state != 0 return self._state != 0
@property @property

View File

@ -113,15 +113,24 @@ class KNXSensorFloatClass(KNXGroupAddress, KNXSensorBaseClass):
self._unit_of_measurement = unit_of_measurement self._unit_of_measurement = unit_of_measurement
self._minimum_value = minimum_sensor_value self._minimum_value = minimum_sensor_value
self._maximum_value = maximum_sensor_value self._maximum_value = maximum_sensor_value
self._value = None
KNXGroupAddress.__init__(self, hass, config) KNXGroupAddress.__init__(self, hass, config)
@property @property
def state(self): def state(self):
"""Return the Value of the KNX Sensor.""" """Return the Value of the KNX Sensor."""
return self._value
def update(self):
"""Update KNX sensor."""
from knxip.conversion import knx2_to_float
super().update()
self._value = None
if self._data: if self._data:
from knxip.conversion import knx2_to_float
value = knx2_to_float(self._data) value = knx2_to_float(self._data)
if self._minimum_value <= value <= self._maximum_value: if self._minimum_value <= value <= self._maximum_value:
return value self._value = value
return None