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:
parent
b69663857b
commit
eae63cd231
3 changed files with 43 additions and 25 deletions
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue