74 lines
2.1 KiB
Python
74 lines
2.1 KiB
Python
|
"""Support for Dyson Pure Cool Link Sensors."""
|
||
|
import logging
|
||
|
import asyncio
|
||
|
|
||
|
from homeassistant.const import STATE_UNKNOWN
|
||
|
from homeassistant.components.dyson import DYSON_DEVICES
|
||
|
|
||
|
from homeassistant.helpers.entity import Entity
|
||
|
|
||
|
DEPENDENCIES = ['dyson']
|
||
|
|
||
|
SENSOR_UNITS = {'filter_life': 'hours'}
|
||
|
|
||
|
_LOGGER = logging.getLogger(__name__)
|
||
|
|
||
|
|
||
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||
|
"""Set up the Dyson Sensors."""
|
||
|
_LOGGER.info("Creating new Dyson fans")
|
||
|
devices = []
|
||
|
# Get Dyson Devices from parent component
|
||
|
for device in hass.data[DYSON_DEVICES]:
|
||
|
devices.append(DysonFilterLifeSensor(hass, device))
|
||
|
add_devices(devices)
|
||
|
|
||
|
|
||
|
class DysonFilterLifeSensor(Entity):
|
||
|
"""Representation of Dyson filter life sensor (in hours)."""
|
||
|
|
||
|
def __init__(self, hass, device):
|
||
|
"""Create a new Dyson filter life sensor."""
|
||
|
self.hass = hass
|
||
|
self._device = device
|
||
|
self._name = "{} filter life".format(self._device.name)
|
||
|
self._old_value = None
|
||
|
|
||
|
@asyncio.coroutine
|
||
|
def async_added_to_hass(self):
|
||
|
"""Callback when entity is added to hass."""
|
||
|
self.hass.async_add_job(
|
||
|
self._device.add_message_listener(self.on_message))
|
||
|
|
||
|
def on_message(self, message):
|
||
|
"""Called when new messages received from the fan."""
|
||
|
_LOGGER.debug(
|
||
|
"Message received for %s device: %s", self.name, message)
|
||
|
# Prevent refreshing if not needed
|
||
|
if self._old_value is None or self._old_value != self.state:
|
||
|
self._old_value = self.state
|
||
|
self.schedule_update_ha_state()
|
||
|
|
||
|
@property
|
||
|
def should_poll(self):
|
||
|
"""No polling needed."""
|
||
|
return False
|
||
|
|
||
|
@property
|
||
|
def state(self):
|
||
|
"""Return filter life in hours.."""
|
||
|
if self._device.state:
|
||
|
return self._device.state.filter_life
|
||
|
else:
|
||
|
return STATE_UNKNOWN
|
||
|
|
||
|
@property
|
||
|
def name(self):
|
||
|
"""Return the name of the dyson sensor name."""
|
||
|
return self._name
|
||
|
|
||
|
@property
|
||
|
def unit_of_measurement(self):
|
||
|
"""Return the unit the value is expressed in."""
|
||
|
return SENSOR_UNITS['filter_life']
|