Add support for multiple N26 accounts (#25086)

* Added support of multiple accounts for n26

* Code cleanup

* Added check for proper config

* Fiexed lints
This commit is contained in:
Victor Vostrikov 2019-07-12 18:59:40 +02:00 committed by Pascal Vizeli
parent b69663857b
commit eae63cd231
3 changed files with 43 additions and 25 deletions

View file

@ -4,6 +4,8 @@ import logging
import voluptuous as vol
from n26 import api as n26_api, config as n26_config
from homeassistant.const import (
CONF_PASSWORD, CONF_SCAN_INTERVAL, CONF_USERNAME)
import homeassistant.helpers.config_validation as cv
@ -18,12 +20,12 @@ DEFAULT_SCAN_INTERVAL = timedelta(minutes=30)
# define configuration parameters
CONFIG_SCHEMA = vol.Schema({
DOMAIN: vol.Schema({
DOMAIN: vol.All(cv.ensure_list, [{
vol.Required(CONF_USERNAME): cv.string,
vol.Required(CONF_PASSWORD): cv.string,
vol.Optional(CONF_SCAN_INTERVAL,
default=DEFAULT_SCAN_INTERVAL): cv.time_period,
}),
}])
}, extra=vol.ALLOW_EXTRA)
N26_COMPONENTS = [
@ -34,24 +36,30 @@ N26_COMPONENTS = [
def setup(hass, config):
"""Set up N26 Component."""
user = config[DOMAIN][CONF_USERNAME]
password = config[DOMAIN][CONF_PASSWORD]
acc_list = config[DOMAIN]
from n26 import api, config as api_config
api = api.Api(api_config.Config(user, password))
api_data_list = []
from requests import HTTPError
try:
api.get_token()
except HTTPError as err:
_LOGGER.error(str(err))
return False
for acc in acc_list:
user = acc[CONF_USERNAME]
password = acc[CONF_PASSWORD]
api_data = N26Data(api)
api_data.update()
api = n26_api.Api(n26_config.Config(user, password))
from requests import HTTPError
try:
api.get_token()
except HTTPError as err:
_LOGGER.error(str(err))
return False
api_data = N26Data(api)
api_data.update()
api_data_list.append(api_data)
hass.data[DOMAIN] = {}
hass.data[DOMAIN][DATA] = api_data
hass.data[DOMAIN][DATA] = api_data_list
# Load components for supported devices
for component in N26_COMPONENTS:

View file

@ -30,15 +30,20 @@ ICON_SPACE = 'mdi:crop-square'
def setup_platform(
hass, config, add_entities, discovery_info=None):
"""Set up the N26 sensor platform."""
api_data = hass.data[DOMAIN][DATA]
if discovery_info is None:
return
sensor_entities = [N26Account(api_data)]
api_list = hass.data[DOMAIN][DATA]
for card in api_data.cards:
sensor_entities.append(N26Card(api_data, card))
sensor_entities = []
for api_data in api_list:
sensor_entities.append(N26Account(api_data))
for space in api_data.spaces["spaces"]:
sensor_entities.append(N26Space(api_data, space))
for card in api_data.cards:
sensor_entities.append(N26Card(api_data, card))
for space in api_data.spaces["spaces"]:
sensor_entities.append(N26Space(api_data, space))
add_entities(sensor_entities)
@ -204,7 +209,8 @@ class N26Space(Entity):
@property
def unique_id(self):
"""Return the unique ID of the entity."""
return "space_{}".format(self._space["name"].lower())
return "space_{}_{}".format(self._data.balance["iban"][-4:],
self._space["name"].lower())
@property
def name(self) -> str:

View file

@ -14,11 +14,15 @@ SCAN_INTERVAL = DEFAULT_SCAN_INTERVAL
def setup_platform(
hass, config, add_entities, discovery_info=None):
"""Set up the N26 switch platform."""
api_data = hass.data[DOMAIN][DATA]
if discovery_info is None:
return
api_list = hass.data[DOMAIN][DATA]
switch_entities = []
for card in api_data.cards:
switch_entities.append(N26CardSwitch(api_data, card))
for api_data in api_list:
for card in api_data.cards:
switch_entities.append(N26CardSwitch(api_data, card))
add_entities(switch_entities)