Quellcode VIN Checker inkl. Push Benachrichtigung

Wie Ihr vielleicht wisst, kann man im Quellcode der Bestellstatus Seite bereits einige Zeit vorher sehen, ob eine VIN und damit ein Fahrzeug zugeordnet wurde.

Der manuelle Weg ist die Seite aufzurufen, den Quellcode anzuzeigen und dann nach -„vin“:- oder -5YJ- zu suchen. Entweder man findet dann seine VIN oder den Wert „null“.

Um das ganze zu vereinfachen, habe ich mir ein Script geschrieben, was mir beim Aufrufen der Seite den Wert (5YJ… oder null) direkt anzeigt, die Seite automatisch nach einer gewissen Zeit neu lädt und, falls eine VIN gefunden wurde, mir eine Push Benachrichtigung aufs Handy schickt. Das hat auch wunderbar funktioniert, als mir eine VIN zugeteilt wurde.

Damit Ihr auch etwas davon habt, habe ich das Script noch ein bisschen verfeinert und möchte es euch hier zur Verfügung stellen.

ANLEITUNG:

========= Anfang Push Vorbereitung =========

Falls Ihr eine Push Mitteilung auf euer Handy bekommen möchtet, so müsst Ihr euch bei IFTTT registrieren und die IFTTT App auf eurem Handy installieren. Falls euch Push nicht so wichtig ist, könnt ihr diesen ersten Teil überspringen.

  1. Geht auf http://ifttt.com und klickt oben rechts auf „Sign Up“. Es öffnet sich ein Menü in dem Ihr euch mit eurem Google oder Facebook Account einloggen könnt. Falls Ihr einen eigenen Account für IFTTT anlegen möchtet, klickt auf Sign up im „Or use your password to sign up or sign in“ Text. Dort einfach eure E-Mail Adresse eingeben und ein selbstgewähltes Passwort eintragen.
    [album]975[/album]

  2. Nachdem Ihr euch registriert habt und auf der Seite eingeloggt seid, oben rechts auf den Avatar klicken. Im öffnenden Menü klickt ihr auf „Create“
    [album]976[/album]

  3. Klickt nun auf das + bzw. „This“
    [album]977[/album]

  4. Gebt „webhooks“ im Suchfeld ein und klickt auf das blaue Icon.
    [album]978[/album]

  5. „Connect“ anklicken
    [album]979[/album]

  6. Klickt auf „Receive a web request“
    [album]980[/album]

  7. Gebt einen Namen für euren Trigger/Event ein. Ich habe hierfür „vin_found“ genommen und merkt euch den Namen. Anschliessend klickt auf „Create trigger“
    [album]981[/album]

  8. Klickt auf das + bzw. „That“
    [album]982[/album]

  9. Gebt „notifications“ im Suchfeld ein und klickt auf das blaue Icon mit der Glocke.
    [album]983[/album]

  10. Wieder „Connect“ anklicken.
    [album]984[/album]

  11. Wählt „Send a notification from …“. Das reicht für uns.
    [album]985[/album]

  12. Hier könnt ihr nun den Aufbau der Push Nachricht vorgeben. Nehmt z.B. „{{OccurredAt}} - VIN gefunden! {{Value1}}“. Value1 wird später durch die gefundene VIN ersetzt. OccuredAt ist die aktuelle Zeit beim ausführen der Push Nachricht. Klickt dann „Create action“.
    [album]986[/album]

  13. Klickt „Finish“
    [album]987[/album]

  14. Falls ihr die App schon installiert habt, das Pop-Up einfach wegklicken.
    [album]988[/album]

  15. Klickt wieder auf den Avatar oben rechts und dann im Menü auf „My services“.
    [album]989[/album]

  16. Klickt auf den „Webhooks“ Eintrag.
    [album]990[/album]

  17. Oben rechts auf „Documentation“ klicken.
    [album]991[/album]

  18. Kopiert euch den Key in einem Texteditor oder schreibt ihn auf. Ihr müsst den gleich in meinem Script eintragen.
    [album]992[/album]

Startet die App auf eurem Handy und loggt euch auch dort ein.

========= Ende Push Vorbereitung =========

Das eigentliche Script wird mit dem AddOn „Tampermonkey“ in eurem Browser ausgeführt. Installiert deshalb zuerst das AddOn. https://www.tampermonkey.net

Nachdem das AddOn installiert wurde, muss eventuell der Browser neu gestartet werden. Ihr solltet neben der Adresszeile im Browser das Tampermonkey Icon sehen.

  1. Klickt auf das Tampermonkey Icon und dann auf „Neues Script erstellen“.

  2. Ersetzt den Text im Editor durch den folgenden Code:

// ==UserScript==
// @name         Tesla VIN Extractor
// @namespace    http://namespace.badpat
// @version      0.5
// @description  Checks whether a VIN has been assigned to the product. Displays the result as an alert, on the page and/or triggers IFTTT
// @author       Badpat
// @match        https://www.tesla.com/de_DE/teslaaccount/product-finalize?rn=*
// @grant        GM_xmlhttpRequest
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        unsafeWindow
// ==/UserScript==

(function() {
  'use strict';

  var AUTORELOAD = true;
  var RELOAD_MIN = 15; // Nach wieviel Minuten soll die Seite neu geladen werden?

  var SHOWALERT_null = false; // Soll ein Alert angezeigt werden, wenn keine VIN gefunden wurde? Achtung: Alerts blockieren das automatische Neuladen.
  var SHOWALERT_vin = false; // Soll ein Alert angezeigt werden, wenn eine VIN gefunden wurde?

  var PUSH = false; // Soll eine Push Benachrichtigung über IFTTT erfolgen, wenn eine VIN gefunden wurde.
  var IFTTT_key = "Dein-IFTT-Key" // Beispiel: "W2fHqiFS0J5Fug7DfQOkr"
  var IFTTT_trigger = "Dein-IFTT-Trigger" // Beispiel: "vin_found"

  if (PUSH) {
    // Check whether GM_xmlhttpRequest can access IFTTT
    if (GM_getValue("runTest", true)) {
      GM_xmlhttpRequest({
        method: "GET",
        url: "https://maker.ifttt.com/trigger/" + IFTTT_trigger + "/with/key/" + IFTTT_key + "?value1=Funktionstest!",
        onload: function(res) {
          GM_setValue("runTest", false);
        }
      });
    }
  }

  if (unsafeWindow.Tesla.ProductF.Data.Insurance.vin === null) {
    if (SHOWALERT_null) {
      alert('Keine VIN gefunden. :-( ');
    }

    document.getElementsByClassName('section-title')[0].textContent += " ( VIN: " + unsafeWindow.Tesla.ProductF.Data.Insurance.vin + " :-( )";

    if (AUTORELOAD) {
      setTimeout("location.reload(true);", (RELOAD_MIN * 60 * 1000)); // RELOAD_MIN * 60 sec * 1000 msec
    }
  } else {
    if (SHOWALERT_vin) {
      alert("VIN gefunden! :-D\n\nDeine VIN lautet: " + window.Tesla.ProductF.Data.Insurance.vin);
    }

    document.getElementsByClassName('section-title')[0].textContent += " ( VIN: " + unsafeWindow.Tesla.ProductF.Data.Insurance.vin + " :-D )";

    if (PUSH) {
      GM_xmlhttpRequest({
        method: "GET",
        url: "https://maker.ifttt.com/trigger/" + IFTTT_trigger + "/with/key/" + IFTTT_key + "?value1=" + unsafeWindow.Tesla.ProductF.Data.Insurance.vin
      });
    }
  }
})();
  1. Scrollt im Editor etwas nach oben, bis Ihr die Parameter seht. (Beginne alle mit „var“).

  2. Konfiguriert das Script nach euren Wünschen:

  • AUTORELOAD, „true“ falls das Script automatisch die Seite neu laden soll. Ansonsten „false“
  • RELOAD_MIN, wieviel Minuten soll gewartet werden bis die Seite neu geladen wird.
  • SHOWALERT_null, lasst das auf „false“ es sei denn Ihr möchtet etwas testen.
  • SHOWALERT_vin, „true“
  • PUSH, falls Ihr IFTTT eingerichtet habt: „true“, ansonsten „false“
  • IFTTT_key, der Key den Ihr im letzten Schritt bei IFTTT angezeigt bekommen habt. HIER Anführungszeichen nicht vergessen!
  • IFTTT_trigger, der Trigger/Eventname, den Ihr euch ausgesucht habt. HIER Anführungszeichen nicht vergessen!
  1. Speichert das Script über Datei>Speichern. Achtung nicht das Browser „Datei“, sondern im Browserfenster der Editor. Der hat ein eigenes Menü.

  2. Geht auf Tesla.com und loggt euch ein. Klickt auf „Verwalten“/„Manage“ eurer Bestellung.

  3. Falls ihr PUSH aktiviert habt, fragt euch Tampermonkey beim ersten Mal, ob ihr das Laden einer fremden Ressource erlauben möchtet. Das ist der Zugriff auf die Push Schnittstelle. Wählt dort bitte links unten „Immer erlauben“ aus. Danach solltet Ihr, wenn alles richtig eingerichtet ist, eine Push Mitteilung auf dem Handy erhalten. Als VIN steht dort allerdings „Funktionstest!“.

  4. Je nach Konfiguration und ob bereits eine VIN zugeteilt wurde oder nicht, wird ein Alert angezeigt. Der Wert von „Vin“ wird immer oben, rechts neben „DeinName Tesla“, angezeigt.

Das war’s. Das Script wird jedes Mal ausgeführt, wenn die Seite neu geladen wird. Entweder von euch manuell oder automatisch durch das Script. Das regelmäßige Neuladen wird bei einer gefundenen VIN automatisch unterbrochen. Also keine Angst vor ständigen Nachrichten.

Falls ihr Fragen habt, so stellt Sie bitte hier im Thread, damit alle etwas davon haben.

7 „Gefällt mir“

Ganz vergessen…

Die Tesla Seite ist öfters mal etwas instabil. Schaut deswegen bitte alle paar Tage mal nach und ladet die Seite manuell neu. Da kann das Script nichts für, falls ihr von Tesla ausgeloggt werdet. Setzt die Reload Zeit bitte auch nicht zu niedrig. Das verursacht nur unnötig Serverlast.

Danke !

Alter Swe! Vielen Dank.

Krasse Anleitung und Mühe die du hier reingesteckt hast.

Klasse, vielen Dank!

Ich hab es gleich mal eingesetzt, der Funktionstest kam schon mal an :slight_smile:
Schade das er den Autologin bei hinterlegten Zugangsdaten mit Click Event auf „Verwalten/Manage“ nicht beherrscht :wink:
Müsste doch theoretisch gehen oder? Per JS die URL Abfragen dann das Login Formular per Submit abschicken und als nächstes Zeitverzögert ein Click Event auf den Button „Verwalten/Manage“.

Endlich eine Aufgabe weniger am Tag.

Oder ganz simpel, wenn Login Formular vorhanden dann Pushnachricht „Ausgeloggt“.

Geht beides, solange auch wirklich das Loginformular angezeigt wird. Hatte ein paar mal einfach nur eine leere Seite. Hauptproblem ist aber das Testen. Echte Fehler beim Seitenladen kann man so schlecht provozieren bzw. sollte man nicht. :wink:

Ich persönlich bin allerdings kein Fan davon meine Zugangsdaten in fremder Software einzugeben. Wenn das hier gewünscht wird, kann ich das aber noch erweitern.

Da hast du recht mit den Zugangsdaten. Wie wäre es mit einer einfachen Fehlermeldung per Push wenn z. B. keine RN Nummer im Quelltext gefunden wird (oder als Titel). Sollte ja beim Login Formular oder bei einer weißen Seite der Fall sein.

Ich überlege mir mal was, kann aber noch zwei Tage dauern. Bin momentan leider viel unterwegs.

@Badpat danke für das Tool.
Ich habe ein wenig rumexperimentiert bis ich es endlich hinbekommen habe.
Jetzt habe ich nur ein Problem entdeckt.
Bei VIN steht noch immer Null;(

Dabei habe ich mittlerweile 2 gefunden die nach mir die identische Konfiguration bestellt haben und schon eine VIN zugeteilt bekommen haben :open_mouth:

@Camper74

Hast du mal den klassischen Weg probiert und den Quellcode selbst durchsucht?

@Badpat ja, hatte ich versucht.
Dabei habe ich entweder „VIN =nontranslate RN xxxxxxx“ unter dem Punkt „verwalten“ oder bei aufgerufener Seite garnichts mit VIN gefunden.

@Badpat, Danke für’s teilen. Dein Javascript ohne IFTTT habe ich sofort zum laufen bekommen. Nun muss ich nicht dauernd den Quelltext durchsuchen. Das macht das Script und entspannt mich etwas beim Warten auf’s neue Auto :slight_smile:

Bin für heute schon mal sehr glücklich, da ich heute meine VIN für mein MXP100D (Bestellung 18.12.2019 in München) erhalten habe, habe dies aber noch manuell im Quellcode nachgeschaut, da ich von deiner schönen Programmierung bisher noch nichts gewusst habe.
Auch wenn ich dein klasse Werkzeug nun wahrscheinlich nicht mehr benötige trotzdem ein herzliches Dankeschön für die Mühe die du dir gemacht hast! TOP!
Kleine Frage am Rande - was bedeutet es wenn ich die VIN erhalten habe - ist dann mein neues Baby schon in Tilburg angekommen?

Ich hatte erst nur den normalen Checker ohne Push installiert - ich bin doch keiner dieser Verrückten, die alle 5 Minuten gucken.

Nun…

Ab jetzt werde ich per Push informiert. :laughing:

2 „Gefällt mir“

Heyho :slight_smile:

Kleine Frage: Ich wollte bei mir mal testen ob das sript (ohne push) auch läuft und hab mal refreshtime auf

var RELOAD_MIN = 1;

gesetzt. Lief nix bzw reloadete nix und Tampermonkey sagte auch kein Skript gestartet. Dann ist mir aufgefallen das oben bei

// @match tesla.com/de_DE/teslaaccoun … alize?rn=*

Die URL ja null auf die Passt, die ich habe ,wenn ich auf der VIN Seite bin (verwalten). Bei mir sieht die nämlich so aus, und ich hab sie mal oben ersetzt im script:

// @match tesla.com/de_DE/teslaaccoun … N113251XXX

Denke mal das hast du evtl. in der Anleitung vergessen? Oder meine URL ist generell anders? Zumindest sagt Tampermonkey nun dass das Script läuft sobald ich auf die Seite komme. Soweit so gut?

Allerdings einen reload nach 1 minute kriege ich dennoch nicht. Lädt der da alles neu oder nur irgendwie im Hintergrund?

Danke für info :slight_smile:

Also meine Adresse lautete immer …product-finalize… . Die …profile?.. URL habe ich erst seitdem ich den Wagen abgeholt habe. Hast du den Wagen über eine Leasingfirma oder so bestellt?

Wird dir oben auf der Seite „VIN: null“ angezeigt? Oder garnichts?

Normalerweise sollte er die gesamte Seite neu laden.

1 „Gefällt mir“

nur eine kurze Frage, ob man aktuell aus dem Quellcode immer noch ablesen kann, ob eine VIN zugeteilt wurde oder bald wird.

Im Quellcode (in Mozilla Strg+U) der jeweiligen Fahrzeugseite findet sich bei mir folgender Abschnitt:

„Vin“:null,„ReferenceNumber“:„RNxxxxxxxx“ (xxxxxxx sind natürlich richtige Zahlen)

Wenn hier jetzt statt „null“ eine richtige Zahl steht, ist die VIN zugewiesen?

Ich kann zu aktuellen Bestellungen leider nichts sagen, da ich keinen Zugriff auf einen Account mit offener Bestellung habe.

ist es auch möglich eine VIN aus den Bestandsfahrezugen heraus zu finden ?
Nur aus Interesse bei welchen VIN wie derzeit liegen ?