(Gelöst) Tesla Powerwall 2 AC Fehler 403

Begonnen von pnewman, 10 Februar 2021, 16:08:28

Vorheriges Thema - Nächstes Thema

CoolTux

Zitat von: ather am 24 Februar 2021, 10:33:23
Hallo Cooltux,

mal ne blöde Frage.

Wie komme ich in diesen Matrixraum. Wenn ich "#fhem-teslapowerwall-mod:matrix.cooltux.net" eingebe finde ich nix?

Würde natürlich unterstützen.

Gruß
Ather

Angemeldet bist Du? Ich schaue nachher mal nach.
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

Kontrabass

Zitat von: ather am 22 Februar 2021, 14:56:33
Super Danke. Hat funktioniert. Ich bekomme jetzt wieder Werte von tesla in Fhem angezeigt.

Hallo ather,
ich finde den Fehler bei mir nicht.....
Da es bei Dir funktioniert - kannst Du den Code des funktionierenden Moduls hier zeigen?

Ich bekomme leider immer noch nichts ausser dem o.g. Fehler angezeigt.
Danke Dir für Deine Unterstützung,
Kontrabass

ather

Probier mal bei 3 diesen Code.
Und denk dran bei 4 beide E-Mail-Adressen anzupassen. Im notify muss dann Update.* gegen den kompletten Code aus 4 mit den richtigen ip's getauscht werden.

3. define n_PowerwallDummy notify PowerwallDummy Update.*

4. Notify Anpassen:
PowerwallDummy:Update.* {if ("$EVTPART1" eq "1"){
my $b = qx(curl -s -k -b /opt/fhem/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 /opt/fhem/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 Gridpower " .round((split ",", (ReadingsVal("PowerwallDummy","Gridpower1","")))[0],0));
fhem ("set PowerwallDummy Solarpower1 " .(split ":", (ReadingsVal("PowerwallDummy","jasonInputAggregates","")))[75]);
fhem ("set PowerwallDummy Solarpower " .round((split ",", (ReadingsVal("PowerwallDummy","Solarpower1","")))[0],0));
fhem ("set PowerwallDummy Batterypower1 " .(split ":", (ReadingsVal("PowerwallDummy","jasonInputAggregates","")))[29]);
fhem ("set PowerwallDummy Batterypower " .round((split ",", (ReadingsVal("PowerwallDummy","Batterypower1","")))[0],0));
fhem ("set PowerwallDummy Housepower1 " .(split ":", (ReadingsVal("PowerwallDummy","jasonInputAggregates","")))[52]);
fhem ("set PowerwallDummy Housepower " .round(((split ",", (ReadingsVal("PowerwallDummy","Housepower1","")))[0])*(-1),0));
fhem ("set HomeBattery " .ReadingsVal("PowerwallDummy","Prozent",""));
}}

5. Über eine Zeitsteuerung Updates abfragen:
define T_alle10Sek at +*00:00:30 set PowerwallDummy Update 1; define Prozent at +*00:00:15 set PowerwallDummy Update 2;;

Gruß
Ather

TimoD

Zitat von: Kontrabass am 23 Februar 2021, 22:48:38
Hallo TimoD,
bei 3 & 4 klemmt es bei mir:

Ich habe den Cookie gesetzt (mit der Anleitung und dem user fhem). Scheint zu klappen.
Den Dummy habe ich angelegt und das attribut readinglist gesetzt. Läuft

der notify (3) und if/elseif (4) werfen mir jedoch Fehlermeldungen:
(3): Usage: define <name> notify <regexp> <command>
(4): Unknown command PowerwallDummy:Update.* (und in Folge die Fehler bei der Abarbeitung des if/elseif)

Natürlich habe ich den Code bei mir an die IP Adressen angepasst, aber so weit geht es ja nicht.
Ich finde nicht das Leerzeichen oder das Komma, beim Zählen habe ich eine geschweifte Klammer zu viel. (split "}").

Hat die Autokorrektur da irgendwo im Gebälk auch zugeschlagen?
Etwas ratlos,
Kontrabass

Das Problem ist, das fhem beim anlegen komplexer notifys Fehler anzeigt. deswegen der Umweg über Schritt 3. Jetzt musst du beim Anlagen wahrscheinlich nicht ein "set x x;" hinzufügen, dass fhem das akzeptiert.

Im Sinne:

define n_PowerwallDummy notify PowerwallDummy:Update.* set hier irgendwas;

Um dann im notify das "PowerwallDummy:Update.* set hier irgendwas;" durch das in 4. (inkl. angepasster Account Daten zu ersetzen:

PowerwallDummy:Update.* {if ("$EVTPART1" eq "1"){
my $b = qx(curl -s -k -b /opt/fhem/cookie.txt https://192.168.178.92/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 /opt/fhem/cookie.txt https://192.168.178.92/api/meters/aggregates 2>&1);;
fhem("set PowerwallDummy jasonInputAggregates $b");
fhem ("set PowerwallDummy Gridpower1 " .(split ":", (ReadingsVal("PowerwallDummy","jasonInputAggregates","")))[6]);
fhem ("set PowerwallDummy Gridpower " .round((split ",", (ReadingsVal("PowerwallDummy","Gridpower1","")))[0],0));
fhem ("set PowerwallDummy Solarpower1 " .(split ":", (ReadingsVal("PowerwallDummy","jasonInputAggregates","")))[75]);
fhem ("set PowerwallDummy Solarpower " .round((split ",", (ReadingsVal("PowerwallDummy","Solarpower1","")))[0],0));
fhem ("set PowerwallDummy Batterypower1 " .(split ":", (ReadingsVal("PowerwallDummy","jasonInputAggregates","")))[29]);
fhem ("set PowerwallDummy Batterypower " .round((split ",", (ReadingsVal("PowerwallDummy","Batterypower1","")))[0],0));
fhem ("set PowerwallDummy Housepower1 " .(split ":", (ReadingsVal("PowerwallDummy","jasonInputAggregates","")))[52]);
fhem ("set PowerwallDummy Housepower " .round(((split ",", (ReadingsVal("PowerwallDummy","Housepower1","")))[0])*(-1),0));
fhem ("set HomeBattery " .ReadingsVal("PowerwallDummy","Prozent",""));
}}

ather

Mich würde ja intressieren, wie lacleman den Authentication-Header im Modul verändert hat (siehe Link).

https://forum.fhem.de/index.php/topic,118636.msg1135435.html#new

Kontrabass

Zitat von: TimoD am 26 Februar 2021, 07:49:25
Das Problem ist, das fhem beim anlegen komplexer notifys Fehler anzeigt. deswegen der Umweg über Schritt 3. Jetzt musst du beim Anlagen wahrscheinlich nicht ein "set x x;" hinzufügen, dass fhem das akzeptiert.

Im Sinne:

define n_PowerwallDummy notify PowerwallDummy:Update.* set hier irgendwas;

Um dann im notify das "PowerwallDummy:Update.* set hier irgendwas;" durch das in 4. (inkl. angepasster Account Daten zu ersetzen:

PowerwallDummy:Update.* {if ("$EVTPART1" eq "1"){
my $b = qx(curl -s -k -b /opt/fhem/cookie.txt https://192.168.1.1/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 /opt/fhem/cookie.txt https://192.168.1.1/api/meters/aggregates 2>&1);;
fhem("set PowerwallDummy jasonInputAggregates $b");
fhem ("set PowerwallDummy Gridpower1 " .(split ":", (ReadingsVal("PowerwallDummy","jasonInputAggregates","")))[6]);
fhem ("set PowerwallDummy Gridpower " .round((split ",", (ReadingsVal("PowerwallDummy","Gridpower1","")))[0],0));
fhem ("set PowerwallDummy Solarpower1 " .(split ":", (ReadingsVal("PowerwallDummy","jasonInputAggregates","")))[75]);
fhem ("set PowerwallDummy Solarpower " .round((split ",", (ReadingsVal("PowerwallDummy","Solarpower1","")))[0],0));
fhem ("set PowerwallDummy Batterypower1 " .(split ":", (ReadingsVal("PowerwallDummy","jasonInputAggregates","")))[29]);
fhem ("set PowerwallDummy Batterypower " .round((split ",", (ReadingsVal("PowerwallDummy","Batterypower1","")))[0],0));
fhem ("set PowerwallDummy Housepower1 " .(split ":", (ReadingsVal("PowerwallDummy","jasonInputAggregates","")))[52]);
fhem ("set PowerwallDummy Housepower " .round(((split ",", (ReadingsVal("PowerwallDummy","Housepower1","")))[0])*(-1),0));
fhem ("set HomeBattery " .ReadingsVal("PowerwallDummy","Prozent",""));
}}


Hallo TimoD,
dank Deiner Hilfe habe ich es - endlich - auch zum Fliegen gebracht (Danke auch an ather).

Anmerkung: Die Quizaufgaben mit den Hochkommata war echt gut versteckt, ebenso die versteckte Auslassung von PowerwallDummy.......
Aber wir sind ja alle hier um zu Lernen  :D

Also
1.) Anlage des Cookies
Hier war ein Leerzeichen zu viel, auch waren die Parenthesen und Hochkommata der Korrektur zum Opfer gefallen.
Richtig ist:
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":"MeinPasswort","email":"meine@email.de","force_sm_off":false}' "https://192.168.1.1/api/login/Basic"


2. Der Tipp mit dem 2-Stufigen Anlegen des Notify war am Ende die Lösung. Im Code war dazu noch "HomeBattery" nicht richtig definiert:

PowerwallDummy:Update.* {if ("$EVTPART1" eq "1"){
my $b = qx(curl -s -k -b /opt/fhem/cookie.txt https://192.168.178.92/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 /opt/fhem/cookie.txt https://192.168.178.92/api/meters/aggregates 2>&1);;
fhem("set PowerwallDummy jasonInputAggregates $b");
fhem ("set PowerwallDummy Gridpower1 " .(split ":", (ReadingsVal("PowerwallDummy","jasonInputAggregates","")))[6]);
fhem ("set PowerwallDummy Gridpower " .round((split ",", (ReadingsVal("PowerwallDummy","Gridpower1","")))[0],0));
fhem ("set PowerwallDummy Solarpower1 " .(split ":", (ReadingsVal("PowerwallDummy","jasonInputAggregates","")))[75]);
fhem ("set PowerwallDummy Solarpower " .round((split ",", (ReadingsVal("PowerwallDummy","Solarpower1","")))[0],0));
fhem ("set PowerwallDummy Batterypower1 " .(split ":", (ReadingsVal("PowerwallDummy","jasonInputAggregates","")))[29]);
fhem ("set PowerwallDummy Batterypower " .round((split ",", (ReadingsVal("PowerwallDummy","Batterypower1","")))[0],0));
fhem ("set PowerwallDummy Housepower1 " .(split ":", (ReadingsVal("PowerwallDummy","jasonInputAggregates","")))[52]);
fhem ("set PowerwallDummy Housepower " .round(((split ",", (ReadingsVal("PowerwallDummy","Housepower1","")))[0])*(-1),0));
fhem ("set PowerwallDummy HomeBattery " .ReadingsVal("PowerwallDummy","Prozent",""));
}}


Mann - bin ich froh dass das wieder geht ;-)
Kontrabass

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

Kontrabass

In dem Faden von CoolTux geht es weiter mit dem Modul.

Zu dem funktionierenden Workaround von TimoD noch eine Anmerkung, die natürlich hierher und nicht in den Modul-Faden gehören:

Nachdem Tesla die Firmware der Powerwall angepasst hat (gestern noch einmal) musste man den Cookie einfach nur erneuern.
Die JSON Auswertung muss man geringfügig anpassen, da einige Felder dazugekommen sind bzw. verändert wurden.

Bei mir sind die Spalten am Ende nun 6, 29, 52 und 75 für Gridpower1, Batterypower1, Housepower1 und Solarpower1.

vg, Christian aka Kontrabass