Open bahnuhr opened 2 years ago
Guten Morgen
Ich habe das gleiche Problem mit Firefox. Ich habe mal etwas nachgeforscht und der Grund dafür ist, dass der Web-Adapter in der WS-Config (Datei /_socket/info.js) als socketUrl nur den Port zurückliefert (z.B. ":8084"). Der Flot-Adapter nimmt diese Info und gibt sie für den Verbindungsaufbau 1:1 als "URL" an socket.io.js weiter. Dort wird die "URL" an den Websocket-Constructor übergeben, der einen Fehler aufgrund einer ungültigen URL auslöst. socket.io.js funktioniert korrekt, wenn http(s) in der URL übergeben wird und ersetzt das durch ws oder wss. Ohne die Angabe eines Schemas allerdings geht das schief.
Irgendwo zwischen Web-Adapter getInfoJS() / getSocketUrl() und Websocket-Konstruktor in socket.io.js muss also das Protokoll eingebaut werden. Da alles bis zur info.js auf Server-Seite passiert wo der aufgerufene Hostname eventuell nicht bekannt ist (Reverse Proxy etc) muss man es vermutlich entweder im Flot-Adapter lösen oder eben im WS-Adapter. Ich wäre dafür es im Flot-Adapter zu fixen, andere Adapter (z.B. VIS) funktionieren ja offenbar.
Ich würde dafür ja auch einen Pull-Request einstellen, allerdings sind die js-Dateien für mich nicht wirklich lesbar, daher leider keine Chance..
Ich bin nicht ganz sicher ... Vllt istes auch (glaube ich) das Flot einen eigenen Socket.io Client mitbringt und nicht den vom "server" lädt ... Wenn er das tun würde wäre alles ok. Jetzt aber so im code geschaut finde ich den nicht ... aber ob er vom server den richtigen bekommt weiss ich nicht .... Wenn flot den korrekten websocket client lädt sollte an sich alles tun.
Also ja am Ende reden wir denke (wenn ich so nachdenken) vom gleichen ... vllt ists auch nur dieses "welche location ist korrekt": Ja ein PR wäre in jedem Fall cool
Ich habe gerade nochmal in iobroker.socketio nachgesehen - dort wird die URL korrekt aufbereitet erwartet. In conn.js (welche die Anwendung demonstriert) ist genau der Fix aus dem PR enthalten. Man müsste also wenn dann die conn.js aus dem example-Ordner integrieren, was diverse größere Änderungen mit sich bringen würde. Einfach die "andere" socket.io.js verwenden reicht also nicht. Da finde ich den kleinen Dreizeiler aus dem PR eleganter.
Wenn ein WSSocket in der Web Instanz eingetragen ist, funktioniert flot edit nicht mehr. https://forum.iobroker.net/topic/58534/flot-geht-nicht-mehr-mit-8082-bei-ws-an?_=1664689258326
Lösung nur durch extra Instanz (ohne ws): https://github.com/ioBroker/ioBroker.ws/issues/14