add date & time sensor

pull/116/head
Fabian Affolter 2015-05-08 16:59:46 +02:00
parent dfc50562a1
commit 503a2adc38
1 changed files with 96 additions and 0 deletions

View File

@ -0,0 +1,96 @@
"""
homeassistant.components.sensor.time_date
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Date and Time service.
Configuration:
To use the Date and Time sensor you will need to add something like the
following to your config/configuration.yaml
sensor:
platform: time_date
monitored_variables:
- type: 'time'
- type: 'date'
- type: 'datetime'
VARIABLES:
monitored_variables
*Required
An array specifying the variables to monitor.
These are the variables for the monitored_variables array:
type
*Required
The variable you wish to display,see the configuration example above for a
list of all available variables
"""
import logging
import homeassistant.util.dt as dt_util
from homeassistant.helpers.entity import Entity
_LOGGER = logging.getLogger(__name__)
SENSOR_TYPES = {
'time': ['Time'],
'date': ['Date'],
'datetime': ['Date & Time']
}
def setup_platform(hass, config, add_devices, discovery_info=None):
""" Get the Time and Date sensor. """
if hass.config.time_zone is None:
_LOGGER.error("Timezone is not set in Home Assistant config")
return False
dev = []
for variable in config['monitored_variables']:
if variable['type'] not in SENSOR_TYPES:
_LOGGER.error('Sensor type: "%s" does not exist', variable['type'])
else:
dev.append(TimeDateSensor(variable['type']))
add_devices(dev)
# pylint: disable=too-few-public-methods
class TimeDateSensor(Entity):
""" Implements a Time and Date sensor. """
def __init__(self, sensor_type):
self._name = SENSOR_TYPES[sensor_type][0]
self.type = sensor_type
self._state = None
self.update()
@property
def name(self):
""" Returns the name of the device. """
return self._name
@property
def state(self):
""" Returns the state of the device. """
return self._state
def update(self):
""" Gets the latest data and updates the states. """
if self.type == 'time':
self._state = dt_util.datetime_to_short_time_str(
dt_util.now(dt_util.DEFAULT_TIME_ZONE))
if self.type == 'date':
self._state = dt_util.datetime_to_short_date_str(
dt_util.now(dt_util.DEFAULT_TIME_ZONE))
if self.type == 'datetime':
self._state = dt_util.datetime_to_short_date_str(
dt_util.now(dt_util.DEFAULT_TIME_ZONE)) + ', ' + \
dt_util.datetime_to_short_time_str(
dt_util.now(dt_util.DEFAULT_TIME_ZONE))