471 lines
14 KiB
Markdown
471 lines
14 KiB
Markdown
# SteVe Transaction Report Generator
|
||
|
||
Python script voor het genereren van gedetailleerde rapporten van laadtransacties uit je SteVe OCPP backoffice.
|
||
|
||
## Installatie
|
||
|
||
### Vereisten
|
||
- Python 3
|
||
- MySQL Connector voor Python
|
||
|
||
### Installeer MySQL Connector
|
||
|
||
**Optie 1: Via pip (aanbevolen)**
|
||
```bash
|
||
pip3 install mysql-connector-python --break-system-packages
|
||
```
|
||
|
||
**Optie 2: Via apt**
|
||
```bash
|
||
sudo apt update
|
||
sudo apt install python3-mysql-connector
|
||
```
|
||
|
||
### Script installeren
|
||
```bash
|
||
# Maak een directory voor het script
|
||
mkdir -p ~/reports
|
||
|
||
# Plaats het script in de directory
|
||
# Upload steve_transaction_report.py naar ~/reports/
|
||
|
||
# Maak het uitvoerbaar
|
||
chmod +x ~/reports/steve_transaction_report.py
|
||
```
|
||
|
||
## Gebruik
|
||
|
||
### Standaard: Alle transacties gedetailleerd
|
||
Zonder specifieke opties toont het script de laatste transacties met volledige details:
|
||
|
||
```bash
|
||
python3 steve_transaction_report.py \
|
||
--host 192.168.178.201 \
|
||
--port 3307 \
|
||
--password 'JOUW_WACHTWOORD'
|
||
```
|
||
|
||
Dit toont standaard de laatste 10 transacties met volledige details inclusief verbruik per uur.
|
||
|
||
### Aantal transacties aanpassen
|
||
```bash
|
||
# Laatste 5 transacties gedetailleerd
|
||
python3 steve_transaction_report.py \
|
||
--host 192.168.178.201 \
|
||
--port 3307 \
|
||
--password 'JOUW_WACHTWOORD' \
|
||
--limit 5
|
||
|
||
# Laatste 20 transacties gedetailleerd
|
||
python3 steve_transaction_report.py \
|
||
--host 192.168.178.201 \
|
||
--port 3307 \
|
||
--password 'JOUW_WACHTWOORD' \
|
||
--limit 20
|
||
```
|
||
|
||
### Compact overzicht (tabel format)
|
||
Voor een snel overzicht zonder details:
|
||
|
||
```bash
|
||
python3 steve_transaction_report.py \
|
||
--host 192.168.178.201 \
|
||
--port 3307 \
|
||
--password 'JOUW_WACHTWOORD' \
|
||
--list
|
||
|
||
# Met meer transacties
|
||
python3 steve_transaction_report.py \
|
||
--host 192.168.178.201 \
|
||
--port 3307 \
|
||
--password 'JOUW_WACHTWOORD' \
|
||
--list --limit 20
|
||
```
|
||
|
||
### Specifieke transactie
|
||
```bash
|
||
python3 steve_transaction_report.py \
|
||
--host 192.168.178.201 \
|
||
--port 3307 \
|
||
--password 'JOUW_WACHTWOORD' \
|
||
--transaction 1
|
||
```
|
||
|
||
### Eenvoudig rapport (zonder uurdetails)
|
||
```bash
|
||
python3 steve_transaction_report.py \
|
||
--host 192.168.178.201 \
|
||
--port 3307 \
|
||
--password 'JOUW_WACHTWOORD' \
|
||
--transaction 1 \
|
||
--simple
|
||
```
|
||
|
||
## Parameters
|
||
|
||
| Parameter | Default | Verplicht | Beschrijving |
|
||
|-----------|---------|-----------|--------------|
|
||
| --host | localhost | Nee | Database server IP of hostname |
|
||
| --port | 3306 | Nee | MySQL/MariaDB poort |
|
||
| --database | stevedb | Nee | Database naam |
|
||
| --user | steve | Nee | Database gebruikersnaam |
|
||
| --password | - | **Ja** | Database wachtwoord |
|
||
| --list | - | Nee | Toon compact overzicht (tabel) |
|
||
| --transaction | - | Nee | Specifieke transactie ID |
|
||
| --limit | 10 | Nee | Aantal transacties |
|
||
| --simple | - | Nee | Zonder uurdetails |
|
||
| --provider | NE | Nee | Energie provider code voor prijzen |
|
||
| --price-db | alfen | Nee | Database naam voor prijsgegevens |
|
||
| --price-host | (zelfde) | Nee | Database host voor prijzen |
|
||
| --price-port | (zelfde) | Nee | Database poort voor prijzen |
|
||
| --price-user | (zelfde) | Nee | Database gebruiker voor prijzen |
|
||
| --price-password | (zelfde) | Nee | Database wachtwoord voor prijzen |
|
||
|
||
## Rapport Inhoud
|
||
|
||
### Gedetailleerd rapport bevat:
|
||
- Laadpaal informatie
|
||
- Gebruiker en RFID tag
|
||
- Start en stop tijden
|
||
- Duur van de laadsessie
|
||
- Totaal verbruik in kWh
|
||
- **Verbruik en kosten per uur** met echte prijzen
|
||
- Statistieken:
|
||
- Aantal actieve laaduren
|
||
- Provider informatie
|
||
- Gemiddeld verbruik per uur
|
||
- Piekuur (meeste verbruik)
|
||
- Duurste en goedkoopste uur
|
||
- **Totale kosten (met echte prijzen!)**
|
||
- Gemiddelde prijs per kWh
|
||
|
||
### Compact overzicht bevat:
|
||
- Transactie ID
|
||
- Start datum/tijd
|
||
- Duur
|
||
- Totaal kWh
|
||
- Laadpaal
|
||
- RFID tag
|
||
|
||
## Prijzen Functionaliteit
|
||
|
||
Het script gebruikt **echte dynamische prijzen** uit je prijzen database in plaats van geschatte kosten!
|
||
|
||
### Prijzen Database
|
||
Het script haalt prijzen op uit twee tabellen:
|
||
- `dynamic_price_data` - Historische en huidige dagprijzen voor alle providers
|
||
- `dynamic_price_data_tommorow` - Prijzen voor de volgende dag (alleen NextEnergy)
|
||
|
||
### Providers
|
||
Standaard wordt NextEnergy (NE) gebruikt, maar je kunt elke provider kiezen:
|
||
|
||
**Beschikbare providers:**
|
||
- `NE` - NextEnergy (standaard)
|
||
- `AA` - AllAbout
|
||
- `AIP` - All in Power
|
||
- `ANWB` - ANWB Energie
|
||
- `BE` - Budget Energie
|
||
- `EE` - Essent Energie
|
||
- `EN` - Eneco
|
||
- `EVO` - EVO Energie
|
||
- `EZ` - Engie
|
||
- `FR` - Frank Energie
|
||
- `GSL` - Greenchoice
|
||
- `MDE` - Mijndomein Energie
|
||
- `TI` - Tibber
|
||
- `VDB` - Vandebron
|
||
- `VON` - Vattenfall
|
||
- `WE` - Welkom Energie
|
||
- `ZG` - Zonneplan
|
||
- `ZP` - Pure Energie
|
||
|
||
### Provider instellen
|
||
```bash
|
||
# Gebruik NextEnergy (standaard)
|
||
steve-report --transaction 1
|
||
|
||
# Gebruik een andere provider
|
||
steve-report --transaction 1 --provider AA
|
||
steve-report --transaction 1 --provider FR
|
||
```
|
||
|
||
### Aparte prijzen database credentials
|
||
Als je prijzen database andere login credentials heeft:
|
||
|
||
```bash
|
||
# Zelfde server, andere database en gebruiker
|
||
python3 steve_transaction_report.py \
|
||
--host 192.168.178.201 \
|
||
--port 3307 \
|
||
--user steve \
|
||
--password 'steve_wachtwoord' \
|
||
--price-user prijzen_user \
|
||
--price-password 'prijzen_wachtwoord' \
|
||
--transaction 1
|
||
|
||
# Andere server voor prijzen
|
||
python3 steve_transaction_report.py \
|
||
--host 192.168.178.201 \
|
||
--port 3307 \
|
||
--user steve \
|
||
--password 'steve_wachtwoord' \
|
||
--price-host 192.168.178.202 \
|
||
--price-port 3306 \
|
||
--price-user prijzen_user \
|
||
--price-password 'prijzen_wachtwoord' \
|
||
--transaction 1
|
||
|
||
# Via alias (voeg prijzen credentials toe aan alias)
|
||
alias steve-report='python3 ~/reports/steve_transaction_report.py \
|
||
--host 192.168.178.201 --port 3307 --user steve --password "steve_pass" \
|
||
--price-user prijzen_user --price-password "prijzen_pass"'
|
||
```
|
||
|
||
**Let op:** Als je geen prijzen credentials opgeeft, gebruikt het script automatisch dezelfde credentials als voor de SteVe database (alleen de database naam wijzigt naar `alfen`).
|
||
|
||
### Hoe het werkt
|
||
1. Voor elk uur tijdens het laden wordt de prijs opgehaald
|
||
2. De kosten worden berekend: **verbruik (kWh) × prijs (€/kWh)**
|
||
3. Het rapport toont prijzen en kosten per uur
|
||
4. Het totaal wordt berekend met de werkelijke prijzen
|
||
5. Als prijzen ontbreken voor een bepaald uur, wordt dit aangegeven
|
||
|
||
## Alias maken (aanbevolen)
|
||
|
||
Voor gemakkelijk gebruik maak je een alias aan:
|
||
|
||
```bash
|
||
# Voeg toe aan ~/.bashrc
|
||
echo "alias steve-report='python3 ~/reports/steve_transaction_report.py --host 192.168.178.201 --port 3307 --user steve --password \"JOUW_WACHTWOORD\"'" >> ~/.bashrc
|
||
|
||
# Herlaad bashrc
|
||
source ~/.bashrc
|
||
```
|
||
|
||
Nu kun je simpel gebruik maken van:
|
||
|
||
```bash
|
||
steve-report # Laatste 10 transacties gedetailleerd
|
||
steve-report --list # Compact overzicht
|
||
steve-report --limit 5 # Laatste 5 transacties
|
||
steve-report --transaction 3 # Specifieke transactie
|
||
```
|
||
|
||
## Voorbeelden
|
||
|
||
### Voorbeeld 1: Dagelijks overzicht
|
||
```bash
|
||
steve-report --limit 1
|
||
```
|
||
|
||
### Voorbeeld 2: Wekelijks overzicht
|
||
```bash
|
||
steve-report --list --limit 50
|
||
```
|
||
|
||
### Voorbeeld 3: Export naar bestand
|
||
```bash
|
||
steve-report --transaction 5 > laadrapport_$(date +%Y%m%d).txt
|
||
```
|
||
|
||
### Voorbeeld 4: Automatisch dagelijks rapport via cron
|
||
```bash
|
||
# Voeg toe aan crontab (crontab -e)
|
||
# Elke dag om 08:00 uur
|
||
0 8 * * * python3 ~/reports/steve_transaction_report.py --host 192.168.178.201 --port 3307 --password 'XXX' --limit 1 > ~/laadrapport_$(date +\%Y\%m\%d).txt
|
||
```
|
||
|
||
### Voorbeeld 5: Rapport via email
|
||
```bash
|
||
# Installeer mailutils
|
||
sudo apt install mailutils
|
||
|
||
# Voeg toe aan crontab
|
||
0 8 * * * python3 ~/reports/steve_transaction_report.py --host 192.168.178.201 --port 3307 --password 'XXX' --transaction 1 | mail -s "Laadrapport" jouw@email.nl
|
||
```
|
||
|
||
### Voorbeeld 6: Aparte prijzen database credentials
|
||
```bash
|
||
# Prijzen database heeft andere gebruiker
|
||
steve-report --price-user prijzen_user --price-password 'geheim2' --transaction 1
|
||
|
||
# Prijzen database op andere server
|
||
python3 steve_transaction_report.py \
|
||
--host 192.168.178.201 --port 3307 --password 'pass1' \
|
||
--price-host 192.168.178.202 --price-user prijzen_user --price-password 'pass2' \
|
||
--transaction 1
|
||
```
|
||
|
||
## Output Voorbeeld
|
||
|
||
```
|
||
================================================================================
|
||
LAADSESSIE RAPPORT - Transactie #1
|
||
================================================================================
|
||
Laadpaal: VAN_01971
|
||
Alfen Single S-Line thuis
|
||
Connector: 1
|
||
RFID Tag: 04BB29EAFD0F94
|
||
Gebruiker: kors
|
||
Start: 28-10-2025 18:27:42
|
||
Einde: 29-10-2025 06:12:43
|
||
Duur: 11u 45m
|
||
|
||
Start meterstand: 5518.267 kWh
|
||
Eind meterstand: 5540.121 kWh
|
||
Totaal geladen: 21.85 kWh
|
||
================================================================================
|
||
|
||
VERBRUIK EN KOSTEN PER UUR:
|
||
----------------------------------------------------------------------------------------------------
|
||
Uur Start (kWh) Eind (kWh) Geladen (kWh) Prijs (€/kWh) Kosten (€)
|
||
----------------------------------------------------------------------------------------------------
|
||
28-10 18:27 5518.267 5518.796 0.529 0.29124 0.15
|
||
29-10 01:12 5520.027 5522.945 2.918 0.22685 0.66
|
||
29-10 02:12 5525.658 5529.181 3.523 0.22166 0.78
|
||
29-10 03:12 5531.738 5539.881 8.143 0.21564 1.76
|
||
----------------------------------------------------------------------------------------------------
|
||
TOTAAL 5518.267 5540.121 21.854 €3.35
|
||
|
||
================================================================================
|
||
STATISTIEKEN:
|
||
--------------------------------------------------------------------------------
|
||
Actieve laaduren: 4
|
||
Provider: NE
|
||
Gemiddeld per actief uur: 3.78 kWh
|
||
Piekuur verbruik: 29-10 03:00 (8.14 kWh)
|
||
Duurste uur: 28-10 18:00 (€0.29124/kWh)
|
||
Goedkoopste uur: 29-10 03:00 (€0.21564/kWh)
|
||
|
||
TOTALE KOSTEN: €3.35
|
||
Gemiddelde prijs: €0.22913/kWh
|
||
================================================================================
|
||
```
|
||
|
||
## Troubleshooting
|
||
|
||
### "Access denied" error
|
||
- Controleer of het wachtwoord correct is (gebruik enkele quotes: `'wachtwoord'`)
|
||
- Controleer of de gebruiker toegang heeft tot de database
|
||
- Test de verbinding: `mysql -h 192.168.178.201 -P 3307 -u steve -p`
|
||
|
||
### "Can't connect to MySQL server"
|
||
- Controleer of host en poort correct zijn
|
||
- Controleer of de database server draait
|
||
- Controleer firewall instellingen
|
||
|
||
### "No module named 'mysql.connector'"
|
||
Installeer de MySQL connector:
|
||
```bash
|
||
pip3 install mysql-connector-python --break-system-packages
|
||
```
|
||
|
||
### Geen transacties gevonden
|
||
- Controleer of er transacties in de database staan
|
||
- Controleer of de database naam correct is (standaard: stevedb)
|
||
- Test met: `mysql -h HOST -P PORT -u USER -p -e "SELECT COUNT(*) FROM stevedb.transaction"`
|
||
|
||
### Speciale tekens in wachtwoord
|
||
Gebruik altijd enkele quotes rond het wachtwoord:
|
||
```bash
|
||
--password 'Mijn$Wachtw00rd!'
|
||
```
|
||
|
||
### Prijzen database problemen
|
||
Als je melding krijgt dat prijzen ontbreken of verbinding mislukt:
|
||
|
||
**Stap 1: Controleer of prijzen database bestaat**
|
||
```bash
|
||
mysql -h 192.168.178.201 -P 3307 -u steve -p -e "SHOW DATABASES LIKE 'alfen'"
|
||
```
|
||
|
||
**Stap 2: Controleer tabellen**
|
||
```bash
|
||
mysql -h 192.168.178.201 -P 3307 -u steve -p alfen -e "SHOW TABLES"
|
||
```
|
||
|
||
**Stap 3: Test prijzen query**
|
||
```bash
|
||
mysql -h 192.168.178.201 -P 3307 -u steve -p alfen -e "SELECT COUNT(*) FROM dynamic_price_data WHERE provider_code='NE'"
|
||
```
|
||
|
||
**Als prijzen database andere credentials heeft:**
|
||
Gebruik de prijzen database parameters:
|
||
```bash
|
||
python3 steve_transaction_report.py \
|
||
--host 192.168.178.201 --port 3307 --user steve --password 'pass1' \
|
||
--price-user andere_user --price-password 'pass2' \
|
||
--transaction 1
|
||
```
|
||
|
||
**Als prijzen database op andere server staat:**
|
||
```bash
|
||
python3 steve_transaction_report.py \
|
||
--host 192.168.178.201 --port 3307 --user steve --password 'pass1' \
|
||
--price-host 192.168.178.202 --price-port 3306 \
|
||
--price-user prijzen_user --price-password 'pass2' \
|
||
--transaction 1
|
||
```
|
||
|
||
Als prijzen voor een ander uur ontbreken:
|
||
- Het script markeert dit automatisch met "n.v.t."
|
||
- Je ziet een waarschuwing: "Let op: Voor X uur ontbreken prijsgegevens"
|
||
- De totale kosten zijn dan gebaseerd op de beschikbare prijzen
|
||
|
||
### Verkeerde provider
|
||
Als je provider code niet werkt:
|
||
- Controleer of de provider code bestaat: `mysql -h HOST -P PORT -u USER -p alfen -e "SELECT DISTINCT provider_code FROM dynamic_price_data"`
|
||
- Gebruik één van de beschikbare codes (zie README voor lijst)
|
||
|
||
## Database Structuur
|
||
|
||
Het script maakt gebruik van de volgende SteVe database tabellen:
|
||
- `transaction` - Hoofd transactie gegevens
|
||
- `connector_meter_value` - Meterwaarden per tijdstip
|
||
- `connector` - Connector informatie
|
||
- `charge_box` - Laadpaal informatie
|
||
- `user` - Gebruikers
|
||
- `ocpp_tag` - RFID tags
|
||
- `user_ocpp_tag` - Koppeling tussen gebruikers en tags
|
||
|
||
## Features
|
||
|
||
✅ **Geïmplementeerd:**
|
||
- Echte dynamische prijzen uit database
|
||
- Meerdere energie providers ondersteund
|
||
- Verbruik en kosten per uur
|
||
- Duurste en goedkoopste laaduren identificeren
|
||
- Gemiddelde prijs berekening
|
||
- Automatische detectie van ontbrekende prijzen
|
||
|
||
🔜 **Toekomstige uitbreidingen:**
|
||
- CSV export functionaliteit
|
||
- Grafische weergave van verbruik en prijzen
|
||
- Vergelijking tussen transacties
|
||
- Maandelijkse/jaarlijkse samenvattingen
|
||
- CO2 besparing berekening
|
||
- Email alerts bij te hoge prijzen
|
||
|
||
## Support
|
||
|
||
Voor vragen of problemen:
|
||
1. Controleer eerst de troubleshooting sectie
|
||
2. Test de database verbinding handmatig
|
||
3. Controleer of alle parameters correct zijn
|
||
|
||
## Licentie
|
||
|
||
Open source - vrij te gebruiken en aan te passen voor persoonlijk gebruik.
|
||
|
||
## Versie
|
||
|
||
Versie 2.0 - Oktober 2025
|
||
- ✅ **Echte dynamische prijzen uit database**
|
||
- ✅ **Meerdere energie providers ondersteund**
|
||
- ✅ **Kosten berekening per uur**
|
||
- ✅ **Duurste en goedkoopste uren identificeren**
|
||
- Verbeterde prijsberekening
|
||
- Standaard gedrag: alle transacties tonen
|
||
- --limit werkt overal
|
||
- Betere voorbeelden en documentatie
|