[46_TeslaPowerwall2AC] neues Modul für Tesla Stromspeicher

Begonnen von CoolTux, 18 Oktober 2017, 12:15:12

Vorheriges Thema - Nächstes Thema

Kontrabass

Hallo Michael,
wie beschrieben hatte ich bis gestern Mittag ein funktionierendes System basierend auf dem Beispiel von TimoD und mit dem erzeugten Cookie. (der durch die Änderung der Sicherheitdabfrage nötig wurde)

Gestern 12:00 hat die Powerwall sich automatisch aktualisiert und ich hatte Fehlermeldungen.
Die Fehlermeldungen konnte ich mit Hilfe des neu erzeugten Cookies elliminieren und ich bekam wieder Daten.

Im Egebnis aber nicht alle sondern nur die Einspeisung und Prozent. Housepower und Solarpower werden nun falsch ausgelesen .


Das hat also nichts mit der Vorletzten Version sondern konkret mit der Änderung der 21.xx zu tun.


Elektron

Hallo Christian,

Dann sind wir offensichtlich in der selben ,,Update-Gruppe".
Unser Gateway ist auch gestern Mittag upgedatet worden.

Im Falle des oben stehenden Moduls liegt das Problem in der Anmeldung.
Wahrscheinlich wird deshalb der Token nicht neu erstellt. Ich meine bisher hätte ich den Token im Device irgendwo sehen können. Konnte ihn jetzt aber nicht finden.

Vielleicht finden wir wenn die Anmeldung wieder läuft noch weitere Probleme durch die Änderung der JSON Payload...

Viele Grüße Michael

Jaykoert

Ich habe die Extraktion aus dem JSON von TimoD etwas angepasst in 30, 54, 77 und bin der Meinung, dass ich soweit wieder korrekte Werte bekomme.

PowerwallDummy:Update.* {if ("$EVTPART1" eq "1"){
my $b = qx(curl -s -k -b <path_to_cookie>/tesla_cookie.txt https://192.168.178.xx/api/system_status/soe 2>&1);;
fhem("set PowerwallDummy jasonInput $b");
fhem ("set PowerwallDummy Prozent2 " .(split ":", (ReadingsVal("PowerwallDummy","jasonInput","")))[1]);
fhem ("set PowerwallDummy Prozent " .round((split "}", (ReadingsVal("PowerwallDummy","Prozent2","")))[0],1));}
elsif("$EVTPART1" eq "2"){
my $b = qx(curl -s -k -b <path_to_cookie>/tesla_cookie.txt https://192.168.178.xx/api/meters/aggregates 2>&1);;
fhem("set PowerwallDummy jasonInputAggregates $b");
fhem ("set PowerwallDummy Gridpower1 " .(split ":", (ReadingsVal("PowerwallDummy","jasonInputAggregates","")))[6]);
fhem ("set PowerwallDummy Solarpower1 " .(split ":", (ReadingsVal("PowerwallDummy","jasonInputAggregates","")))[77]);
fhem ("set PowerwallDummy Batterypower1 " .(split ":", (ReadingsVal("PowerwallDummy","jasonInputAggregates","")))[30]);
fhem ("set PowerwallDummy Housepower1 " .(split ":", (ReadingsVal("PowerwallDummy","jasonInputAggregates","")))[54]);
fhem ("set PowerwallDummy " .ReadingsVal("PowerwallDummy","Prozent",""));
}}

Kontrabass

Genau das war es - jetzt flutscht es wieder!
Danke Jaykoert!

@Jaykoert - wenn Du mich noch bei der Zählweise der Spalten beim JSON Extrakt erhellen kannst - ich lerne nie aus...


@Elektron:
Falls Deine Anmeldung nicht geht - cookie auf dem raspi oder linux neu erzeugen, dann sollte es gehen (Pfade und credentials natürlich anpassen ;-) ):

sudo su -s /bin/bash - fhem
curl -s -k -i -c /opt/fhem/cookie.txt -X POST -H "Content-Type: application/json" -d '{"username":"customer","password":"PWhier","email":"email@emailprovider.de","force_sm_off":false}' "https://192.168.178.xx/api/login/Basic"


Elektron

Hi Kontrabass,

Danke für die Information.
Leider habe ich keine Ahnung ob und wie man dem Modul den Token mitgibt.

Vielleicht liegt der Fehler aber auch nicht in der Anmeldung sondern in der geänderten JSON Struktur und das Modul stolpert und wirft eine Fehlermeldung die erstmal auf den falschen Weg weist.

Viele Grüße Michael

Kontrabass

Siehe oben wir im Beispiel von Jaykoert wird das aufgerufen.

my $b = qx(curl -s -k -b <path_to_cookie>/tesla_cookie.txt https://192.168.178.xx/api/meters/aggregates 2>&1);;


Elektron

Hi Kontabass,

Vielen Dank für die schnelle Antwort.
Der Teil war mir klar, aber ich verwende dann ja das ,,fertige Modul" von CoolTux und ich weiß nicht wie ich da den Token verwende / im Modul ablege.

Vielen Dank und Grüße Michael

Jaykoert

Hi Kontrabass,

das JSON wird durch das split ":" ja einfach nur unterteilt. Eine richtige JSON-Verarbeitung ist das nicht. Kommt ein Element am Anfang hinzu, liefert er z.B. nicht mehr '2680.1679051880315,"frequency"':
"instant_power":-2680,
      "instant_reactive_power":30,
      "instant_apparent_power":2680.1679051880315,
      "frequency":50.028999999999996,

sondern '30,"instant_apparent_power"':

Das userReading macht dann noch ein split ",", um den überflüssigen nachfolgenden Elementnamen wegzubekommen.

CoolTux klopft das JSON platt und überführt alles in Userreadings.

Hier mal das aktuelle JSON:

{
   "site":{
      "last_communication_time":"2021-07-04T12:52:47.068381536+02:00",
      "instant_power":9.5,
      "instant_reactive_power":590.8899955749512,
      "instant_apparent_power":590.9663584930752,
      "frequency":50,
      "energy_exported":2537096.687811297,
      "energy_imported":1670516.8678112975,
      "instant_average_voltage":234.35999552408853,
      "instant_total_current":0,
      "i_a_current":0,
      "i_b_current":0,
      "i_c_current":0,
      "last_phase_voltage_communication_time":"0001-01-01T00:00:00Z",
      "last_phase_power_communication_time":"0001-01-01T00:00:00Z",
      "timeout":1500000000,
      "num_meters_aggregated":1
   },
   "battery":{
      "last_communication_time":"2021-07-04T12:52:47.090072354+02:00",
      "instant_power":-2680,
      "instant_reactive_power":30,
      "instant_apparent_power":2680.1679051880315,
      "frequency":50.028999999999996,
      "energy_exported":1935720,
      "energy_imported":2272460,
      "instant_average_voltage":230.10000000000002,
      "instant_total_current":57.5,
      "i_a_current":0,
      "i_b_current":0,
      "i_c_current":0,
      "last_phase_voltage_communication_time":"0001-01-01T00:00:00Z",
      "last_phase_power_communication_time":"0001-01-01T00:00:00Z",
      "timeout":1500000000,
      "num_meters_aggregated":1
   },
   "load":{
      "last_communication_time":"2021-07-04T12:52:47.068381536+02:00",
      "instant_power":824.2258586819091,
      "instant_reactive_power":377.09568849222774,
      "instant_apparent_power":906.3936365615978,
      "frequency":50,
      "energy_exported":0,
      "energy_imported":5826143.719417314,
      "instant_average_voltage":234.35999552408853,
      "instant_total_current":3.5169221472236787,
      "i_a_current":0,
      "i_b_current":0,
      "i_c_current":0,
      "last_phase_voltage_communication_time":"0001-01-01T00:00:00Z",
      "last_phase_power_communication_time":"0001-01-01T00:00:00Z",
      "timeout":1500000000
   },
   "solar":{
      "last_communication_time":"2021-07-04T12:52:47.089449134+02:00",
      "instant_power":3474,
      "instant_reactive_power":-229,
      "instant_apparent_power":3481.539458343105,
      "frequency":0,
      "energy_exported":7052761.546560897,
      "energy_imported":23298.00714358326,
      "instant_average_voltage":405.5250555761012,
      "instant_total_current":14.9015,
      "i_a_current":0,
      "i_b_current":0,
      "i_c_current":0,
      "last_phase_voltage_communication_time":"0001-01-01T00:00:00Z",
      "last_phase_power_communication_time":"0001-01-01T00:00:00Z",
      "timeout":1500000000,
      "num_meters_aggregated":1
   }
}


Ich denke nicht, dass der Fehler mit der JSON-Struktur zusammenhängt. Bei mir lokal habe ich auch gesehen, das das Frontend dies nicht mitschickt "force_sm_off":false. Ich habe das bei mir testweise mal rausgenommen, aber ohne Erfolg. Meine Perl-Kenntnisse reichen da leider nicht aus, um genau zu sagen was das Modul an der Stelle eigentlich tut, zudem stehe ich mit Verschlüsselungen sowieso etwas auf dem Kriegsfuß.

Ich habe mal einige Log-Ausgaben hinzugefügt, die aber nicht ausgegeben werden. Merkwürdigerweise bekomme ich immer folgende Ausgaben:


2021.07.04 14:09:16.950 1: password Keystore handle for Device (teslaPowerwall2) - No password in file
2021.07.04 14:09:16.949 1: password Keystore handle for Device (teslaPowerwall2) - No password in file
2021.07.04 14:09:16.949 1: password Keystore handle for Device (teslaPowerwall2) - No password in file


Ob es da noch ein anderes Problem gibt, kann vermutlich nur CoolTux sagen.

Gruß
Jan

Elektron

Hallo Jan,

Den Teil mit force_sm_off hatte ich auch schon gesehen und mal rausgenommen.
Änder allerdings nichts.
Die Fehlermeldung mit dem Passwort bekomme ich nicht.
Das klappt bei mir.
Bei mir sieht es so aus:

2021.07.04 16:25:41 4: TeslaPowerwall2AC (myPowerWall) - Read password from file
2021.07.04 16:25:41 4: TeslaPowerwall2AC (myPowerWall) - Read password from file
2021.07.04 16:25:41 4: TeslaPowerwall2AC (myPowerWall) - Read password from file
2021.07.04 16:25:41 4: TeslaPowerwall2AC (myPowerWall) - Read password from file
2021.07.04 16:25:41 4: TeslaPowerwall2AC (myPowerWall) - Send with URI: https://192.168.2.195/api/login/Basic
2021.07.04 16:25:41 4: TeslaPowerwall2AC (myPowerWall) - Call InternalTimer Timer_GetData
2021.07.04 16:25:41 4: TeslaPowerwall2AC (myPowerWall) - Read password from file
2021.07.04 16:25:41 4: TeslaPowerwall2AC (myPowerWall) - Read password from file
2021.07.04 16:25:41 3: TeslaPowerwall2AC (myPowerWall) - RequestERROR: https://192.168.2.195/api/login/Basic: Can't connect(2) to https://192.168.2.195:443:  SSL connect attempt failed

TimoD

Zitat von: Kontrabass am 03 Juli 2021, 12:56:32
Hallo Michael,
wie beschrieben hatte ich bis gestern Mittag ein funktionierendes System basierend auf dem Beispiel von TimoD und mit dem erzeugten Cookie. (der durch die Änderung der Sicherheitdabfrage nötig wurde)

Gestern 12:00 hat die Powerwall sich automatisch aktualisiert und ich hatte Fehlermeldungen.
Die Fehlermeldungen konnte ich mit Hilfe des neu erzeugten Cookies elliminieren und ich bekam wieder Daten.

Im Egebnis aber nicht alle sondern nur die Einspeisung und Prozent. Housepower und Solarpower werden nun falsch ausgelesen .


Das hat also nichts mit der Vorletzten Version sondern konkret mit der Änderung der 21.xx zu tun.

Hey Kontrabass, danke für deine Anpassung. Konnte mich an meine Lösung gar nicht mehr erinnern und musste alles selbst erstmal nochmal lesen  ::)

Jetzt geht es aber auch wieder

Bin damals auf die Lösung von CoolTux umgestiegen. Bist du auf der json Lösung geblieben?

Ja, dass Problem ist, dass sich die Antwort der Powerball verändert hat und damit auch das Modul von Cooltux nicht mehr geht,..

Elektron

#85
Hallo zusammen,

Ich habe mir das mal angesehen und den Token mal ,,mit der Hand" erzeugt. Dabei ist mir in der Rückmeldung etwas aufgefallen. Vielleicht kann CoolTux dazu was sagen, vielleicht stolpert das Modul an dieser Stelle.
Für mich sieht das nach einem Fehler von Tesla aus...

HTTP/2 200
cache-control: no-cache, no-store
set-cookie: AuthCookie=CWQgCSve8mA0uGhQP0FDUPmSknBl_10NRLL8oKdMivHH5Ykft1i12344568573838393-gdK_5bv3kbSpz18Q==; Path=/
set-cookie: UserRecord=eyJlbWFpbCI6Im1pY2hh123456789012344aHJpZy50diIsImZpcnN0bmFtZSI6IlRlc2xhIiwibGFzdG5hbWUiOiJFbmVyZ3kiLCJyb2xlcyI6WyJIb21lX093bmVyIl0sInRva2VuIjoiQ1dRZ0NTdmU4bUEwdUdoUVAwRkRVUG1Ta25CbF8xME5STEw4b0tkTWl2SEg1WWtmdDFpeDJDYlp6MGlLM0hnZDcyVm1nLWdkS181YnYza2JTcHoxOFE9PSIsInByb3ZpZGVyIjoiQmFzaWMiLCJsb2dpblRpbWUiOiIyMDIxLTA3LTA0VDE4OjU0OjU5LjcyNTg5MDIxOSswMjowMCJ9; Path=/
content-type: text/plain; charset=utf-8
content-length: 261
date: Sun, 04 Jul 2021 16:54:59 GMT

{"email":"user@provider.de","firstname":"Tesla","lastname":"Energy","roles":["Home_Owner"],"token":"CWQgCSve8mA0uGhQP0F123456789_10NRLL8oKdMivHH5Ykft1ix2CbZz0i12345123451234566930201039403029Q==","provider":"Basic","loginTime":"2021-07-04T18:54:59.725890219+02:00"}


["Home_Owner"]

Leide kann man in dem Code-Tag nicht farbig markieren. Die eckigen Klammern gehören da nach meinem Verständnis nicht hin. Habe aber leider kein Vergleichs Gateway mit der alten Software um es zu vergleichen....

Ich habe die Stelle mal rot markiert und die Antwort ewas anonymisiert...
...ich hoffe das stört nicht.

Erreicht habe ich die Ausgabe über:

curl -s -k -i -c /opt/fhem/cookie.txt -X POST -H "Content-Type: application/json" -d '{"username":"customer","password":"ABCDEF","email":"user@provider.de","force_sm_off":false}' "https://192.168.2.195/api/login/Basic"

Viele Grüße Michael

Kontrabass

#86
Zitat von: TimoD am 04 Juli 2021, 16:35:36
Bin damals auf die Lösung von CoolTux umgestiegen. Bist du auf der json Lösung geblieben?

TimoD,
ich hatte mit der Lösung mit dem Modul von CoolTux ganz am Anfang immer wieder Time-Outs und bin dann auf die JSON Lösung gegangen.
Diese lief ja mit dem Token dann auch in der oauth Variante.
Getreu dem Motto "never touch a running system" bin ich erst mal dabei geblieben.

Ich verfolge aber das Modul von CoolTux weiter, da mir sein Modul in der Abfrage schlanker erscheint und ich am Ende gerne bei dem Standard landen möchte.
vg, Christian AKA Kontrabass

Edit Nachtrag:
eigentlich hätte ich die JSON Fragen/Themen in den anderen (TimoD) Faden schreiben müssen - sorry fürs leichte Kapern ;-) ...aber das Grundproblem des neuen Cookies/Tokens ist bei beiden Abfragen sehr ähnlich gelagert.

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Elektron

#89
Hallo CoolTux,

Viele. dank für die Unterstützung.
Damit lebt bei mir FHEM nach dem Neustart ab.

Die Letzte Meldung im log ist : Undefined subroutine &FHEM::Tesla::Powerwall::Define called at fhem.pl line 3893.


Edit:
Habe da wohl beim runterladen einen Fehler gemacht.
Ich habe jetzt manuell die folgende Zeile übernommen, damit gelingt die Anmeldung wieder.

sslargs => { SSL_hostname => 0, verify_hostname => 0, SSL_verify_mode => 0 },

Edit2:
Heb jetzt erst gesehen, dass Du das Powerwall.pm eine Ebene (/Devices) tiefer geschoben hast.
Das muss dann aber auch die 46_TeslaPowerwall2AC.pm geändert werden oder?
Da habe ich noch keine geänderte Version gesehen...

Edit3:
Hab jetzt auch die geänderte 46_TeslaPowerwall2AC.pm gefunden und die Powerwall.pm in das richtige Verzeichnis gelegt.
Klappt!


Vielen Dank und Grüße Michael