Beiträge von mho

    Moin, hatte das Problem nach dem Update am 21.12 mit der Endlosschleife auch. Nachdem ich mich aktiv abgemeldet habe und etwas warten, konnte ich heute die S-PIN zurücksetzen.

    Allerdings wurde meine PIN im Auto nicht akzeptiert. Also erneut geändert. Ging immer noch nicht. Dann an einen Fehler bei einer anderen Software erinnert und die vorherige PIN versucht. Das hat dann bei mir funktioniert.

    Klar könnt Ihr das gerne auf github veröffentlichen :) Die Generierung ab Datum nutze ich selbst auch weniger und rechne meist auf Monatsbasis ab.

    Ich selber versehe die Abrechnung noch mit einer qualifizierten Signatur nach eIDAS Verordnung (QES).
    Gibt es vielleicht schon weitere Nutzer dieser Art der Abrechnung und welche Erfahrungen habt Ihr gemacht?

    Hallo Denis,

    eine Funktion zum Exportieren der Ladevorgänge aus der App gibt es leider noch nicht.

    Ich selber muss auch zwischen Firmenwagen und privatem Laden unterscheiden und habe zudem zwei Wallboxen, wo ich mal die Eine oder die Andere nutze. Beide Boxen sind in der App hinterlegt und zudem RFID Karten für Firma, Privat und Gäste.

    Im Thread Abrechnung mit Arbeitgeber findest Du ein Script mit dem

    Du die Daten exportieren und als PDF aufbereiten kannst. Einmal eingerichtet einfach zu bedienen, aber für die Einrichtung braucht es vermutlich schon zumindest grundlegende Kenntnisse im Umgang mit Scripten.

    Bei mir funktioniert die Lösung gut, freue mich aber auch auf einen einfachen Export aus der App.

    Moin,

    habe noch etwas mit node.js gespielt und das Script so erweitert, dass direkt ein PDF aus den Daten der Ladevorgänge ab dem angegebenen Datum erstellt wird. Eventuell hilft es ja jemandem als Ausgangspunkt für eigene Lösungen.


    ///

    // Aufruf z.B. node rechnungErstellen.js "2021-03-01"

    ///


    // Download von https://github.com/nightsha-de/npm-vwconnectapi

    const api = require('npm-vwconnectapi');

    // npm install pdfkit

    const PDFDocument = require('pdfkit');

    const fs = require('fs');


    // Bitte anpassen

    // Für welche RFID Karte soll die Abrechnung erstellt werden

    var rfidSerial = "VW-KN.....";

    var kosten = "0.3325";

    var email= "....@....";

    var password = "**********";

    var name = "Max Mustermann";


    // Datum ab dem die Rechnung erstellt werden soll muss beim Aufruf im Format 2021-03-01 übergeben werden

    var rechnungAbErstellen=process.argv[2];

    var summe_kwh = 0;

    var summe_euro = 0;

    var vwConn = new api.VwWeConnect();

    var pdfDoc = new PDFDocument;

    var tableTop = 200;


    vwConn.setCredentials(email, password, "YourPin");

    vwConn.setConfig("id"); // type

    vwConn.getData()


    // Titel etc.

    pdfDoc.pipe(fs.createWriteStream(rechnungAbErstellen+"_AbrechnungWallbox.pdf"));

    pdfDoc.fontSize(20).text("Dienstwagen "+name, {align: "center"});

    pdfDoc.fontSize(20).text("Stromabrechnung Wallbox "+ rechnungAbErstellen, {align: "center"});

    pdfDoc.fontSize(12).text("Preis pro KWH bei Lichtblick im Ökostromtarif : "+kosten+" cent", 50,150, {align: "left"});


    // Überschrift der Tabelle

    pdfDoc.font("Helvetica-Bold");

    zeileErstellen(pdfDoc,tableTop,"Liste der Ladevorgänge","kWh","Kosten","RFIDCard");

    pdfDoc.font("Helvetica");


    var intervalid = setInterval(function() {


    if (vwConn.finishedReading())

    {

    let i = 0;

    let position = 0;

    vwConn.homechargingRecords.forEach((record) =>

    {

    if (rfidSerial == record.rfid_card_serial_number && record.total_energy_wh>0 && record.start_date_time>rechnungAbErstellen )

    {

    summe_kwh = summe_kwh + record.total_energy_wh/1000;

    summe_euro = summe_euro + record.total_energy_wh/1000*kosten;

    position = tableTop + (i + 1) * 30;

    zeileErstellen(pdfDoc,position,record.start_date_time,record.total_energy_wh/1000,parseFloat(record.total_energy_wh/1000*kosten).toFixed(2)+"€",record.rfid_card_serial_number);

    i++;

    }

    }

    );


    // Summe und doppelte Unterstreichung der Summe

    pdfDoc.font("Helvetica-Bold").fontSize(10)

    .text("Summe:", 170, position+30,{underline: true })

    .text(parseFloat(summe_kwh).toFixed(2)+ "kWh", 220, position+30)

    .text(parseFloat(summe_euro).toFixed(2)+"€", 250, position+30,{ width: 90, align: "right",});

    pdfDoc.lineWidth(1).moveTo(300, position+40).lineTo(345, position+40).stroke();

    pdfDoc.lineWidth(1).moveTo(300, position+42).lineTo(345, position+42).stroke();


    // PDF und Connection schließen

    pdfDoc.end();

    vwConn.onUnload();

    clearInterval(intervalid);

    }

    }, 1000);


    function zeileErstellen(doc, y, c1, c2, c3, c4) {

    doc.fontSize(10).text(c1, 50, y).text(c2, 220, y).text(c3, 250, y, { width: 90, align: "right" }).text(c4, 400, y, { width: 140, align: "right" });

    doc.strokeColor("#aaaaaa").lineWidth(1).moveTo(50, y+20).lineTo(550, y+20).stroke();

    }

    Die Pin ist nicht relevant. Bei mir steht einfach "YourPin" wie im Beispiel drin.

    Nur die nicht IDs erwarten glaube ich diese S-PIN.


    Hier mein aktueller Code ohne Chance auf einen Schönheitswettbewerb.




    const api = require('npm-vwconnectapi');

    var rechnungAbErstellen="2021-02-01";

    var rfidSerial = "VW-....";

    var kosten = "...";


    var summe_kwh = 0;

    var summe_euro = 0;


    var vwConn = new api.VwWeConnect();

    vwConn.setCredentials(NUTZERNAME_EINTRAGEN, PASSWORD_EINTRAGEN, "YourPin");

    vwConn.setConfig("id");

    vwConn.getData()


    var intervalid = setInterval(function() {

    if (vwConn.finishedReading())

    {

    console.log("Datum,KWH,Kosten,RFIDCard");

    vwConn.homechargingRecords.forEach((record) =>

    {

    if (rfidSerial == record.rfid_card_serial_number && record.total_energy_wh>0 && record.start_date_time>rechnungAbErstellen )

    {

    console.log(record.start_date_time + "," + record.total_energy_wh/1000 + ","+parseFloat(record.total_energy_wh/1000*kosten).toFixed(2)+"€,"+ record.rfid_card_serial_number);

    summe_kwh = summe_kwh + record.total_energy_wh/1000;

    summe_euro = summe_euro + record.total_energy_wh/1000*kosten;

    }

    }

    );

    console.log(" ,"+summe_kwh+","+parseFloat(summe_euro).toFixed(2)+"€, ");


    // Test

    console.log("Restreichweite : "+vwConn.idData.data.batteryStatus.cruisingRangeElectric_km+" KM");



    vwConn.onUnload();

    process.exit(1);

    }

    }, 1000);



    Gruß

    Moin,

    ich lese die Daten zu den Ladevorgängen über die VW Connect ID API aus. Für die Firma habe ich dafür eine extra RFID Karte registriert um diese Ladevorgänge filtern zu können. Diese Tabelle wandle ich dann nach Excel und reichere diese Tabelle um meinen Ladetarif an. Dann noch als PDF speichern und ab zum Arbeitgeber. Sollten mal Zweifel aufkommen, dann kann der Nachweis über die Protokolle der Box erfolgen.

    Gruß aus dem Norden