Firefly III – Gestor de finanzas personales
Supongo que quizás muchos lo conoceréis, Firefly III es un servicio que podemos disponer para gestionar nuestras finanzas. Un gestor que nos ayudará a comprender nuestras cuentas bancarias, podremos comprender fácilmente dónde se nos va el dinero, por supuesto open source y on-premise!
Bueno, pues eso, si necesitáis tener más visibilidad sobre vuestras cuentas bancarias, o tener un mayor seguimiento de ingresos y gastos, FireFly III lleva años ayudando en este sentido. Lo tendremos instalado en menos de 5 minutos gracias a Docker!
Existen diversas formas de instalar Firely III (y de configurarlo), en base a lo que necesitemos; en este caso instalaremos Firefly III en un contenedor de Docker, antes de proceder nos descargamos los ficheros que necesitaremos y los adaptaremos a nuestra necesidad:
wget https://raw.githubusercontent.com/firefly-iii/docker/main/docker-compose-importer.yml -O docker-compose.yml wget https://raw.githubusercontent.com/firefly-iii/firefly-iii/main/.env.example -O .env wget https://raw.githubusercontent.com/firefly-iii/docker/main/database.env -O .db.env wget https://raw.githubusercontent.com/firefly-iii/data-importer/main/.env.example -O .importer.env
Editamos el fichero ‘.env’ y al menos modificaremos la APP_KEY, los locales y los credenciales de acceso a la BD de MySQL, ya que este fichero dispondrá de la mayor parte de la configuración, la parte de correo si queremos notificaciones…
APP_KEY=secretrode32caracteres DEFAULT_LANGUAGE=es_ES TZ=Europe/Madrid ... DB_USERNAME=USUARIO_BD DB_PASSWORD=CONTRASEÑA_USUARIO_BD ...
Editamos el fichero ‘.db.env’ y al menos modificamos los credenciales de acceso a la BD (los mismos que en el paso anterior):
MYSQL_USER=USUARIO_BD MYSQL_PASSWORD=CONTRASEÑA_USUARIO_BD
Por último, si nos interesa tener el contenedor para importar datos a Firefly editamos ‘.importer.env’ (y si no, esto lo obviamos). E indicaremos la dirección IP o FQDN del servidor Firefly III, así como elegiremos la forma de autenticarnos, habitualmente con el Access Token (más adelante vemos cómo generarlo):
FIREFLY_III_URL=http://IP_O_FQDN_FIREFLY_III FIREFLY_III_ACCESS_TOKEN=ey... TZ=Europe/Madrid
Y acabamos editamos el ‘docker-compose.yml’ si es que nos interesa realizar algún cambio, en mi caso únicamente abrí los puertos, el 80tcp para FireFly III, el 81tcp para el Importer y como no el 3306 lo dejo abierto para consultar el MySQL desde fuera, por ejemplo desde Grafana, quedando:
services: ... app: ... ports: - '80:8080' ... ... db: ... ports: - '3306:3306' ... ... importer: ... ports: - '81:8080' ...
Y, finalizamos ya levantando los contenedores:
docker compose -f docker-compose.yml up -d --pull=always
Ya podremos acceder a la web de Firefly iii, en este caso publicado en el puerto 80tcp de la IP del host de Docker, así que http://DIRECCION_IP_O_FQDN y la primera vez que entremos tenemos que crearnos una cuenta, indicamos nuestra dirección de correo y una contraseña & «Register»,
Según entremos deberemos de dar de alta nuestro primer Banco, y ya podremos comenzar a darle un vistazo a la aplicación, pero sin datos queda algo pobre… así que lo siguiente será importar los datos de nuestro banco!
Antes de nada, debemos decidir el tipo de autenticación que usaremos en el contenedor de ‘Firefly III Data Impor Tool’, lo más sencillo es que generemos un Token de acceso personal desde Firefly III y se lo indiquemos en el ‘.importer.env’
Si volvemos a regenerar los contenedores y nos conectamos a la web del ‘Firefly III Data Impor Tool’ (en mi caso en el puerto 81tp) podremos comenzar el proceso de importación, pulsamos en «Import file»,
En ‘Importable file’ dejaremos el fichero CSV que nos habremos descargado de nuestro banco, con todo el histórico que nos interese de los movimientos. El fichero de configuración opcional que nos pide, por ahora no lo tendremos, pero una vez que acabemos este asistente, lo podremos generar, un fichero JSON que estará alimentado de las opciones que vamos a elegir a continuación, «Next»,
Indicamos si el fichero CSV tiene encabezados, si queremos convertirlo a UTF-8, cual es el delimitador del CSV, en que banco lo vamos a importar de FireFly III, el formato de la fecha… «Submit»,
Dependiendo las opciones elegidas anteriormente ya nos mostrará el contenido de nuestro fichero y nos separará las columnas… podremos ignorar las columnas que no nos interesen importar (por supuesto), y asociaremos el rol de cada columna, al menos importaremos los campos de ‘Transaction date’, ‘Description’ y ‘Amount’. «Submit»,
Antes de comenzar, podremos pulsar en «Download configuration file» para no tener que hacer este asistente y acordarnos del formato que lleva, o para automatizar esta importación a futuro. Pulsamos en «Start job» para empezar,
Vemos cómo importa los movimientos del CSV… esperamos…
Una vez que acabe nos lo indicará, perfecto!
Empezamos a tener datos! Ole y ole Rigodón! Ahora ya podremos ver con más detalle cualquier informe, etc…
Lo siguiente, puede ser configurar las Categorías, para saber donde se nos va el dinero! para que categorice cada movimiento y diga si es hipoteca, gasto del supermercado, de gasolina, de Amazon…
Desde «Automatización» > «Reglas» las podremos crear, la configuración es sencilla, le indicamos un nombre y cuando queremos que se active, cuando detecte alguna palabra en la Descripción, por ejemplo…
Y ahí os dejo con Firefly III, dar unas vueltas que es muy sencillote; luego los quesitos, los informes quedan más elegantes, comprendemos donde se nos va nuestro presupuesto de una manera más detallada. Estos pantallazos que veis arriba es de una app también open source que podemos instalar en nuestros móviles (llamada Waterfly III) que se conecte a FireFly III y quizás es más cómoda…
Y… espera que no hemos acabado! Os acordáis que en el contenedor de la BD de MySQL le dejamos el 3306tcp abierto? Bueno pues con los credenciales de acceso podremos conectarnos y hacer consultas, como nos interese y verlo de manera preciosa y al gusto desde Grafana, por categorías, o simplemente los movimientos… pero no sólo por verlo desde Grafana, si no que con lo friki que soy, se me genera un PDF diario y esta información me viene en él, entre otras cosas más como puedan ser detalles interesantes de Home Assistant (estadísticas…)
Por cierto, los números que vemos, son fakes, a parte que están medio tapados para que no sepáis las cifras que manejo, no puedo decir tan públicamente los millones que tengo). Venga, al grano, el que necesite las queries de MySQL:
- Gráfica con el total:
SELECT tj.date as time, "Total" as metric, SUM(t.amount) OVER (ORDER BY tj.date ASC) AS value FROM transactions t INNER JOIN transaction_journals tj ON t.transaction_journal_id = tj.id WHERE t.account_id = 'TU_ID_DEL_BANCO' ORDER BY tj.date ASC;
- Gráfica con movimientos:
SELECT tj.date as time, t.amount as value, tj.description as metric FROM transactions t INNER JOIN transaction_journals tj ON t.transaction_journal_id = tj.id WHERE t.account_id = 'TU ID DEL BANCO' ORDER BY tj.date ASC;
- Tabla de movimientos:
SELECT t.amount, tj.description, LEFT(tj.date, 10) as fecha, SUM(t.amount) OVER (ORDER BY tj.date ASC) AS Total FROM transactions t INNER JOIN transaction_journals tj ON t.transaction_journal_id = tj.id WHERE t.account_id = 'TU ID DEL BANCO' ORDER BY date desc;
Y esperar que se me olvida lo más importante! ¿Cómo automatizamos esto? pues si tienes suerte y tu banco te permite conectarte de alguna manera, por API, etc… bien, si no, existe algún servicio de terceros (de pago y externo) que te podría ayudar… Otra forma es nosotros manualmente descargarnos los ficheros semanalmente y dejarlos siempre en la misma ruta, que luego un script los importe (hay un contenedor de cron), o usando alguna herramienta que nos grabe los clicks, entre en el banco y genere el informe… esta última es mi opción personal. Es muy cutre la verdad, tengo una MV aislada, sin acceso a Internet (nada más que a los sitios de los bancos)… y diariamente se ejecuta un Tiny Task (ojito) que genera los informes, como cada banco es de su padre, unos se generan en CSV, otros en XLS y otros en XLSX (tocate los…) así que os dejo algunos tips que tengo en un script que os pueden ayudar:
#Convierte de XLSX a CSV y usa el ; como separador: xlsx2csv -d ';' fichero.xlsx fichero.csv #Convierte de XLS a CSV sin perder el formato de las fechas: libreoffice --convert-to csv fichero.xls #Borra las primeras 15 líneas: sed -i '1,15d' fichero.csv #Importa el csv que hay en la carpeta actual con el JSON de configuración, ambos ficheros se llaman igual: sudo docker run --rm -v $PWD:/import -e FIREFLY_III_ACCESS_TOKEN=ey... -e IMPORT_DIR_ALLOWLIST=/import -e FIREFLY_III_URL=http://IP_FQDN_FIREFLY_III -e WEB_SERVER=false fireflyiii/data-importer:latest
Con este último comando importaremos el CSV al Banco indicado en el JSON una maravilla! Evitando movimientos duplicados, etc… Lo último (y ya de verdad), las queries de MySQL que hemos visto antes, nos pueden venir muy bien para integrarlo con Home Assistant, y que nos diga mientras desayunamos por nuestros altavoces el saldo que tenemos en las cuentas, así como los últimos movimientos… tela marinera!!!
Venga, ahora ya si que os dejo en paz, desearos que vaya muy bien, que trabajéis poco y ganéis mucho 😉 un abrazo!
Posts recomendados:
- Gestión de calendarios con Radicale - 23 de mayo de 2024
- Monitorizando las reglas UTM web de nuestro firewall gracias a Centreon - 21 de mayo de 2024
- Backup automatizado de la configuración de Fortigate - 16 de mayo de 2024