hass-core/homeassistant/components/dsmr_reader/sensor.py
Tim de Boer 149ba088d4
Add dsmr_reader telegram timestamp and device classes (#42909)
* Added Telegram timestamp

* added to 'dsmr/reading/timestamp' and 'dsmr/consumption/gas/read_at'

* Fixed import sorting

* Replaced 'kW' with ENERGY_KILO_WATT_HOUR

* Added device_class, changed unit_of_measurement with fallback on device_class

* Fixed typo

* Fixed 'black' coding format

* Removed fallback, added unit_of_measurement and CURRENCY_EURO as device_class

* Fixed newline

* Removed 'timestamp' unit_of_meassure

* Removed icons from defintions with device_class

* Updated device_classes

* Updated device_classes

* Updated device_classes

* Added 'entity_registry_enabled_default' properties

* Added 'entity_registry_enabled_default' properties, fixed typo

* MQTT discovery will be in another pull-request
2020-11-15 14:52:31 -06:00

90 lines
2.6 KiB
Python

"""Support for DSMR Reader through MQTT."""
from homeassistant.components import mqtt
from homeassistant.core import callback
from homeassistant.helpers.entity import Entity
from homeassistant.util import slugify
from .definitions import DEFINITIONS
DOMAIN = "dsmr_reader"
async def async_setup_platform(hass, config, async_add_entities, discovery_info=None):
"""Set up DSMR Reader sensors."""
sensors = []
for topic in DEFINITIONS:
sensors.append(DSMRSensor(topic))
async_add_entities(sensors)
class DSMRSensor(Entity):
"""Representation of a DSMR sensor that is updated via MQTT."""
def __init__(self, topic):
"""Initialize the sensor."""
self._definition = DEFINITIONS[topic]
self._entity_id = slugify(topic.replace("/", "_"))
self._topic = topic
self._name = self._definition.get("name", topic.split("/")[-1])
self._device_class = self._definition.get("device_class")
self._enable_default = self._definition.get("enable_default")
self._unit_of_measurement = self._definition.get("unit")
self._icon = self._definition.get("icon")
self._transform = self._definition.get("transform")
self._state = None
async def async_added_to_hass(self):
"""Subscribe to MQTT events."""
@callback
def message_received(message):
"""Handle new MQTT messages."""
if self._transform is not None:
self._state = self._transform(message.payload)
else:
self._state = message.payload
self.async_write_ha_state()
await mqtt.async_subscribe(self.hass, self._topic, message_received, 1)
@property
def name(self):
"""Return the name of the sensor supplied in constructor."""
return self._name
@property
def entity_id(self):
"""Return the entity ID for this sensor."""
return f"sensor.{self._entity_id}"
@property
def state(self):
"""Return the current state of the entity."""
return self._state
@property
def device_class(self):
"""Return the device_class of this sensor."""
return self._device_class
@property
def unit_of_measurement(self):
"""Return the unit_of_measurement of this sensor."""
return self._unit_of_measurement
@property
def entity_registry_enabled_default(self) -> bool:
"""Return if the entity should be enabled when first added to the entity registry."""
return self._enable_default
@property
def icon(self):
"""Return the icon of this sensor."""
return self._icon