From 503a2adc38fa0e1a429a6c7c7f28f92d8236b6cc Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 8 May 2015 16:59:46 +0200 Subject: [PATCH] add date & time sensor --- homeassistant/components/sensor/time_date.py | 96 ++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 homeassistant/components/sensor/time_date.py diff --git a/homeassistant/components/sensor/time_date.py b/homeassistant/components/sensor/time_date.py new file mode 100644 index 00000000000..c80e8e98981 --- /dev/null +++ b/homeassistant/components/sensor/time_date.py @@ -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))