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 Ermittelt den aktuellen Kontostand und überträgt diesen an ioBroker.
- Benutzer: `banking`
- Ausführungsort: VM `Applikationen`
- Bank: ING Deutschland
- Übertragung: HTTP Simple-API an ioBroker
## Verzeichnisstruktur Ausgabe:
* Kontostand
* Buchungsdatum
Optional:
* Übertragung an ioBroker
---
### transactions.py
Lädt die Kontobewegungen einer Kalenderwoche direkt von der ING.
Erzeugt:
```text ```text
/home/banking/ Transaktionen/
├── .ing.conf └── YYYY/
├── 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>/
├── csv/ ├── csv/
│ └── transactions_<Jahr>_KW<Kalenderwoche>.csv │ └── transactions_YYYY_KWxx.csv
└── json/ └── 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: 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 ```json
[ {
{ "Haus": [
"date": "2026-06-01", "ERGO",
"amount": "-17.80 EUR", "ENTEGA",
"posting_text": "Lastschrifteinzug", "WASSER"
"applicant_name": "ERGO Krankenversicherung AG", ],
"purpose": "..."
} "Lebensmittel": [
] "REWE",
"ALDI",
"LIDL"
],
"Luxus": [
"AMAZON"
],
"Ausgleich": [
"AUSGLEICH"
]
}
``` ```
### ioBroker-Datenpunkte Die Suche erfolgt in:
Das Skript aktualisiert folgende Datenpunkte: * Name
* Verwendungszweck
| Datenpunkt | Beschreibung | Groß-/Kleinschreibung wird ignoriert.
|------------|-------------|
| `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 |
### Cronjob ---
Ausführung jeden Sonntag um 23:00 Uhr: ## Verzeichnisstruktur
```cron ```text
0 23 * * 0 /usr/bin/python3 /home/banking/bin/transactions.py /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 ```bash
crontab -l git clone https://git.hintergasse.de/hubobel/ING.git
``` ```
Cronjobs bearbeiten: Python-Abhängigkeiten installieren:
```bash ```bash
crontab -e pip install -r requirements.txt
``` ```
### Manuelle Ausführung ---
## Wichtige Befehle
### Repository aktualisieren
```bash ```bash
python3 /home/banking/bin/transactions.py
```
### Bedienung
```
# Aktualisieren
git -C ~/ING pull git -C ~/ING pull
```
# Kontostand abrufen ### Kontostand abrufen
```bash
python3 ~/ING/balance.py python3 ~/ING/balance.py
```
# Transaktionen abrufen ### Aktuelle Kalenderwoche laden
```bash
python3 ~/ING/transactions.py 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 python3 ~/ING/categorize_transactions.py
``` ```
### Hinweise ### Bestimmte Kalenderwoche kategorisieren
- Die Exportdateien werden pro Kalenderwoche neu erstellt. (Beispiel KW23/2026)
- Vorhandene Dateien derselben Kalenderwoche werden überschrieben.
- CSV und JSON werden getrennt nach Jahr archiviert. ```bash
- Die ING-Zugangsdaten werden aus der Datei `.ing.conf` gelesen. python3 ~/ING/categorize_transactions.py 2026 23
- Das Skript verwendet dieselbe Konfiguration wie `balance.py`. ```
---
## 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
```

3
requirements.txt Normal file
View file

@ -0,0 +1,3 @@
fints
openpyxl
mt-940