Update
This commit is contained in:
parent
756cc93cfb
commit
47e8845517
2 changed files with 297 additions and 208 deletions
498
README.md
498
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/
|
||||
└── <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
|
||||
```
|
||||
|
|
|
|||
3
requirements.txt
Normal file
3
requirements.txt
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
fints
|
||||
openpyxl
|
||||
mt-940
|
||||
Loading…
Add table
Add a link
Reference in a new issue