This commit is contained in:
hubobel 2026-06-16 18:46:19 +02:00
parent 756cc93cfb
commit 47e8845517
2 changed files with 297 additions and 208 deletions

502
README.md
View file

@ -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/
└── <Jahr>/
Transaktionen/
└── YYYY/
├── csv/
│ └── transactions_<Jahr>_KW<Kalenderwoche>.csv
│ └── transactions_YYYY_KWxx.csv
└── json/
└── transactions_<Jahr>_KW<Kalenderwoche>.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`.
(Beispiel KW23/2026)
```bash
python3 ~/ING/categorize_transactions.py 2026 23
```
---
## Logging
Linux:
```text
/home/banking/logs
```
Windows (PyCharm):
```text
<Projektverzeichnis>/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
```