Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WS Socket und flot edit #122

Open
bahnuhr opened this issue Oct 2, 2022 · 3 comments
Open

WS Socket und flot edit #122

bahnuhr opened this issue Oct 2, 2022 · 3 comments

Comments

@bahnuhr
Copy link

bahnuhr commented Oct 2, 2022

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):
ioBroker/ioBroker.ws#14

@HSE83
Copy link
Contributor

HSE83 commented Dec 24, 2022

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

@Apollon77
Copy link
Contributor

Apollon77 commented Dec 24, 2022

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

@HSE83
Copy link
Contributor

HSE83 commented Dec 26, 2022

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants