[Modul] Tesla

Danke Dir, wenn du wieder Zeit hast lass mal schnacken. Danke

Vielen Dank an alle, die mir eine kleine Aufmerksamkeit zukommen lassen haben.
Leider konnte ich nicht bei jedem die E-Mail Adresse erkennen, sonst hätte ich euch persönlich eine Nachricht zukommen lassen.

Grüße,
Kai

1 „Gefällt mir“

Hallo @KaiS , folgender Fehler steht bei mir heute im Log. Scheint zwar nur etwas temporäres gewesen zu sein, da ich aktuelle Daten bekomme, aber vielleicht passt da ja was im Hintergrund noch nicht ganz.
Vielen Dank für deine Mühe!

18.03.2024, 11:00:02 | ScriptEngine         | Result for Event 17569

Warning: 
Warning: HTTP/1.1 401 Unauthorized
{"error":"token expired (401)"}RESULT:{"error":"token expired (401)"} in /var/lib/symcon/modules/.store/info.schnittcher.ips.tesla/TeslaVehicleConnector/module.php on line 56

Fatal error: Uncaught TypeError: TeslaVehicleConnector::ForwardData(): Return value must be of type string, bool returned in /var/lib/symcon/modules/.store/info.schnittcher.ips.tesla/TeslaVehicleConnector/module.php:58
Stack trace:
#0 /-(3): TeslaVehicleConnector->ForwardData('{"DataID":"{675...')
#1 {main}
  thrown in /var/lib/symcon/modules/.store/info.schnittcher.ips.tesla/TeslaVehicleConnector/module.php on line 58
 in /var/lib/symcon/modules/.store/info.schnittcher.ips.tesla/libs/TeslaHelper.php on line 9

Fatal error: Uncaught TypeError: json_decode(): Argument #1 ($json) must be of type string, bool given in /var/lib/symcon/modules/.store/info.schnittcher.ips.tesla/libs/TeslaHelper.php:9
Stack trace:
#0 /var/lib/symcon/modules/.store/info.schnittcher.ips.tesla/libs/TeslaHelper.php(9): json_decode(false)
#1 /var/lib/symcon/modules/.store/info.schnittcher.ips.tesla/TeslaVehicleControl/module.php(96): TeslaVehicleControl->isOnline()
#2 /var/lib/symcon/scripts/__generated.inc.php(43): TeslaVehicleControl->State()
#3 /var/lib/symcon/scripts/14261.ips.php(2): Tesla_State(49567)
#4 {main}
  thrown in /var/lib/symcon/modules/.store/info.schnittcher.ips.tesla/libs/TeslaHelper.php on line 9

und noch eine:

19.03.2024, 15:08:06 | ScriptEngine         | Result for Event 17569

Warning: 
Warning: HTTP/1.1 504 Gateway Timeout
{"response":null,"error":"GRPC::DeadlineExceeded: Deadline Exceeded","error_description":""}RESULT:{"response":null,"error":"GRPC::DeadlineExceeded: Deadline Exceeded","error_description":""} in /var/lib/symcon/modules/.store/info.schnittcher.ips.tesla/TeslaVehicleConnector/module.php on line 56

Fatal error: Uncaught TypeError: TeslaVehicleConnector::ForwardData(): Return value must be of type string, bool returned in /var/lib/symcon/modules/.store/info.schnittcher.ips.tesla/TeslaVehicleConnector/module.php:58
Stack trace:
#0 /-(3): TeslaVehicleConnector->ForwardData('{"DataID":"{675...')
#1 {main}
  thrown in /var/lib/symcon/modules/.store/info.schnittcher.ips.tesla/TeslaVehicleConnector/module.php on line 58
 in /var/lib/symcon/modules/.store/info.schnittcher.ips.tesla/libs/TeslaHelper.php on line 9

Fatal error: Uncaught TypeError: json_decode(): Argument #1 ($json) must be of type string, bool given in /var/lib/symcon/modules/.store/info.schnittcher.ips.tesla/libs/TeslaHelper.php:9
Stack trace:
#0 /var/lib/symcon/modules/.store/info.schnittcher.ips.tesla/libs/TeslaHelper.php(9): json_decode(false)
#1 /var/lib/symcon/modules/.store/info.schnittcher.ips.tesla/TeslaVehicleControl/module.php(96): TeslaVehicleControl->isOnline()
#2 /var/lib/symcon/scripts/__generated.inc.php(43): TeslaVehicleControl->State()
#3 /var/lib/symcon/scripts/14261.ips.php(2): Tesla_State(49567)
#4 {main}
  thrown in /var/lib/symcon/modules/.store/info.schnittcher.ips.tesla/libs/TeslaHelper.php on line 9

Du hast wohl die maximale Anzahl an Abfragen erreicht.
Was für einen Intervall hat deine Instanz für die Abfragen?

Grüße,
Kai

Das klingt eher nach einem internen Fehler bei Tesla.

paresy

Welche Meldung kommt denn von dem Proxy vom ConnectDienst, wenn das Limit erreicht ist?

Grüße,
Kai

Der Fehler trat nur kurz auf?

Grüße,
Kai

korrekt, kam nur einmal, spricht ja dann eher gegen das Limit.

Der Token expired Fehler sollte auch automatisch durch eine Token Verlängerung behoben werden.

Grüße,
Kai

Moin, seit 2 Tagen kann ich keine Daten mehr abrufen. Folgende Fehlermeldung bekomme ich beim Ausführen des Abrufscripts.

Edit: Ich habe jetzt noch mal den Token neu registriert und jetzt funktioniert es wieder. Schon sehr merkwürdig. Evtl. hängt es mit einem Fahrzeugupdaten zusammen? Bin mir nicht ganz sicher ob das aktuellste Fahrzeugupdate in dem Zeitraum fällt. Auf jeden Fall doof, wenn man immer wieder neu registrieren muss.

Daten vom Tesla abrufen...
Grund: Standard-Takt.
Gewählter Intervall: 240 Sekunden
SplitterID: 41035

Warning: ErrorLogin required in /mnt/data/symcon/modules/.store/info.schnittcher.ips.tesla/TeslaVehicleConnector/module.php on line 40

Fatal error: Uncaught TypeError: json_decode(): Argument #1 ($json) must be of type string, bool given in /mnt/data/symcon/modules/.store/info.schnittcher.ips.tesla/TeslaVehicleConnector/module.php:40
Stack trace:
#0 /mnt/data/symcon/modules/.store/info.schnittcher.ips.tesla/TeslaVehicleConnector/module.php(40): json_decode(false)
#1 /mnt/data/symcon/scripts/__generated.inc.php(2419): TeslaVehicleConnector->FetchData()
#2 /mnt/data/symcon/scripts/43557.ips.php(56): Tesla_FetchData(41035)
#3 {main}
  thrown in /mnt/data/symcon/modules/.store/info.schnittcher.ips.tesla/TeslaVehicleConnector/module.php on line 40

Abrufscript

<?php

// Konfigurationsbereich
$debug = 1; // Debug-Modus aktivieren (1) oder deaktivieren (0)
$splitterID = 41035; // Die ID des Splitters
$counterID = 39289; // Die ID der Variable, die den Counter speichert

// Timer-Konfiguration
$shortFetch = 60; // Abrufen im 60 Sekunden Takt
$longFetch = 240; // Abrufen im 240 Sekunden Takt
$ultraLongFetch = 3600; // Sehr langer Takt von 3600 Sekunden

// Zusätzliche Bedingungen
$driveID = 29890; // ID für Fahrzustand (D oder R)
$chargingID = 53425; // ID für Ladezustand, abrufen wenn größer 1
$sentryID = 41951; // ID für Wächtermodus, 1 wenn aktiv

// Nachtzeit-Intervall
$nightStart = 22; // 22 Uhr
$nightEnd = 6.5; // 6:30 Uhr

// Aktuelle Zeit ermitteln
$currentTime = floatval(date('G')) + floatval(date('i')) / 60;

// Timer-Logik und Debug-Ausgaben
$fetchReason = ""; // Grund für den Datenabruf
$selectedInterval = ""; // Gewählter Timer-Intervall

if (GetValue($driveID) == 'D' || GetValue($driveID) == 'R') {
    IPS_SetScriptTimer($_IPS['SELF'], $shortFetch);
    $fetchReason = "Fahrzeug fährt (D oder R).";
    $selectedInterval = $shortFetch . " Sekunden";
} elseif (GetValue($chargingID) > 2 || GetValue($sentryID) == 1) {
    IPS_SetScriptTimer($_IPS['SELF'], $longFetch);
    $fetchReason = "Ladezustand > 1 oder Wächtermodus aktiv.";
    $selectedInterval = $longFetch . " Sekunden";
} elseif ($currentTime >= $nightStart || $currentTime <= $nightEnd) {
    IPS_SetScriptTimer($_IPS['SELF'], $ultraLongFetch);
    $fetchReason = "Nachtzeit.";
    $selectedInterval = $ultraLongFetch . " Sekunden";
} else {
    IPS_SetScriptTimer($_IPS['SELF'], $longFetch);
    $fetchReason = "Standard-Takt.";
    $selectedInterval = $longFetch . " Sekunden";
}

// Debug-Ausgabe vor dem Abrufen der Daten
if ($debug) {
    echo "Daten vom Tesla abrufen...\n";
    echo "Grund: $fetchReason\n";
    echo "Gewählter Intervall: $selectedInterval\n";
    echo "SplitterID: $splitterID\n";
}

// Daten vom Tesla abrufen
Tesla_FetchData($splitterID);

// Den aktuellen Wert des Counters abrufen
$currentCounterValue = GetValue($counterID);

// Den Counter um eins erhöhen
$newCounterValue = $currentCounterValue + 1;

// Den neuen Wert des Counters speichern
SetValue($counterID, $newCounterValue);

// Weitere Debug-Ausgaben, wenn der Debug-Modus aktiv ist
if ($debug) {
    echo "Neuer Counter-Wert: $newCounterValue\n";
}

?>```

Hört sich an, als müsstest du doch im Account neu anmelden. Bei mir läuft es ohne Probleme

Jo, komischerweise lief es mehrere Wochen ohne Probleme. Vorhin neu registriert und jetzt funzt es wieder :neutral_face:

Was ich nicht verstehe, EVCC greift auch über die API zu und die Verbindung musste ich nicht erneuern. Die läuft stabil…

Für die Fahrer die auch TeslaMate im Einsatz haben.
Da ich den Ort wo mein Auto ist sehr viel genutz habe ich ihn über TeslaMate wiedereingebaut.
(z.B. Ladesäule Freischalten, PC hochfahren, Essen bei der Arbeit bestellen, Licht an, abschließen, aufschleßen, …)

daher habe ich das so gelöst:

Wenn Schaltzustand D oder R alle 10 Sekunden oder bei Änderung der Geschwindigkeit.

<?php

// --------------------------------------------------------------------------------
// Konfigurationsbereich
// --------------------------------------------------------------------------------
$debug = 1; // Setzen Sie dies auf 0, um Debug-Ausgaben zu deaktivieren
$url = "http://tesla.mate.intern:4001/"; // URL der Webseite
$latitudeVariableID = 30416; // ID der Variablen für die Breite //alte Variable im Model
$longitudeVariableID = 41337; // ID der Variablen für die Länge  //alte Variable im Model

// --------------------------------------------------------------------------------
// Logik und Berechnungen
// --------------------------------------------------------------------------------
// cURL Session initialisieren, um den Quelltext der Webseite abzurufen
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($curl);
curl_close($curl);

// Aus dem Quelltext die Position extrahieren
preg_match('/<input id="position_1" type="text" value="([^"]+)" class="is-hidden"/', $result, $matches);
$position = explode(',', $matches[1]);

$latitude = $position[0]; // Breitengrad
$longitude = $position[1]; // Längengrad

// --------------------------------------------------------------------------------
// Debug Ausgabe alle Variablen
// --------------------------------------------------------------------------------
if ($debug) {
    echo "URL: $url\n";
    echo "Latitude: $latitude\n";
    echo "Longitude: $longitude\n";
}

// --------------------------------------------------------------------------------
// Ausgabe des und setzen von Variablen zum Abschluss
// --------------------------------------------------------------------------------
SetValue($latitudeVariableID, floatval($latitude)); // Breitengrad setzen
SetValue($longitudeVariableID, floatval($longitude)); // Längengrad setzen

?>

Ich verstehe immer noch nicht, warum das Modul die aktuellen Positionsdaten nicht liefern kann, wenn TeslaMate es hinbekommt.
Schade, dass @KaiS da aufgegeben hat. Ich weiss auch nicht, ob und wie wir in diesem Thema unterstützen können.
Gruß, Peter

TeslaMate nutzt die Steaming Api, was auch immer das ist. Ich vermute mal das ist noch die alte. Es gibt ja auch keine Grenze zum Abruf, sondern man kann Live auf die Sekundeverfolgen wo das Auto ist und wie der Zustand ist.

Ich kann leider 0 Programmieren. Man könnte ja im Quellcode von TeslaMate gucken wie die Daten bei Tesla abfragen. GitHub - teslamate-org/teslamate: A self-hosted data logger for your Tesla 🚘 und wo die Position her gekommt.

Ist etwas durch die Brust ins Knie was ich da gemacht habe, aber es funktioniert :slight_smile:

PS.
mal geraten:

Ist das nicht die Adresse der alten API?

Hallo zusammen,

erstmal vielen dank Kai für das Modul.

Eine Frage hab ich, bei mir wird im Modul alles in Meilen angegeben. Ist das eine Einstellungssache?

Gruß Michael

1 „Gefällt mir“

Das ist richtig. Ist nun mal ein amerikanisches Auto. Aber du kannst dir einfach ein Skript anlegen, indem du das selber um rechnest in eine neue variabel.

Bei Änderung vom Kilometerstand in Meilen rechnet er automatisch bei mir in um und speichert mir den Stand in km ab

Danke für die Antwort, wollte nur sicher gehen, das es keine Einstellungssache ist. :slight_smile:

Hallo @KaiS ,
kann man zufällig den Fensterstatus abrufen? Der ist bei mir nicht mit drin.

Mein Auto macht oft über die Tesla App Falschmeldungen das ein Fenster auf ist. 10 minuten nach abschließen, damit man auch schön weit weg ist. Und zumachen geht per App bei meinem leider nicht.

Daher war meine Idee, das die Meldung sofort per IPS kommen lasse, wenn ich abschließe, aber ich finde keine Variable dazu :frowning:
danke und schöne Ostern