Refactor unit of measurement

* Add dict with map of units to v_types.
* Avoid numerous if, elif branches and return statements.
* Add custom unit decoupled from other units.
This commit is contained in:
MartinHjelmare 2016-01-27 15:26:52 +01:00
parent 1de7dcdb5f
commit 575e97a051

View file

@ -129,38 +129,31 @@ class MySensorsSensor(Entity):
@property @property
def unit_of_measurement(self): def unit_of_measurement(self):
"""Unit of measurement of this entity.""" """Unit of measurement of this entity."""
# pylint:disable=too-many-return-statements # HA will convert to degrees F if needed
prefix = '' unit_map = {
if float(self.gateway.version) >= 1.5 and \ self.gateway.const.SetReq.V_TEMP: TEMP_CELCIUS,
self.gateway.const.SetReq.V_UNIT_PREFIX in self._values: self.gateway.const.SetReq.V_HUM: '%',
prefix = self._values[self.gateway.const.SetReq.V_UNIT_PREFIX] self.gateway.const.SetReq.V_DIMMER: '%',
if self.value_type == self.gateway.const.SetReq.V_TEMP: self.gateway.const.SetReq.V_LIGHT_LEVEL: '%',
return TEMP_CELCIUS # HA will convert to degrees F if needed self.gateway.const.SetReq.V_WEIGHT: 'kg',
elif self.value_type == self.gateway.const.SetReq.V_HUM or \ self.gateway.const.SetReq.V_DISTANCE: 'm',
self.value_type == self.gateway.const.SetReq.V_DIMMER or \ self.gateway.const.SetReq.V_IMPEDANCE: 'ohm',
float(self.gateway.version) >= 1.5 and \ self.gateway.const.SetReq.V_WATT: 'W',
self.value_type == self.gateway.const.SetReq.V_PERCENTAGE or \ self.gateway.const.SetReq.V_KWH: 'kWh',
self.value_type == self.gateway.const.SetReq.V_LIGHT_LEVEL: self.gateway.const.SetReq.V_FLOW: 'm',
return '%' self.gateway.const.SetReq.V_VOLUME: 'm3',
elif self.value_type == self.gateway.const.SetReq.V_WEIGHT: self.gateway.const.SetReq.V_VOLTAGE: 'V',
return '{}g'.format(prefix) self.gateway.const.SetReq.V_CURRENT: 'A',
elif self.value_type == self.gateway.const.SetReq.V_DISTANCE: }
return '{}m'.format(prefix) unit_map_v15 = {
elif self.value_type == self.gateway.const.SetReq.V_IMPEDANCE: self.gateway.const.SetReq.V_PERCENTAGE: '%',
return '{}ohm'.format(prefix) }
elif self.value_type == self.gateway.const.SetReq.V_WATT: if float(self.gateway.version) >= 1.5:
return '{}W'.format(prefix) if self.gateway.const.SetReq.V_UNIT_PREFIX in self._values:
elif self.value_type == self.gateway.const.SetReq.V_KWH: return self._values[
return '{}kWh'.format(prefix) self.gateway.const.SetReq.V_UNIT_PREFIX]
elif self.value_type == self.gateway.const.SetReq.V_FLOW: unit_map.update(unit_map_v15)
return '{}m'.format(prefix) return unit_map.get(self.value_type)
elif self.value_type == self.gateway.const.SetReq.V_VOLUME:
return '{}m3'.format(prefix)
elif self.value_type == self.gateway.const.SetReq.V_VOLTAGE:
return '{}V'.format(prefix)
elif self.value_type == self.gateway.const.SetReq.V_CURRENT:
return '{}A'.format(prefix)
return None
@property @property
def device_state_attributes(self): def device_state_attributes(self):