77 lines
2.6 KiB
Python
77 lines
2.6 KiB
Python
"""
|
|
Support for MySensors sensors.
|
|
|
|
For more details about this platform, please refer to the documentation at
|
|
https://home-assistant.io/components/sensor.mysensors/
|
|
"""
|
|
from homeassistant.components import mysensors
|
|
from homeassistant.components.sensor import DOMAIN
|
|
from homeassistant.const import TEMP_CELSIUS, TEMP_FAHRENHEIT
|
|
|
|
|
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
|
"""Set up the MySensors platform for sensors."""
|
|
mysensors.setup_mysensors_platform(
|
|
hass, DOMAIN, discovery_info, MySensorsSensor, add_devices=add_devices)
|
|
|
|
|
|
class MySensorsSensor(mysensors.MySensorsEntity):
|
|
"""Representation of a MySensors Sensor child node."""
|
|
|
|
@property
|
|
def force_update(self):
|
|
"""Return True if state updates should be forced.
|
|
|
|
If True, a state change will be triggered anytime the state property is
|
|
updated, not just when the value changes.
|
|
"""
|
|
return True
|
|
|
|
@property
|
|
def state(self):
|
|
"""Return the state of the device."""
|
|
return self._values.get(self.value_type)
|
|
|
|
@property
|
|
def unit_of_measurement(self):
|
|
"""Return the unit of measurement of this entity."""
|
|
pres = self.gateway.const.Presentation
|
|
set_req = self.gateway.const.SetReq
|
|
unit_map = {
|
|
set_req.V_TEMP: (TEMP_CELSIUS
|
|
if self.gateway.metric else TEMP_FAHRENHEIT),
|
|
set_req.V_HUM: '%',
|
|
set_req.V_DIMMER: '%',
|
|
set_req.V_LIGHT_LEVEL: '%',
|
|
set_req.V_DIRECTION: '°',
|
|
set_req.V_WEIGHT: 'kg',
|
|
set_req.V_DISTANCE: 'm',
|
|
set_req.V_IMPEDANCE: 'ohm',
|
|
set_req.V_WATT: 'W',
|
|
set_req.V_KWH: 'kWh',
|
|
set_req.V_FLOW: 'm',
|
|
set_req.V_VOLUME: 'm³',
|
|
set_req.V_VOLTAGE: 'V',
|
|
set_req.V_CURRENT: 'A',
|
|
}
|
|
if float(self.gateway.protocol_version) >= 1.5:
|
|
if set_req.V_UNIT_PREFIX in self._values:
|
|
return self._values[
|
|
set_req.V_UNIT_PREFIX]
|
|
unit_map.update({
|
|
set_req.V_PERCENTAGE: '%',
|
|
set_req.V_LEVEL: {
|
|
pres.S_SOUND: 'dB', pres.S_VIBRATION: 'Hz',
|
|
pres.S_LIGHT_LEVEL: 'lux'}})
|
|
if float(self.gateway.protocol_version) >= 2.0:
|
|
unit_map.update({
|
|
set_req.V_ORP: 'mV',
|
|
set_req.V_EC: 'μS/cm',
|
|
set_req.V_VAR: 'var',
|
|
set_req.V_VA: 'VA',
|
|
})
|
|
unit = unit_map.get(self.value_type)
|
|
if isinstance(unit, dict):
|
|
unit = unit.get(self.child_type)
|
|
return unit
|