ioBroker / ioBroker.ping

Pings configured IPs for ioBroker
MIT License
21 stars 18 forks source link

[js-controller5] adapter crashes #106

Closed mcm1957 closed 1 year ago

mcm1957 commented 1 year ago

Siehe https://forum.iobroker.net/topic/66108/js-controller-5-0-x-jetzt-in-der-beta/117

image

mcm1957 commented 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 :-(

mcm1957 commented 1 year ago

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...

PalmManiac commented 1 year ago

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.

mcm1957 commented 1 year ago

@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 :-)

PalmManiac commented 1 year ago

@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. (/opt/iobroker/node_modules/iobroker.ping/main.js:552:9) at processImmediate (node:internal/timers:478:21)
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

PalmManiac commented 1 year ago

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.

mcm1957 commented 1 year ago

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ß !?!?!

PalmManiac commented 1 year ago

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.

mcm1957 commented 1 year ago

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 :-)

mcm1957 commented 1 year ago

@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.

PalmManiac commented 1 year ago

@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. :)

mcm1957 commented 1 year ago

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

mcm1957 commented 1 year ago

FYI - damit nicht doppelt gearbeitet wird. Issue ist codiert, muss nur mehr testen; dann kommt PR