Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Tester
    4. [Tester gesucht] Visual Studio Code Extension für ioBroker

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Tester gesucht] Visual Studio Code Extension für ioBroker

    This topic has been deleted. Only users with topic management privileges can see it.
    • UncleSam
      UncleSam Developer @creatsher last edited by UncleSam

      @creatsher Versuch es mal mit einer tsconfig.json:

      {"include":["**/*",".iobroker/dummy.ts"],"compilerOptions":{"typeRoots":["./.iobroker/types"]}}
      

      Und folgender Directory-Struktur:

      /
         tsconfig.json
         .iobroker
            dummy.ts (leere Datei)
            types
               javascript.d.ts <-- dies ist die Datei
      

      So macht es diese Extension.

      Aber @nokxs, es wäre wäre schon cool, wenn deine Extension auch mit Remote SSH funktionieren würde. Ich weiss nicht genau, was es dafür alles braucht, aber sicherlich musst du sagen, dass Teile deiner Extension auf dem "Server" laufen. Edit: vergiss es, mit Remote SSH arbeitet man ja direkt auf dem ioBroker System, dann braucht man die Synchronisation nicht mehr - die macht ja dann der JS Adapter.

      C 1 Reply Last reply Reply Quote 0
      • C
        creatsher @UncleSam last edited by creatsher

        @unclesam ich muss gestehen, ich versteh nur Bahnhof!? irgendwas mit ner tsconfig.json hatte ich schon gefunden, aber wie ich wo was anlegen muss, da bin ich ernsthaft überfragt.

        Also welcher Ordner ist bei dir "/" ?
        Du wirst ja wohl kaum meinen Sever-Root meinen!?

        UncleSam 1 Reply Last reply Reply Quote 0
        • UncleSam
          UncleSam Developer @creatsher last edited by

          @creatsher said in [Tester gesucht] Visual Studio Code Extension für ioBroker:

          Also welcher Ordner ist bei dir "/" ?
          Du wirst ja wohl kaum meinen Sever-Root meinen!?

          Dein Projektverzeichnis, wo du die Skripte hast. Oder eins höher, oder noch höher... Am besten das Root deines VS Code Workspaces.

          C 1 Reply Last reply Reply Quote 0
          • C
            creatsher @UncleSam last edited by

            @unclesam aaaah jetzt hab ich's begriffen, vielen Dank. Manchmal denke ich einfach viel zu kompliziert...

            1 Reply Last reply Reply Quote 1
            • Gargano
              Gargano @nokxs last edited by

              @nokxs Klasse , hat auf Anhieb funktioniert.
              In der Anzeige vom IOBroker Script Editor werden auch die Instanzen angezeigt. Ist es im Visual Studio Code Extension auch machbar ?
              2606bd8b-8650-43f7-99a6-2a523f0fa649-grafik.png

              1 Reply Last reply Reply Quote 0
              • Gargano
                Gargano @Scrounger last edited by

                @scrounger Ich habs garde mal probiert. Ein Hochladen führt nicht zum Restart der JS Instanz, wohl aber zum Restart des Scripts. Genauso wie auch im IOBroker Script Editor.

                AutoUpLoad beim Save dann bitte konfigurierbar.

                UncleSam 1 Reply Last reply Reply Quote 0
                • Gargano
                  Gargano @nokxs last edited by

                  @nokxs Gibt es die Möglichkeit Haltepunkte zu setzen ?

                  1 Reply Last reply Reply Quote 0
                  • UncleSam
                    UncleSam Developer @Gargano last edited by

                    @gargano said in [Tester gesucht] Visual Studio Code Extension für ioBroker:

                    AutoUpLoad beim Save dann bitte konfigurierbar.

                    Ja, finde ich eine gute Idee.

                    @gargano said in [Tester gesucht] Visual Studio Code Extension für ioBroker:

                    Gibt es die Möglichkeit Haltepunkte zu setzen ?

                    Jetzt wird's aber richtig fancy! Das wäre natürlich genial, gerade für kompliziertere Skripts. Allerdings weiss ich als Entwickler auch, dass Remote Debugging nicht so trivial ist (auf beiden Seiten). Wahrscheinlich müsste man sogar den Skript Adapter mit dem Debugger eingeschaltet starten (was mit der iobroker Kommandozeile möglich wäre, aber natürlich nicht so schön ist).

                    nokxs 1 Reply Last reply Reply Quote 0
                    • nokxs
                      nokxs @UncleSam last edited by

                      @patrickbs96 Ich probiere später mal deinen Vorschlag mit der tsconfig.json. Mal schauen, ob das zufriedenstellender läuft als meine bisherigen Tests 😉

                      @Feuersturm & @Scrounger Ich werde den konfigurierbaren Auto-Upload von Skripten demnächst mal angehen. Das Ganze stelle ich mir selber auch praktisch vor.

                      @Gargano

                      • list itemDie Unterstützung verschiedener JS-Instanzen steht noch auf meiner Todo-Liste. Irgendwann werde ich das auch umsetzen.
                      • Aktuell gibt noch keine Unterstützung für Haltepunkte und ehrlich gesagt hatte ich bis jetzt auch noch nicht drüber nachgedacht. Wenn das funktionieren würde, wäre dies natürlich das Killer-Feature. Ich stelle mir das Allerdings kompliziert vor umzusetzen. Man weiß aber nie, was noch kommt 😉
                      patrickbs96 1 Reply Last reply Reply Quote 0
                      • UncleSam
                        UncleSam Developer @AlCalzone last edited by UncleSam

                        @alcalzone said in [Tester gesucht] Visual Studio Code Extension für ioBroker:

                        @patrickbs96 Ich fürchte du wirst in die gleichen Probleme laufen wie ich mit den globalen Skripten und vor kurzem dem Top-Level-Await-Support.

                        So wie ioBroker seine Skripte verwendet (nicht-Module, die import verwenden; Module, die den Scope mit nicht-Modulen teilen, etc...), versteht TypeScript bzw. der Editor nicht ohne Nachhilfe. Da musste ich relativ viel mit generierten Exports tricksen.
                        Damit du einen Eindruck bekommst, hier ein paar PRs:
                        https://github.com/ioBroker/ioBroker.javascript/pulls?page=2&q=is%3Apr+is%3Aclosed+author%3AAlCalzone

                        Ich habe gerade etwas den JS Adapter Code angeschaut, und gesehen, dass es da einen TS und einen JS "Declaration Server" (tsc.Server) hat. Ist der von aussen zugänglich oder ist das Wort "Server" hier nicht als TCP Server gemeint? Falls die beiden zugänglich sind, wäre es wahrscheinlich möglich, das in diese Extension zu integrieren, oder?

                        Und wenn ich dich @AlCalzone schon an der Leitung habe: was sind deine Gedanken zum Remote Debugging von Scripts mit der Extension? Ich sehe zwar, dass vm2 Debugging kann, aber das bedingt wohl, dass der eigentliche Prozess den Debug Socket zur Verfügung stellt, oder?

                        AlCalzone 1 Reply Last reply Reply Quote 0
                        • patrickbs96
                          patrickbs96 Developer @nokxs last edited by

                          @nokxs Ich habe hier nochmal herumgespielt und es scheint wohl so zu sein, das der Zugriff auf andere Funktion aus den anderen Skripten nicht auf eine bestimmte Ordnerstruktur eingeschränkt werden kann ("global/**/*.js"). Das führt leider dazu, dass IntelliSense nur in den Skripten unter global funktioniert und die ioBroker Funktionen sowie die Funktionen aus den anderen Skripten anzeigt...

                          Ich bin kein Experte von VSCode, vielleicht ist es doch irgendwie möglich das richtig zu begrenzen.

                              "include": [
                                  "**/*.js",
                                  "**/*.d.ts",
                                  ".iobroker/types/javascript.d.ts"
                              ]
                          

                          So sollten die ioBroker Funktionen auch unter common funktionieren aber es werden auch alle anderen Funktionen aus den anderen Skripten angezeigt. Ein "exclude" klappt hier auch nicht, das hätte den gleichen Effekt wie mit global.

                          Scrounger 1 Reply Last reply Reply Quote 0
                          • Scrounger
                            Scrounger Developer @patrickbs96 last edited by

                            @patrickbs96

                            "global/**/*.js" funktioniert bei mir auch nicht. Das einzige wie es mit IntelliSense bei mir klappt ist wenn ich jedes einzelne global skript unter file angebe, bsp.:

                            {
                                "files": [
                                    "../helper/javascript.d.ts"
                                    "global/meinSkript.js"
                                ]
                            }
                            

                            Da jedes einzelne File manuell rein zu schreiben ist natürlich ätzend. Aber du könntest das evtl. mit dem plugin doch automatisieren?

                            patrickbs96 1 Reply Last reply Reply Quote 0
                            • patrickbs96
                              patrickbs96 Developer @Scrounger last edited by

                              @scrounger Verwendest du bei dir auch noch include oder exclude? Dein Vorschlag klappt bei mir nämlich nicht...

                              So sieht meine tsconfig.json aus:

                              // https://github.com/ioBroker/create-adapter/blob/master/test/baselines/adapter_JS_ESLint_TypeChecking_Spaces_SingleQuotes_Apache-2.0/tsconfig.json
                              {
                                  "compileOnSave": true,
                                  "compilerOptions": {
                                      // do not compile anything, this file is just to configure type checking
                                      "noEmit": true,
                              
                                      // check JS files
                                      "allowJs": true,
                                      "checkJs": true,
                              
                                      "module": "commonjs",
                                      "moduleResolution": "node",
                                      "esModuleInterop": true,
                                      // this is necessary for the automatic typing of the adapter config
                                      "resolveJsonModule": true,
                              
                                      // Set this to false if you want to disable the very strict rules (not recommended)
                                      "strict": true,
                                      // Or enable some of those features for more fine-grained control
                                      // "strictNullChecks": true,
                                      // "strictPropertyInitialization": true,
                                      // "strictBindCallApply": true,
                                      "noImplicitAny": false,
                                      // "noUnusedLocals": true,
                                      // "noUnusedParameters": true,
                              
                                      // Consider targetting es2019 or higher if you only support Node.js 12+
                                      "target": "es2018",
                              
                                      "typeRoots":[
                                          ".iobroker/types",
                                          "node_modules/@types"
                                      ]
                                  },
                                  // "files": [
                                  //     "global/alexaHelper.js",
                                  //     "global/scriptHelper.js",
                                  //     "global/smartHelper.js",
                                  //     "global/telegramHelper.js",
                                  //     ".iobroker/types/javascript.d.ts"
                                  // ],
                                  "include": [
                                      "**/*.js",
                                      ".iobroker/types/javascript.d.ts"
                                  ],
                                  "exclude": [
                                      "node_modules/**"
                                  ]
                              }
                              
                              Scrounger 1 Reply Last reply Reply Quote 0
                              • AlCalzone
                                AlCalzone Developer @UncleSam last edited by

                                @unclesam said in [Tester gesucht] Visual Studio Code Extension für ioBroker:

                                TS und einen JS "Declaration Server"

                                Das ist ein Language Server, quasi eine Instanz, die das Skript-Projekt (inklusive aller referenzierten Module und Typdefinitionen) im Speicher hält - bzw. eigentlich nur ein Wrapper um TypeScript. Mit einem TCP-Server hat das nichts zu tun.
                                Zwar verwendet VSCode unter der Haube auch einen Language Server, der ist aber nicht kompatibel mit meinem Wrapper, der primär Kompilieren ohne Festplattenzugriff im Sinn hat.

                                Ehrliche Meinung: Vom Debuggen würde ich abraten.
                                Mit JS wirds vielleicht noch irgendwie hinhauen, wobei ich nicht weiß ob das mit der Node.js VM geht (wir verwenden VM2 nicht wirklich). Spätestens bei TS, den unter der Haube kompilierten Skripten und erst recht bei den Tricksereien, die da für top-level-await und den wilden Mix aus globalen Skripten und Modulen getrieben werden, ist der Spaß endgültig vorbei.

                                nokxs UncleSam 2 Replies Last reply Reply Quote 1
                                • nokxs
                                  nokxs @AlCalzone last edited by

                                  @alcalzone Falls jemals das Debuggen von Skripten kommt, kommt das sehr viel später, da ich mir das auch sehr kompliziert vorstelle.

                                  Ich bin jetzt gerade dabei mir die Authentifizierung über socker.io anzuschauen. Mir ist aber noch nicht ganz klar, wie das Ganze funktioniert. Wenn ich für den Benutzer admin ein Passwort setze, bekomme ich beim Connect die Fehlermeldung (mit client.on("error"), ...) Passport was not initialized und die Verbindung wird nicht aufgebaut. Bei meinem Reverse-Engineering sah es immer so aus, als muss ich eine "authenticate"-Nachricht schicken. Das funktioniert aber nicht, wenn ich keine Verbindung aufbauen kann.

                                  Im Socket.Io Adapter hab ich folgendes gefunden, was mich bis jetzt aber noch nicht wirklich weiter gebracht hat:

                                  • https://github.com/ioBroker/ioBroker.socketio/blob/0894573174452febec59dbb0eb5d1eee519b1b5c/example/conn.js#L311
                                  • https://github.com/ioBroker/ioBroker.socketio/blob/0894573174452febec59dbb0eb5d1eee519b1b5c/example/conn.js#L1294
                                  • https://github.com/ioBroker/ioBroker.socketio/blob/master/lib/socket.js#L822
                                  • https://github.com/ioBroker/ioBroker.socketio/blob/master/lib/socket.js#L168

                                  Kann mir jemand ein paar Hinweise in die richtige Richtung geben, damit ich nicht stundenlang Code lesen muss?

                                  UncleSam 1 Reply Last reply Reply Quote 0
                                  • UncleSam
                                    UncleSam Developer @nokxs last edited by

                                    @nokxs said in [Tester gesucht] Visual Studio Code Extension für ioBroker:

                                    Kann mir jemand ein paar Hinweise in die richtige Richtung geben, damit ich nicht stundenlang Code lesen muss?

                                    Da gibt es nur genau jemanden, der diesen Code versteht... leider (und nein, das bin nicht ich).

                                    Hast du diesen Code mal angeschaut? https://github.com/ioBroker/adapter-react/blob/4fbe1a786048e02a0fdec78505985aadf35a4780/src/Connection.js#L148-L168
                                    Der macht noch etwas mit dem flag das vom 'connect' event zurück gegeben wird.

                                    Bist du ganz sicher, dass du nicht (versehentlich) schon Nachrichten verschickst, bevor das 'authenticate' durch ist?

                                    nokxs 1 Reply Last reply Reply Quote 0
                                    • nokxs
                                      nokxs @UncleSam last edited by nokxs

                                      @unclesam Die Stelle hatte ich noch nicht angeschaut und ich mache es genau gleich wie dort, nur das es bei mir (noch) nicht funktioniert.

                                      Ich hab jetzt mal an alle Stellen, an denen ich ein emit mache, also was sende, einen Breakpoint gesetzt. Ich bekomme allerdings immer sofort die Fehlermeldung Passport was not initialized und lande niemals im connect Event.

                                      Ich betreibe mal Code-Archäologie und schaue was ich finde 😉

                                      Edit: Für alle interessierten: Es gibt seit gerade eben die Version 0.7.0: https://github.com/nokxs/iobroker-javascript-vs-code-extension/releases/tag/v0.7.0

                                      Feuersturm UncleSam 2 Replies Last reply Reply Quote 0
                                      • Feuersturm
                                        Feuersturm @nokxs last edited by

                                        @nokxs Hab gerade die 0.7.1 installiert. Hab testweise in einem Skript mal eine console.log Ausgabe einfgefügt. Wenn ich bei VSCode Ausgabe ìobroker (all) auswähle sehe ich die Log ausgabe.
                                        Wenn ich iobroker (current script) auswähle sehe ich keine Ausgabe, nachdem das Skript gestartet wurde. Im ioBroker Log ist die Ausgabe von console.log zu sehen.

                                        nokxs 1 Reply Last reply Reply Quote 0
                                        • nokxs
                                          nokxs @Feuersturm last edited by

                                          @feuersturm Hast du das Skript lokal auf deiner Festplatte gehabt?

                                          Feuersturm 1 Reply Last reply Reply Quote 0
                                          • UncleSam
                                            UncleSam Developer @nokxs last edited by

                                            @nokxs said in [Tester gesucht] Visual Studio Code Extension für ioBroker:

                                            Ich betreibe mal Code-Archäologie und schaue was ich finde

                                            Ich glaube, ich hab's: du verwendest den Admin socket.io. Dort wird erwartet, dass du dich über das Admin GUI einloggst. Wahrscheinlich verwendet Admin die passport Library um die Authentifizierung sicherzustellen. Da du nicht auf den 8082 wechseln kannst (siehe frühere Diskussion), musst du wohl einen Weg finden, das Auth Cookie (oder was immer es ist) selber zu erstellen.

                                            Versuche mal zuerst, das Cookie von deinem Browser zu kopieren. Wenn das geht, musst du das Beschaffen des Cookie irgendwie selber implementieren. Eventuell hilft das: https://www.npmjs.com/package/passport.socketio

                                            Oder du wartest auf Admin 5 ;-). Da wird alles anders (WebSocket statt socket.io).

                                            nokxs 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            635
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript vscode
                                            18
                                            137
                                            13252
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo