# 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