ioBroker / ioBroker.vis-canvas-gauges

Canvas gauges for ioBroker.vis
MIT License
12 stars 6 forks source link

Fehler in chrome Konsole (F12) #21

Open bahnuhr opened 5 months ago

bahnuhr commented 5 months ago

siehe: https://forum.iobroker.net/topic/67996/neue-stable-versionen-der-adapter-web-socketio-und-ws/211?_=1713606124551

image

bahnuhr commented 5 months ago

und sowas kommt dann auch: image

Apollon77 commented 5 months ago

Kamnst Du bitte mal die Konfig zeigen

bahnuhr commented 5 months ago

konfig von gauge ? Wenn ja, anbei: image image image image

bahnuhr commented 5 months ago

image image

bahnuhr commented 5 months ago

und die einzelnen widgets: Widget_Photovoltaik_alte Anlage.txt Widget_Photovoltaik_alte und neue Anlage.txt Widget_Photovoltaik_neue Anlage.txt

Apollon77 commented 5 months ago

Kannst Du bitte mal die beiden Bindings posten (max/Bis) Die eine Fehlermeldung sah für mich ein bissl nach einem Fehler im Binding aus ....

bahnuhr commented 5 months ago

hab ich schon alles durchgespielt. Wenn ich eine Zahl bei max eingebe kommt der Fehler auch (also ohne binding)

aber trotzdem: {javascript.0.Geräte.Photovoltaik.Vis_Leistung_Kreis_max} und Eigenschaften dieses DP: { "common": { "type": "number", "name": "einstellen max für Kreis", "min": 0, "role": "per Script" }, "native": { "type": "number", "name": "einstellen max für Kreis", "min": 0, "role": "per Script" }, "type": "state", "from": "system.adapter.javascript.1", "user": "system.user.admin", "ts": 1697276696454, "_id": "javascript.0.Geräte.Photovoltaik.Vis_Leistung_Kreis_max", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }

bahnuhr commented 5 months ago

und dieses kam eben auch wieder: image

oweitman commented 5 months ago

bitte mal noch die version des genutzten vis adapters und js-controllers (iobroker)

bahnuhr commented 5 months ago

image image

bahnuhr commented 5 months ago

image

Apollon77 commented 5 months ago

mit ging es um das Bilding mit neu-alt-gesamt ... ist das auch nur dieser name in {} oder mehr logik im binding?

bahnuhr commented 5 months ago

ne, nur de Name des DP steht da drin.

oweitman commented 5 months ago

den fehler konnte ich aktuell unter noch nicht nachvollziehbaren Bedingungen erzeugen. ich muss noch ein wenig rumspielen. bei mir erschien er in der funktion animate. in deinen angaben gab es animate und drawX. wahrscheinlich liegt es daran, das werte nicht korrekt weitergereicht werden. schau mer mal. heute aber nicht mehr

wenn er bei dir nochmal auftaucht. könntest du mir bitte die komplette fehlermeldung inklusive dem ganzen stack trace mal als text kopieren. im screenshot sieht man immer nur den anfang kann ich auch davon ausgehen, das max sich nicht so oft ändert, sondern einfach nur der anzeigewert?

bahnuhr commented 5 months ago

komplette fehlermeldung inklusive dem ganzen stack trace

Was ist das und wo ? (browser konsole mit F12)

text kopieren

kein Problem

das max sich nicht so oft ändert,

Ich rufe die Werte minütlich ab. Und dann läuft ein Script. Und je nach Leistung, dann ... Auszug: var Leistung = getState(java+"2023_Leistung_alt_neu_gesamt").val; if (Leistung > 11500) { setState(java+"Vis_Leistung_Kreis_max",15000); } else if (Leistung > 9500) { setState(java+"Vis_Leistung_Kreis_max",12000); } else { if ( getState(java+"Vis_Leistung_Kreis_max").val != 10000 ) { setState(java+"Vis_Leistung_Kreis_max",10000) } };

oweitman commented 5 months ago

Ja genau die Fehlermeldung aus der Browser Konsole mit F12 Bisher hast du da immer nur Screenshots gemacht.

bahnuhr commented 5 months ago

anbei die Meldung: Uncaught TypeError: Cannot read properties of null (reading 'drawX') at t.value (gauge.min.js:2660:45) at e.options.value.options.animation.options.value (gauge.min.js:1661:28) at a (gauge.min.js:367:13) at gauge.min.js:521:24

image

anders hat es nicht geklappt. noch ne Idee ?

bahnuhr commented 5 months ago

jetzt nochmal so:

`

Uncaught TypeError: Cannot read properties of null (reading 'drawX') at t.value () at e.options.value.options.animation.options.value () at a () at
  | value | @ | gauge.min.js:2660 -- | -- | -- | --   | e.options.value.options.animation.options.value | @ | gauge.min.js:1661   | a | @ | gauge.min.js:367   | (anonym) | @ | gauge.min.js:521   | requestAnimationFrame (async) |   |     | value | @ | gauge.min.js:520   | set | @ | gauge.min.js:1658   | updateGauge | @ | index.html:3764   | t.dispatch | @ | can.custom.min.js:18   | stop | @ | can.custom.min.js:44   | _setAttrs | @ | can.custom.min.js:48   | attr | @ | can.custom.min.js:48   | updateState | @ | vis.js:3055   | (anonym) | @ | vis.js:3781   | (anonym) | @ | vis.js:4004   | setTimeout (async) |   |     | _setTimeout | @ | vis.js:4003   | onUpdate | @ | vis.js:3780   | (anonym) | @ | conn.js:465   | (anonym) | @ | socket.io.js:237   | socket.onmessage | @ | socket.io.js:237

`

bahnuhr commented 5 months ago

eben wieder Fehler: image

wenn ich rechts klicke kommt: image

Hier ist der rechte Teil auch rot unterstrichen.

bahnuhr commented 5 months ago

So, habe mal testweise o.g. Script auskommentiert. Fazit: Abfrage und einstellung von max ist nicht mehr gelaufen. Fazit: Es kommt nicht mehr zur Fehlermeldung bei F12 in der Konsole. Datenpunkte werden aktualisiert.

Dann, testweise ein einfaches Script geschrieben: var java = "javascript.0.Geräte.Photovoltaik."; var Leistung = getState(java+"2023_Leistung_alt_neu_gesamt").val; var Kreis = getState(java+"Vis_Leistung_Kreis_max").val; Leistung = 9000; if (Leistung > 11500) { if ( Kreis != 15000 ) setState(java+"Vis_Leistung_Kreis_max",15000); } else if (Leistung > 9500) { if ( Kreis != 12000 ) setState(java+"Vis_Leistung_Kreis_max",12000); } else { if ( Kreis != 10000 ) setState(java+"Vis_Leistung_Kreis_max",10000); }; Und folglich kam der Fehler wieder. Aber auch nicht immer (das ist komisch daran). Fazit: Für mich sieht es derzeit wie folgt aus: binding mit DP in Gauge max scheint nicht das Problem zu sein. Wenn man diesen DP "max" dann aber per Script ändert scheint dies "manchmal" (?) nicht zu funktionieren. Warum, wieso eine DP Änderung per Script beim gauge einen Fehler erzeugt weiß ich nicht.

@Apollon77 @oweitman Vielleicht hilfts bei der Fehlersuche.

mfg Dieter

oweitman commented 5 months ago

Ich habe mir mal den code des widgets, sowie der zugrundeliegenden bibliothek angeschaut. da ich es aktuell noch nicht verlässlich reproduzieren konnte (ich muss da mal ein skript schreiben), habe ich dennoch eine Ahnung warum der Fehler kommt. Es wird sich wahrscheinlich um eine sogenannte race-condition handel. dazu muss man verstehen wie vis insbesondere mit den bindings funktioniert. um das bei dir zu bestätigen, ersetze bitte das binding für den maxwert mit einem fixen wert. dann dürfte der fehler nicht mehr auftreten. das binding im maxwert sorgt dafür, das bei Änderung der htmlteil zum widget aus vis gelöscht wird und neu angelegt wird. wahrscheinlich wird der noch vorhandene prozess zur Animation aber nicht sauber beendet, so das bei Aktualisierung der Animation auf einen nicht mehr existenten canvas zugegriffen wird. dadurch resultieren die unterschiedlichen fehler wie bspw nicht vorhandenes drawX oder animate, welches alles eigenschaften sind, die durch die canvas-gauge bibliothek individuell dem standardobjekt canvas hinzugefügt wird. beheben könnte man das (muss mal testen), das vor dem zerstören des widgets noch die animation gestoppt wird. der fehler deshalb nur sporadisch auf, da wie gesagt, eine änderung des max-wertes, sowie fast zeitgleich eine änderung des wertes stattfindet, was dann eine animation auslöst.

mal noch eine Zusatzfrage. Haben die Fehlermeldungen negative Auswirkungen? oder stören dich einfach nur die Fehlermeldungen in der Browserkonsole? Wenn es nur optik ist, müsste man das nicht beheben.

ich habe gerade mal noch deinen letzten text gelesen. also du hast max mit einem fixen wert ersetzt? oder einfach nicht mehr aktualisiert? und dann kommen keine fehler mehr?

bahnuhr commented 5 months ago

Ziel war es: abhängig von der W die gauge im max Wert zu verändern. Also wenn die Sonneneinstrahlung unter 10.000 W dann zeige immer 10.000 W als max Wert. Wenn die Sonne mehr produziert dann Ausweitung der gauge auf 12.000 oder 15.000. Und dafür war das Script.

Und ja, wenn das Script lief, dann der Fehler bei F12 und einzelne DP haben sich nicht mehr aktualisiert. Faktisch wurden dann die Produktionszahlen der Sonne eingefrieren. Thema im thread: "Meine Werte frieren ein !"

Und ja, dadurch erhebliche negative Auswirkungen.

Und wie oben geschrieben; wenn ich den Wert max verändere (durch Script) dann kamen die Fehler. Läuft das Script nicht, dann passen die Werte. Max wird ja dann auch nicht geändert.

Wäre super, wenn du dies ändern könntest. Danke im Voraus.

oweitman commented 5 months ago

ok testszenario aufgebaut. fehler kann nachvollzogen werden behebungsversuche erfolgen in den nächsten tagen

bahnuhr commented 5 months ago

Danke schön. Und viel Erfolg bei der Klärung und Beseitigung des bugs.

oweitman commented 5 months ago

ok, es sieht so aus als ob es einen workaround ohne code-änderung gibt. lösche bitte das binding aus dem Abschnitt Sektoren[0] Am beste deaktivierst du den Abschnitt komplett. Es scheint auch das du ihn nicht nutzt. Das mehrfache eintragen eines bindings führt auch zu dem Fehler, da vis dann einfach für jede Änderung eine komplette Entfernung und Neuhinzufügen des jeweiligen gauge-Objekts veranlasst. Im parallel läuft aber noch die Aktualisierung des Zeigers. Die bibliohtek beendet eigentlich auch alles richtig, aber es scheint da doch Situationen vorzukommen, die in der Bibliothek nicht abgebildet sind. Leider wird die zugrundeliegende Bibliothek (also nicht das iobroker widget selbst, seit einigen jahren nicht mehr gepflegt. Daher ist nicht mit einer grundlegenden Überarbeitung zu rechnen). https://github.com/Mikhus/canvas-gauges Auch gibt es bereits mehrere Forks die einzelne Probleme angegangen sind, aber keinen, bei dem man sagen könnte, der könnte als stabile Basis wiede4r verwendet werden.

getestet habe ich es mit einem skript welches alle 500ms den wert und alle 5000ms den max-wert ändert und habe keine neuen abbrüche mehr gehabt

bahnuhr commented 5 months ago

Am beste deaktivierst du den Abschnitt komplett. Es scheint auch das du ihn nicht nutzt.

Doch, wird genutzt. Denn durch diesen Eintrag wird ja die Farbe des Sektors bestimmt. Deaktiviere ich den Sektor dann kommt keine Farbe mehr bei den ticks. Aber damit muss ich wohl jetzt leben.

Danke für eure Mühe beim Suchen des Problems. Zumindest ist jetzt erkannt wo das Problem lag.

Und Schade, dass man keinen Workaround hat.

Du schreibst, es gibt mehrere Forks. Auch zu diesem Problem? Wäre es möglich per JS den Max Wert bei den Sektoren per Script irgendwo rein zu schreiben ?

mfg Dieter

bahnuhr commented 5 months ago

Sektor x ist raus.

Fehler kam eben trotzdem wieder: image