2025-10-31 09:52:53 +01:00
2025-10-31 09:52:53 +01:00
2025-10-29 19:16:07 +01:00
2025-10-31 09:13:09 +01:00

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)

pip3 install mysql-connector-python --break-system-packages

Optie 2: Via apt

sudo apt update
sudo apt install python3-mysql-connector

Script installeren

# 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:

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

# 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:

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

python3 steve_transaction_report.py \
  --host 192.168.178.201 \
  --port 3307 \
  --password 'JOUW_WACHTWOORD' \
  --transaction 1

Eenvoudig rapport (zonder uurdetails)

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

# 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:

# 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:

# 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:

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

steve-report --limit 1

Voorbeeld 2: Wekelijks overzicht

steve-report --list --limit 50

Voorbeeld 3: Export naar bestand

steve-report --transaction 5 > laadrapport_$(date +%Y%m%d).txt

Voorbeeld 4: Automatisch dagelijks rapport via cron

# 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

# 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

# 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:

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:

--password 'Mijn$Wachtw00rd!'

Prijzen database problemen

Als je melding krijgt dat prijzen ontbreken of verbinding mislukt:

Stap 1: Controleer of prijzen database bestaat

mysql -h 192.168.178.201 -P 3307 -u steve -p -e "SHOW DATABASES LIKE 'alfen'"

Stap 2: Controleer tabellen

mysql -h 192.168.178.201 -P 3307 -u steve -p alfen -e "SHOW TABLES"

Stap 3: Test prijzen query

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:

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:

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
Description
reporting tool voor steve laadpaal applicatie
Readme 79 KiB
Languages
Python 99%
Shell 1%