Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. [Frage] Visual Studio Code Funktionen aus dem Javascript Adapter

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Frage] Visual Studio Code Funktionen aus dem Javascript Adapter

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

      Ja, Bluefox hat meinen PR in der Zwischenzeit gemerged.

      Probier mal folgende Zeile am Anfang des Skripts

      /// 
      
      1 Reply Last reply Reply Quote 0
      • ruhr70
        ruhr70 last edited by

        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

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

          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 😉

          1 Reply Last reply Reply Quote 0
          • frankjoke
            frankjoke last edited by

            @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'
            
            
            1 Reply Last reply Reply Quote 0
            • ruhr70
              ruhr70 last edited by

              @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?

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

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

                1 Reply Last reply Reply Quote 0
                • frankjoke
                  frankjoke last edited by

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

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

                    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.

                    1 Reply Last reply Reply Quote 0
                    • ruhr70
                      ruhr70 last edited by

                      @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? 😉

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

                        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.
                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        773
                        Online

                        31.7k
                        Users

                        79.8k
                        Topics

                        1.3m
                        Posts

                        3
                        17
                        2619
                        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