The Finware project is intended to help raise financial awareness and help households maintain and track a budget.
Simply put, the Finware project is an E-ink display that puts the monthly expenses in clear sight (like on the fridge door).
The project is made of two parts, the E-Ink display (LilyGo T5) and the Raspberry Pi as the brain of the operation. The E-Ink uses BLE to achieve low power consumption.
The E-Ink periodically (every 24 hours) pulls information from the nearby Raspberry Pi (RPi) and updates the received information on the screen.
The RPi saves the user's credentials to their credit card companies (100% locally) and scans (scrapes) for transactions to analyze.
The RPi sums the expenses and creates graphs for the E-Ink to pull and display to the user.
The user is also able to hide/unhide the information on the E-Ink using a dedicated button. There's also the button to switch views anda "reset" button used to refresh and forcefully pull information from the RPi.
This project was created by (Saar Ofek, Gur Telem, Daniel Bondar) in the Technion University with guidance from the Interdisciplinary Center for Smart Technologies.
The main (and some secondary that we're proud of) features are:
- Display sum of expenses (with progress bar and warning when exceeding maximum)
- Display graph of daily expenses (column for each day)
- Display expenses per credit card
- Add multiple credit card account (Max/Cal/Isracard/Amex/etc...)
- Error screenshot when failing to scrape
- Low energy consumption for the E-Ink - about 100mAh/month (achieved using BLE)
- User accessible settings using a web interface
- WiFi configuration
- Bluetooth pairing
- Security and Privacy (!!!)
- The web configuration is encrypted under a unique SSL certificate (generated during initial setup of the RPi). The certificate can be added to the user's devices to trust the portal as the valid page
- Bluetooth secure pairing using pairing code on the E-Ink and manually entering it on the RPi's config page
- Data is saved completely locally and not shared with any centralized server
- Only relevant data is stored (within the dates range)
- Email notification on over budget expenses
- Battery percentage indicator
- Attention symbol on the E-Ink to indicate an error that requires user intervention
- Multiple instances of the project in the same area
- Scheduled scraping will queue scraping tasks to mitigate load on the RPi
Like everything in life, the project isn't perfect. There are a few missing/problematic things:
- A base model RPi can be overloaded by manually force scraping many accounts
- Pairing errors are hard to decipher, we tried really hard to find an explanation for each error code but could not find anything
The folder hierarchy is as follows:
configuration-portal- code base for the RPi.favicon- icons for all the bank accountspublic- static files (icons, react base html, bank logos, etc...)scripts- Scripts for developers to use manually (not used in production)security- SSL related filessrc- react (frontend) sourcespages- specific components for each pageassets- public assets that can be used by the componentsshared- shared components between the entire websiteApp.tsx- main app logic
src-backend- well.... it's the source for the backend.controllers- (conceptual) singletons to handlersbluetooth-mock.controller.tsbluetooth.controller.tsfinancial-accounts.controller.tsutils.ts
models- database schemas (mongoose)routes- routers to redirect requests to the correct handlers (login authorization checks)util-managers- things that didn't fit within any of the controllers.
eink-display- code base for the E-Ink LilyGo display. This component was developed using platformio.platformio.ini- the platformio config file. all the esp32 libraries that were used in the project are mentioned there.srcmain.cpp- the main file of the E-ink. the setup and loop function are located there.PageManager.cpp- a class that manages the graphical aspects of the pages the E-ink displays.BluetoothManager.cpp- a class the manages the communication and information gathering with the RPI.utils.cpp- a util file