core/homeassistant/components/sensor/toon.py

257 lines
7.6 KiB
Python
Raw Normal View History

"""
Toon van Eneco Utility Gages.
This provides a component for the rebranded Quby thermostat as provided by
Eneco.
"""
import logging
import datetime as datetime
from homeassistant.helpers.entity import Entity
import homeassistant.components.toon as toon_main
_LOGGER = logging.getLogger(__name__)
STATE_ATTR_DEVICE_TYPE = "device_type"
STATE_ATTR_LAST_CONNECTED_CHANGE = "last_connected_change"
def setup_platform(hass, config, add_devices, discovery_info=None):
"""Setup sensors."""
_toon_main = hass.data[toon_main.TOON_HANDLE]
sensor_items = []
sensor_items.extend([ToonSensor(hass,
'Power_current',
'power-plug',
'Watt'),
ToonSensor(hass,
'Power_today',
'power-plug',
'kWh')])
if _toon_main.gas:
sensor_items.extend([ToonSensor(hass,
'Gas_current',
'gas-cylinder',
'CM3'),
ToonSensor(hass,
'Gas_today',
'gas-cylinder',
'M3')])
for plug in _toon_main.toon.smartplugs:
sensor_items.extend([
FibaroSensor(hass,
'{}_current_power'.format(plug.name),
plug.name,
'power-socket-eu',
'Watt'),
FibaroSensor(hass,
'{}_today_energy'.format(plug.name),
plug.name,
'power-socket-eu',
'kWh')])
if _toon_main.toon.solar.produced or _toon_main.solar:
sensor_items.extend([
SolarSensor(hass, 'Solar_maximum', 'kWh'),
SolarSensor(hass, 'Solar_produced', 'kWh'),
SolarSensor(hass, 'Solar_value', 'Watt'),
SolarSensor(hass, 'Solar_average_produced', 'kWh'),
SolarSensor(hass, 'Solar_meter_reading_low_produced', 'kWh'),
SolarSensor(hass, 'Solar_meter_reading_produced', 'kWh'),
SolarSensor(hass, 'Solar_daily_cost_produced', 'Euro')
])
for smokedetector in _toon_main.toon.smokedetectors:
sensor_items.append(
FibaroSmokeDetector(hass,
'{}_smoke_detector'.format(smokedetector.name),
smokedetector.device_uuid,
'alarm-bell',
'%'))
add_devices(sensor_items)
class ToonSensor(Entity):
"""Representation of a sensor."""
def __init__(self, hass, name, icon, unit_of_measurement):
"""Initialize the sensor."""
self._name = name
self._state = None
self._icon = "mdi:" + icon
self._unit_of_measurement = unit_of_measurement
self.thermos = hass.data[toon_main.TOON_HANDLE]
@property
def should_poll(self):
"""Polling required."""
return True
@property
def name(self):
"""Return the name of the sensor."""
return self._name
@property
def icon(self):
"""Return the mdi icon of the sensor."""
return self._icon
@property
def state(self):
"""Return the state of the sensor."""
return self.thermos.get_data(self.name.lower())
@property
def unit_of_measurement(self):
"""Return the unit this state is expressed in."""
return self._unit_of_measurement
def update(self):
"""Get the latest data from the sensor."""
self.thermos.update()
class FibaroSensor(Entity):
"""Representation of a sensor."""
def __init__(self, hass, name, plug_name, icon, unit_of_measurement):
"""Initialize the sensor."""
self._name = name
self._plug_name = plug_name
self._state = None
self._icon = "mdi:" + icon
self._unit_of_measurement = unit_of_measurement
self.toon = hass.data[toon_main.TOON_HANDLE]
@property
def should_poll(self):
"""Polling required."""
return True
@property
def name(self):
"""Return the name of the sensor."""
return self._name
@property
def icon(self):
"""Return the mdi icon of the sensor."""
return self._icon
@property
def state(self):
"""Return the state of the sensor."""
value = '_'.join(self.name.lower().split('_')[1:])
return self.toon.get_data(value, self._plug_name)
@property
def unit_of_measurement(self):
"""Return the unit this state is expressed in."""
return self._unit_of_measurement
def update(self):
"""Get the latest data from the sensor."""
self.toon.update()
class SolarSensor(Entity):
"""Representation of a sensor."""
def __init__(self, hass, name, unit_of_measurement):
"""Initialize the sensor."""
self._name = name
self._state = None
self._icon = "mdi:weather-sunny"
self._unit_of_measurement = unit_of_measurement
self.toon = hass.data[toon_main.TOON_HANDLE]
@property
def should_poll(self):
"""Polling required."""
return True
@property
def name(self):
"""Return the name of the sensor."""
return self._name
@property
def icon(self):
"""Return the mdi icon of the sensor."""
return self._icon
@property
def state(self):
"""Return the state of the sensor."""
return self.toon.get_data(self.name.lower())
@property
def unit_of_measurement(self):
"""Return the unit this state is expressed in."""
return self._unit_of_measurement
def update(self):
"""Get the latest data from the sensor."""
self.toon.update()
class FibaroSmokeDetector(Entity):
"""Representation of a smoke detector."""
def __init__(self, hass, name, uid, icon, unit_of_measurement):
"""Initialize the sensor."""
self._name = name
self._uid = uid
self._state = None
self._icon = "mdi:" + icon
self._unit_of_measurement = unit_of_measurement
self.toon = hass.data[toon_main.TOON_HANDLE]
@property
def should_poll(self):
"""Polling required."""
return True
@property
def name(self):
"""Return the name of the sensor."""
return self._name
@property
def icon(self):
"""Return the mdi icon of the sensor."""
return self._icon
@property
def state_attributes(self):
"""Return the state attributes of the smoke detectors."""
value = datetime.datetime.fromtimestamp(
int(self.toon.get_data('last_connected_change', self.name))
).strftime('%Y-%m-%d %H:%M:%S')
return {
STATE_ATTR_DEVICE_TYPE: self.toon.get_data('device_type',
self.name),
STATE_ATTR_LAST_CONNECTED_CHANGE: value
}
@property
def state(self):
"""Return the state of the sensor."""
value = self.name.lower().split('_', 1)[1]
return self.toon.get_data(value, self.name)
@property
def unit_of_measurement(self):
"""Return the unit this state is expressed in."""
return self._unit_of_measurement
def update(self):
"""Get the latest data from the sensor."""
self.toon.update()