NEWS
VisualStudio Code und Devcontainer
-
@UncleSam sagte in VisualStudio Code und Devcontainer:
Wie gesagt, ich verwende F5 weil ich so direkt debuggen kann, aber da sind wir uns noch nicht einig, wie wir das für alle lösen wollen. Jeder "bastelt" da im Moment noch seine eigene Lösung.
was heisst "F5" ?
Egal was ich mache, ich bekomme keinerlei Möglichkeiten etwas zu debuggen. Wenn ich mir ein "launch.js" anlege und dann diese Konfiguration starte (Siehe Bild: Launch ioBroker.zigbee)
starte kommt es (wahrscheinlich wie erwartet) zurück. Irgendwelche Breakpoints ausserhalb des "main" werden nicht angesprochen. Damit bin ich wieder da wo ich auch ohne den .devcontainer bin:- code editieren
- code in den iobroker einspielen
- code da laufen lassen, schauen was geht (via log ausgaben)
Spricht irgend etwas dagegen das lokale Verzeichnis direkt in /opt/iobroker/node-modules/name des adapters zu spiegeln ?
A.
A. -
@UncleSam
leider bei buanet beta ebenfalls keine Änderung.
Dann muss ich mal schauen, was da im iobroker alles passiert.
Hast du mit vscode schon mal den ganzen iobroker mit einem debugger laufen lassen?
Hast du da eine Launch-Konfiguration? -
@Asgothian sagte in VisualStudio Code und Devcontainer:
was heisst "F5" ?
Genau das was du machst: In VS Code debuggen mit einer Launch Config.
Egal was ich mache, ich bekomme keinerlei Möglichkeiten etwas zu debuggen. Wenn ich mir ein "launch.js" anlege und dann diese Konfiguration starte (Siehe Bild: Launch ioBroker.zigbee)
starte kommt es (wahrscheinlich wie erwartet) zurück. Irgendwelche Breakpoints ausserhalb des "main" werden nicht angesprochen.Ja, da geht etwas noch schief. Hast du es mal mit einem anderen Adapter versucht (z.B. mein Loxone). Geht es da auch nicht?
Spricht irgend etwas dagegen das lokale Verzeichnis direkt in /opt/iobroker/node-modules/name des adapters zu spiegeln ?
Wieso nicht einfach
npm link
? Der Grund ist: wenn jemand aus versehennpm install
im ioBroker Verzeichnis macht, wird der gesamte Inhalt des Ordners überschrieben und damit ist dann dein Source Code weg. -
@OliverIO sagte in VisualStudio Code und Devcontainer:
Hast du mit vscode schon mal den ganzen iobroker mit einem debugger laufen lassen?
Hast du da eine Launch-Konfiguration?Nein, noch nie versucht.
-
@UncleSam sagte in VisualStudio Code und Devcontainer:
Wieso nicht einfach npm link?
Das setzt voraus, dass das dev-Verzeichnis direkt in /opt/iobroker liegt. Spricht grundsätzlich erst mal nix dagegen, aber das ist aktuell noch nicht der Fall.
-
@AlCalzone sagte in VisualStudio Code und Devcontainer:
@UncleSam sagte in VisualStudio Code und Devcontainer:
Wieso nicht einfach npm link?
Das setzt voraus, dass das dev-Verzeichnis direkt in /opt/iobroker liegt. Spricht grundsätzlich erst mal nix dagegen, aber das ist aktuell noch nicht der Fall.
Wieso denn das? Wieso funktioniert ein Link
/workspace nach /opt/iobroker
nicht? -
@UncleSam sagte in VisualStudio Code und Devcontainer:
Ja, da geht etwas noch schief. Hast du es mal mit einem anderen Adapter versucht (z.B. mein Loxone). Geht es da auch nicht?
Bisher nur mit dem Zigbee Adapter bzw. dem mit dem create-adapter erzeugten.
Aber wenn ich die Diskussion vollständig verstanden habe ist es so das ich generell nur den Start des Adapters debuggen kann, nicht die Events wenn sie denn kommen. Ist das korrekt ?
A.
-
@Asgothian sagte in VisualStudio Code und Devcontainer:
Aber wenn ich die Diskussion vollständig verstanden habe ist es so das ich generell nur den Start des Adapters debuggen kann, nicht die Events wenn sie denn kommen. Ist das korrekt ?
Nein, das stimmt nicht. Sobald der Adapter läuft kann man jederzeit Breakpoints haben (neue erstellen oder in alte laufen); also auch, wenn ein neues Event aus einem Drittsystem reinkommt.
-
@UncleSam
Hmm.. Das funktioniert bei mir bisher durchgängig nicht.A.
-
@Asgothian sagte in VisualStudio Code und Devcontainer:
Das funktioniert bei mir bisher durchgängig nicht.
Ich weiss leider wirklich nicht, was das Problem ist. Hier ein GIF mit meinem Loxone Adapter, frisch von
master
und nach einem Container Rebuild:
Zuerst starte ich den Debugger, dann kommt er im
onReady()
in einen Breakpoint. Danach setze ich einen zweiten Breakpoint in einem "Event Handler," der dann nach einiger Zeit auch angesprungen wird (wenn eben ein neues Event vom Miniserver kommt). -
Nochmal vielen Dank für die Hilfe. Soweit ist es ok. Entscheidend war die Anpassung des Adapterpfades, sprich das einfügen von
dirname: __dirname.indexOf('node_modules') !== -1 ? undefined : __dirname,
in die Optionen beim Aufruf des Adapter Contstructors,
sowie das hinzufügen der Argumente im launch.json"args": ["--debug", "0"],
Letzteres war im übrigen auch notwendig wenn man einen Adapter hat der vom create-adapter für den .devcontainer vorbereitet wurde. Ohne diese Argumente kann der Adapter nicht vom Studio aus gestartet werden.
A.
-
@UncleSam sagte in VisualStudio Code und Devcontainer:
Wieso denn das? Wieso funktioniert ein Link /workspace nach /opt/iobroker nicht?
Weil dann die Suche nach dem Adapter-mainfile im JS-Controller nicht funktioniert, da den Links nicht gefolgt wird. Innerhalb des ioBroker-Verzeichnisses geht es aber (empirisch herausgefunden).
-
@AlCalzone @UncleSam
Falls Interesse an der launch.json besteht, wie man den iobroker an sich debuggen kann:Folgendes ist zu beachten, ausgehend von der oben genannten devcontainer Konfiguration:
- Das Startverzeichnis muss für vs code geändert werden, in dem man unter
Menü File -> Open Folder dann /opt/iobroker auswählt - Bei ersten mal kann mann dann über den Befehl
Menü Run -> Add Configuration (falls noch keine launch.json für diesens Startverzeichnis besteht, alternativ Open Confiuration) eine Konfiguration anlegen und den unten angegebenen Inhalt einkopieren - Für ein entsprechenden Befehl (bspw start, oder wie hier "host set x" muss in args jedes einzelne Argument separat als Arrayelement aufgezählt werde.
- Danach können Breakpoints gesetzt werden und mit F5 das Debugging gestartet werden.
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Launch Program", "skipFiles": [ "<node_internals>/**" ], "args": ["host","set","x","--debug", "0"], //"stopOnEntry": true, "program": "/opt/iobroker/node_modules/iobroker.js-controller/iobroker.js" } ] }
- Das Startverzeichnis muss für vs code geändert werden, in dem man unter
-
ich kam ein wenig weiter mit meinem Problem.
leider funktioniert es auch nicht die Befehle aus der postCreateCommand auf der shell nochmal einzugeben, da objects.json in einem inkonsistenten Zustand vorliegt.
Im Rahmen der Containererzeugung von buanet muss ja der Hostname nochmal neu gesetzt werden, da iobroker den temporären Hostnamen des Containers nimmt.
Im Rahmen dieses umbenennens gibt es wohl einen Fehler, so das zwar alle Objekte umbenannt werden, aber nicht die Instanzen.
Als Workaround konnte ich das beheben, in dem ich alles nochmal auf den temporären Hostnamen umbenenne (Name muss aus objects.json ausgelesen werden oder aus dem docker-log), im Anschluss kann dann der eigentliche Name nochmal gesetzt werden (Befehl iob host set <name>)
Der Fehler tritt aber nur auf, wenn in postCreateCommand etwas drin steht. Welcher Fehler da auftritt, lässt sich aus den Logs aktuell leider nicht auslesen. -
@OliverIO Das ist schon mal ein guter erster Schritt! Ich denke, wir müssen Bug möglichst schnell finden und wenn möglich noch im nächsten Release des js-contoller fixen. Immer mehr Leute setzen auf Docker, das sollte sauber laufen.
-
@OliverIO @UncleSam
Ich finde das mit den Instanznamen äußerst komisch und kann mir derzeit nicht erklären, an welcher Stelle es schief läuft.
Wenn ich direkt unter Windows arbeite und VSCode den Docker-Container erstellen lasse, passt alles. Können wir das eingrenzen, ob es ggf. nur mit Docker auf Linux auftritt? -
@AlCalzone Mit @Asgothian zusammen habe ich gestern herausgefunden, dass es auf einem Mac mit "cached" Probleme gibt. Möglicherweise ist das hier dasselbe Problem. Dateien, die im ioBroker Verzeichnis lagen, waren plötzlich korrupt, was zu ganz komischen Fehlern führte.
@OliverIO, kannst du mal versuchen, im docker-compose.yml das
:cached
zu löschen? -
@UncleSam
cached habe ich gelöscht, dann volume image und container für luxtronik gelöscht und container neu erzeugt.
Ich habe keine Veränderung zu den vorherigen Versuchen entdecken können.
Mit postCreateCommand kein Start, ohne startet iobroker.
Die korrupten Dateien sind in welchem Verzeichnis entstanden? Soll ich da nochmal speziell schauen? -
@OliverIO sagte in VisualStudio Code und Devcontainer:
Die korrupten Dateien sind in welchem Verzeichnis entstanden? Soll ich da nochmal speziell schauen?
Das ganze
/opt/iobroker
wird ja gemountet, also irgendwas dort drin (wäre ja auch bei dir so). Es war ein installiertes Node Module. -
@UncleSam
dann ist im Windows-Fall nichts korrupt. Ohne postCreateCommand läuft alles super.
Mit postCreateCommand erst nachdem man die hosts wie beschrieben wieder umbenannt hat.
Mir dünkt, das die Befehle in postCreateCommand gar nicht ausgeführt wird. Muss aber nochmal genauer schauen.