Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. [Frage] Visual Studio Code Funktionen aus dem Javascript Adapter

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.0k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.7k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.0k

[Frage] Visual Studio Code Funktionen aus dem Javascript Adapter

[Frage] Visual Studio Code Funktionen aus dem Javascript Adapter

Scheduled Pinned Locked Moved Entwicklung
17 Posts 3 Posters 2.9k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • ruhr70R Offline
    ruhr70R Offline
    ruhr70
    wrote on last edited by
    #1

    Frage an die Visual Studio Code Experten.

    Wenn ich Visual Studio Code für ein Script verwende. Wie kann ich VSCode mitteilen, dass bei der Prüfung die im Javascript-Adapter vorhandenen Funktionen, wie z.B. setState(), bekannt sind?

    Wenn ich nichts tue, werden alle Funktionen aus dem Javascript-Adapter als "nicht bekannt" rot unterstrichen:

    327_funktionen_im_javascript-adapter.png

    Adapter: Fritzbox, Unify Circuit
    Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

    1 Reply Last reply
    0
    • AlCalzoneA Offline
      AlCalzoneA Offline
      AlCalzone
      Developer
      wrote on last edited by
      #2

      Ich arbeite an TypeScript-Unterstützung für den JS-Adapter. Dazu gehört auch eine Definitionsdatei (.d.ts), die von VSCode verstanden wird.

      Ist noch nicht fertig, aber löst dann genau dein Problem.

      Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

      1 Reply Last reply
      0
      • ruhr70R Offline
        ruhr70R Offline
        ruhr70
        wrote on last edited by
        #3

        Dann freue ich mich auf Dein Ergebnis. 😉

        Wobei ich es nicht ganz verstanden habe.

        Ich hatte gehofft, dass man in VSCode einfach auf die .js Datei vom Javascript-Adapter verweisen kann und die dort deklarierten Funktionen dann bekannt sind. https://github.com/ioBroker/ioBroker.ja … ascript.js

        Wie wird denn dann in Zukunft der Ablauf mit Deiner Definitionsdatei?

        Ich lege diese in das Verzeichnis, in dem auch das Javascript liegt, welches ich gerade in VSCode bearbeite?

        Du schreibst Du arbeitest an einer TS-Unterstüzung für den Javascript-Adapter. Heißt dies, dass Du Änderungen am Adapter planst oder das Du die Definitionsdatei erstellst, die dann eingebunden werden kann?

        Adapter: Fritzbox, Unify Circuit
        Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

        1 Reply Last reply
        0
        • AlCalzoneA Offline
          AlCalzoneA Offline
          AlCalzone
          Developer
          wrote on last edited by
          #4

          @ruhr70:

          Ich hatte gehofft, dass man in VSCode einfach auf die .js Datei vom Javascript-Adapter verweisen kann und die dort deklarierten Funktionen dann bekannt sind. `
          VSCode kann das zum Teil, aber nicht ohne dass du die Datei irgendwie einbindest. Vor allem läuft ein Skript ja in einer Sandbox, die nicht alle Funktionen aus der Adapter-Datei kennt.

          In der .d.ts-Datei kann man definieren, dass einige globale Funktionen (die in der Sandbox verfügbar sind) existieren und außerdem Typanmerkungen und Beschreibung der Parameter einbauen.

          @ruhr70:

          Wie wird denn dann in Zukunft der Ablauf mit Deiner Definitionsdatei?

          Ich lege diese in das Verzeichnis, in dem auch das Javascript liegt, welches ich gerade in VSCode bearbeite? `
          Ja, ist vermutlich das einfachste.

          @ruhr70:

          Du schreibst Du arbeitest an einer TS-Unterstüzung für den Javascript-Adapter. Heißt dies, dass Du Änderungen am Adapter planst oder das Du die Definitionsdatei erstellst, die dann eingebunden werden kann? `
          Sowohl als auch. => http://forum.iobroker.net/viewtopic.php?p=89970#p89970

          Der TypeScript-Compiler meckert ebenfalls über die nicht vorhandenen/bekannten Funktionen. Man kann zwar "fehlerhaften" Code trotzdem kompilieren lassen, aber das lässt zu, dass auch andere Fehler mit ausgegeben werden. Mit der Definitionsdatei kann ich ihm sagen, welche "globalen" Funktionen in der Sandbox verfügbar sind und trotzdem den Code vorm Kompilieren prüfen lassen.

          Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

          1 Reply Last reply
          0
          • ruhr70R Offline
            ruhr70R Offline
            ruhr70
            wrote on last edited by
            #5

            Ich bin mir noch nicht sicher, ob wir zu 100% das Gleiche meinen.

            Ich möchte erst einmal recht simpel ein Script in VSCode editieren. Ohne Einbindung zu ioBroker und dem Javascript-Adapter.

            Bei Dir klingt es so, als ob Du in VSCode editieren und das Skript auch direkt von dort starten möchtest.

            Adapter: Fritzbox, Unify Circuit
            Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

            1 Reply Last reply
            0
            • AlCalzoneA Offline
              AlCalzoneA Offline
              AlCalzone
              Developer
              wrote on last edited by
              #6

              Nein, ich verstehe dich schon. Aber VSCode versteht fremden Code nur wenn er

              1. geladen oder

              2. durch eine Definitionsdatei beschrieben

              wurde. 2. liefert dann auch bessere Informationen, weil man die Typen der Parameter angeben kann.

              Die Date ist übrigens mehr oder weniger fertig (bis auf ein paar Kommentare)

              https://github.com/AlCalzone/ioBroker.j … cript.d.ts

              Leg die bitte mal in deinem Script-Verzeichnis ab und schaue, ob das was ändert.

              Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

              1 Reply Last reply
              0
              • ruhr70R Offline
                ruhr70R Offline
                ruhr70
                wrote on last edited by
                #7

                @AlCalzone:

                Aber VSCode versteht fremden Code nur wenn er

                1. geladen oder

                2. durch eine Definitionsdatei beschrieben

                wurde. 2. liefert dann auch bessere Informationen, weil man die Typen der Parameter angeben kann.

                Die Date ist übrigens mehr oder weniger fertig (bis auf ein paar Kommentare)

                https://github.com/AlCalzone/ioBroker.j … cript.d.ts

                Leg die bitte mal in deinem Script-Verzeichnis ab und schaue, ob das was ändert. `

                Danke für Deine Mühe und die Vorabversion!

                Wenn ich die Datei einfach nur ins Verzeichnis lege, werden die Funktionen vom Javascript Adapter nicht erkannt.

                Muss ich sonst noch was machen?

                Der Link zur Datei stimmte übrigens nicht (404).

                Habe nun folgende Datei verwendet:

                https://raw.githubusercontent.com/AlCal … cript.d.ts

                Adapter: Fritzbox, Unify Circuit
                Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                1 Reply Last reply
                0
                • AlCalzoneA Offline
                  AlCalzoneA Offline
                  AlCalzone
                  Developer
                  wrote on last edited by
                  #8

                  Ja, Bluefox hat meinen PR in der Zwischenzeit gemerged.

                  Probier mal folgende Zeile am Anfang des Skripts

                  /// 
                  

                  Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                  1 Reply Last reply
                  0
                  • ruhr70R Offline
                    ruhr70R Offline
                    ruhr70
                    wrote on last edited by
                    #9

                    Top! Damit funktioniert es 🙂

                    Jetzt muss ich nur noch verstehen, warum er die Funktion event() anmeckert…

                    Danke Dir!

                    327_funktionen_im_javascript-adapter_2.png

                    Adapter: Fritzbox, Unify Circuit
                    Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                    1 Reply Last reply
                    0
                    • AlCalzoneA Offline
                      AlCalzoneA Offline
                      AlCalzone
                      Developer
                      wrote on last edited by
                      #10

                      Wenn ich testweise

                      var x = event;
                      

                      eingebe, zeigt VSCode mir an, dass event eine Variable vom Typ Event sei. Wo die genau herkommt weiß ich auch nicht, scheint aber ein global zu sein, eventuell weil es standardmäßig im Browser definiert ist. Würde den Namen entweder vermeiden oder damit leben 😉

                      Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                      1 Reply Last reply
                      0
                      • frankjokeF Offline
                        frankjokeF Offline
                        frankjoke
                        wrote on last edited by
                        #11

                        @ruhr70,

                        wie machst das überhaupt? Mit js2fs? Dann kann ich auch die globalen scripts nicht verwenden (was ich zumindest mit einem immer tue).

                        Leider funktioniert require() von scripts nicht, das wäre sowieso die Lösung für meine Probleme mit dem JS-Adapter.

                        p.s.: Habe auch js2fs probiert (am Wochenende), hatte mir aber leider eine Datei zerschossen (war dann leer) und wenn ich Dateien ändere (Globale) starten die scripte 2x neu!

                        @AlCalzone

                        Krieg auch nach Einbindung von deinem header

                        file: 'file://opi/pi/javascript/global/GlobalAdapter.js' severity: 'Warnung' message: ''log' is not defined. (W117)' at: '23,30' source: 'jshint'
                        file: 'file://opi/pi/javascript/global/GlobalAdapter.js' severity: 'Warnung' message: ''createState' is not defined. (W117)' at: '298,37' source: 'jshint' 
                        file: 'file://opi/pi/javascript/global/GlobalAdapter.js' severity: 'Warnung' message: ''setState' is not defined. (W117)' at: '298,65' source: 'jshint' 
                        file: 'file://opi/pi/javascript/global/GlobalAdapter.js' severity: 'Warnung' message: ''getState' is not defined. (W117)' at: '298,90' source: 'jshint'
                        
                        

                        Frank,

                        NUC's, VM's und Raspi's unter Raspian, Ubuntu und Debian zum Testen.
                        Adapter die ich selbst beigesteuert habe: BMW, broadlink2, radar2, systeminfo, km200, xs1 und einige im Anmarsch!

                        1 Reply Last reply
                        0
                        • ruhr70R Offline
                          ruhr70R Offline
                          ruhr70
                          wrote on last edited by
                          #12

                          @fsjoke:

                          @ruhr70,

                          wie machst das überhaupt? Mit js2fs? Dann kann ich auch die globalen scripts nicht verwenden (was ich zumindest mit einem immer tue).

                          Leider funktioniert require() von scripts nicht, das wäre sowieso die Lösung für meine Probleme mit dem JS-Adapter.

                          p.s.: Habe auch js2fs probiert (am Wochenende), hatte mir aber leider eine Datei zerschossen (war dann leer) und wenn ich Dateien ändere (Globale) starten die scripte 2x neu! `

                          Ich zitiere mich mal selbst 🙂

                          @ruhr70:

                          Ich möchte erst einmal recht simpel ein Script in VSCode editieren. Ohne Einbindung zu ioBroker und dem Javascript-Adapter.

                          Bei Dir klingt es so, als ob Du in VSCode editieren und das Skript auch direkt von dort starten möchtest. `

                          Momentan ging es mir nur darum VSCode als Editor zu nutzen.

                          Bei der Adapterentwicklung habe ich mit VSCode gespielt und da kann man auch wunderbar den Adapter drüber starten und debuggen, siehe: https://github.com/ruhr70/ioBroker.Doku … mit-VSCode.

                          Hier wollte ich im ersten Schritt ganz banal mit cpoy & paste arbeiten. D.h. in VSCode editieren und dann das Skript nach ioBroker kopieren.

                          Direkt die Skripte in VSCode zu bearbeiten und zu starten hätte seinen Charme. Hatte auch schon einmal überlegt js2fs auszuprobieren, Habe mich aber nicht getraut :roll:

                          require() nutzen zu können, wäre schon von Vorteil. ggf. über npm?

                          Adapter: Fritzbox, Unify Circuit
                          Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                          1 Reply Last reply
                          0
                          • AlCalzoneA Offline
                            AlCalzoneA Offline
                            AlCalzone
                            Developer
                            wrote on last edited by
                            #13

                            @fsjoke:

                            file: 'file://opi/pi/javascript/global/GlobalAdapter.js' severity: 'Warnung' message: ''log' is not defined. (W117)' at: '23,30' source: 'jshint'
                            ```` `  
                            

                            JSHint erkennt die Definitionsdatei wohl nicht. Schau mal http://jshint.com/docs/ unter Configuration, da ist ein Beispiel, wie man globale Variablen bekannt machen kann.

                            Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                            1 Reply Last reply
                            0
                            • frankjokeF Offline
                              frankjokeF Offline
                              frankjoke
                              wrote on last edited by
                              #14

                              Danke AlCalzone & Ruhr!

                              Ich entwichle und debugge die Adapter mit VSCode, allerdings remote, inklusive Git-Anbindung.

                              Mein PC hat keinen ioBroker, ich hab zwar ein Vritual-Box mit win10 und eine mit Ubuntu, verwend die aber nur zum testen.

                              Das Zielsystem auf dem ioBroker läft ist ein Orangepi (habe einen für Entwicklung, einen als Aktives System und euch noch einen Raspi zum Testen.

                              Der Unterschied ist nur dass ich den Adapter am OPi starte, z.B. mit:

                               node --inspect=opi:9229 --debug-brk /opt/iobroker/node_modules/iobroker.km200/km200.js --force --logs
                              
                              

                              Das funktioniert seit 6.9 sehr gut, ab V8 gibt's nur noch inspect deshalb braucht man –inspect-brk

                              und ich dann VSCode debug 'attach' , Das sourceverzeichnis ist mittels Samba auf dem PC verknüpft und kann von VSCode direkt bearbeitet werden.

                              Da ich die Raspi's und OPi's headless betreibe kann ich dort kein

                              p.s.: für alle die kein VSCode haben, das geht auch mit dem normalen Chrome mittels chrome://inspect/#devices !

                              Natürlich könnte ich den gesamten javascript-Adapter wie oben debuggen was ich nur in Ausnahmefällen tue (und dann mit Chrome da VSCode eben diese Probleme mit den scripts hat).

                              Frank,

                              NUC's, VM's und Raspi's unter Raspian, Ubuntu und Debian zum Testen.
                              Adapter die ich selbst beigesteuert habe: BMW, broadlink2, radar2, systeminfo, km200, xs1 und einige im Anmarsch!

                              1 Reply Last reply
                              0
                              • AlCalzoneA Offline
                                AlCalzoneA Offline
                                AlCalzone
                                Developer
                                wrote on last edited by
                                #15

                                So mach ich das auch, auf dem lokalen Rechner hab ich ein NPM-Skript, das die Adapterdaten per SSH aktualisiert und einen iobroker upload ausführt.

                                Wo du es sagst, könnte ich auch noch die Debug/Inspekt-Zeile integrieren.

                                Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                1 Reply Last reply
                                0
                                • ruhr70R Offline
                                  ruhr70R Offline
                                  ruhr70
                                  wrote on last edited by
                                  #16

                                  @AlCalzone:

                                  So mach ich das auch, auf dem lokalen Rechner hab ich ein NPM-Skript, das die Adapterdaten per SSH aktualisiert und einen iobroker upload ausführt.

                                  Wo du es sagst, könnte ich auch noch die Debug/Inspekt-Zeile integrieren. `

                                  Kannst Du das mit dem NPM Skript näher erläutern? 😉

                                  Adapter: Fritzbox, Unify Circuit
                                  Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                                  1 Reply Last reply
                                  0
                                  • AlCalzoneA Offline
                                    AlCalzoneA Offline
                                    AlCalzone
                                    Developer
                                    wrote on last edited by
                                    #17

                                    Gerne!

                                    In der package.json, Abschnitt "scripts":

                                    "deploy_local": "node build/deploy_local.js"
                                    

                                    Das Skript sieht folgendermaßen aus:

                                    https://github.com/AlCalzone/ioBroker.t … y_local.js

                                    bzw. die TypeScript-Originaldatei:

                                    https://github.com/AlCalzone/ioBroker.t ... y_local.ts

                                    Im Projektordner liegt noch eine deploy_password.json mit folgendem Inhalt:

                                    			{
                                    				"host": "<hostname>",
                                    				"username": "<username>",
                                    				"password": "<password>"
                                    			}</password></username></hostname>
                                    

                                    Per

                                    npm run deploy_local
                                    

                                    aus VSCode wird das, was in den 3 Zeilen ab

                                    https://github.com/AlCalzone/ioBroker.t … cal.ts#L19

                                    definiert ist, auf den Pi hochgeladen und upload/restart ausgeführt.


                                    Edit: Variante 2 per gulp-Skript aus einem älteren Projekt:

                                    ! ````
                                    "use strict";
                                    ! var gulp = require('gulp'),
                                    plumber = require('gulp-plumber'),
                                    gulpSSH = require('gulp-ssh'),
                                    execSync = require('child_process').execSync
                                    ;
                                    ! gulp.task('raspi-install', () => {
                                    ! let packFile;
                                    try {
                                    packFile = execSync("npm pack");
                                    } catch (e) {
                                    console.log(Error while doing "npm pack": ${e});
                                    return;
                                    }
                                    ! const conn = {
                                    host: "<hostname">,
                                    port: 22,
                                    username: "<username>",
                                    password: "<passwort>"
                                    };
                                    const ssh = new gulpSSH({
                                    ignoreErrors: false,
                                    sshConfig: conn
                                    });
                                    ! return gulp
                                    .src([./${packFile}])
                                    .pipe(ssh.dest('/opt/iobroker/'))
                                    .exec([
                                    "cd /opt/iobroker",
                                    npm install ${packFile} --production,
                                    rm -f ${packFile},
                                    ])
                                    ;
                                    })</passwort></username></hostname">

                                    Das führt aber durch die NPM-Installation zu mehr Arbeit auf dem Pi. Und Upload/Restart war da auch noch nicht drin.

                                    Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                    1 Reply Last reply
                                    0
                                    Reply
                                    • Reply as topic
                                    Log in to reply
                                    • Oldest to Newest
                                    • Newest to Oldest
                                    • Most Votes


                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    260

                                    Online

                                    32.4k

                                    Users

                                    81.3k

                                    Topics

                                    1.3m

                                    Posts
                                    Community
                                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                    ioBroker Community 2014-2025
                                    logo
                                    • Login

                                    • Don't have an account? Register

                                    • Login or register to search.
                                    • First post
                                      Last post
                                    0
                                    • Recent
                                    • Tags
                                    • Unread 0
                                    • Categories
                                    • Unreplied
                                    • Popular
                                    • GitHub
                                    • Docu
                                    • Hilfe