Closed mcm1957 closed 1 year ago
Muss mal versuchen das zu reproduzieren, dann kann ich es ev. fixen.
Problem unter 5.0.2 und node 18 und node 16 NICHT reproduzierbar :-(
Update: https://forum.iobroker.net/topic/66108/js-controller-5-0-x-jetzt-in-der-beta/128?_=1686742612625
@mcm57 Hab alle Geräte einmal umbenannt, nun läuft der Adapter.. Scheint irgendwas mit den Namen auf sich zu haben. Habe beispielsweise aus "Speedport Pro" => "SpeedportPro" gemacht, also überall die Leerzeichen raus. Dann blieb er bei "Landroid" hängen. Da habe ich dann "LandroidMäher" raus gemacht. Nun läuft der Adapter problemlos...
Hallo,
ich habe heute den JS-Controller auf V5.0.3 upgegradet und bei mir tritt genau das selbe Problem auf, nur dass es nicht geholfen hat alle Leerzeichen und Umlaute zu ersetzen.
@PalmManiac Kannst du bitte einen Export der existierenden Stateobjekte und der Config hier ablegen (Achtung: Check ob kritische Namen od öffentliche IPs ein Sicherheitsrisiko sind. Private IPs sollten unkritisch sein.)
Und kannst du den Adapter bitte mit DEBUG Logging starten und das Log hier anhängen.
Wär doch gelacht wenn wir das Problem nicht finden :-)
@mcm1957 Als erstes hier der Auszug des Logs im Debug-Modus:
`ping.1 | 2023-06-14 17:19:58.136 | error | Parameter "id" needs to be of type "string" but type "object" has been passed |
---|---|---|---|
ping.1 | 2023-06-14 17:19:58.136 | error | Error: Parameter "id" needs to be of type "string" but type "object" has been passed at Function.assertString (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/validator.ts:241:19) at AdapterClass.extendObject (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.ts:2968:19) at processTasks (/opt/iobroker/node_modules/iobroker.ping/main.js:194:21) at Immediate. |
ping.1 | 2023-06-14 17:19:58.135 | error | uncaught exception: Parameter "id" needs to be of type "string" but type "object" has been passed |
ping.1 | 2023-06-14 17:19:58.034 | debug | Update channel id=ping.1.iobroker.Epson_Drucker |
ping.1 | 2023-06-14 17:19:58.034 | debug | Task{"type":"update_channel","id":{"device":"iobroker","channel":"Epson_Drucker"},"data":{"common":{"name":"Epson_Drucker","desc":"Ping of 192.168.1.20"},"native":{"host":"192.168.1.20"}}} |
ping.1 | 2023-06-14 17:19:58.034 | debug | Start tasks of objects update |
ping.1 | 2023-06-14 17:19:58.033 | debug | Prepare tasks of objects update |
ping.1 | 2023-06-14 17:19:57.548 | debug | Get existing objects |
ping.1 | 2023-06-14 17:19:57.547 | debug | Host=iobroker |
ping.1 | 2023-06-14 17:19:57.546 | debug | Prepare objects |
ping.1 | 2023-06-14 17:19:57.527 | info | starting. Version 1.5.3 (non-npm: ioBroker/ioBroker.ping) in /opt/iobroker/node_modules/iobroker.ping, node: v18.16.0, js-controller: 5.0.3 |
ping.1 | 2023-06-14 17:19:57.208 | debug | Plugin sentry Initialize Plugin (enabled=true) |
ping.1 | 2023-06-14 17:19:56.450 | debug | States connected to redis: 127.0.0.1:9000 |
ping.1 | 2023-06-14 17:19:56.226 | debug | States create User PubSub Client |
ping.1 | 2023-06-14 17:19:56.226 | debug | States create System PubSub Client |
ping.1 | 2023-06-14 17:19:56.090 | debug | Redis States: Use Redis connection: 127.0.0.1:9000 |
ping.1 | 2023-06-14 17:19:55.991 | debug | Objects connected to redis: 127.0.0.1:9001 |
ping.1 | 2023-06-14 17:19:55.982 | debug | Objects client initialize lua scripts |
ping.1 | 2023-06-14 17:19:55.770 | debug | Objects create User PubSub Client |
ping.1 | 2023-06-14 17:19:55.770 | debug | Objects create System PubSub Client |
ping.1 | 2023-06-14 17:19:55.719 | debug | Objects client ready ... initialize now |
ping.1 | 2023-06-14 17:19:55.630 | debug | Redis Objects: Use Redis connection: 127.0.0.1:9001` |
Und die Stateobjekt Liste im Anhang. ping.txt
Oha, anscheinend mag er nach dem js-controller Update auch keine _ mehr. Ich habe nun auch die gelöscht oder durch - ersetzt und jetzt läuft er.
Ich glaub nicht dass es an den Zeichen liegt. Der crash erfolgt in zeile 194 (https://github.com/ioBroker/ioBroker.ping/blob/7a3d8d8484248db280422ba620f660733f304b30/main.js#L194). Und da wird ein string erwartet und id aus dem task Objeckt übergeben. Das ist lt. log allerdings ein Object.
Frage ist nun: Ister Aufruf falsch oder der Inhalt des Task Objekts? Und warum hat eine Namensänderung da Einfluß !?!?!
Die Probleme treten doch alle erst mit dem neuen JS-Controller V5 auf. Vielleicht ist da ein Problem drin. Unter der V4.x gabs nie Probleme.
Ja - glaub ich auch. Und zwar scheint das Leerzeichen im NAME Attribute nun automatisch durch ein _ ersetzt. Und das scheint das Update zu bewirken. Der Fehler ist aber zu 99% im Adapter.
Nur - ich versteh noch immrr nicht warum ich es nicht reproduzieren kann.
ICh wechsle mal wieder zu js-controller 4 :-)
@PalmManiac
Kann es sein, dass du den Ping schon lange mit Namen die ein Space enthalten (oder enthalten haben) verwendest? So wie es derzeit aussieht werden jetzt Leerzeichen durch _ ersetzt. Und wenn ein altes State Object existiert wird dieses aktualisisert. Neu erstellte Objekte haben von Anfang an kein Leerzeichen mehr drinnen.
Offensichtlich hat bis JS Controller 4 eine xtend Objet einfach nichts getan, wenn der Paramater falsch war ...
Der code im Taskhandler muss gefixed werden. Danke für deinen Objet Export - der erklärt das Verhalten.
@mcm1957
Ja. Als ich den Adapter installiert und aktiviert habe, habe ich Bezeichnungen teilweise mit Leerzeichen verwendet. Ich habe mir da nie Gedanken darüber gemacht ob das ein Problem sein könnte, da es ja immer funktioniert hat. Ich mag es nun mal, wenn alles richtig geschrieben wird, ohne Sonderzeichen oder sowas. ;)
Schön, das ich trotzdem helfen konnte und der Grund für das Verhalten gefunden wurde. Ich bin allerdings mit den Änderungen meiner Bezeichnungen nicht glücklich, sowas ist mir ein Dorn im Auge. Da muß ich aber wohl durch. :)
An sich sollte (fast) alles was KEIN Leerzeichen (und diverse andere Dinge wie z-.B. Punkte) enthält für die id der States zulässig sein. Der Adapter wandelt unzulässige Zeichen in '_' um und versucht auch existierende falsche States umzubenennen. Nur genau beim Umbennen kracht es.
Eine schnelle Lösung bis zu Behbung kann auch sein den Adapter zu beenden und alle States zu löschen. Danach neu starten. Ob das im Einzelfall ok ist muss jeder selbst beurteilen. Auswirkungen kann der Ansatz auf von andern Adaptern verwendete States (z.,B. History) haben!
Ich versuch zeitnah einen Fix zumindest via GH / PR zur Verfügung zu stellen. Da ich aber nächste Woche "offline" bin weiß ich nicht ob sich das vorher noch ausgeht.
Sorry, ist sich vor Abflug nicht mehr ausgegangen.- Wenn noch offen, schau ichs mir ab 26.6. an McM1957
FYI - damit nicht doppelt gearbeitet wird. Issue ist codiert, muss nur mehr testen; dann kommt PR
Siehe https://forum.iobroker.net/topic/66108/js-controller-5-0-x-jetzt-in-der-beta/117