Objetivo
Mi objetivo era conectar mi cuenta bancaria con Home Assistant para realizar un seguimiento de mi saldo y transacciones en tiempo real. Para ello, utilicé la API de Powens (anteriormente Budget Insight), una plataforma que proporciona acceso gratuito a los datos bancarios de manera segura y compatible con PSD2.
He creado una cuenta de Powens
Me registré en el sitio web de Powens para crear una cuenta. Powens ofrece una solución de agregación bancaria que permite recuperar información financiera a través de APIs. Esto es perfecto para mi proyecto de domótica.

¿Quién es Powens?
Powens (anteriormente Budget Insight) es una plataforma líder en el campo deagregación bancaria yBanca abierta. Con API conformes con PSD2 (Directiva de servicios de pago), Powens permite a los desarrolladores y a las empresas acceder de forma segura a los datos bancarios de los usuarios (con su consentimiento). Su tecnología es utilizada por fintechs, bancos y aplicaciones de gestión financiera para ofrecer servicios innovadores como análisis de gastos, categorización de transacciones o gestión presupuestaria.
En mi caso, utilizo un pequeña parte El potencial de Powens a través de su arenero, un entorno de prueba que me permite iniciar sesión en mi cuenta bancaria para recuperar información como el saldo y las últimas transacciones. Este uso genera muy poco tráfico y se mantiene en el marco de las ofertas gratuitas que ofrece Powens para desarrolladores y pequeños proyectos. Esto me permite integrar estos datos en mi sistema de automatización del hogar sin costo adicional, mientras me beneficio de la potencia y confiabilidad de su plataforma.
Creo que es un muy buena iniciativa de Powens para permitir eso. Al ofrecer acceso gratuito a su caja de arena, permiten a los hackers de automatización del hogar como yo experimentar y crear soluciones personalizadas. Estos hackers, a menudo apasionados e influyentes en sus círculos profesionales o personales, pueden recomendar plataformas sólidas y serias como Powens a servicios o empresas más amplios. Es una estrategia de ganar-ganar: Powens gana visibilidad y credibilidad, mientras que los usuarios se benefician de una herramienta confiable y eficiente.
He añadido un espacio de trabajo
Una vez conectado, creé un nuevo espacio de trabajo. Un espacio de trabajo es un espacio de trabajo que reúne mis configuraciones y aplicaciones. Yo nombré a la mía Domótica de Sigalou para mantener un registro claro de mi proyecto.

He añadido un área
Luego agregué un dominio a mi espacio de trabajo. Esto permite configurar el entorno para consultas de API. Elegí el dominio sigalou.


La configuración tomó unos minutos. Una vez completado, noté que los comandos API tenían que enviarse a la siguiente dirección: https://sigalou-sandbox.biapi.pro.
He añadido una aplicación
La adición de una aplicación es obligatoria para establecer la conexión con mi cuenta bancaria. Esta aplicación genera identificadores únicos (ID de cliente y cliente secreto) que se utilizarán para autenticar solicitudes de API.


Esta aplicación me ha proporcionado una ID de cliente y uno cliente secreto. Los he notado cuidadosamente, ya que serán necesarios para crear un usuario de API.
He instalado Postman para Windows
Para interactuar con la API de Powens, utilicé Postman, una herramienta muy útil para enviar y probar consultas de API. Postman le permite simular llamadas API y ver respuestas en tiempo real.

He añadido un usuario a través de la API
Para crear un usuario, envié un comando POST a la siguiente URL: https://sigalou-sandbox.biapi.pro/2.0/auth/init. Utilicé el cliente de identificación previamente recuperado y el cliente secreto.

En el cuerpo de la aplicación (Cuerpo / crudo / JSON), añadí:
En la respuesta, tomé nota de la id_user y auth _token, que se utilizará para los próximos pasos.
Tengo un código temporal
Este código temporal es necesario para establecer la conexión con mi cuenta bancaria. Para obtenerlo, envié un comando GET a la siguiente URL: https://sigalou-sandbox.biapi.pro/2.0/auth/token/code?type=singleAccess.

Utilicé el auth _token Recuperado previamente de Authorization / Bearer Token. En la respuesta, tomé nota de la código temporal.
Lancé el Webview para conectar mi cuenta bancaria

Para establecer la conexión con mi cuenta bancaria, construí la URL de Webview en Link Builder y comencé la conexión haciendo clic en Abrir y probar

Probé la recuperación del saldo de la cuenta
Para recuperar el saldo de mi cuenta, envié un pedido GET a la siguiente URL: https://sigalou-sandbox.biapi.pro/2.0/users/1/accounts, donde 1 es mi id _user.

En la respuesta, recuperé el saldo de mi cuenta, que era 599.84€ durante mi prueba.
Probé la recuperación de las últimas transacciones
Para recuperar las últimas transacciones, envié un comando GET a la siguiente URL: https://sigalou-sandbox.biapi.pro/2.0/users/1/transactions?limit=10, donde 1 es mi id _user.

La respuesta contenía un JSON con mis últimas 10 transacciones.
Convertí las consultas de API en sensores de Home Assistant
Para integrar estos datos en Home Assistant, creé dos sensores REST: a) Transacciones de _bank y Saldo de _bank. Aquí está el código utilizado:
- plataforma: nombre del resto: Recurso «Transacciones de _bank»: https://sigalou-sandbox.biapi.pro/2.0/users/1/transactions params: límite: 25 encabezados: Autorización: !token secreto_bank scan_interval: 31536000 # Deshabilita las actualizaciones automáticas (1 año) json_attributes: - first_date - last_date - transactions - total value_template: "{{ now().strftime('%d/%m/%Y %H:%M:%S') }}" - plataforma: nombre del resto: «_bank balance» (Saldo de bank): https://sigalou-sandbox.biapi.pro/2.0/users/1/accounts encabezados: Autorización: !token secreto_bank scan_interval: 31536000 # Deshabilita las actualizaciones automáticas value_template: "{{value_json.balance }}" unidad_de _measurement: «€»
Estos sensores deben colocarse en el archivo Sensores.yaml.

Para que el token se envíe correctamente, agregué esta línea al archivo Secretos.yaml :
token _bank: Portador a8N5q1aUVEa33wl0dCJM...

Una vez configurados, los sensores aparecieron en Home Assistant:

Observaciones sobre estos sensores:
- La actualización está configurada en 3153600 segundos (aproximadamente 1 año), ya que he planeado actualizar los datos a través de la automatización diaria al mediodía. Esto me permitirá recibir notificaciones basadas en el saldo o las últimas transacciones.
- Los sensores se pueden simplificar. Inicialmente había incluido datos como 1 _date y ultimo _date, Pero finalmente los retiré porque no eran útiles en la producción.
- El parámetro límite: 25 Se puede ajustar de acuerdo con el tamaño de la pantalla y la tarjeta elegida en el tablero.
He añadido plantillas para calcular lo que necesito
En el expediente templates.yaml, en virtud de sensor, he añadido estas plantillas:

- nombre: «_a _venir _montant transactions» (en inglés): >- {% set transactions = estado_attr('sensor.transactions_bank', 'transacciones') %} {% conjunto total = espacio de nombres(amount=0) %} {% para transacciones en transacciones si transaction.coming %} {% establecer total.amount = total.amount + transaction.value %} {% endfor %} {{ total.amount }} unidad _of _measurement: "€" - nombre: _id single "disponible _ balance": sensor.balance _disponible unidad _of _measurement: Estado «€»: >- {% «set balance = states('sensor.solde _banque') | float» (en inglés). %} {% set depenses = states('sensor.transactions _a _venir _montant') | float %} {{ (saldo + gastos) | round(2) }}
- El sensor _a _venir _montant Transacciones calcula el importe total de las transacciones futuras (como las retiradas programadas).
- El sensor _ balancedisponible calcula el saldo real restando las transacciones futuras del saldo actual.
Agrego automatización para actualizar los datos
Como expliqué anteriormente, desactivé voluntariamente la actualización automática de los sensores REST asignándoles un valor de intervalo de exploración _ muy alto (31536000 segundos, es decir, aproximadamente 1 año). Esto me permite controlar manualmente cuándo se actualizan los datos, en lugar de actualizarlos cada x minutos. Este enfoque se adapta más a mis necesidades, ya que planeo usar estos datos para activar notificaciones basadas en mi saldo o en las últimas transacciones importantes.
Para gestionar esto, agregué una automatización en Home Assistant que actualiza mis dos sensores (Saldo de _bank y a) Transacciones de _bank) todos los días al mediodía. Aquí está el código para esta automatización:
alias: Actualizar la descripción de la cuenta bancaria: "" Disparadores: - desencadenante: hora en: Condiciones "12:00:00": [] acciones: - acción: homeassistant.update _entity data: _id (entidad): - sensor.balance _bank - sensor.transactions Modo _bank: soltero

Esta automatización es simple pero efectiva: activa una actualización de los sensores al mediodía cada día. Esto me permite mantener mis datos actualizados sin sobrecargar la API o mi sistema con consultas innecesarias. Además, me da la posibilidad de agregar otras acciones más adelante, como enviar notificaciones o ejecutar scripts basados en los datos recuperados.
Me doy cuenta de los mapas y la pantalla del tablero
Después de configurar los sensores y automatizaciones, diseñé un panel de control en Home Assistant para visualizar mis datos bancarios de una manera clara y organizada. Aquí está el resultado final de mis pruebas:

Aquí está el código completo de la página, que voy a desglosar para explicar cada parte:
Tipo: max _columns secciones: 4 vías: secciones ss: - tipo: Tarjetas de cuadrícula: - tipo: entidad: Sensor.solde _bank nombre: Icono de saldo bancario: mdi:red de transferencia bancaria_opciones: columnas: tarjeta completa _mod: estilo: | ha-card { relleno: 4px; radio fronterizo: 15px; } .icon ha-state-icon { --mdc-icon-size: 50px!importante; /* Tamaño del icono */ margen inferior: 10px; } - tipo: contenido de la reducción: > {% set transactions = estado_attr('sensor.transactions_bank', 'transacciones') %} ## HOY {% para transacciones en transacciones %} {% si no es transaction.coming %} {% si transaction.date %} {% _obj = transaction.date | como _datetime %} {% set formateado _date = date_obj.strftime('%d/%m/%Y') %} {% de lo contrario %} {% set formateado _date = 'Fecha desconocida' %} {% endif %} {% if transaction.type == 'tarjeta' %💳 {{ formateado _date }} {% elif transaction.type == 'banco' %} 🏦 {{ _date formateado }} {% elif transaction.type == 'check' %} 📝 {{ _date formateado }} {% elif transaction.type == 'transferencia' %💸 {{ formateado _date }} {% de lo contrario %⚪ {{ formateado _date }} {% endif %}
<strong>
{% si transaction.value > 0 %} 🟢 {{ transaction.formatted _value }} {% de lo contrario %} 🔴 {{ transaction.formatted _value }} {% endif %}
</strong>
<small>{{transaction.wording }}</small>
{% endif %} {% endfor %} grid _opciones: columnas: 24 filas: auto - tipo: tarjetas de pila vertical: - tipo: contenido de la reducción: > {% set transactions = estado_attr('sensor.transactions_bank', 'transacciones') %} ## FUTURO {{ states('sensor.transactions _a_venir _montant') |float |round(2) }} € {% para transacciones en transacciones %} {% si transaction.coming %} {% si transaction.date %} {% _obj = transaction.date | como _datetime %} {% set formateado _date = date_obj.strftime('%d/%m/%Y') %} {% de lo contrario %} {% set formateado _date = 'Fecha desconocida' %} {% endif %} {% if transaction.type == 'tarjeta' %💳 {{ formateado _date }} {% elif transaction.type == 'banco' %} 🏦 {{ _date formateado }} {% elif transaction.type == 'check' %} 📝 {{ _date formateado }} {% elif transaction.type == 'transferencia' %💸 {{ formateado _date }} {% de lo contrario %⚪ {{ formateado _date }} {% endif %} {% si transaction.value > 0 %} 🟢 {{ transaction.formatted _value }} - {{ transaction.wording }} {% de lo contrario %} 🔴 {{ transaction.formatted _value }} - {{ transaction.wording }} {% endif %} {% endif %} {% endfor %} grid _opciones: columnas: 12 filas: auto - tipo: entidad: Sensor.solde _Nombre disponible: Icono de saldo disponible: mdi:red de transferencia bancaria_opciones: columnas: tarjeta completa _mod: estilo: | ha-card { relleno: 4px; radio fronterizo: 15px; } .icon ha-state-icon { --mdc-icon-size: 50px!importante; /* Tamaño del icono */ margen inferior: 10px; } - tipo: entidades entidades: - entidad: sensor.transactions _bank nombre: Última actualización del formato de datos: columna de fecha y hora _span: 3 tarjetas: [] icono: mdi:currency-eur
Descomposición del tablero de instrumentos
Mi panel de control está estructurado en varias secciones y mapas para mostrar la información de una manera clara e intuitiva. Esto es lo que hace cada tarjeta:
1. Tarjeta de "saldo bancario"
Esta tarjeta muestra el saldo actual de mi cuenta bancaria. Utiliza el sensor sensor.balance _bank e incluye un icono estilizado (mdi:bank-transfer) para una mejor visibilidad. He añadido un estilo personalizado para redondear las esquinas del mapa y ampliar el icono.
2. Tarjeta «AUJOURD»HUI
Esta tarjeta muestra las transacciones realizadas hoy. Utiliza una plantilla de Markdown para formatear los datos:
- Las transacciones se clasifican por tipo (💳 para tarjetas, 🏦 para transferencias, etc.).
- Los importes se muestran en verde (🟢) para los créditos y en rojo (🔴) para los débitos.
- La fecha de cada transacción está formateada en el formato dd/mm/aaaa.
3. Tarjeta "FUTURE"
Esta tarjeta muestra las próximas transacciones (como los débitos directos programados). También utiliza una plantilla de Markdown:
- La cantidad total de transacciones futuras se muestra en la parte superior de la tarjeta.
- Cada transacción se enumera con su tipo, fecha y cantidad.
4. Tarjeta de "Saldo disponible"
Esta tarjeta muestra el saldo disponible después de la deducción de transacciones futuras. Utiliza el sensor sensor.balance _disponible y comparte el mismo estilo que la tarjeta "Balance Bancario".
5. Mapa "Última actualización de datos"
Esta tarjeta muestra la fecha y hora de la última actualización de los datos bancarios. Utiliza el sensor sensor.transactions _bank y formatear la fecha en formato fecha y hora.

