diff --git a/homeassistant/components/sensor/zwave.py b/homeassistant/components/sensor/zwave.py index b39ef5cbb32..87db5c3122c 100644 --- a/homeassistant/components/sensor/zwave.py +++ b/homeassistant/components/sensor/zwave.py @@ -4,11 +4,14 @@ homeassistant.components.sensor.zwave Interfaces with Z-Wave sensors. """ +from openzwave.network import ZWaveNetwork +from pydispatch import dispatcher + import homeassistant.components.zwave as zwave from homeassistant.helpers import Device from homeassistant.const import ( - ATTR_FRIENDLY_NAME, ATTR_BATTERY_LEVEL, ATTR_UNIT_OF_MEASUREMENT, - TEMP_CELCIUS, TEMP_FAHRENHEIT, ATTR_LOCATION, STATE_ON, STATE_OFF) + ATTR_BATTERY_LEVEL, ATTR_UNIT_OF_MEASUREMENT, STATE_ON, STATE_OFF, + TEMP_CELCIUS, TEMP_FAHRENHEIT, ATTR_LOCATION) class ZWaveSensor(Device): @@ -17,6 +20,14 @@ class ZWaveSensor(Device): self._value = sensor_value self._node = sensor_value.node + dispatcher.connect( + self._value_changed, ZWaveNetwork.SIGNAL_VALUE_CHANGED) + + @property + def should_poll(self): + """ False because we will push our own state to HA when changed. """ + return False + @property def unique_id(self): """ Returns a unique id. """ @@ -39,7 +50,6 @@ class ZWaveSensor(Device): def state_attributes(self): """ Returns the state attributes. """ attrs = { - ATTR_FRIENDLY_NAME: self.name, zwave.ATTR_NODE_ID: self._node.node_id, } @@ -65,6 +75,11 @@ class ZWaveSensor(Device): """ Unit if sensor has one. """ return self._value.units + def _value_changed(self, value): + """ Called when a value has changed on the network. """ + if self._value.value_id == value.value_id: + self.update_ha_state() + # pylint: disable=too-few-public-methods class ZWaveBinarySensor(ZWaveSensor):