From 47e88455175bdb7fd4acf29c553f9dd80fb21c33 Mon Sep 17 00:00:00 2001 From: hubobel Date: Tue, 16 Jun 2026 18:46:19 +0200 Subject: [PATCH] Update --- README.md | 502 +++++++++++++++++++++++++++-------------------- requirements.txt | 3 + 2 files changed, 297 insertions(+), 208 deletions(-) create mode 100644 requirements.txt diff --git a/README.md b/README.md index 2369eea..e78fcd3 100644 --- a/README.md +++ b/README.md @@ -1,251 +1,337 @@ -# ING Kontostandsabfrage für ioBroker +# ING FinTS Auswertung -## Zweck +Python-Skripte zur automatisierten Auswertung eines ING-Kontos über FinTS. -Dieses Python-Skript ruft den aktuellen Kontostand eines ING-Kontos per FinTS ab und schreibt den Wert automatisch in einen ioBroker-Datenpunkt über die Simple-API. +## Funktionen -## Systemumgebung +### balance.py -- Betriebssystem: Debian Linux -- Benutzer: `banking` -- Ausführungsort: VM `Applikationen` -- Bank: ING Deutschland -- Übertragung: HTTP Simple-API an ioBroker +Ermittelt den aktuellen Kontostand und überträgt diesen an ioBroker. -## Verzeichnisstruktur +Ausgabe: + +* Kontostand +* Buchungsdatum + +Optional: + +* Übertragung an ioBroker + +--- + +### transactions.py + +Lädt die Kontobewegungen einer Kalenderwoche direkt von der ING. + +Erzeugt: ```text -/home/banking/ -├── .ing.conf -├── bin/ -│ └── balance.py -└── logs/ - └── balance.log -``` - -## Konfigurationsdatei - -Datei: - -```text -/home/banking/.ing.conf -``` - -Inhalt: - -```ini -# ING -ING_USER=1234567890 -ING_PIN=geheimepin -ING_IBAN=DE00123456789012345678 - -# ioBroker -IOBROKER_HOST=10.0.1.122 -IOBROKER_PORT=8087 -IOBROKER_DP=javascript.0.Finanzen.ING.Kontostand -``` - -## Berechtigungen - -```bash -chmod 700 /home/banking -chmod 700 /home/banking/bin -chmod 700 /home/banking/bin/balance.py -chmod 700 /home/banking/logs -chmod 600 /home/banking/.ing.conf -``` - -## Installation - -Python-Abhängigkeit installieren: - -```bash -python3 -m pip install --user --break-system-packages fints -``` - -Prüfen: - -```bash -python3 -c "from fints.client import FinTS3PinTanClient; print('OK')" -``` - -## Manuelle Ausführung - -```bash -python3 /home/banking/bin/balance.py -``` - -Bei erfolgreicher Ausführung erfolgt keine Konsolenausgabe. - -Der aktuelle Kontostand wird direkt in den konfigurierten ioBroker-Datenpunkt geschrieben. - -## Logging - -Fehler werden protokolliert in: - -```text -/home/banking/logs/balance.log -``` - -Logdatei anzeigen: - -```bash -tail -f /home/banking/logs/balance.log -``` - -## Cronjob - -Ausführung Montag bis Samstag alle 4 Stunden: - -```cron -0 */4 * * 1-6 /usr/bin/python3 /home/banking/bin/balance.py -``` - -Cronjob bearbeiten: - -```bash -crontab -e -``` - -Cronjobs anzeigen: - -```bash -crontab -l -``` - -## Sicherheit - -- Zugangsdaten werden nicht im Skript gespeichert. -- Die Konfiguration liegt ausschließlich in `/home/banking/.ing.conf`. -- Die Datei ist nur für den Benutzer `banking` lesbar. -- Die ING-Zugangsdaten werden nicht auf dem ioBroker-System gespeichert. -- Die Kommunikation erfolgt ausschließlich zwischen der VM `Applikationen`, der ING und dem lokalen ioBroker-Server. - -## Hinweise - -- Für die ING wird FinTS verwendet. -- FinTS-Server: `https://fints.ing.de/fints/` -- Der ioBroker-Datenpunkt sollte vom Typ `number` sein. -- Die ING kann aufgrund regulatorischer Vorgaben eine regelmäßige Anmeldung im normalen Online-Banking verlangen. -## Transaktions-Export - -Zusätzlich zum Kontostandsabruf steht ein separates Skript für den Export der Kontotransaktionen zur Verfügung. - -Datei: - -```text -/home/banking/bin/transactions.py -``` - -### Funktion - -Das Skript: - -- verbindet sich per FinTS mit der ING -- liest die Transaktionen der letzten 7 Tage -- exportiert die Daten als CSV-Datei -- exportiert die Daten als JSON-Datei -- schreibt statistische Kennzahlen nach ioBroker - -### Verzeichnisstruktur - -```text -/home/banking/Transaktionen/ -└── / +Transaktionen/ +└── YYYY/ ├── csv/ - │ └── transactions__KW.csv + │ └── transactions_YYYY_KWxx.csv └── json/ - └── transactions__KW.json + └── transactions_YYYY_KWxx.json +``` + +Zusätzlich: + +* Anzahl Transaktionen +* Wochensumme +* Wochenausgaben + +werden an ioBroker übertragen. + +--- + +### categorize_transactions.py + +Kategorisiert die bereits exportierten Transaktionen anhand der Datei `Kategorien.json`. + +Es erfolgt kein erneuter Abruf bei der ING. + +Quelle: + +```text +Transaktionen/YYYY/json/transactions_YYYY_KWxx.json +``` + +Erzeugt: + +```text +Transaktionen/ +└── YYYY/ + ├── categorized_csv/ + │ └── categorized_transactions_YYYY_KWxx.csv + ├── categorized_json/ + │ └── categorized_transactions_YYYY_KWxx.json + ├── summary/ + │ └── category_summary_YYYY_KWxx.json + └── jahresauswertung/ + └── Kontobewegungen_YYYY.xlsx +``` + +--- + +## Excel-Auswertung + +Die Datei + +```text +Kontobewegungen_YYYY.xlsx +``` + +enthält: + +### Blatt "Übersicht" + +Monatsübergreifende Übersicht aller vorhandenen Kalenderwochen: + +* Einnahmen +* Ausgaben +* Saldo + +### Blatt "KWxx" + +Für jede Kalenderwoche: + +#### Kennzahlen + +* Anzahl Transaktionen +* Einnahmen +* Ausgaben +* Saldo + +#### Kategorien + +* Einnahmen pro Kategorie +* Ausgaben pro Kategorie +* Saldo pro Kategorie + +#### Kontobewegungen + +* Datum +* Betrag +* Kategorie +* Name +* Verwendungszweck + +--- + +## Kategorien + +Datei: + +```text +Kategorien.json ``` Beispiel: -```text -/home/banking/Transaktionen/ -└── 2026/ - ├── csv/ - │ └── transactions_2026_KW23.csv - └── json/ - └── transactions_2026_KW23.json -``` - -### CSV-Inhalt - -```csv -date;amount;posting_text;applicant_name;purpose -2026-06-01;-17.80 EUR;Lastschrifteinzug;ERGO Krankenversicherung AG;... -2026-06-05;-10.99 EUR;Kartenzahlung;Amazon;... -``` - -### JSON-Inhalt - ```json -[ - { - "date": "2026-06-01", - "amount": "-17.80 EUR", - "posting_text": "Lastschrifteinzug", - "applicant_name": "ERGO Krankenversicherung AG", - "purpose": "..." - } -] +{ + "Haus": [ + "ERGO", + "ENTEGA", + "WASSER" + ], + + "Lebensmittel": [ + "REWE", + "ALDI", + "LIDL" + ], + + "Luxus": [ + "AMAZON" + ], + + "Ausgleich": [ + "AUSGLEICH" + ] +} ``` -### ioBroker-Datenpunkte +Die Suche erfolgt in: -Das Skript aktualisiert folgende Datenpunkte: +* Name +* Verwendungszweck -| Datenpunkt | Beschreibung | -|------------|-------------| -| `javascript.0.Variablen.Konto_Transaktionen` | Anzahl der Transaktionen der letzten 7 Tage | -| `javascript.0.Variablen.Konto_Wochensumme` | Summe aller Transaktionen der letzten 7 Tage | -| `javascript.0.Variablen.Konto_Wochenausgaben` | Summe aller Ausgaben der letzten 7 Tage | +Groß-/Kleinschreibung wird ignoriert. -### Cronjob +--- -Ausführung jeden Sonntag um 23:00 Uhr: +## Verzeichnisstruktur -```cron -0 23 * * 0 /usr/bin/python3 /home/banking/bin/transactions.py +```text +/home/banking +├── .ing.conf +├── Kategorien.json +├── ING +│ ├── balance.py +│ ├── transactions.py +│ ├── categorize_transactions.py +│ └── README.md +├── Transaktionen +│ └── YYYY +└── logs ``` -Cronjobs anzeigen: +--- + +## Konfiguration + +Datei: + +```text +~/.ing.conf +``` + +Beispiel: + +```ini +ING_USER=12345678 +ING_PIN=geheim +ING_IBAN=DE...... +IOBROKER_HOST=10.0.1.10 +IOBROKER_PORT=8087 + +IOBROKER_DP_BALANCE=javascript.0.Variablen.Konto_Saldo +IOBROKER_DP_TRANSACTIONS=javascript.0.Variablen.Konto_Transaktionen +IOBROKER_DP_WEEKSUM=javascript.0.Variablen.Konto_Wochensumme +IOBROKER_DP_WEEKEXPENSES=javascript.0.Variablen.Konto_Wochenausgaben +``` + +--- + +## Installation + +Repository klonen: ```bash -crontab -l +git clone https://git.hintergasse.de/hubobel/ING.git ``` -Cronjobs bearbeiten: +Python-Abhängigkeiten installieren: ```bash -crontab -e +pip install -r requirements.txt ``` -### Manuelle Ausführung +--- + +## Wichtige Befehle + +### Repository aktualisieren ```bash -python3 /home/banking/bin/transactions.py -``` - -### Bedienung -``` -# Aktualisieren git -C ~/ING pull +``` -# Kontostand abrufen +### Kontostand abrufen + +```bash python3 ~/ING/balance.py +``` -# Transaktionen abrufen +### Aktuelle Kalenderwoche laden + +```bash python3 ~/ING/transactions.py +``` -# Kategorisieren +### Bestimmte Kalenderwoche laden + +(Beispiel KW23/2026) + +```bash +python3 ~/ING/transactions.py 2026 23 +``` + +### Aktuelle Kalenderwoche kategorisieren + +```bash python3 ~/ING/categorize_transactions.py ``` -### Hinweise +### Bestimmte Kalenderwoche kategorisieren -- Die Exportdateien werden pro Kalenderwoche neu erstellt. -- Vorhandene Dateien derselben Kalenderwoche werden überschrieben. -- CSV und JSON werden getrennt nach Jahr archiviert. -- Die ING-Zugangsdaten werden aus der Datei `.ing.conf` gelesen. -- Das Skript verwendet dieselbe Konfiguration wie `balance.py`. \ No newline at end of file +(Beispiel KW23/2026) + +```bash +python3 ~/ING/categorize_transactions.py 2026 23 +``` + +--- + +## Logging + +Linux: + +```text +/home/banking/logs +``` + +Windows (PyCharm): + +```text +/logs +``` + +Logdateien: + +```text +balance.log +transactions.log +categorize_transactions.log +``` + +--- + +## Nextcloud + +### Linux + +Synchronisation über rclone: + +```bash +rclone copy \ +~/Transaktionen/2026/jahresauswertung/Kontobewegungen_2026.xlsx \ +nextcloud:Bank/2026 +``` + +### Windows + +Automatische Kopie nach: + +```text +C:\Users\hubob\Nextcloud\Bank\2026 +``` + +--- + +## Cronjobs + +### Kontostand + +Montag bis Samstag alle 4 Stunden: + +```cron +0 */4 * * 1-6 /usr/bin/python3 /home/banking/ING/balance.py +``` + +### Transaktionen + +Sonntag 23:30 Uhr: + +```cron +30 23 * * 0 /usr/bin/python3 /home/banking/ING/transactions.py +``` + +### Kategorisierung + +Sonntag 23:37 Uhr: + +```cron +37 23 * * 0 /usr/bin/python3 /home/banking/ING/categorize_transactions.py +``` diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..052b718 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +fints +openpyxl +mt-940 \ No newline at end of file