Modul für Tesla Model S / 3 / X

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

Vorheriges Thema - Nächstes Thema

mrmops

Zitat von: Decki am 08 Februar 2021, 19:52:39
Hallo an Programmierer mit Teslas,
könnt ihr mir als Nichtprogrammierer erklären, wie ich "php -f PHPScriptTeslaLogin.php" auf einem Raspi oder Win10 ausführe/starte?
Muss in der letzten Zeile des php Scriptes bei Name und Passwort die "" dort bleiben, oder müssen die "" auch raus?

Danke

Hi Decki,
Die "" müssen bleiben. In Windows gibt es (meines Wissens als MacUser) die "DOS-Box" - command dort einfach eigeben und ausführen.

mrmops

Zitat von: Elektrolurch am 09 Februar 2021, 11:51:44

update all https://raw.githubusercontent.com/BAngel87/FHEM-Tesla/master/controls_tesla.txt
2021.02.09 11:42:53 1 : UPD FHEM/49_TeslaCar.pm
2021.02.09 11:42:54 1 : Got 24864 bytes for FHEM/49_TeslaCar.pm, expected 14910
2021.02.09 11:42:54 1 : aborting.

Der update-Befehl geht leider immer noch nicht.


Elektrolurch

Alternative falls Update nicht funktioneren sollte: Code vonGitHub als zip herunterladen (https://github.com/BAngel87/FHEM-Tesla/archive/master.zip) und die enthalteten Dateien händisch in FHEM kopieren.


Decki

Hallo,
ich konnte nun das Token erzeugen, nachdem ich php auf einem anderen Raspi installiert hatte.
Habe dann das Token in Teslaconn als Attribut mit Anführungszeichen hinzugefügt.

Dann Login: funktioniert
In TeslaCar init ausgeführt kommt:
Failed to connect to TeslaCar API, see log for details
2021.02.14 11:38:19 2: set command: init
2021.02.14 11:38:19 4: 5YJ3E7EBXXXXXXXXX request: https://owner-api.teslamotors.com/api/1/vehicles
2021.02.14 11:38:19 4: 5YJ3E7EBXXXXXXXXX: no token to be refreshed
2021.02.14 11:38:19 4: 5YJ3E7EBXXXXXXXXX response:


Habe die Module von https://github.com/BAngel87/FHEM-Tesla

Was stimmt da nicht?
Raspi 2 im Schaltschrank, USB IR Lesekopf am EHz21, Gaszähler mit Reedkontakt, Jeelink,  16 FS20 Aktoren,  3 Ufos für LED, 11 FS20 Rolladenaktore, AMAD 4.0 mit Sprachausgabe, Esp12 mit EspEasy

Elektrolurch

Ok. Die Dateien habe ich jetzt über den git-Link heruntergeladen.
php musste ich installieren.
Beim Ausführen des Skripts bekomme ich allerdings:

PHP Fatal error:  Uncaught Error: Call to undefined function curl_init() in /hdd/sda4/fhem/lib/FHEM/PHPScriptTeslaLogin.php:503
Stack trace:
#0 {main}
  thrown in /hdd/sda4/fhem/lib/FHEM/PHPScriptTeslaLogin.php on line 503

Fehlt da eine lib für php (curl)?
Leider kenne ich mich mit dem php - Kram so gar nicht aus.
Mir ist nur aufgefallen, dass bei der Installation auch der apache2 mitkommt...

Elektrolurch

configDB und Windows befreite Zone!

Decki

Hallo Elektroluch,

ich habe folgenden Befehl/ Module auf einem Raspi installiert:
apt install php libapache2-mod-php php-cli php-fpm php-json php-mysql php-zip php-gd php-mbstring php-curl php-xml php-pear php-bcmath
Raspi 2 im Schaltschrank, USB IR Lesekopf am EHz21, Gaszähler mit Reedkontakt, Jeelink,  16 FS20 Aktoren,  3 Ufos für LED, 11 FS20 Rolladenaktore, AMAD 4.0 mit Sprachausgabe, Esp12 mit EspEasy

baeda

ZitatFehlt da eine lib für php (curl)?

ich habe php bei mir lokal installiert (Linux Mint), dazu noch folgende Pakete: php-curl, php-dom, php7.2-xml



@ mrmops: Danke für den Tipp! Mit der aktuellen Version klappte es - ich konte den Token generieren.

TeslaConnection zeigt nun nach einem erneuten login "connected" an.

Allerdings aktualisiert sich bei mir TeslaCar nicht mehr.

Wenn ich set myTeslaCar wakeUpCar ausführe, erhalte ich einen Fehler:

{"error":"unsupported SSO app"}



Decki

Hallo baeda,

genauso verhält es sich bei mir.
Raspi 2 im Schaltschrank, USB IR Lesekopf am EHz21, Gaszähler mit Reedkontakt, Jeelink,  16 FS20 Aktoren,  3 Ufos für LED, 11 FS20 Rolladenaktore, AMAD 4.0 mit Sprachausgabe, Esp12 mit EspEasy

mrmops

Hallo beada und Decki,

welchen Wert zeigt bei Euch das Reading 'tokenExpiry' bei 'TeslaConnection' ?

Decki

Hallo mrmops,

das hier:  tokenExpiry Wed Mar 3 19:59:25 2021
Raspi 2 im Schaltschrank, USB IR Lesekopf am EHz21, Gaszähler mit Reedkontakt, Jeelink,  16 FS20 Aktoren,  3 Ufos für LED, 11 FS20 Rolladenaktore, AMAD 4.0 mit Sprachausgabe, Esp12 mit EspEasy

mrmops

#189
Hallo Decki,

wenn ich das richtig verstehe hast Du die Anpassung von TimoD in Verwendung welche bei ihm funktioniert. Ich habe seine Lösung bislang nicht im Einsatz. Bei mir funktioniert sowohl das senden von Commands wie 'wakeUpCar' als auch das Update der Readings soweit problemlos mit folgender Anpassung in der Funktion 'sub TeslaConnection_Define($$)' des Moduls '49_TeslaConnection.pm':

sub TeslaConnection_Define($$)
{
  my ($hash, $def) = @_;
  my @a = split("[ \t][ \t]*", $def);

  my $u = "wrong syntax: define <conn-name> TeslaConnection [client_id] [redirect_uri] [simulator]";

#  return $u if(int(@a) < 4);

  ### DEBUG mrmops
  my $name = $hash->{NAME};
  Log3 $name, 1, "### TeslaConnection_Define";


  $hash->{api_uri} = "https://owner-api.teslamotors.com";

#  if(int(@a) >= 4) {
#    $hash->{client_id} = $a[2];
#    $hash->{redirect_uri} = $a[3];
#  }
#  else {
    $hash->{client_id} = "81527cff06843c8634fdc09e8ac0abefb46ac849f38fe1e431c2ef2106796384";
    $hash->{client_secret} = "c7257eb71a564034f9419ee651c7d0e5f7aa6bfbd18bafb5c5c033b093bb2fa3";

    # mrmops hack !!!
    setKeyValue($hash->{NAME}."_accessToken","qts-XXXXXXXXX");
    setKeyValue($hash->{NAME}."_refreshToken", "eyJhbGciOiJSUzI1NXXXXXXXX");
    $hash->{created_at} = 1612611361;
    $hash->{expires_at} = $hash->{created_at};
    $hash->{expires_at} += 3888000;

    readingsBeginUpdate($hash);
    readingsBulkUpdate($hash, "tokenCreated", scalar localtime $hash->{created_at});
    readingsBulkUpdate($hash, "tokenExpiry", scalar localtime $hash->{expires_at});
    readingsEndUpdate($hash, 1);
   
    # END Hack

#  }

  ###### mrmops hack !!!
  #$hash->{STATE} = "Login necessary";
  $hash->{STATE} = "Connected";

  # start with a delayed refresh
  #setKeyValue($hash->{NAME}."_accessToken",undef);
 
  ##### END Hack
 
  InternalTimer(gettimeofday()+10, "TeslaConnection_RefreshToken", $hash, 0);

  return;
}


In den folgenen Zeilen habe ich die jeweiligen Werte, welche bei der Erzeugung des Tokens ausgeben werden eingetragen:

    setKeyValue($hash->{NAME}."_accessToken","qts-XXXXXXXXX");   <--- Wert von ["access_token"]
    setKeyValue($hash->{NAME}."_refreshToken", "eyJhbGciOiJSUzI1NXXXXXXXX");  <--- Wert von ["refresh_token"]
    $hash->{created_at} = 1612611361;          <--- Wert von ["created_at"]
    $hash->{expires_at} += 3888000;  <--- Wert von ["expires_in"]   


Meine ursprüngliche Anpassung in 'TeslaConnection_Set' in meinem Beitrag « Antwort #168 am: 06 Februar 2021, 17:06:28 » hatte tatsächlich das Problem das Commands gesendet werden konnten, aber die Readings nicht aktualisiert wurden.

Bei mir läuft es nun mit obigem Hack seit einer Woche einwandfrei. Ich hoffe dies funktioniert auch bei Euch.

Elektrolurch

Danke, mit dem Hack hat es gleich automatisch nach einem Neustart wieder funktioniert.
Jetzt habe ich meine "Teslana" wieder (auf dem Bildschirm) :-)
Eins ist mir noch aufgefallen:

2021.02.15 11:58:40 1: PERL WARNING: Use of uninitialized value in hash element at ./FHEM/49_TeslaConnection.pm line 49, <$fh> line 4613.

In der _Inititalize - Routine ist der NAME des Objektes natürlich nicht bekannt und es macht keinen Sinn das attr zu setzen.

Unter debian - buster musste ich folgendes nachinstallieren:

apt-get install php-curl  php7.3-xml


Ah, jetzt habe ich aber noch das hier im log:

2021.02.15 12:08:49 1: PERL WARNING: Use of uninitialized value $token in concatenation (.) or string at ./FHEM/49_TeslaConnection.pm line 435.


Muss man jetzt das AccessToken einmal im Monat erneuern?

Elektrolurch
configDB und Windows befreite Zone!

mrmops

Hallo Elektrolurch,

schön das es nun wieder bei Dir läuft.

1) Die von Dir angeführten PERL-Warnings habe ich nicht im log - habe aber auch im "Initialize" nichts geändert.
2) "Muss man jetzt das AccessToken einmal im Monat erneuern?".
Der Hack ist nur ein schneller Workaround - solange die Änderungen bei der Tokenerneuerung seitens Tesla vom Modulauthor noch nicht umgesetzt wurden muss bei Aublauf der Tokengültigkeit (siehe Reading 'tokenExpiry') die Vorgehensweise erneut durchgeführt werden.

Decki

Hallo mrmops,

Danke für deine Anleitung. Habe es streng danach durchgeführt und es funktioniert. Warum ist das Refreshtoken um soviel länger als das Accesstoken?
Komisch ist, dass nicht alle Readings aktualisiert werden.
Aber ich bekomme den Ladezustand des Akkus, was für mich wichtig ist.

Nochmals danke

Andy
Raspi 2 im Schaltschrank, USB IR Lesekopf am EHz21, Gaszähler mit Reedkontakt, Jeelink,  16 FS20 Aktoren,  3 Ufos für LED, 11 FS20 Rolladenaktore, AMAD 4.0 mit Sprachausgabe, Esp12 mit EspEasy

mrmops

Hallo Decki,

freut mich das es bei Dir ebenfalls funktioniert hat.
Das nicht immer alle Readings aktualisiert werden ist an sich normal - versuch mal ein 'requestSettings' beim 'TesclaCar' - Device. Meiner Erfahrung nach werden dabei die meisten Readings aktualisert (wenn das Auto online ist).

Beste Grüße,
Ebenfalls Andi

baeda

Hallo mrmops,

ich habe die 49_TeslaConnection.pm nach Deiner Vorlage angepasst - nun wird alles wieder aktualisiert.

Vielen Dank für den Tipp!



Grüße,
Baeda