SMA sensor - updated library (#19753)
This commit is contained in:
parent
ccbc231d3a
commit
3ffa0176cc
2 changed files with 28 additions and 13 deletions
|
@ -19,7 +19,7 @@ import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
from homeassistant.helpers.event import async_track_time_interval
|
from homeassistant.helpers.event import async_track_time_interval
|
||||||
|
|
||||||
REQUIREMENTS = ['pysma==0.2.2']
|
REQUIREMENTS = ['pysma==0.3.1']
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -37,11 +37,13 @@ def _check_sensor_schema(conf):
|
||||||
"""Check sensors and attributes are valid."""
|
"""Check sensors and attributes are valid."""
|
||||||
try:
|
try:
|
||||||
import pysma
|
import pysma
|
||||||
valid = [s.name for s in pysma.SENSORS]
|
valid = [s.name for s in pysma.Sensors()]
|
||||||
except (ImportError, AttributeError):
|
except (ImportError, AttributeError):
|
||||||
return conf
|
return conf
|
||||||
|
|
||||||
valid.extend(conf[CONF_CUSTOM].keys())
|
for name in conf[CONF_CUSTOM]:
|
||||||
|
valid.append(name)
|
||||||
|
|
||||||
for sname, attrs in conf[CONF_SENSORS].items():
|
for sname, attrs in conf[CONF_SENSORS].items():
|
||||||
if sname not in valid:
|
if sname not in valid:
|
||||||
raise vol.Invalid("{} does not exist".format(sname))
|
raise vol.Invalid("{} does not exist".format(sname))
|
||||||
|
@ -65,7 +67,8 @@ PLATFORM_SCHEMA = vol.All(PLATFORM_SCHEMA.extend({
|
||||||
vol.Optional(CONF_VERIFY_SSL, default=True): cv.boolean,
|
vol.Optional(CONF_VERIFY_SSL, default=True): cv.boolean,
|
||||||
vol.Required(CONF_PASSWORD): cv.string,
|
vol.Required(CONF_PASSWORD): cv.string,
|
||||||
vol.Optional(CONF_GROUP, default=GROUPS[0]): vol.In(GROUPS),
|
vol.Optional(CONF_GROUP, default=GROUPS[0]): vol.In(GROUPS),
|
||||||
vol.Required(CONF_SENSORS): vol.Schema({cv.slug: cv.ensure_list}),
|
vol.Optional(CONF_SENSORS, default={}):
|
||||||
|
vol.Schema({cv.slug: cv.ensure_list}),
|
||||||
vol.Optional(CONF_CUSTOM, default={}):
|
vol.Optional(CONF_CUSTOM, default={}):
|
||||||
vol.Schema({cv.slug: CUSTOM_SCHEMA}),
|
vol.Schema({cv.slug: CUSTOM_SCHEMA}),
|
||||||
}, extra=vol.PREVENT_EXTRA), _check_sensor_schema)
|
}, extra=vol.PREVENT_EXTRA), _check_sensor_schema)
|
||||||
|
@ -79,22 +82,29 @@ async def async_setup_platform(
|
||||||
# Check config again during load - dependency available
|
# Check config again during load - dependency available
|
||||||
config = _check_sensor_schema(config)
|
config = _check_sensor_schema(config)
|
||||||
|
|
||||||
# Sensor_defs from the custom config
|
# Init all default sensors
|
||||||
for name, prop in config[CONF_CUSTOM].items():
|
sensor_def = pysma.Sensors()
|
||||||
n_s = pysma.Sensor(name, prop['key'], prop['unit'], prop['factor'])
|
|
||||||
pysma.add_sensor(n_s)
|
# Sensor from the custom config
|
||||||
|
sensor_def.add([pysma.Sensor(o[CONF_KEY], n, o[CONF_UNIT], o[CONF_FACTOR])
|
||||||
|
for n, o in config[CONF_CUSTOM].items()])
|
||||||
|
|
||||||
|
# Use all sensors by default
|
||||||
|
config_sensors = config[CONF_SENSORS]
|
||||||
|
if not config_sensors:
|
||||||
|
config_sensors = {s.name: [] for s in sensor_def}
|
||||||
|
|
||||||
# Prepare all HASS sensor entities
|
# Prepare all HASS sensor entities
|
||||||
hass_sensors = []
|
hass_sensors = []
|
||||||
used_sensors = []
|
used_sensors = []
|
||||||
for name, attr in config[CONF_SENSORS].items():
|
for name, attr in config_sensors.items():
|
||||||
sub_sensors = [pysma.get_sensor(s) for s in attr]
|
sub_sensors = [sensor_def[s] for s in attr]
|
||||||
hass_sensors.append(SMAsensor(pysma.get_sensor(name), sub_sensors))
|
hass_sensors.append(SMAsensor(sensor_def[name], sub_sensors))
|
||||||
used_sensors.append(name)
|
used_sensors.append(name)
|
||||||
used_sensors.extend(attr)
|
used_sensors.extend(attr)
|
||||||
|
|
||||||
async_add_entities(hass_sensors)
|
async_add_entities(hass_sensors)
|
||||||
used_sensors = [pysma.get_sensor(s) for s in set(used_sensors)]
|
used_sensors = [sensor_def[s] for s in set(used_sensors)]
|
||||||
|
|
||||||
# Init the SMA interface
|
# Init the SMA interface
|
||||||
session = async_get_clientsession(hass, verify_ssl=config[CONF_VERIFY_SSL])
|
session = async_get_clientsession(hass, verify_ssl=config[CONF_VERIFY_SSL])
|
||||||
|
@ -195,3 +205,8 @@ class SMAsensor(Entity):
|
||||||
self._state = self._sensor.value
|
self._state = self._sensor.value
|
||||||
|
|
||||||
return self.async_update_ha_state() if update else None
|
return self.async_update_ha_state() if update else None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def unique_id(self):
|
||||||
|
"""Return a unique identifier for this sensor."""
|
||||||
|
return "sma-{}-{}".format(self._sensor.key, self._sensor.name)
|
||||||
|
|
|
@ -1198,7 +1198,7 @@ pysesame==0.1.0
|
||||||
pysher==1.0.1
|
pysher==1.0.1
|
||||||
|
|
||||||
# homeassistant.components.sensor.sma
|
# homeassistant.components.sensor.sma
|
||||||
pysma==0.2.2
|
pysma==0.3.1
|
||||||
|
|
||||||
# homeassistant.components.device_tracker.snmp
|
# homeassistant.components.device_tracker.snmp
|
||||||
# homeassistant.components.sensor.snmp
|
# homeassistant.components.sensor.snmp
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue