diff --git a/homeassistant/components/frontend/www_static/polymer/components/domain-icon.html b/homeassistant/components/frontend/www_static/polymer/components/domain-icon.html
index 323e29f96bb..42be1b32963 100644
--- a/homeassistant/components/frontend/www_static/polymer/components/domain-icon.html
+++ b/homeassistant/components/frontend/www_static/polymer/components/domain-icon.html
@@ -47,9 +47,6 @@
case "light":
return "image:wb-incandescent";
- case "tellstick_sensor":
- return "trending-up";
-
case "simple_alarm":
return "social:notifications";
diff --git a/homeassistant/components/sensor/tellstick.py b/homeassistant/components/sensor/tellstick.py
new file mode 100644
index 00000000000..3e72b9d065e
--- /dev/null
+++ b/homeassistant/components/sensor/tellstick.py
@@ -0,0 +1,126 @@
+"""
+homeassistant.components.sensor.tellstick
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Shows sensor values from tellstick sensors.
+
+Possible config keys:
+
+id of the sensor: Name the sensor with ID
+135=Outside
+
+only_named: Only show the named sensors
+only_named=1
+
+temperature_scale: The scale of the temperature value
+temperature_scale=°C
+
+datatype_mask: mask to determine which sensor values to show based on
+https://tellcore-py.readthedocs.org
+ /en/v1.0.4/constants.html#module-tellcore.constants
+
+datatype_mask=1 # only show temperature
+datatype_mask=12 # only show rain rate and rain total
+datatype_mask=127 # show all sensor values
+"""
+import logging
+from collections import namedtuple
+
+import tellcore.telldus as telldus
+import tellcore.constants as tellcore_constants
+
+from homeassistant.const import (
+ ATTR_FRIENDLY_NAME, ATTR_UNIT_OF_MEASUREMENT, TEMP_CELCIUS)
+from homeassistant.helpers import Device
+
+DatatypeDescription = namedtuple("DatatypeDescription", ['name', 'unit'])
+
+
+# pylint: disable=unused-argument
+def setup_platform(hass, config, add_devices, discovery_info=None):
+ """ Sets up Tellstick sensors. """
+ sensor_value_descriptions = {
+ tellcore_constants.TELLSTICK_TEMPERATURE:
+ DatatypeDescription(
+ 'temperature', config.get('temperature_scale', TEMP_CELCIUS)),
+
+ tellcore_constants.TELLSTICK_HUMIDITY:
+ DatatypeDescription('humidity', '%'),
+
+ tellcore_constants.TELLSTICK_RAINRATE:
+ DatatypeDescription('rain rate', ''),
+
+ tellcore_constants.TELLSTICK_RAINTOTAL:
+ DatatypeDescription('rain total', ''),
+
+ tellcore_constants.TELLSTICK_WINDDIRECTION:
+ DatatypeDescription('wind direction', ''),
+
+ tellcore_constants.TELLSTICK_WINDAVERAGE:
+ DatatypeDescription('wind average', ''),
+
+ tellcore_constants.TELLSTICK_WINDGUST:
+ DatatypeDescription('wind gust', '')
+ }
+
+ try:
+ core = telldus.TelldusCore()
+ except OSError:
+ logging.getLogger(__name__).exception(
+ 'Could not initialize Tellstick.')
+ return
+
+ sensors = []
+
+ for ts_sensor in core.sensors():
+ try:
+ sensor_name = config[str(ts_sensor.id)]
+ except KeyError:
+ if 'only_named' in config:
+ continue
+ sensor_name = str(ts_sensor.id)
+
+ for datatype in sensor_value_descriptions.keys():
+ if datatype & int(config['datatype_mask']) and \
+ ts_sensor.has_value(datatype):
+
+ sensor_info = sensor_value_descriptions[datatype]
+
+ sensors.append(
+ TellstickSensor(
+ sensor_name, ts_sensor, datatype, sensor_info))
+
+ add_devices(sensors)
+
+
+class TellstickSensor(Device):
+ """ Represents a Tellstick sensor. """
+
+ def __init__(self, name, sensor, datatype, sensor_info):
+ self.datatype = datatype
+ self.sensor = sensor
+ self.unit = sensor_info.unit or None
+
+ self._name = "{} {}".format(name, sensor_info.name)
+
+ @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.sensor.value(self.datatype).value
+
+ @property
+ def state_attributes(self):
+ """ Returns the state attributes. """
+ attrs = {
+ ATTR_FRIENDLY_NAME: self._name,
+ }
+
+ if self.unit:
+ attrs[ATTR_UNIT_OF_MEASUREMENT] = self.unit
+
+ return attrs
diff --git a/homeassistant/components/tellstick_sensor.py b/homeassistant/components/tellstick_sensor.py
deleted file mode 100644
index 5f1ad748900..00000000000
--- a/homeassistant/components/tellstick_sensor.py
+++ /dev/null
@@ -1,141 +0,0 @@
-"""
-homeassistant.components.tellstick_sensor
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Shows sensor values from tellstick sensors.
-
-Possible config keys:
-
-id of the sensor: Name the sensor with ID
-135=Outside
-
-only_named: Only show the named sensors
-only_named=1
-
-temperature_scale: The scale of the temperature value
-temperature_scale=°C
-
-datatype_mask: mask to determine which sensor values to show based on
-https://tellcore-py.readthedocs.org
- /en/v1.0.4/constants.html#module-tellcore.constants
-
-datatype_mask=1 # only show temperature
-datatype_mask=12 # only show rain rate and rain total
-datatype_mask=127 # show all sensor values
-"""
-import logging
-from collections import namedtuple
-
-import homeassistant.util as util
-from homeassistant.const import ATTR_FRIENDLY_NAME, ATTR_UNIT_OF_MEASUREMENT
-
-# The domain of your component. Should be equal to the name of your component
-DOMAIN = "tellstick_sensor"
-
-# List of component names (string) your component depends upon
-# If you are setting up a group but not using a group for anything,
-# don't depend on group
-DEPENDENCIES = []
-
-ENTITY_ID_FORMAT = DOMAIN + '.{}'
-
-DatatypeDescription = namedtuple("DatatypeDescription", ['name', 'unit'])
-
-
-def setup(hass, config):
- """ Register services or listen for events that your component needs. """
-
- logger = logging.getLogger(__name__)
-
- try:
- import tellcore.telldus as telldus
- import tellcore.constants as tellcore_constants
- except ImportError:
- logger.exception(
- "Failed to import tellcore")
- return False
-
- core = telldus.TelldusCore()
-
- sensors = core.sensors()
-
- if len(sensors) == 0:
- logger.error("No Tellstick sensors found")
- return False
-
- sensor_value_descriptions = {
- tellcore_constants.TELLSTICK_TEMPERATURE:
- DatatypeDescription(
- 'temperature', config[DOMAIN]['temperature_scale']),
-
- tellcore_constants.TELLSTICK_HUMIDITY:
- DatatypeDescription('humidity', ' %'),
-
- tellcore_constants.TELLSTICK_RAINRATE:
- DatatypeDescription('rain rate', ''),
-
- tellcore_constants.TELLSTICK_RAINTOTAL:
- DatatypeDescription('rain total', ''),
-
- tellcore_constants.TELLSTICK_WINDDIRECTION:
- DatatypeDescription('wind direction', ''),
-
- tellcore_constants.TELLSTICK_WINDAVERAGE:
- DatatypeDescription('wind average', ''),
-
- tellcore_constants.TELLSTICK_WINDGUST:
- DatatypeDescription('wind gust', '')
- }
-
- def update_sensor_value_state(sensor_name, sensor_value):
- """ Update the state of a sensor value """
- sensor_value_description = \
- sensor_value_descriptions[sensor_value.datatype]
- sensor_value_name = '{} {}'.format(
- sensor_name, sensor_value_description.name)
-
- entity_id = ENTITY_ID_FORMAT.format(
- util.slugify(sensor_value_name))
-
- state = sensor_value.value
-
- state_attr = {
- ATTR_FRIENDLY_NAME: sensor_value_name,
- ATTR_UNIT_OF_MEASUREMENT: sensor_value_description.unit
- }
-
- hass.states.set(entity_id, state, state_attr)
-
- sensor_value_datatypes = [
- tellcore_constants.TELLSTICK_TEMPERATURE,
- tellcore_constants.TELLSTICK_HUMIDITY,
- tellcore_constants.TELLSTICK_RAINRATE,
- tellcore_constants.TELLSTICK_RAINTOTAL,
- tellcore_constants.TELLSTICK_WINDDIRECTION,
- tellcore_constants.TELLSTICK_WINDAVERAGE,
- tellcore_constants.TELLSTICK_WINDGUST
- ]
-
- def update_sensor_state(sensor):
- """ Updates all the sensor values from the sensor """
- try:
- sensor_name = config[DOMAIN][str(sensor.id)]
- except KeyError:
- if 'only_named' in config[DOMAIN]:
- return
- sensor_name = str(sensor.id)
-
- for datatype in sensor_value_datatypes:
- if datatype & int(config[DOMAIN]['datatype_mask']) and \
- sensor.has_value(datatype):
- update_sensor_value_state(sensor_name, sensor.value(datatype))
-
- def update_sensors_state(time):
- """ Update the state of all sensors """
- for sensor in sensors:
- update_sensor_state(sensor)
-
- update_sensors_state(None)
-
- hass.track_time_change(update_sensors_state, second=[0, 30])
-
- return True