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
|
import voluptuous as vol
|
||||||
|
|
||||||
|
from n26 import api as n26_api, config as n26_config
|
||||||
|
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
CONF_PASSWORD, CONF_SCAN_INTERVAL, CONF_USERNAME)
|
CONF_PASSWORD, CONF_SCAN_INTERVAL, CONF_USERNAME)
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
@ -18,12 +20,12 @@ DEFAULT_SCAN_INTERVAL = timedelta(minutes=30)
|
||||||
|
|
||||||
# define configuration parameters
|
# define configuration parameters
|
||||||
CONFIG_SCHEMA = vol.Schema({
|
CONFIG_SCHEMA = vol.Schema({
|
||||||
DOMAIN: vol.Schema({
|
DOMAIN: vol.All(cv.ensure_list, [{
|
||||||
vol.Required(CONF_USERNAME): cv.string,
|
vol.Required(CONF_USERNAME): cv.string,
|
||||||
vol.Required(CONF_PASSWORD): cv.string,
|
vol.Required(CONF_PASSWORD): cv.string,
|
||||||
vol.Optional(CONF_SCAN_INTERVAL,
|
vol.Optional(CONF_SCAN_INTERVAL,
|
||||||
default=DEFAULT_SCAN_INTERVAL): cv.time_period,
|
default=DEFAULT_SCAN_INTERVAL): cv.time_period,
|
||||||
}),
|
}])
|
||||||
}, extra=vol.ALLOW_EXTRA)
|
}, extra=vol.ALLOW_EXTRA)
|
||||||
|
|
||||||
N26_COMPONENTS = [
|
N26_COMPONENTS = [
|
||||||
|
@ -34,11 +36,15 @@ N26_COMPONENTS = [
|
||||||
|
|
||||||
def setup(hass, config):
|
def setup(hass, config):
|
||||||
"""Set up N26 Component."""
|
"""Set up N26 Component."""
|
||||||
user = config[DOMAIN][CONF_USERNAME]
|
acc_list = config[DOMAIN]
|
||||||
password = config[DOMAIN][CONF_PASSWORD]
|
|
||||||
|
|
||||||
from n26 import api, config as api_config
|
api_data_list = []
|
||||||
api = api.Api(api_config.Config(user, password))
|
|
||||||
|
for acc in acc_list:
|
||||||
|
user = acc[CONF_USERNAME]
|
||||||
|
password = acc[CONF_PASSWORD]
|
||||||
|
|
||||||
|
api = n26_api.Api(n26_config.Config(user, password))
|
||||||
|
|
||||||
from requests import HTTPError
|
from requests import HTTPError
|
||||||
try:
|
try:
|
||||||
|
@ -50,8 +56,10 @@ def setup(hass, config):
|
||||||
api_data = N26Data(api)
|
api_data = N26Data(api)
|
||||||
api_data.update()
|
api_data.update()
|
||||||
|
|
||||||
|
api_data_list.append(api_data)
|
||||||
|
|
||||||
hass.data[DOMAIN] = {}
|
hass.data[DOMAIN] = {}
|
||||||
hass.data[DOMAIN][DATA] = api_data
|
hass.data[DOMAIN][DATA] = api_data_list
|
||||||
|
|
||||||
# Load components for supported devices
|
# Load components for supported devices
|
||||||
for component in N26_COMPONENTS:
|
for component in N26_COMPONENTS:
|
||||||
|
|
|
@ -30,9 +30,14 @@ ICON_SPACE = 'mdi:crop-square'
|
||||||
def setup_platform(
|
def setup_platform(
|
||||||
hass, config, add_entities, discovery_info=None):
|
hass, config, add_entities, discovery_info=None):
|
||||||
"""Set up the N26 sensor platform."""
|
"""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]
|
||||||
|
|
||||||
|
sensor_entities = []
|
||||||
|
for api_data in api_list:
|
||||||
|
sensor_entities.append(N26Account(api_data))
|
||||||
|
|
||||||
for card in api_data.cards:
|
for card in api_data.cards:
|
||||||
sensor_entities.append(N26Card(api_data, card))
|
sensor_entities.append(N26Card(api_data, card))
|
||||||
|
@ -204,7 +209,8 @@ class N26Space(Entity):
|
||||||
@property
|
@property
|
||||||
def unique_id(self):
|
def unique_id(self):
|
||||||
"""Return the unique ID of the entity."""
|
"""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
|
@property
|
||||||
def name(self) -> str:
|
def name(self) -> str:
|
||||||
|
|
|
@ -14,9 +14,13 @@ SCAN_INTERVAL = DEFAULT_SCAN_INTERVAL
|
||||||
def setup_platform(
|
def setup_platform(
|
||||||
hass, config, add_entities, discovery_info=None):
|
hass, config, add_entities, discovery_info=None):
|
||||||
"""Set up the N26 switch platform."""
|
"""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 = []
|
switch_entities = []
|
||||||
|
for api_data in api_list:
|
||||||
for card in api_data.cards:
|
for card in api_data.cards:
|
||||||
switch_entities.append(N26CardSwitch(api_data, card))
|
switch_entities.append(N26CardSwitch(api_data, card))
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue