+ Antworten
Ergebnis 1 bis 6 von 6
  1. #1
    Registriert seit
    Sep 2016
    Beiträge
    17

    Standard VW Car-Net auslesen insbesondere für Golf GTE und e-Golf

    Hallo zusammen,

    wir haben uns einen Golf GTE zugelegt und mir war es wichtig zu erkennen, ob das Auto gerade an der Ladestation hängt, oder ob es gerade zuhause ist bzw. wie voll der Akku ist. Um später u.a. eine Intelligenz fürs Laden mit PV-Anlage zu basteln:

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Bildschirmfoto 2018-10-03 um 18.22.14.jpg 
Hits:	152 
Größe:	62.5 KB 
ID:	45782

    Anbei für Euch mein Script, falls es jemand übernehmen möchte :-) Ich muss dazusagen, ich bin kein Programmierer, o.ä. - also verzeiht mir bitte die vielleicht auch etwas umständlichen Code-Zeilen :-)

    1. das Python-Script für Car-Net von wez3 installieren, gibt es unter:
    GitHub - wez3/volkswagen-carnet-client: A Python client to use Volkswagen CarNet

    Ich habe das Script unter /opt/volkswagen-carnet-client abgelegt auf meinem Raspberry

    2. nach Anpassung des Scripts (Benutzername und Kennwort von Car-Net müssen hinterlegt werden) muss das Script wie folgt aufrufbar sein und im JSON-Format die ganzen Parameter zurückgeben:

    /usr/bin/python /opt/volkswagen-carnet-client/vw_carnet_web.py retrieveCarNetInfo

    3. In IP-Symcon die ganzen Variablen anlegen:

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Bildschirmfoto 2018-10-03 um 18.23.51.png 
Hits:	105 
Größe:	35.5 KB 
ID:	45781

    4. Ein Script anlegen und 15-minütige Ausführung erstellen (bitte nicht öfter, da man ggf. ein paar Stunden von Car-Net ausgeschlossen wird).

    PHP-Code:

    <?

    // DEBUG-Ausgabe true oder false

    $debug false;

    // Heimatadresse aus Openstreemap zur Entfernungsberechnung eintragen

    $heimatadresse_lat 49.xxxxx;
    $heimatadresse_lon 8.xxxxx;

    // Funktion Entfernung ausrechnen...

    function distance$lat1$lon1$lat2$lon2 ) {
        
    $theta $lon1 $lon2;
        
    $dist sindeg2rad$lat1 )) * sindeg2rad$lat2 )) + cosdeg2rad$lat1 )) * cosdeg2rad$lat2 )) * cosdeg2rad$theta ));
        
    $dist acos$dist );
        
    $dist rad2deg$dist );
        return(
    $dist 60 1.1515 1.609344);
    }

    // Daten von VW Carnet auslesen...

    $carnet_output shell_exec('/usr/bin/python /opt/volkswagen-carnet-client/vw_carnet_web.py retrieveCarNetInfo');
    $carnet_output_zeilen explode("\n",$carnet_output);
    $carnet_zeilen_counter 0;

    // Zeile für Zeile auslesen und die betreffende Zeile festhalten...

    foreach($carnet_output_zeilen AS $zeile) {

        if ( 
    strstr($zeile,'/vsr/get-vsr' ) )                                            { $carnet_vsr_zeile $carnet_zeilen_counter 1; }
        elseif ( 
    strstr($zeile,'/cf/get-location' ) )                                 { $carnet_location_zeile $carnet_zeilen_counter 1; }
        elseif ( 
    strstr($zeile,'/vehicle-info/get-vehicle-details' ) )       { $carnet_carinfos_zeile $carnet_zeilen_counter 1; }
        elseif ( 
    strstr($zeile,'/emanager/get-emanager' ) )                { $carnet_emanager_zeile $carnet_zeilen_counter 1; }
       
    // Hochzählen
    $carnet_zeilen_counter $carnet_zeilen_counter 1;
    }

    //
    // Daten auswerten...
    //

    // Abschnitt VSR

    if ( $carnet_vsr_zeile )
    {
    $carnet_vsr json_decode($carnet_output_zeilen[$carnet_vsr_zeile], true);

    if ( 
    $debug == true )
    {
    print 
    "-- VSR: --\n";
    print_r($carnet_vsr);
    print 
    "\n \n";
    }

    }

    // Abschnitt LOCATION

    if ( $carnet_location_zeile )
    {
    $carnet_location json_decode($carnet_output_zeilen[$carnet_location_zeile], true);

    if ( 
    $debug == true )
    {
    print 
    "-- LOCATION: --\n";
    print_r($carnet_location);
    print 
    "\n \n";
    }

    }

    // Abschnitt CARINFOS

    if ( $carnet_carinfos_zeile )
    {

    $carnet_carinfos json_decode($carnet_output_zeilen[$carnet_carinfos_zeile], true);

    if ( 
    $debug == true )
    {
    print 
    "-- CARINFOS: --\n";
    print_r($carnet_carinfos);
    print 
    "\n \n";
    }

    }

    // Abschnitt EMANAGER

    if ( $carnet_emanager_zeile )
    {

    $carnet_emanager json_decode($carnet_output_zeilen[$carnet_emanager_zeile], true);

    if ( 
    $debug == true )
    {
    print 
    "-- EMANAGER: --\n";
    print_r($carnet_emanager);
    print 
    "\n \n";
    }

    }


    // Pruefe, ob neuere Daten vom Fahrzeug vorliegen, ansonsten tue nichts...

    $carnet_data_timestamp strtotime($carnet_carinfos["vehicleDetails"]["lastConnectionTimeStamp"][0]." ".$carnet_carinfos["vehicleDetails"]["lastConnectionTimeStamp"][1]); // letzte Aktualisierung (Timestamp)
    print "Letzte Daten vom Fahrzeug sind von: ".$carnet_data_timestamp;
    print 
    "\n";

    if ( 
        ( 
        
    GetValue(53659 /*[Shortcuts - Haushalt\E-Auto (Golf GTE)\Letzte Daten vom Fahrzeug]*/) < $carnet_data_timestamp // Wenn neuere Daten da sind
        
    AND $carnet_zeilen_counter // die Ausgabe mindestens 3 Zeilen hat
        
    AND $carnet_emanager["EManager"]["rbc"]["status"]["combinedRange"] > // die Ausgabe Gesamtreichweite mind. 1 km hat
        
    )
       OR 
    $debug == true // oder wenn Debug an ist, einfach immer alles ausführen
       
    )
    {

    // letztes Aktualisierungsdatum festhalten
    SetValue(53659 /*[Shortcuts - Haushalt\E-Auto (Golf GTE)\Letzte Daten vom Fahrzeug]*/$carnet_data_timestamp);

    // Weitere Daten auswerten...

    $carnet_battery_procent $carnet_emanager["EManager"]["rbc"]["status"]["batteryPercentage"] + 1// Batterie Ladestand in Prozent
    print " Batterie Ladekapazität: ".$carnet_battery_procent;
    print 
    "\n";
    SetValueInteger(17014 /*[Shortcuts - Haushalt\E-Auto (Golf GTE)\Batterie Ladekapazität]*/$carnet_battery_procent);

    $carnet_wallbox_state $carnet_emanager["EManager"]["rbc"]["status"]["chargingState"]; // Batterie wird geladen ja/nein (OFF)
    if ( $carnet_wallbox_state == "OFF" ) { $carnet_wallbox_state "0"; } else { $carnet_wallbox_state "1"; }
    print 
    " Batterie Ladestatus: ".$carnet_wallbox_state;
    print 
    "\n";
    if ( 
    $carnet_wallbox_state )
    SetValueBoolean(51829 /*[Shortcuts - Haushalt\E-Auto (Golf GTE)\Batterie Ladestatus]*/true); }
    else
    SetValueBoolean(51829 /*[Shortcuts - Haushalt\E-Auto (Golf GTE)\Batterie Ladestatus]*/false); }

    $carnet_range_battery_km $carnet_emanager["EManager"]["rbc"]["status"]["electricRange"] + 1// Reichweite Elektro
    print " Reichweite Batterie: ".$carnet_range_battery_km;
    print 
    "\n";
    SetValueInteger(16425 /*[Shortcuts - Haushalt\E-Auto (Golf GTE)\Reichweite Batterie]*/$carnet_range_battery_km);

    $carnet_range_gas_km $carnet_emanager["EManager"]["rbc"]["status"]["combustionRange"] + 1// Reichweite Benzin
    print " Reichweite Benzin: ".$carnet_range_gas_km;
    print 
    "\n";
    SetValueInteger(27557 /*[Shortcuts - Haushalt\E-Auto (Golf GTE)\Reichweite Benzin]*/$carnet_range_gas_km);

    $carnet_range_complete $carnet_emanager["EManager"]["rbc"]["status"]["combinedRange"] + 1// Reichweite Gesamt
    print " Reichweite Gesamt: ".$carnet_range_complete;
    print 
    "\n";
    SetValueInteger(24427 /*[Shortcuts - Haushalt\E-Auto (Golf GTE)\Reichweite Gesamt]*/$carnet_range_complete);

    $carnet_wallbox_connection $carnet_emanager["EManager"]["rbc"]["status"]["pluginState"]; // Ladestation Verbindung (CONNECTED)
    if ( $carnet_wallbox_connection == "CONNECTED" ) { $carnet_wallbox_connection 1; } else { $carnet_wallbox_connection 0; }
    print 
    " Ladestation Verbindung: ".$carnet_wallbox_connection;
    print 
    "\n";
    if ( 
    $carnet_wallbox_connection )
    SetValueBoolean(43632 /*[Shortcuts - Haushalt\E-Auto (Golf GTE)\Ladestation Verbindung]*/true); }
    else
    SetValueBoolean(43632 /*[Shortcuts - Haushalt\E-Auto (Golf GTE)\Ladestation Verbindung]*/false); }

    $carnet_wallbox_actual_power $carnet_emanager["EManager"]["rbc"]["settings"]["maxAmpere"] + 1// Ladestation aktuelle Ladeleistung
    print " Ladestation aktuelle Ladeleistung: ".$carnet_wallbox_actual_power;
    print 
    "\n";
    SetValueInteger(36139 /*[Shortcuts - Haushalt\E-Auto (Golf GTE)\Ladestation letzte Leistung]*/$carnet_wallbox_actual_power);

    $carnet_wallbox_max_power $carnet_emanager["EManager"]["rbc"]["settings"]["chargerMaxCurrent"] + 1// Ladestation maximale Ladeleistung
    print " Ladestation maximale Ladeleistung: ".$carnet_wallbox_max_power;
    print 
    "\n";
    SetValueInteger(12978 /*[Shortcuts - Haushalt\E-Auto (Golf GTE)\Ladestation letzte maximale Leistung]*/$carnet_wallbox_max_power);

    $carnet_car_position_lat $carnet_location["position"]["lat"]; // Position Latitude
    $carnet_car_position_lat str_replace(",","."$carnet_car_position_lat );
    $carnet_car_position_long $carnet_location["position"]["lng"]; // Position Longitude
    $carnet_car_position_long  str_replace(",","."$carnet_car_position_long);
    $carnet_car_position_url 'https://www.openstreetmap.org/export/embed.html?bbox='.$carnet_car_position_long.'%2C'.$carnet_car_position_lat.'%2C'.$carnet_car_position_long.'%2C'.$carnet_car_position_lat.'&layer=mapnik&marker='.$carnet_car_position_lat.'%2C'.$carnet_car_position_long;

    print 
    " Aktuelle Fahrzeugposition: ".$carnet_car_position_lat." ".$carnet_car_position_long;
    print 
    "\n";
    print 
    " Aktuelle Fahrzeugposition als URL: ".$carnet_car_position_url;
    print 
    "\n";
    SetValue(48016 /*[Shortcuts - Haushalt\E-Auto (Golf GTE)\Letzte bekannte GPS-Koordinaten]*/$carnet_car_position_lat." ".$carnet_car_position_long);

    // OSM HTML-Box für Fahrzeugposition schreiben

    $html_box '
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de-de">
    <head></head>
    <body>
    <iframe width="100%" height="1000px" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="'
    .$carnet_car_position_url.'" style="border: 1px solid black"></iframe>
    </body>
    </html>'
    ;
    SetValue(37285 /*[Shortcuts - Haushalt\E-Auto (Golf GTE)\Letzte bekannte Position]*/$html_box);

    // Entfernung berechnen...

    $carnet_entfernung_km distance($heimatadresse_lat$heimatadresse_lon$carnet_car_position_lat$carnet_car_position_long);
    $carnet_entfernung_km $carnet_entfernung_km 1;
    print 
    " Entfernung: ".$carnet_entfernung_km ' Kilometer' "\n";
    print 
    "\n";
    SetValueFloat(53489 /*[Shortcuts - Haushalt\E-Auto (Golf GTE)\Entfernung Zuhause]*/$carnet_entfernung_km);

    // Ist das Fahrzeug weniger als 300m entfernt?

    if ( $carnet_entfernung_km 0.3 )
    {
    SetValueBoolean(12632 /*[Shortcuts - Haushalt\E-Auto (Golf GTE)\Fahrzeug Zuhause]*/true);
    }
    else
    {
    SetValueBoolean(12632 /*[Shortcuts - Haushalt\E-Auto (Golf GTE)\Fahrzeug Zuhause]*/false);
    }


    //
    // ENDE

    }

    else
    {
    print 
    "keine neueren Daten vorhanden oder Login nicht möglich oder keine Daten vorhanden.";
    }


    ?>
    5. Die beiden Variablen mit den GPS-Koordinaten von Eurer Heimatadresse versehen

    $heimatadresse_lat = 49.xxxxx;
    $heimatadresse_lon = 8.xxxxx;

    Und natürlich im Script die IDs bei SetValue.... durch Eure IDs ersetzen.

    6. Gerne mal den debug-Parameter auf true stellen und manuell ausprobieren :-)

    Bitte später nicht vergessen debug wieder zu deaktivieren. Ansonsten schreibt er ggf. bei Problemen trotzdem die leeren Variablen, was ja nicht sein sollte.

    Viele Grüße und viel Spaß damit
    Dominik

  2. #2
    Registriert seit
    Aug 2007
    Ort
    Baden-Württemberg
    Beiträge
    379

    Klappt leider bei mir nicht.

    Habe Python und die Git File auf Windows installiert, aber es kommen keine Daten zurück.

    Das Python-Script meldet "print 'Need at least one argument'" für Zeile 211....
    LCN, HomeMatic, IPS V4.1, iFront App, Apple Watch, 21.5" Touch, Webfront

  3. #3
    Registriert seit
    Aug 2007
    Ort
    Baden-Württemberg
    Beiträge
    379

    Jetzt funzt das Python Script doch... warum auch immer

    Egal. Damit kann man was anfangen

    Bleibt die Frage: Was ist die maximale Boll-Frequenz, bevor VW meckert? Alle 15min. finde ich beim Laden schon ziemlich blöd. Alle 5min. wäre schöner.
    LCN, HomeMatic, IPS V4.1, iFront App, Apple Watch, 21.5" Touch, Webfront

  4. #4
    Registriert seit
    Feb 2018
    Ort
    Bochum
    Beiträge
    409

    Hallo,

    hat einer von euch geplant daraus ein Modul zu machen? Ich habe mir das Python-Script mal angeschaut, ich denke, das lässt sich umsetzen. Ein Vorteil wäre u.a., das das Modul nicht immer wieder ein Login machen muss sondern mit dem Token dann für längere Zeit arbeiten kann. Ich denke nicht, das es dann ein Problem mit auch häufigen Abruf gibt.

    Ich habe nun einen (konventionellen) Golf mit CarNet zur Verfügung, allerdings nur Basis-Daten. Für zusätzlich Daten müsste jemand beim Testen helfen

    demel

  5. #5
    Registriert seit
    Dec 2017
    Ort
    Wolfsburg
    Beiträge
    116

    Ich habe einen Volkswagen mit allen Car-Net Paketen.
    Security & Service und Guide & Inform.
    Könnte beim Testen unterstützen.

    Wenn ich es richtig sehe, parst ihr die reguläre Endkundenwebseite, richtig?
    Es gibt ja auch eine App für das iPhone. Ich gehe mal davon aus, dass es hierfür eine andere Schnittstelle (bzw. URL) gibt. Ist da Näheres bekannt?
    Geändert von someone (04.12.18 um 21:31 Uhr)

  6. #6
    Registriert seit
    Feb 2018
    Ort
    Bochum
    Beiträge
    409

    Zitat Zitat von someone Beitrag anzeigen
    Ich habe einen Volkswagen mit allen Car-Net Paketen.
    Security & Service und Guide & Inform.
    Könnte beim Testen unterstützen.

    Wenn ich es richtig sehe, parst ihr die reguläre Endkundenwebseite, richtig?
    Es gibt ja auch eine App für das iPhone. Ich gehe mal davon aus, dass es hierfür eine andere Schnittstelle (bzw. URL) gibt. Ist da Näheres bekannt?
    eine offizielle API habe ich nicht gefunden, aber das: volkswagen-carnet-client/vw_carnet_app.py at master · wez3/volkswagen-carnet-client · GitHub
    ich habe es noch nicht probiert, aber das scheint mir schon eine API it json-Ergebnissen zu sein.

    demel

Ähnliche Themen

  1. Antworten: 12
    Letzter Beitrag: 20.12.17, 21:27
  2. UVR1611 BL-NET auslesen klappt nicht
    Von Stefan im Forum Haustechnik
    Antworten: 4
    Letzter Beitrag: 15.02.17, 00:10
  3. Client Socket auslesen und Werte für Graphen speichern?
    Von Miconnect im Forum Skripte, PHP, SQL
    Antworten: 7
    Letzter Beitrag: 15.02.15, 11:26
  4. Skript für AVR-NET-IO und PT100
    Von dfhome im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 0
    Letzter Beitrag: 20.09.09, 20:47

Stichworte