Modul für Tesla Model S / 3 / X

Begonnen von swhome, 17 Juli 2017, 12:53:25

Vorheriges Thema - Nächstes Thema

Jaykoert

Damit geht es wohl erstmal wieder, aber Tesla meldet sich auch netterweise mit dem erwarteten Inhalt, wenn man etwas zum Fahrzeug schicken möchte:
2024.01.26 17:22:06.158 5: TeslaModel3 car status response {"response":null,"error":"Tesla Vehicle Command Protocol required, please refer to the documentation here: https://developer.tesla.com/docs/fleet-api#2023-10-09-rest-api-vehicle-commands-endpoint-deprecation-warning","error_description":""}

TobSch

Top, das ging ja fix!

Readings gehen alle wieder perfekt und charge_amps setzen funktioniert auch.

VG Tobias

satprofi

Zitat von: Jaykoert am 26 Januar 2024, 17:25:32Damit geht es wohl erstmal wieder, aber Tesla meldet sich auch netterweise mit dem erwarteten Inhalt, wenn man etwas zum Fahrzeug schicken möchte:
2024.01.26 17:22:06.158 5: TeslaModel3 car status response {"response":null,"error":"Tesla Vehicle Command Protocol required, please refer to the documentation here: https://developer.tesla.com/docs/fleet-api#2023-10-09-rest-api-vehicle-commands-endpoint-deprecation-warning","error_description":""}

hmmm.
vorerst danke , aber connecten tut es sich nicht.
TeslaConnection ist connected, aber TeslaCar nicht.
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Jaykoert

Zitat von: satprofi am 27 Januar 2024, 08:45:51hmmm.
vorerst danke , aber connecten tut es sich nicht.
TeslaConnection ist connected, aber TeslaCar nicht.

Hast du ein neueren Tesla? Die neue API ist bei neueren Fahrzeugen jetzt schon per default eingeschaltet.

satprofi

2021
teslalogger klappt auch erst nach update
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

didi-fritz

bei mir klappt die Datenabfrage nur dann, wenn das Auto "wach" ist.

damit kann ich vorerst leben....


satprofi

Zitat von: didi-fritz am 27 Januar 2024, 18:56:28bei mir klappt die Datenabfrage nur dann, wenn das Auto "wach" ist.

damit kann ich vorerst leben....


danke, du hast recht. Wagen dürfte gestern connected gewesen sein, nach fahrtende hab ich die readings aktualisiert empfangen.
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Elektrolurch

Hallo,

bei mir war am 23.1. auch erst einmal Schuß und ich habe ein wenig Ursachenvorschung betrieben.
1. Aus meiner Sicht ist die Funktion TeslaCar_UpdateStatus
überflüssig. Geändert hatte sich ja ein Teil  der uri von "vehickles" auf "products".
Sie ermittlet die carId, die gleich der vin ist. Das kann man sich ja schon mal sparen, ich habe die carId = vin mir in einem Attribut gespeichert.
2. Die sub ermittelt auch den Status online, offline oder asllep.
2. Ich habe festgestellt, dass man den state des Autos auch in der "($)" feststellen kann. Ist das Auto offline oder asleep, so steht in der Antwort kein json, sondern eine Fehlermeldung, die die Worte offline und asleep enthalten.
Ich habe ein M3 2020 und SW 23 44 laufen und das Auto wird nun auch NICHT mehr aufgeweckt, wenn man Daten auslesen möchte. Das scheint Tesla  geändert zu haben, so dass der ganze Hazel mit den update_timer und polling_timer in der
 TeslaCar_UpdateStatus sowieso nun überflüssig ist.
Teste das seit einigen Tagen und trotz der 1 x minütigen calls von ($) wacht das Auto nicht auf.
Hier meine  Lösung, da ist aber noch etwas mehr drin, da ich das Modul auch über an einigen Stellen erweitert habe, wie z.B. das automatische Schreiben eines Fahrtenbuches und die Generierung von Ereignissen, wenn das Fahrzeug bestimmte Orte erreicht.
sub TeslaCar_UpdateVehicleCallback($)
{
my ($param, $err, $data) = @_;
my $hash = $param->{hash};
my $name = $hash->{NAME};
my %readings = ();
my $JSON = JSON->new->utf8(0)->allow_nonref;

Log3($name,4,"Teslacar_UpdateVechicleCallback: err $err\ndata: $data");
 
if($err ne "")
{
Log3 ($name,1,"TeslaCar_UpdateVehicleCallback: error <$err> while requesting $param->{url}");
return undef;
}

if($data ne "")
{
# data contains info about state -> 'offline' or 'asleep'

if($data =~m/response.:null/)
{
if(readingsval($hash,'state','') eq 'online')
{
readingsSingleUpdate($hash,'state','asleep',1);
Log3($name,2,"TeslaCar_UpdateVehicleCallback: car asleep data:\n$data");

# Overwrite Timer and set to update_imer
RemoveInternalTimer($hash);
InternalTimer(gettimeofday()+
AttrVal($name,'updateTimer',240), "TeslaCar_Timer", $hash, 0);

# check for ending trip
if(exists($hash->{Trip})
)
# stop trip -> finish entry in logBook
{
TeslaCar_EndNewTrip($hash);
} # end new trip and close logBook
} # state has changed

return undef;
} # offline
# token expired
elsif($data =~m/token expired/)
{
Log3($name,1,"TeslaCar_UpdateVehicleCallback: error - token expired");
DoSet($name,'AccessToken');
return undef;
} # if no valid token
else
 # online
{

my $parsed = eval {$JSON->decode ($data)};
if($@)
{
Log3 $name, 1, "TeslaCar_UpdateVechicleCallback: $name - JSON error requesting data: $@";
return undef;
} # parse error

foreach my $reading (sort keys %{$parsed->{response}})
{
# skip unused readings
....

Elektrolurch

configDB und Windows befreite Zone!

FrankBu


Hallo,
ich habe bei mir im Modul TeslaCar und TeslaConnection die API Aufrufe entsprechend auf /api/1/products angepasst. Mein Wagen ist danach auch wieder in FHEM erreichbar.  Die "Internals" Daten sind ok. Aber die Readings sind unvollständig. Ich bekomme nur den "state" übermittelt. Die restlichen fehlen alle.

Bei Verbose Level 5 sehe ich aber, dass die Daten von Tesla kommen.

Habt ihr dazu noch Ideen? Den Wagen habe ich in fhem gelöscht und schon neu angelegt.


vehicle_config' => {
                      'rear_seat_type' => 0,
                      'can_accept_navigation_requests' => $VAR1->
  • {'calendar_enabled'},
                      'driver_assist' => 'TeslaAP3',
                      'default_charge_to_max' => $VAR1->
  • {'ble_autopair_enrolled'},
                      'supports_qr_pairing' => $VAR1->
  • {'ble_autopair_enrolled'},
                      'roof_color' => 'RoofColorGlass',
                      'wheel_type' => 'PinwheelRefresh18',
                      'has_air_suspension' => $VAR1->
  • {'ble_autopair_enrolled'},

... usw.

didi-fritz

ich habe meinen pollingTimer auf 300 und den updateTimer auf 0 gestellt. Dadurch wird die Logik in TeslaCar_UpdateStatus ausgetrickst.

Werte bekomme ich nur, wenn das Auto wach ist (laden oder fahren)

Thomas Kaiser

Hoi Zusammen

Ich bin neu hier im Forum. Verwende FHEM schon seit längerer Zeit und die Module TeslaConnection & TeslaCar seit etwa einem Jahr.
Das Phänomen was hier beschrieben wird, ist seit 23.01.2024 bei mir auch so.
Leider kommt bei mir die Fehlermeldung:
response from Tesla API: {"error":"invalid bearer token"}

Ich habe ein neues refreshToken von "Tesla Tokens" in das Attribut RefreshToken von TeslaConnection geladen. Kein Erfolg, immer noch die Fehlermeldung {"error":"invalid bearer token"}

Elektrolurch

Du musst sowohl das AccessToken, als auch den RefreshToken übernehmen.
configDB und Windows befreite Zone!

Thomas Kaiser

Danke,
aber wie übernehme ich das AccessToken?
Es gibt nur ein Attribut RefreshToken im Modul TeslaConnection.

FrankBu

#418
Ich habe auch etwas gesucht.

Den Refresh Token musst Du dir z.B. mit der Android APP Tesla Token neu generieren. Der Token ist nur kurz gültig. Den generierten Refresh Token entsprechend im Device teslacon als RefreshToken eintragen.  Anschließend set teslaconn connect senden. Damit sollte der STATE auf connected wechseln.

Wichtig die folgenden Eintäge sollten da sein.

api_uri  https://owner-api.teslamotors.com
auth_uri  https://auth.tesla.com/oauth2/v3/token
client_id ownerapi

Nicht auf https://fleet-api.prd.eu.vn.cloud.tesla.com umstellen. Das war mein Fehler, Damit habe ich nicht alle readings bekommen und lange am Fehler gesucht.

In der Datei 49_TeslaCar.pm auf:

#### Read list of cars, find my carId
von    my $URL = "/api/1/vehicles"; (bei mir Zeile 273).
auf    my $URL = "/api/1/products";

umstellen und ein Modul reload machen.

Anschließend set teslaconn scanCars ausführen. Dein Wagen sollte danach mit neuen Daten wieder da sein. Wichtig der Wagen muss online sein.

Leider funktionieren ein Großteil der Befehle nicht mehr. Diese gehen nur über die fleet-api.
Gruß

Thomas Kaiser

Danke, jetzt funktioniert es bei mir wieder.

Ich habe eben als erstes die api_uri auf https://fleet-api.prd.eu.vn.cloud.tesla.com umgestellt. Ich dachte https://owner-api.teslamotors.com geht nicht mehr...