Implement ADR0003 for Netatmo sensor (#24944)

* Remove configurable monitored conditions

* Only process existing modules

* Remove unused import

* Fix linter error
This commit is contained in:
cgtobi 2019-07-05 09:41:18 +02:00 committed by Pascal Vizeli
parent c814b39fdb
commit e93919673e

View File

@ -10,7 +10,7 @@ import voluptuous as vol
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import ( from homeassistant.const import (
CONF_NAME, CONF_MODE, CONF_MONITORED_CONDITIONS, CONF_NAME, CONF_MODE,
TEMP_CELSIUS, DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_TEMPERATURE, TEMP_CELSIUS, DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_TEMPERATURE,
DEVICE_CLASS_BATTERY) DEVICE_CLASS_BATTERY)
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -72,21 +72,15 @@ SENSOR_TYPES = {
'health_idx': ['Health', '', 'mdi:cloud', None], 'health_idx': ['Health', '', 'mdi:cloud', None],
} }
MODULE_SCHEMA = vol.Schema({
vol.Required(cv.string): vol.All(cv.ensure_list, [vol.In(SENSOR_TYPES)]),
})
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Optional(CONF_STATION): cv.string, vol.Optional(CONF_STATION): cv.string,
vol.Optional(CONF_MODULES): MODULE_SCHEMA, vol.Optional(CONF_MODULES): vol.All(cv.ensure_list, [cv.string]),
vol.Optional(CONF_AREAS): vol.All(cv.ensure_list, [ vol.Optional(CONF_AREAS): vol.All(cv.ensure_list, [
{ {
vol.Required(CONF_LAT_NE): cv.latitude, vol.Required(CONF_LAT_NE): cv.latitude,
vol.Required(CONF_LAT_SW): cv.latitude, vol.Required(CONF_LAT_SW): cv.latitude,
vol.Required(CONF_LON_NE): cv.longitude, vol.Required(CONF_LON_NE): cv.longitude,
vol.Required(CONF_LON_SW): cv.longitude, vol.Required(CONF_LON_SW): cv.longitude,
vol.Required(CONF_MONITORED_CONDITIONS): [vol.In(
SUPPORTED_PUBLIC_SENSOR_TYPES)],
vol.Optional(CONF_MODE, default=DEFAULT_MODE): vol.In(MODE_TYPES), vol.Optional(CONF_MODE, default=DEFAULT_MODE): vol.In(MODE_TYPES),
vol.Optional(CONF_NAME, default=DEFAULT_NAME_PUBLIC): cv.string vol.Optional(CONF_NAME, default=DEFAULT_NAME_PUBLIC): cv.string
} }
@ -119,7 +113,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
lat_sw=area[CONF_LAT_SW], lat_sw=area[CONF_LAT_SW],
lon_sw=area[CONF_LON_SW] lon_sw=area[CONF_LON_SW]
) )
for sensor_type in area[CONF_MONITORED_CONDITIONS]: for sensor_type in SUPPORTED_PUBLIC_SENSOR_TYPES:
dev.append(NetatmoPublicSensor( dev.append(NetatmoPublicSensor(
area[CONF_NAME], area[CONF_NAME],
data, data,
@ -141,22 +135,27 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
try: try:
data = NetatmoData(auth, data_class, config.get(CONF_STATION)) data = NetatmoData(auth, data_class, config.get(CONF_STATION))
except pyatmo.NoDevice: except pyatmo.NoDevice:
_LOGGER.warning( _LOGGER.info(
"No %s devices found", "No %s devices found",
NETATMO_DEVICE_TYPES[data_class.__name__] NETATMO_DEVICE_TYPES[data_class.__name__]
) )
continue continue
# Test if manually configured # Test if manually configured
if CONF_MODULES in config: if CONF_MODULES in config:
module_items = config[CONF_MODULES].items() module_items = config[CONF_MODULES]
module_names = data.get_module_names() for module_name in module_items:
for module_name, monitored_conditions in module_items: if module_name not in data.get_module_names():
if module_name not in module_names:
continue continue
for condition in monitored_conditions: for condition in data.station_data.monitoredConditions(
dev.append(NetatmoSensor( module_name):
data, module_name, condition.lower(), dev.append(
config.get(CONF_STATION))) NetatmoSensor(
data,
module_name,
condition.lower(),
data.station
)
)
continue continue
# otherwise add all modules and conditions # otherwise add all modules and conditions