Files
steve-reporting/README.md
2025-10-29 19:16:07 +01:00

471 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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