NEWS
IoBroker simple-api adapter, POST mit setbulk, Fehler oder kann nicht lesen
-
Test mit Fiddler
POST http://192.168.200.110:8087/setBulk?javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse={0123456xx}&javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2={123456xx} ````müsste dann ja gehen Response```` [{"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse"},{"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2"},{"id":"feiertage.0.next","val":null}] ````>> Wert nicht gesetzt in ioBroker
POST http://192.168.200.110:8087/setBulk/javascript.0.Nuki.Devices.NukiSL1?NukiBridgeResponse={0123456yy}&NukiBridgeResponse2={123456yy}
Response
[{"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse","val":"{0123456yy}"},{"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2","val":"{123456yy}"},{"id":"feiertage.0.next","val":null}]POST http://192.168.200.110:8087/setBulk?NukiBridgeResponse={0123456zz}&NukiBridgeResponse2={123456zz}
[{"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse","val":"{0123456zz}"},{"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2","val":"{123456zz}"},{"id":"feiertage.0.next","val":null}]
Ein Aufruf von setBulk via GET liefert bei mir immer "HTTP/1.1 500 Internal Server Error"
GET http://192.168.200.110:8087/setBulk?NukiBridgeResponse={0123456aa}&NukiBridgeResponse2={123456aa}
getestet mit js.controller 0.15.3 simple-api 1.3.0 node 4.7.2
-
Kannst Du mal ohne die geschweiftren Klammern testen?
Ansonsten: Entweder GET oder POST! Bei GET werden die Daten aus der URL genommen und verarbeitet. Der Body wird ignoriert. Bei POST werden die Daten aus dem Body genommen und die URL ignoriert! Mischen geht kaputt
Kommt bei deinen POST-beispielen noch irgendewas im Body mit?
Error500 bei GET kommt in dem Fall wohl weil die State-ID nicht gefunden wird - Es sei denn "NukiBridgeResponse" ist im entsprechenden Objekt als "Name" gesetzt.
-
POST http://192.168.200.110:8087/setBulk?javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse=1.0&javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2=2.0
Response: [{"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse"},{"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2"},{"id":"feiertage.0.next","val":null}]
Response: [{"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse","val":1.1},{"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2","val":2.1},{"id":"feiertage.0.next","val":null}] ````>> Erfolg ```` POST http://192.168.200.110:8087/setBulk?NukiBridgeResponse=1.2&NukiBridgeResponse2=2.2
Response: [{"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse","val":1.2},{"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2","val":2.2},{"id":"feiertage.0.next","val":null}]
Bei den POST-Beispielen ist Response == Body. ~~@apollon77:~~ > Bei POST werden die Daten aus dem Body genommen und die URL ignoriert! Mischen geht kaputt ` Bist du dir da sicher? Was sind denn die Daten im Body?  ~~@apollon77:~~ > Error500 bei GET kommt in dem Fall wohl weil die State-ID nicht gefunden wird - Es sei denn "NukiBridgeResponse" ist im entsprechenden Objekt als "Name" gesetzt. `  Der Anbieter von Nuki hat gerade geschrieben, dass sie ihre Daten```` {"nukiId": 91049449, "state": 3, "stateName": "unlocked", "batteryCritical": false} ````nicht so ohne weiters in der URL kodiert senden werden, da dies auf ihrer Seite doch einige Konfigurationsvarianten nach sich ziehen würde. Danke GH
-
Die Erfolge liegen daran das er an der Stelle den "Namen" nutzt und nicht die "state-id".
Ich habe in der Version auf Github mal debug logging für setBulk eingebaut. Also bitte:
-
update vo github
-
instanz in debug mode schalten (Instanzen -> Expertenmodus)
-
instanz neu starten (sollte autmatisch mit debug aktivieren passieren)
-
mal ANfrage machen … dann logs raussuchen und mal schicken ... dann wissen wir vllt mehr.
Da die Nutzung der direkten namen ja scheinbar geht wäre der Aufruf mit
POST http://192.168.200.110:8087/setBulk?javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse={0123456xx}&javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2={123456xx}
der interessante
-
-
Habe das jetzt auf einem meiner Testinstallationen gemacht (W10), also andere IP
POST http://192.168.200.210:8087/setBulk?javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse={0123456xx}&javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2={123456xx}
Response: [{"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse","val":"{0123456xx}"},{"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2","val":"{123456xx}"},{"id":"feiertage.0.next"}] ````>> Erfolg Das das Log nicht so lang ist, hänge ich es hier mit rein
2017-03-07 16:20:30.384 - [34mdebug[39m: simple-api.0 objectDB connected
2017-03-07 16:20:30.400 - [34mdebug[39m: simple-api.0 statesDB connected
2017-03-07 16:20:30.415 - [32minfo[39m: simple-api.0 starting. Version 1.4.0 in C:/ioBroker/node_modules/iobroker.simple-api, node: v4.5.0
2017-03-07 16:20:30.428 - [32minfo[39m: simple-api.0 simpleAPI server listening on port 8087
2017-03-07 16:20:30.430 - [32minfo[39m: simple-api.0 http server listening on port 8087
2017-03-07 16:24:39.407 - [34mdebug[39m: simple-api.0 POST-setBulk: values = {"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse":"{0123456xx}","javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2":"{123456xx}","user":"system.user.admin","":null}
2017-03-07 16:24:39.407 - [34mdebug[39m: simple-api.0 "javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse"
2017-03-07 16:24:39.408 - [34mdebug[39m: simple-api.0 "javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2"
2017-03-07 16:24:39.408 - [34mdebug[39m: simple-api.0 ""
2017-03-07 16:24:39.409 - [34mdebug[39m: simple-api.0 POST-setBulk for id=javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse, oid=NukiBridgeResponseused=javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse, value={0123456xx}
2017-03-07 16:24:39.410 - [34mdebug[39m: simple-api.0 Add to Response: {"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse","val":"{0123456xx}"}
2017-03-07 16:24:39.411 - [34mdebug[39m: simple-api.0 POST-setBulk for id=javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2, oid=NukiBridgeResponse2used=javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2, value={123456xx}
2017-03-07 16:24:39.411 - [34mdebug[39m: simple-api.0 POST-setBulk for id=feiertage.0.next, oid=used=feiertage.0.next, value=undefined
2017-03-07 16:24:39.413 - [34mdebug[39m: simple-api.0 Add to Response: {"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2","val":"{123456xx}"}
2017-03-07 16:24:39.414 - [34mdebug[39m: simple-api.0 Add to Response: {"id":"feiertage.0.next"} -
Und ein Update der Werte findet nicht statt? Mindestens kann man sehen wo das komische "feiertage.0" herkommt
Fixe ich
-
doch, die Werte werden gesetzt~~@greyhound:~~
Erfolg `
-
noch eine Frage zur Konfiguration
Was bewirkt diese Einstellung?Kann ich das irgendwo nachlesen?
-
doch, die Werte werden gesetzt~~@greyhound:~~
Erfolg
Ok, damit "solved", oder ?!
Bzw nur noch das komische "feiertage" Ding offen, korrekt?! Dann bitte nochmal vom github checken
Zu Der "Erweitere Web-Adapter"-Frage: Du kannst auch weg vom eigenen Server/Port hin zur Nutzung eines der existierenden Web-Adapter gehen. Wenn ich es richtig verstehe kannst Du einen Web-Adapter dort wählen. Dann müsste die "Port"-Abfrage und so verschwindet weil dann das vom gewählten Web-Adapter genommen wird. Dort ist es dann unter /simple-api/… erreichbar (also extra Pfadteil mit dem Adapternamen).
Ist aber theoretisch ... habs auch noch nicht versucht :-))
-
[{"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse","val":"{0123456xx}"},{"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2","val":"{123456xx}"},{"id":"feiertage.0.next"}]
Die Feiertage sind noch in der Antwort, habe ich den Adapter aktualisiert, habe dann den Adapter beendet, neu geladen und gestartet, selbes Ergebnis.
Im Log ist merkwürdigerweise das Update nicht zu sehen
2017-03-07 18:05:54.920 - [32minfo[39m: simple-api.0 starting. Version 1.4.0 in C:/ioBroker/node_modules/iobroker.simple-api, node: v4.5.0 2017-03-07 18:05:54.929 - [32minfo[39m: simple-api.0 simpleAPI server listening on port 8087 2017-03-07 18:05:54.931 - [32minfo[39m: simple-api.0 http server listening on port 8087 2017-03-07 18:06:38.962 - [34mdebug[39m: simple-api.0 POST-setBulk: values = {"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse":"{0123456xx}","javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2":"{123456xx}","user":"system.user.admin","":null} 2017-03-07 18:06:38.963 - [34mdebug[39m: simple-api.0 "javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse" 2017-03-07 18:06:38.964 - [34mdebug[39m: simple-api.0 "javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2" 2017-03-07 18:06:38.964 - [34mdebug[39m: simple-api.0 "" 2017-03-07 18:06:38.965 - [34mdebug[39m: simple-api.0 POST-setBulk for id=javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse, oid=NukiBridgeResponseused=javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse, value={0123456xx} 2017-03-07 18:06:38.966 - [34mdebug[39m: simple-api.0 POST-setBulk for id=javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2, oid=NukiBridgeResponse2used=javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2, value={123456xx} 2017-03-07 18:06:38.967 - [34mdebug[39m: simple-api.0 POST-setBulk for id=feiertage.0.next, oid=used=feiertage.0.next, value=undefined 2017-03-07 18:06:38.968 - [34mdebug[39m: simple-api.0 Add to Response: {"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse","val":"{0123456xx}"} 2017-03-07 18:06:38.969 - [34mdebug[39m: simple-api.0 Add to Response: {"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2","val":"{123456xx}"} 2017-03-07 18:06:38.970 - [34mdebug[39m: simple-api.0 Add to Response: {"id":"feiertage.0.next"}
Wie stellte ich am einfachsten fest, ob ich die version installiert habe, die ich haben sollte?
-
ääähm räusper … hab vergessen zu committen ... kommt in 30 mins oder :-((
-
Jetzt :-))
-
Moin, Moin,
habe mir zwischenzeitlich den Code angeschaut und die mir fehlende Methode "setValueFromBody" eingebaut.
Response
[ { "id": "javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2", "val": "{\"nukiId\": 91049449, \"state\": 3, \"stateName\": \"unlocked\", \"batteryCritical\": false}" } ] ````Log
2017-03-08 11:47:10.210 - [32minfo[39m: simple-api.0 starting. Version 1.4.0 in C:/ioBroker/node_modules/iobroker.simple-api, node: v4.5.0
2017-03-08 11:47:10.219 - [32minfo[39m: simple-api.0 simpleAPI server listening on port 8087
2017-03-08 11:47:10.222 - [32minfo[39m: simple-api.0 http server listening on port 8087
2017-03-08 11:47:18.064 - [34mdebug[39m: simple-api.0 POST-setBulk: body = ""
2017-03-08 11:47:18.064 - [34mdebug[39m: simple-api.0 POST-setBulk: values = {"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2":""{12345678}"","prettyPrint":true,"user":"system.user.admin"}
2017-03-08 11:47:18.064 - [34mdebug[39m: simple-api.0 "javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2"
2017-03-08 11:47:18.066 - [34mdebug[39m: simple-api.0 POST-setBulk for id=javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2, oid=NukiBridgeResponse2used=javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2, value="{12345678}"
2017-03-08 11:47:18.068 - [34mdebug[39m: simple-api.0 Add to Response: {"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2","val":""{12345678}""}
2017-03-08 11:53:49.255 - [34mdebug[39m: simple-api.0 POST-setValueFromBody: values = {"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2":"{"nukiId": 91049449, "state": 3, "stateName": "unlocked", "batteryCritical": false}","prettyPrint":true,"user":"system.user.admin"}
2017-03-08 11:53:49.255 - [34mdebug[39m: simple-api.0 POST-setValueFromBody: _id2="javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2"
2017-03-08 11:53:49.256 - [34mdebug[39m: simple-api.0 POST-setValueFromBody for id=javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2, oid=NukiBridgeResponse2used=javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2, value={"nukiId": 91049449, "state": 3, "stateName": "unlocked", "batteryCritical": false}
2017-03-08 11:53:49.258 - [34mdebug[39m: simple-api.0 Add to Response: {"id":"javascript.0.Nuki.Devices.NukiSL1.NukiBridgeResponse2","val":"{"nukiId": 91049449, "state": 3, "stateName": "unlocked", "batteryCritical": false}"}Werde meine Erweiterung als Pull-request einreichen. Nochmal Danke für deine Hilfe und Geduld Gruß GH
-
Super, reiche ein, ich checke und dann gehts fix
-
ist drin
-
1.5.0 auf github … bitte testen
-
Danke für die Übernahme.
Ich bin gerade beim Testen mit node 6.9 / 6.10. Bekomme beim installieren diverser Adapter ecklige Warnings und Fehlermeldungen
2017-03-10 16:36:45.823 - info: iobroker npm install iobroker.mqtt --production --prefix "/opt/iobroker" (System call) 2017-03-10 16:37:16.892 - info: iobroker In file included from ../node_modules/nan/nan.h:82:0, from ../src/bufferutil.cc:16: ../node_modules/nan/nan_new.h: In function ‘v8::Local NanIntern::To(v8::Handle<v8::integer>) [with T = v8::Int32; v8::Handle <v8::integer>= v8::Local<v8::integer>]’: ../node_modules/nan/nan_new.h:34:64: warning: ‘v8::Local <v8::int32>v8::Value::ToInt32() const’ is deprecated (declared at /opt/iobroker/.node-gyp/6.9.5/include/node/v8.h:8202): Use maybe version [-Wdeprecated-declarations] To<v8::int32>(v8::Handle <v8::integer>i) { return i->ToInt32(); } ^ 2017-03-10 16:37:16.895 - info: iobroker ../node_modules/nan/nan_new.h: In function ‘v8::Local NanIntern::To(v8::Handle<v8::integer>) [with T = v8::Uint32; v8::Handle <v8::integer>= v8::Local<v8::integer>]’:../node_modules/nan/nan_new.h:39:65: warning: ‘v8::Local <v8::uint32>v8::Value::ToUint32() const’ is deprecated (declared at /opt/iobroker/.node-gyp/6.9.5/include/node/v8.h:8196): Use maybe version [-Wdeprecated-declarations] To<v8::uint32>(v8::Handle <v8::integer>i) { return i->ToUint32(); } ^ . . . 2017-03-10 16:37:16.931 - info: iobroker In file included from ../src/bufferutil.cc:16:0:../node_modules/nan/nan.h: At global scope: ../node_modules/nan/nan.h:261:25: error: redefinition of ‘template <class t="">v8::Local _NanEnsureLocal(v8::Local)’ NAN_INLINE v8::Local _NanEnsureLocal(v8::Local val) { ^ ../node_modules/nan/nan.h:256:25: note: ‘template <class t="">v8::Local _NanEnsureLocal(v8::Handle)’ previously declared here NAN_INLINE v8::Local _NanEnsureLocal(v8::Handle val) { ^ ../node_modules/nan/nan.h: In function ‘bool NanIdleNotification(int)’: ../node_modules/nan/nan.h:289:71: warning: ‘bool v8::Isolate::IdleNotification(int)’ is deprecated (declared at /opt/iobroker/.node-gyp/6.9.5/include/node/v8.h:6113): use IdleNotificationDeadline() [-Wdeprecated-declarations] return v8::Isolate::GetCurrent()->IdleNotification(idle_time_in_ms); ^ . . .</class></class></v8::integer></v8::uint32></v8::uint32></v8::integer></v8::integer></v8::integer></v8::integer></v8::int32></v8::int32></v8::integer></v8::integer></v8::integer>
Am Schluss werden die Adapter in der Regel auch installiert und sind als Instanz vorhanden. Habe bisher nicht getestet, ob die Adapter wirklich auch funktionieren.
Weißt du, ob es an der node-Version liegt? Welche ist die letzte Version unter der alles laufen sollte?
Danke und Gruß
GH
-
Das liegt nur bedingt an node, sondern eher an den "c-binary-Teilen" die einige Libraries drin haben die der Adapter benutzt. Das sind compiler-Meldungen und viele davon Warnungen weil die Checks im Compiler recht strikt sind, aber dennoch nur warnen.
Wenn es fehlschlagen würde würdest Du nen Fehler bekommen.
In sofern: unschön, aber ignore. Wenn DU was dagegen tun willst dann verursachende Library raussuchen und dort ein Ticket aufmachen
-
bin wieder auf node 4.7 zurück, da sieht dass kompilieren besser aus.
Und das mit dem callback von meiner Nuki-Bridge mit POST setValueFromBody hat auch funktioniert. - Danke
Wie ich in meinem pull geschrieben habe, bin ich noch imer der Meinung das da etwas quer läuft bei der POST-Variante von setBulk. Entweder stimmt die Beschreibung nicht oder die Implementierung.
Gruß
GH
-
Ich musste nochmal was fixen … update auf github