NEWS
Werte (JSON) an URL senden
-
Hey,
ich habe einen Dockercontainer laufen der über eine API verfügt. Man kann über die IP "IPdesSystems:PORT/swagger" auf die API zugreifen. Wenn ich dort im "PUT" Fenster "Try Out" wähle und Werte ändere und "execute", wird im WebInterface des Containers auch das geändert, was ich will.


Da ich dieses Vorgehen über einen externen Taster realisieren möchte, bräuchte ich Hilfe, wie ich ein Skript erstelle, dass über den Trigger (Taster) die Werte an die API des Dockercontainer sendet.
Ich habe einen Beitrag hier im Forum gefunden (heißt quasi wie dieser, ist aber auf "gelöst" gesetzt) in dem EIN Wert geschickt werden sollte. Bei mir müssten es mehrere sein.
In der API wird scheinbar folgendes ausgeführt:curl -X 'PUT' \ 'http://192.168.9.105:7190/api/Config/UpdateCarConfiguration?carId=1' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d '{ "chargeMode": 2, "minimumSoC": 20, "latestTimeToReachSoC": "2023-03-01T17:06:45.205Z", "ignoreLatestTimeToReachSocDate": true, "maximumAmpere": 0, "minimumAmpere": 0, "usableEnergy": 0, "shouldBeManaged": true, "chargingPriority": 0 }'Wenn ich im WebInterface den Entwicklermodus von Chrome aufrufe und da dann Netzwerk wird folgendes "geschickt" wenn ich im WebInterface auf "speichern" gehe.
{ "carId": 1, "chargeMode": 2, "minimumStateOfCharge": 30, "latestTimeToReachStateOfCharge": "2023-03-02T17:06:45.205", "ignoreLatestTimeToReachSocDate": true }und zwar an "http://192.168.9.105:7190/api/Index/UpdateCarBaseSettings"
Das würde mir reichen (ich brauche nur den chargeMode und den minimumStateOfCharge)
Ich wollte das ganze mit nem BLockly mit exec Block ausprobieren.

Wie bekomme ich da wo "test" steht "result" hin? Ich finde den Result Block nicht :(
Die Idee hierzu habe ich aus dem anderen Beitrag (dort hat er allerdings nicht zum Erfolg geführt, sondern ein JavaScript, das ich nicht verstehe ^^
Vielen Dank schon malEDIT: Hier der Link zum anderen Thema, falls der hilft :)
Klick -
Hey,
ich habe einen Dockercontainer laufen der über eine API verfügt. Man kann über die IP "IPdesSystems:PORT/swagger" auf die API zugreifen. Wenn ich dort im "PUT" Fenster "Try Out" wähle und Werte ändere und "execute", wird im WebInterface des Containers auch das geändert, was ich will.


Da ich dieses Vorgehen über einen externen Taster realisieren möchte, bräuchte ich Hilfe, wie ich ein Skript erstelle, dass über den Trigger (Taster) die Werte an die API des Dockercontainer sendet.
Ich habe einen Beitrag hier im Forum gefunden (heißt quasi wie dieser, ist aber auf "gelöst" gesetzt) in dem EIN Wert geschickt werden sollte. Bei mir müssten es mehrere sein.
In der API wird scheinbar folgendes ausgeführt:curl -X 'PUT' \ 'http://192.168.9.105:7190/api/Config/UpdateCarConfiguration?carId=1' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d '{ "chargeMode": 2, "minimumSoC": 20, "latestTimeToReachSoC": "2023-03-01T17:06:45.205Z", "ignoreLatestTimeToReachSocDate": true, "maximumAmpere": 0, "minimumAmpere": 0, "usableEnergy": 0, "shouldBeManaged": true, "chargingPriority": 0 }'Wenn ich im WebInterface den Entwicklermodus von Chrome aufrufe und da dann Netzwerk wird folgendes "geschickt" wenn ich im WebInterface auf "speichern" gehe.
{ "carId": 1, "chargeMode": 2, "minimumStateOfCharge": 30, "latestTimeToReachStateOfCharge": "2023-03-02T17:06:45.205", "ignoreLatestTimeToReachSocDate": true }und zwar an "http://192.168.9.105:7190/api/Index/UpdateCarBaseSettings"
Das würde mir reichen (ich brauche nur den chargeMode und den minimumStateOfCharge)
Ich wollte das ganze mit nem BLockly mit exec Block ausprobieren.

Wie bekomme ich da wo "test" steht "result" hin? Ich finde den Result Block nicht :(
Die Idee hierzu habe ich aus dem anderen Beitrag (dort hat er allerdings nicht zum Erfolg geführt, sondern ein JavaScript, das ich nicht verstehe ^^
Vielen Dank schon malEDIT: Hier der Link zum anderen Thema, falls der hilft :)
Klick -
Ok, leider hilft mir das nicht weiter :)
javascript.0 2023-03-01 19:00:39.945 info script.js.TeslaSolarSetSOC: javascript.0 2023-03-01 19:00:39.717 info script.js.TeslaSolarSetSOC: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 2023-03-01 19:00:39.666 info Start javascript script.js.TeslaSolarSetSOCDas passiert im Log, wenn ich das Script neu starte
-
Ok, leider hilft mir das nicht weiter :)
javascript.0 2023-03-01 19:00:39.945 info script.js.TeslaSolarSetSOC: javascript.0 2023-03-01 19:00:39.717 info script.js.TeslaSolarSetSOC: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 2023-03-01 19:00:39.666 info Start javascript script.js.TeslaSolarSetSOCDas passiert im Log, wenn ich das Script neu starte
-
@m-a-x sagte: Das passiert im Log, wenn ich das Script neu starte
Du hast
resultan den Debug-Block übergeben?
-
@paul53 ja

beim ersten mal kam noch die Meldung, dass ich exec im Adapter erlauben muss :) das hab ich gemacht und dann kam das o.g.
-
Ich versuche das Log zu schicken, aber es kommt der Fehler "forbidden" beim Antworten ;)
avascript.0 2023-03-01 19:16:08.834 info script.js.TeslaSolarSetSOC: {'code':3,'killed':false,'signal':null,'cmd':'curl -X 'PUT' \\ 'http://192.168.9.105:7190/api/Config/UpdateCarConfiguration?carId=1' \\ -H 'accept: */*' \\ -H 'Content-Type: application/json' \\ -d '{ \'chargeMode\': 2, \'minimumSoC\': 20, \'latestTimeToReachSoC\': \'2023-03-01T17:06:45.205Z\', \'ignoreLatestTimeToReachSocDate\': true, \'maximumAmpere\': 0, \'minimumAmpere\': 0, \'usableEnergy\': 0, \'shouldBeManaged\': true, \'chargingPriority\': 0 }''} javascript.0 2023-03-01 19:16:08.598 info script.js.TeslaSolarSetSOC: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptionsEIDT: Jetzt.. Evtl zu Kurze Antwort?
-
Ich versuche das Log zu schicken, aber es kommt der Fehler "forbidden" beim Antworten ;)
avascript.0 2023-03-01 19:16:08.834 info script.js.TeslaSolarSetSOC: {'code':3,'killed':false,'signal':null,'cmd':'curl -X 'PUT' \\ 'http://192.168.9.105:7190/api/Config/UpdateCarConfiguration?carId=1' \\ -H 'accept: */*' \\ -H 'Content-Type: application/json' \\ -d '{ \'chargeMode\': 2, \'minimumSoC\': 20, \'latestTimeToReachSoC\': \'2023-03-01T17:06:45.205Z\', \'ignoreLatestTimeToReachSocDate\': true, \'maximumAmpere\': 0, \'minimumAmpere\': 0, \'usableEnergy\': 0, \'shouldBeManaged\': true, \'chargingPriority\': 0 }''} javascript.0 2023-03-01 19:16:08.598 info script.js.TeslaSolarSetSOC: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptionsEIDT: Jetzt.. Evtl zu Kurze Antwort?
-
@paul53
Das mit der zu kurzen Antwort war auf die Forenantwort bezogen :) wollte dir ursprünglich nur schreiben "jetzt kommt:" und dann den Code.
Gibt es eine Möglichkeit das "Text" Fenster des exec Befehls größer zu machen, sodass ich darin leichter rum probieren kann?
Ich hab in meinem ersten Beitrag auch mal ganz unten den anderen Thread verlinkt, falls das hilft -
@paul53
Das mit der zu kurzen Antwort war auf die Forenantwort bezogen :) wollte dir ursprünglich nur schreiben "jetzt kommt:" und dann den Code.
Gibt es eine Möglichkeit das "Text" Fenster des exec Befehls größer zu machen, sodass ich darin leichter rum probieren kann?
Ich hab in meinem ersten Beitrag auch mal ganz unten den anderen Thread verlinkt, falls das hilft -
@m-a-x
Der Kommandotext wird durch Hochkommata unterbrochen. Wenn innerhalb des Kommandos Hochkommata erforderlich sind, müssen diese mit Backslash eingeleitet werden. Anfang:'cmd':'curl -X \'PUT\' \\ \'http:/@paul53
Leider nicht besser geworden :)javascript.0 2023-03-01 19:37:31.205 info script.js.TeslaSolarSetSOC1: {'code':3,'killed':false,'signal':null,'cmd':'curl -X \\'PUT\\' \\ \\'http://192.168.9.105:7190/api/Config/UpdateCarConfiguration?carId=1\\' \\ -H \\'accept: */*\\' \\ -H \\'Content-Type: application/json\\' \\ -d \\'{ \'chargeMode\': 2, \'minimumSoC\': 20, \'latestTimeToReachSoC\': \'2023-03-01T17:06:45.205Z\', \'ignoreLatestTimeToReachSocDate\': true, \'maximumAmpere\': 0, \'minimumAmpere\': 0, \'usableEnergy\': 0, \'shouldBeManaged\': true, \'chargingPriority\': 0 }\\''}Da, wo im Log jetzt ein ' ist, war vorher ein ", da wo jetzt zwei \' sind, hatte ich ein \ vor einem ' eingefügt...
Auch ganz hinten und am Anfangcurl -X \'PUT\' \ \'http://192.168.9.105:7190/api/Config/UpdateCarConfiguration?carId=1\' \ -H \'accept: */*\' \ -H \'Content-Type: application/json\' \ -d \'{ "chargeMode": 2, "minimumSoC": 20, "latestTimeToReachSoC": "2023-03-01T17:06:45.205Z", "ignoreLatestTimeToReachSocDate": true, "maximumAmpere": 0, "minimumAmpere": 0, "usableEnergy": 0, "shouldBeManaged": true, "chargingPriority": 0 }\' -
@paul53
Leider nicht besser geworden :)javascript.0 2023-03-01 19:37:31.205 info script.js.TeslaSolarSetSOC1: {'code':3,'killed':false,'signal':null,'cmd':'curl -X \\'PUT\\' \\ \\'http://192.168.9.105:7190/api/Config/UpdateCarConfiguration?carId=1\\' \\ -H \\'accept: */*\\' \\ -H \\'Content-Type: application/json\\' \\ -d \\'{ \'chargeMode\': 2, \'minimumSoC\': 20, \'latestTimeToReachSoC\': \'2023-03-01T17:06:45.205Z\', \'ignoreLatestTimeToReachSocDate\': true, \'maximumAmpere\': 0, \'minimumAmpere\': 0, \'usableEnergy\': 0, \'shouldBeManaged\': true, \'chargingPriority\': 0 }\\''}Da, wo im Log jetzt ein ' ist, war vorher ein ", da wo jetzt zwei \' sind, hatte ich ein \ vor einem ' eingefügt...
Auch ganz hinten und am Anfangcurl -X \'PUT\' \ \'http://192.168.9.105:7190/api/Config/UpdateCarConfiguration?carId=1\' \ -H \'accept: */*\' \ -H \'Content-Type: application/json\' \ -d \'{ "chargeMode": 2, "minimumSoC": 20, "latestTimeToReachSoC": "2023-03-01T17:06:45.205Z", "ignoreLatestTimeToReachSocDate": true, "maximumAmpere": 0, "minimumAmpere": 0, "usableEnergy": 0, "shouldBeManaged": true, "chargingPriority": 0 }\' -
@paul53
Ich glaube leider nein..
Das ist das Projekt:
https://github.com/pkuehnel/TeslaSolarCharger -
@m-a-x sagte: leider nein..
Woher stammen die Bilder?
-
Hey,
ich habe einen Dockercontainer laufen der über eine API verfügt. Man kann über die IP "IPdesSystems:PORT/swagger" auf die API zugreifen. Wenn ich dort im "PUT" Fenster "Try Out" wähle und Werte ändere und "execute", wird im WebInterface des Containers auch das geändert, was ich will.


Da ich dieses Vorgehen über einen externen Taster realisieren möchte, bräuchte ich Hilfe, wie ich ein Skript erstelle, dass über den Trigger (Taster) die Werte an die API des Dockercontainer sendet.
Ich habe einen Beitrag hier im Forum gefunden (heißt quasi wie dieser, ist aber auf "gelöst" gesetzt) in dem EIN Wert geschickt werden sollte. Bei mir müssten es mehrere sein.
In der API wird scheinbar folgendes ausgeführt:curl -X 'PUT' \ 'http://192.168.9.105:7190/api/Config/UpdateCarConfiguration?carId=1' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d '{ "chargeMode": 2, "minimumSoC": 20, "latestTimeToReachSoC": "2023-03-01T17:06:45.205Z", "ignoreLatestTimeToReachSocDate": true, "maximumAmpere": 0, "minimumAmpere": 0, "usableEnergy": 0, "shouldBeManaged": true, "chargingPriority": 0 }'Wenn ich im WebInterface den Entwicklermodus von Chrome aufrufe und da dann Netzwerk wird folgendes "geschickt" wenn ich im WebInterface auf "speichern" gehe.
{ "carId": 1, "chargeMode": 2, "minimumStateOfCharge": 30, "latestTimeToReachStateOfCharge": "2023-03-02T17:06:45.205", "ignoreLatestTimeToReachSocDate": true }und zwar an "http://192.168.9.105:7190/api/Index/UpdateCarBaseSettings"
Das würde mir reichen (ich brauche nur den chargeMode und den minimumStateOfCharge)
Ich wollte das ganze mit nem BLockly mit exec Block ausprobieren.

Wie bekomme ich da wo "test" steht "result" hin? Ich finde den Result Block nicht :(
Die Idee hierzu habe ich aus dem anderen Beitrag (dort hat er allerdings nicht zum Erfolg geführt, sondern ein JavaScript, das ich nicht verstehe ^^
Vielen Dank schon malEDIT: Hier der Link zum anderen Thema, falls der hilft :)
Klick -
@m-a-x sagte: ich brauche nur den chargeMode und den minimumStateOfCharge
Sollen die Werte abgefragt oder gesetzt werden?
Welche Werte kann "chargeMode" annehmen?@paul53
Die Werte sollen gesetzt werden. Wenn ich das per "PUT" in der API mache, klappt es auch (wie im ersten Post kommt kann dieser "code" mit CURL am Anfang raus.
Der DockerContainer lässt mein Fahrzeug nur mit PV Überschuss laden. Aber manchmal brauche ich es auch einfach, dass das Fahrzeug komplett geladen wird. Dazu möchte ich einen Taster neben die Wallbox bauen und hierdurch, über Iobroker, soll dann der SOC auf 100% gesetzt werden. Den Rest der Logik (zurückkehren zu den Standardwerten, sobald der Ladevorgang abgebrochen wird oder beendet ist) würde ich in ein Skript mit einbauen. Wichtig wäre zunächst "nur", dass dieser EXEC Block funktioniert :)chargeMode gibt es von 0 bis 3. Ich brauche (immer nur) chargeMode:2 (es würden auch andere gehen, dann müsste ich aber beim Zurückwechseln noch mehr Werte ändern)
Das steht in der API

minimumStateOfCharge ist eine (Prozent) Zahl zwischen 0 und 100 :) -
@paul53
Die Werte sollen gesetzt werden. Wenn ich das per "PUT" in der API mache, klappt es auch (wie im ersten Post kommt kann dieser "code" mit CURL am Anfang raus.
Der DockerContainer lässt mein Fahrzeug nur mit PV Überschuss laden. Aber manchmal brauche ich es auch einfach, dass das Fahrzeug komplett geladen wird. Dazu möchte ich einen Taster neben die Wallbox bauen und hierdurch, über Iobroker, soll dann der SOC auf 100% gesetzt werden. Den Rest der Logik (zurückkehren zu den Standardwerten, sobald der Ladevorgang abgebrochen wird oder beendet ist) würde ich in ein Skript mit einbauen. Wichtig wäre zunächst "nur", dass dieser EXEC Block funktioniert :)chargeMode gibt es von 0 bis 3. Ich brauche (immer nur) chargeMode:2 (es würden auch andere gehen, dann müsste ich aber beim Zurückwechseln noch mehr Werte ändern)
Das steht in der API

minimumStateOfCharge ist eine (Prozent) Zahl zwischen 0 und 100 :)@m-a-x
Ich habe zwar nicht wirklich Ahnung davon, aber versuche es mal mit request().on({id: '0_userdata.0.Tesla.Laden.voll'}, function() { // Taste "voll laden" request({ method: 'POST', url: 'http://192.168.9.105:7190/api/Config/UpdateCarConfiguration?carId=1', headers: {accept: '*/*', 'Content-Type': 'application/json'}, body: {chargeMode: 2, minimumSoC: 100} }, function(error, response, body) { if(error) log(error, 'warn'); else log(body); }); }); -
@m-a-x
Ich habe zwar nicht wirklich Ahnung davon, aber versuche es mal mit request().on({id: '0_userdata.0.Tesla.Laden.voll'}, function() { // Taste "voll laden" request({ method: 'POST', url: 'http://192.168.9.105:7190/api/Config/UpdateCarConfiguration?carId=1', headers: {accept: '*/*', 'Content-Type': 'application/json'}, body: {chargeMode: 2, minimumSoC: 100} }, function(error, response, body) { if(error) log(error, 'warn'); else log(body); }); });@paul53
Wie kann ich das Skript Triggern? ich habe "0_userdata.0.Tesla.Laden.voll" ersetzt durch "javascript.0.TeslaSetSOC".
Dieses Objekt habe ich als Logik Objekt angelegt und anschließend bei den Objekten auf "true" (bestätigt) gesetzt.
Dann stürzt aber der komplette Javaskriptadapter ab und restartet :) -
@paul53
Wie kann ich das Skript Triggern? ich habe "0_userdata.0.Tesla.Laden.voll" ersetzt durch "javascript.0.TeslaSetSOC".
Dieses Objekt habe ich als Logik Objekt angelegt und anschließend bei den Objekten auf "true" (bestätigt) gesetzt.
Dann stürzt aber der komplette Javaskriptadapter ab und restartet :)

