NEWS
Socket-IO: Log-Ausgaben empfangen
-
Hallo zusammen,
ich bin gerade dabei etwas mit dem Socket.io-Adapter herumzuspielen, um eine kleine Visual Studio Code Erweiterung zu schreiben.
Mit der Erweiterung möchte ich Skripte vom JS-Adapter downloaden/uploaden, sowie diese starten und stoppen können. Die ersten vier Sachen funktionieren schon rudimentär.
Jetzt würde ich noch gerne (genau wie im Webinterface) die Logausgaben der JS-Skripte in einem VS Code Output anzeigen. Aktuell scheitere ich aber daran, dass ich keine Logs bekomme. Versucht habe ich folgendes:
registerForLogs() { if (this.client && this.isConnected) { this.client.on("log", (message: any) => { console.log(message); }); this.client.emit("requireLog", true, (err: any) => { console.log(err); }); } }
this.client
ist meine Socket.io-Verbindung, welche ich vorher aufbaue.Der Code wird sauber durchlaufen und es fliegt keine Exception. Ich lande allerdings auch nie in Zeile 5, sprich ich bekomme keine Logs geschickt.
Was muss ich machen, damit ich Log-Ausgaben geschickt bekomme?
-
@nokxs Wow, cool! Diese Extension wird sicher vielen helfen.
Welchen socket.io verwendest du? Den von Web oder den von Admin? Es könnte sein, dass es diese Funktion nur auf dem socket.io von Admin gibt.
Wenn du hier schaust, wie Logs empfangen werden, glaube ich, hast du alles richtig gemacht:
https://github.com/ioBroker/adapter-react/blob/master/src/Connection.js -
@UncleSam Wenn außer mir die Extension sonst noch brauchen kann, lohnt sich die Entwicklung richtig. Sobald die Extension gut genug funktioniert, kann ich die im VS Code Marketplace veröffentlichen.
Ich weiß gar nicht ganz genau, welchen socket.io von den genannten ich genau verwende. Aktuell verwende ich den separaten socket.io Adapter (https://github.com/ioBroker/ioBroker.socketio) und dessen Standard-Port 8084.
Die Connection.js hatte ich schon angeschaut und war deswegen auch etwas verwirrt, dass es nicht funktioniert hat.
Mir war gar nicht bewusst, dass es verschiedene socket.io Endpunkte gibt. Wäre es sinnvoller einen anderen Endpunkt zu verwenden?
Edit: Ich hab es gerade mit Port 8081 versucht. Ich vermute mal, dass das der socket.io Endpunkt von Admin ist. Damit hat der Codeschnippsel von mir sofort funktioniert
. Im Endeffekt ist das ziemlich gut, da die Extension es so nicht erfordert bestimmte Adapter installiert zu haben.
Allerdings ist die Doku vom Socket.io-Adapter irreführend, da hier auch
requireLogs
beschrieben ist, obwohl es nicht funktioniert (zumindest bei mir). -
@nokxs Super, ja genau Port 8081 ist für Admin. Bitte bedenke, dass der Passwort geschützt sein kann.
Grundsätzlich sollte der Port 8081 nicht ausserhalb Admin genutzt werden, aber deine Extension ist ja eine "Erweiterung" von Admin, deshalb sehe ich kein Problem.
Eröffne doch ein Issue auf GitHub (im socket.io Adapter), dass Logs nicht gehen (wahrscheinlich ist das Absicht aber nicht sauber dokumentiert).
-
@UncleSam Danke für deine schnelle Rückmeldung. Den Issue habe ich geschrieben und ich werde dann erst einmal Port 8081 verwenden.
Das mit dem Passwort ist ein guter Hinweis.
-
@nokxs sagte in Socket-IO: Log-Ausgaben empfangen:
Wenn außer mir die Extension sonst noch brauchen kann,
ich hätte Interesse.