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
This commit is contained in:
Tim de Boer 2020-11-15 21:52:31 +01:00 committed by GitHub
parent 61475cf090
commit 149ba088d4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 106 additions and 34 deletions

View file

@ -2,8 +2,14 @@
from homeassistant.const import ( from homeassistant.const import (
CURRENCY_EURO, CURRENCY_EURO,
DEVICE_CLASS_CURRENT,
DEVICE_CLASS_ENERGY,
DEVICE_CLASS_POWER,
DEVICE_CLASS_TIMESTAMP,
DEVICE_CLASS_VOLTAGE,
ELECTRICAL_CURRENT_AMPERE, ELECTRICAL_CURRENT_AMPERE,
ENERGY_KILO_WATT_HOUR, ENERGY_KILO_WATT_HOUR,
POWER_KILO_WATT,
VOLT, VOLT,
VOLUME_CUBIC_METERS, VOLUME_CUBIC_METERS,
) )
@ -26,243 +32,297 @@ def tariff_transform(value):
DEFINITIONS = { DEFINITIONS = {
"dsmr/reading/electricity_delivered_1": { "dsmr/reading/electricity_delivered_1": {
"name": "Low tariff usage", "name": "Low tariff usage",
"icon": "mdi:flash", "enable_default": True,
"device_class": DEVICE_CLASS_ENERGY,
"unit": ENERGY_KILO_WATT_HOUR, "unit": ENERGY_KILO_WATT_HOUR,
}, },
"dsmr/reading/electricity_returned_1": { "dsmr/reading/electricity_returned_1": {
"name": "Low tariff returned", "name": "Low tariff returned",
"icon": "mdi:flash-outline", "enable_default": True,
"device_class": DEVICE_CLASS_ENERGY,
"unit": ENERGY_KILO_WATT_HOUR, "unit": ENERGY_KILO_WATT_HOUR,
}, },
"dsmr/reading/electricity_delivered_2": { "dsmr/reading/electricity_delivered_2": {
"name": "High tariff usage", "name": "High tariff usage",
"icon": "mdi:flash", "enable_default": True,
"device_class": DEVICE_CLASS_ENERGY,
"unit": ENERGY_KILO_WATT_HOUR, "unit": ENERGY_KILO_WATT_HOUR,
}, },
"dsmr/reading/electricity_returned_2": { "dsmr/reading/electricity_returned_2": {
"name": "High tariff returned", "name": "High tariff returned",
"icon": "mdi:flash-outline", "enable_default": True,
"device_class": DEVICE_CLASS_ENERGY,
"unit": ENERGY_KILO_WATT_HOUR, "unit": ENERGY_KILO_WATT_HOUR,
}, },
"dsmr/reading/electricity_currently_delivered": { "dsmr/reading/electricity_currently_delivered": {
"name": "Current power usage", "name": "Current power usage",
"icon": "mdi:flash", "enable_default": True,
"unit": "kW", "device_class": DEVICE_CLASS_POWER,
"unit": POWER_KILO_WATT,
}, },
"dsmr/reading/electricity_currently_returned": { "dsmr/reading/electricity_currently_returned": {
"name": "Current power return", "name": "Current power return",
"icon": "mdi:flash-outline", "enable_default": True,
"unit": "kW", "device_class": DEVICE_CLASS_POWER,
"unit": POWER_KILO_WATT,
}, },
"dsmr/reading/phase_currently_delivered_l1": { "dsmr/reading/phase_currently_delivered_l1": {
"name": "Current power usage L1", "name": "Current power usage L1",
"icon": "mdi:flash", "enable_default": True,
"unit": "kW", "device_class": DEVICE_CLASS_POWER,
"unit": POWER_KILO_WATT,
}, },
"dsmr/reading/phase_currently_delivered_l2": { "dsmr/reading/phase_currently_delivered_l2": {
"name": "Current power usage L2", "name": "Current power usage L2",
"icon": "mdi:flash", "enable_default": True,
"unit": "kW", "device_class": DEVICE_CLASS_POWER,
"unit": POWER_KILO_WATT,
}, },
"dsmr/reading/phase_currently_delivered_l3": { "dsmr/reading/phase_currently_delivered_l3": {
"name": "Current power usage L3", "name": "Current power usage L3",
"icon": "mdi:flash", "enable_default": True,
"unit": "kW", "device_class": DEVICE_CLASS_POWER,
"unit": POWER_KILO_WATT,
}, },
"dsmr/reading/phase_currently_returned_l1": { "dsmr/reading/phase_currently_returned_l1": {
"name": "Current power return L1", "name": "Current power return L1",
"icon": "mdi:flash-outline", "enable_default": True,
"unit": "kW", "device_class": DEVICE_CLASS_POWER,
"unit": POWER_KILO_WATT,
}, },
"dsmr/reading/phase_currently_returned_l2": { "dsmr/reading/phase_currently_returned_l2": {
"name": "Current power return L2", "name": "Current power return L2",
"icon": "mdi:flash-outline", "enable_default": True,
"unit": "kW", "device_class": DEVICE_CLASS_POWER,
"unit": POWER_KILO_WATT,
}, },
"dsmr/reading/phase_currently_returned_l3": { "dsmr/reading/phase_currently_returned_l3": {
"name": "Current power return L3", "name": "Current power return L3",
"icon": "mdi:flash-outline", "enable_default": True,
"unit": "kW", "device_class": DEVICE_CLASS_POWER,
"unit": POWER_KILO_WATT,
}, },
"dsmr/reading/extra_device_delivered": { "dsmr/reading/extra_device_delivered": {
"name": "Gas meter usage", "name": "Gas meter usage",
"enable_default": True,
"icon": "mdi:fire", "icon": "mdi:fire",
"unit": VOLUME_CUBIC_METERS, "unit": VOLUME_CUBIC_METERS,
}, },
"dsmr/reading/phase_voltage_l1": { "dsmr/reading/phase_voltage_l1": {
"name": "Current voltage L1", "name": "Current voltage L1",
"icon": "mdi:flash", "enable_default": True,
"device_class": DEVICE_CLASS_VOLTAGE,
"unit": VOLT, "unit": VOLT,
}, },
"dsmr/reading/phase_voltage_l2": { "dsmr/reading/phase_voltage_l2": {
"name": "Current voltage L2", "name": "Current voltage L2",
"icon": "mdi:flash", "enable_default": True,
"device_class": DEVICE_CLASS_VOLTAGE,
"unit": VOLT, "unit": VOLT,
}, },
"dsmr/reading/phase_voltage_l3": { "dsmr/reading/phase_voltage_l3": {
"name": "Current voltage L3", "name": "Current voltage L3",
"icon": "mdi:flash", "enable_default": True,
"device_class": DEVICE_CLASS_VOLTAGE,
"unit": VOLT, "unit": VOLT,
}, },
"dsmr/reading/phase_power_current_l1": { "dsmr/reading/phase_power_current_l1": {
"name": "Phase power current L1", "name": "Phase power current L1",
"icon": "mdi:flash", "enable_default": True,
"device_class": DEVICE_CLASS_CURRENT,
"unit": ELECTRICAL_CURRENT_AMPERE, "unit": ELECTRICAL_CURRENT_AMPERE,
}, },
"dsmr/reading/phase_power_current_l2": { "dsmr/reading/phase_power_current_l2": {
"name": "Phase power current L2", "name": "Phase power current L2",
"icon": "mdi:flash", "enable_default": True,
"device_class": DEVICE_CLASS_CURRENT,
"unit": ELECTRICAL_CURRENT_AMPERE, "unit": ELECTRICAL_CURRENT_AMPERE,
}, },
"dsmr/reading/phase_power_current_l3": { "dsmr/reading/phase_power_current_l3": {
"name": "Phase power current L3", "name": "Phase power current L3",
"icon": "mdi:flash", "enable_default": True,
"device_class": DEVICE_CLASS_CURRENT,
"unit": ELECTRICAL_CURRENT_AMPERE, "unit": ELECTRICAL_CURRENT_AMPERE,
}, },
"dsmr/reading/timestamp": {
"name": "Telegram timestamp",
"enable_default": False,
"device_class": DEVICE_CLASS_TIMESTAMP,
},
"dsmr/consumption/gas/delivered": { "dsmr/consumption/gas/delivered": {
"name": "Gas usage", "name": "Gas usage",
"enable_default": True,
"icon": "mdi:fire", "icon": "mdi:fire",
"unit": VOLUME_CUBIC_METERS, "unit": VOLUME_CUBIC_METERS,
}, },
"dsmr/consumption/gas/currently_delivered": { "dsmr/consumption/gas/currently_delivered": {
"name": "Current gas usage", "name": "Current gas usage",
"enable_default": True,
"icon": "mdi:fire", "icon": "mdi:fire",
"unit": VOLUME_CUBIC_METERS, "unit": VOLUME_CUBIC_METERS,
}, },
"dsmr/consumption/gas/read_at": { "dsmr/consumption/gas/read_at": {
"name": "Gas meter read", "name": "Gas meter read",
"icon": "mdi:clock", "enable_default": True,
"unit": "", "device_class": DEVICE_CLASS_TIMESTAMP,
}, },
"dsmr/day-consumption/electricity1": { "dsmr/day-consumption/electricity1": {
"name": "Low tariff usage", "name": "Low tariff usage",
"icon": "mdi:counter", "enable_default": True,
"device_class": DEVICE_CLASS_ENERGY,
"unit": ENERGY_KILO_WATT_HOUR, "unit": ENERGY_KILO_WATT_HOUR,
}, },
"dsmr/day-consumption/electricity2": { "dsmr/day-consumption/electricity2": {
"name": "High tariff usage", "name": "High tariff usage",
"icon": "mdi:counter", "enable_default": True,
"device_class": DEVICE_CLASS_ENERGY,
"unit": ENERGY_KILO_WATT_HOUR, "unit": ENERGY_KILO_WATT_HOUR,
}, },
"dsmr/day-consumption/electricity1_returned": { "dsmr/day-consumption/electricity1_returned": {
"name": "Low tariff return", "name": "Low tariff return",
"icon": "mdi:counter", "enable_default": True,
"device_class": DEVICE_CLASS_ENERGY,
"unit": ENERGY_KILO_WATT_HOUR, "unit": ENERGY_KILO_WATT_HOUR,
}, },
"dsmr/day-consumption/electricity2_returned": { "dsmr/day-consumption/electricity2_returned": {
"name": "High tariff return", "name": "High tariff return",
"icon": "mdi:counter", "enable_default": True,
"device_class": DEVICE_CLASS_ENERGY,
"unit": ENERGY_KILO_WATT_HOUR, "unit": ENERGY_KILO_WATT_HOUR,
}, },
"dsmr/day-consumption/electricity_merged": { "dsmr/day-consumption/electricity_merged": {
"name": "Power usage total", "name": "Power usage total",
"icon": "mdi:counter", "enable_default": True,
"device_class": DEVICE_CLASS_ENERGY,
"unit": ENERGY_KILO_WATT_HOUR, "unit": ENERGY_KILO_WATT_HOUR,
}, },
"dsmr/day-consumption/electricity_returned_merged": { "dsmr/day-consumption/electricity_returned_merged": {
"name": "Power return total", "name": "Power return total",
"icon": "mdi:counter", "enable_default": True,
"device_class": DEVICE_CLASS_ENERGY,
"unit": ENERGY_KILO_WATT_HOUR, "unit": ENERGY_KILO_WATT_HOUR,
}, },
"dsmr/day-consumption/electricity1_cost": { "dsmr/day-consumption/electricity1_cost": {
"name": "Low tariff cost", "name": "Low tariff cost",
"enable_default": True,
"icon": "mdi:currency-eur", "icon": "mdi:currency-eur",
"unit": CURRENCY_EURO, "unit": CURRENCY_EURO,
}, },
"dsmr/day-consumption/electricity2_cost": { "dsmr/day-consumption/electricity2_cost": {
"name": "High tariff cost", "name": "High tariff cost",
"enable_default": True,
"icon": "mdi:currency-eur", "icon": "mdi:currency-eur",
"unit": CURRENCY_EURO, "unit": CURRENCY_EURO,
}, },
"dsmr/day-consumption/electricity_cost_merged": { "dsmr/day-consumption/electricity_cost_merged": {
"name": "Power total cost", "name": "Power total cost",
"enable_default": True,
"icon": "mdi:currency-eur", "icon": "mdi:currency-eur",
"unit": CURRENCY_EURO, "unit": CURRENCY_EURO,
}, },
"dsmr/day-consumption/gas": { "dsmr/day-consumption/gas": {
"name": "Gas usage", "name": "Gas usage",
"enable_default": True,
"icon": "mdi:counter", "icon": "mdi:counter",
"unit": VOLUME_CUBIC_METERS, "unit": VOLUME_CUBIC_METERS,
}, },
"dsmr/day-consumption/gas_cost": { "dsmr/day-consumption/gas_cost": {
"name": "Gas cost", "name": "Gas cost",
"enable_default": True,
"icon": "mdi:currency-eur", "icon": "mdi:currency-eur",
"unit": CURRENCY_EURO, "unit": CURRENCY_EURO,
}, },
"dsmr/day-consumption/total_cost": { "dsmr/day-consumption/total_cost": {
"name": "Total cost", "name": "Total cost",
"enable_default": True,
"icon": "mdi:currency-eur", "icon": "mdi:currency-eur",
"unit": CURRENCY_EURO, "unit": CURRENCY_EURO,
}, },
"dsmr/day-consumption/energy_supplier_price_electricity_delivered_1": { "dsmr/day-consumption/energy_supplier_price_electricity_delivered_1": {
"name": "Low tariff delivered price", "name": "Low tariff delivered price",
"enable_default": True,
"icon": "mdi:currency-eur", "icon": "mdi:currency-eur",
"unit": CURRENCY_EURO, "unit": CURRENCY_EURO,
}, },
"dsmr/day-consumption/energy_supplier_price_electricity_delivered_2": { "dsmr/day-consumption/energy_supplier_price_electricity_delivered_2": {
"name": "High tariff delivered price", "name": "High tariff delivered price",
"enable_default": True,
"icon": "mdi:currency-eur", "icon": "mdi:currency-eur",
"unit": CURRENCY_EURO, "unit": CURRENCY_EURO,
}, },
"dsmr/day-consumption/energy_supplier_price_electricity_returned_1": { "dsmr/day-consumption/energy_supplier_price_electricity_returned_1": {
"name": "Low tariff returned price", "name": "Low tariff returned price",
"enable_default": True,
"icon": "mdi:currency-eur", "icon": "mdi:currency-eur",
"unit": CURRENCY_EURO, "unit": CURRENCY_EURO,
}, },
"dsmr/day-consumption/energy_supplier_price_electricity_returned_2": { "dsmr/day-consumption/energy_supplier_price_electricity_returned_2": {
"name": "High tariff returned price", "name": "High tariff returned price",
"enable_default": True,
"icon": "mdi:currency-eur", "icon": "mdi:currency-eur",
"unit": CURRENCY_EURO, "unit": CURRENCY_EURO,
}, },
"dsmr/day-consumption/energy_supplier_price_gas": { "dsmr/day-consumption/energy_supplier_price_gas": {
"name": "Gas price", "name": "Gas price",
"enable_default": True,
"icon": "mdi:currency-eur", "icon": "mdi:currency-eur",
"unit": CURRENCY_EURO, "unit": CURRENCY_EURO,
}, },
"dsmr/meter-stats/dsmr_version": { "dsmr/meter-stats/dsmr_version": {
"name": "DSMR version", "name": "DSMR version",
"enable_default": True,
"icon": "mdi:alert-circle", "icon": "mdi:alert-circle",
"transform": dsmr_transform, "transform": dsmr_transform,
}, },
"dsmr/meter-stats/electricity_tariff": { "dsmr/meter-stats/electricity_tariff": {
"name": "Electricity tariff", "name": "Electricity tariff",
"enable_default": True,
"icon": "mdi:flash", "icon": "mdi:flash",
"transform": tariff_transform, "transform": tariff_transform,
}, },
"dsmr/meter-stats/power_failure_count": { "dsmr/meter-stats/power_failure_count": {
"name": "Power failure count", "name": "Power failure count",
"enable_default": True,
"icon": "mdi:flash", "icon": "mdi:flash",
}, },
"dsmr/meter-stats/long_power_failure_count": { "dsmr/meter-stats/long_power_failure_count": {
"name": "Long power failure count", "name": "Long power failure count",
"enable_default": True,
"icon": "mdi:flash", "icon": "mdi:flash",
}, },
"dsmr/meter-stats/voltage_sag_count_l1": { "dsmr/meter-stats/voltage_sag_count_l1": {
"name": "Voltage sag L1", "name": "Voltage sag L1",
"enable_default": True,
"icon": "mdi:flash", "icon": "mdi:flash",
}, },
"dsmr/meter-stats/voltage_sag_count_l2": { "dsmr/meter-stats/voltage_sag_count_l2": {
"name": "Voltage sag L2", "name": "Voltage sag L2",
"enable_default": True,
"icon": "mdi:flash", "icon": "mdi:flash",
}, },
"dsmr/meter-stats/voltage_sag_count_l3": { "dsmr/meter-stats/voltage_sag_count_l3": {
"name": "Voltage sag L3", "name": "Voltage sag L3",
"enable_default": True,
"icon": "mdi:flash", "icon": "mdi:flash",
}, },
"dsmr/meter-stats/voltage_swell_count_l1": { "dsmr/meter-stats/voltage_swell_count_l1": {
"name": "Voltage swell L1", "name": "Voltage swell L1",
"enable_default": True,
"icon": "mdi:flash", "icon": "mdi:flash",
}, },
"dsmr/meter-stats/voltage_swell_count_l2": { "dsmr/meter-stats/voltage_swell_count_l2": {
"name": "Voltage swell L2", "name": "Voltage swell L2",
"enable_default": True,
"icon": "mdi:flash", "icon": "mdi:flash",
}, },
"dsmr/meter-stats/voltage_swell_count_l3": { "dsmr/meter-stats/voltage_swell_count_l3": {
"name": "Voltage swell L3", "name": "Voltage swell L3",
"enable_default": True,
"icon": "mdi:flash", "icon": "mdi:flash",
}, },
"dsmr/meter-stats/rejected_telegrams": { "dsmr/meter-stats/rejected_telegrams": {
"name": "Rejected telegrams", "name": "Rejected telegrams",
"enable_default": True,
"icon": "mdi:flash", "icon": "mdi:flash",
}, },
} }

View file

@ -31,6 +31,8 @@ class DSMRSensor(Entity):
self._topic = topic self._topic = topic
self._name = self._definition.get("name", topic.split("/")[-1]) 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._unit_of_measurement = self._definition.get("unit")
self._icon = self._definition.get("icon") self._icon = self._definition.get("icon")
self._transform = self._definition.get("transform") self._transform = self._definition.get("transform")
@ -67,11 +69,21 @@ class DSMRSensor(Entity):
"""Return the current state of the entity.""" """Return the current state of the entity."""
return self._state return self._state
@property
def device_class(self):
"""Return the device_class of this sensor."""
return self._device_class
@property @property
def unit_of_measurement(self): def unit_of_measurement(self):
"""Return the unit_of_measurement of this sensor.""" """Return the unit_of_measurement of this sensor."""
return self._unit_of_measurement 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 @property
def icon(self): def icon(self):
"""Return the icon of this sensor.""" """Return the icon of this sensor."""