Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. JScript führt keine CMD-exe aus (W10P)

    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

    JScript führt keine CMD-exe aus (W10P)

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

      Hallo,
      bin neu bei ioBroker, und habe gleich mal ein Problem 😉

      ioBroker unter Win10Pro x64 installiert, PC startet mit automatischer Anmeldung als Benutzer "iobroker", startet dann automatisch HABpanel in Chrome (Vollbildansicht). Habe ein Iiyama-24"-Touch-Display (HDMI, Touch über USB) dran, welches nach 2 min abschaltet.

      Will nun per JScript, dass das Display einschaltet, sobald von BlueIris (Vollversion als Service auf dem selben Rechner) ein Trigger-Alert per MQTT kommt (=Bewegung auf Video erkannt).

      Das MQTT-Ereignis kommt, das Script wird auch gestartet und ausgeführt (da im Log "exec: dispay on" angezeigt wird).
      Nur leider wird die EXE (hier nircmd.exe) nicht ausgeführt! (hatte bereits mit einer eigenen exe , welche nur ein Fenster anzeigt, getestet - es scheint, als ob keine Programme ausgeführt werden mit exec).

      Script:

      on({id: 'mqtt.0.BlueIris.doorcam', change: 'any'}, function dp(){
          exec('c:\iobroker_tools\nircmd.exe sendkeypress shift', function(err, stdout, stderr) {
              if (err) log(stderr,'error');
          });
          log("exec: display on");
      });
      

      In der Instanz des Script-Adapters ist natürlich konfiguriert/aktiviert:

      • Erlaube das Kommando "setObject"
      • Erlaube das Kommando "exec"

      Woran kann das liegen? Wer hat Tipps?

      Danke schon mal,
      Paul

      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        Hallo,

        habe das Skript mal überflogen, Zeile 1 hat einen Fehler. So wird die Funktion ausgeführt:

        on({id: 'mqtt.0.BlueIris.doorcam', change: 'any'}, function (dp) {
        

        (<Klammer auf> war falsch gesetzt).

        Ausserdem würde ich den Log-Befehl auch innerhalb von exec packen, um ein Kontrolle zu haben.

        Ich glaube, exec kann nur Skripte ausführen.

        on({id: "mqtt.0.BlueIris.doorcam", change: "any"}, function (dp){
            exec("c:\iobroker_tools\nircmd.exe sendkeypress shift", function(err, stdout, stderr) {
                if (err) log(stderr,"error");
                else log("exec: display on");
            });    
        });
        

        Pix

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

          @pix sagte in JScript führt keine CMD-exe aus (W10P):

          Ich glaube, exec kann nur Skripte ausführen.

          Nee, ich hab damit auch schon shutdown ausgeführt.

          1 Reply Last reply Reply Quote 0
          • P
            paul39 last edited by

            Danke für die Tipps!
            Das Script wie folgt läuft auch durch. Leider weckt es den Monitor nicht auf.

            on({id: "mqtt.0.BlueIris.doorcam", change: "any"}, function (dp){
                exec("c:/iobroker_tools/nircmd.exe sendkeypress shift", function(err, stdout, stderr) {
                    if (err) {
                        log(stderr,"error");
                    }
                    else log("exec: display on (new)");
                });
            });
            

            Ich habe einen Touch Iiyama TF2415MC-B2, welcher sich vor Ort, also wenn ich über das Touch streiche, aktivieren lässt. Aber eben nicht über die Kommandos im Script.
            Hat jemand eine Iiyama-Touch erfolgreich im Einsatz unter Windows?

            Ich muss mal in BIOS schauen, ob ich dort etwas finde.

            1 Reply Last reply Reply Quote 0
            • SBorg
              SBorg Forum Testing Most Active last edited by

              Öhm, hast du dass jetzt genau so im Einsatz?
              Eingangs war es in dem Part zumindest richtig, jetzt aber...

              Windows ==> "c:/iobroker_tools/nircmd.exe sendkeypress shift" ?
              sollte dann wohl eher "c:\iobroker_tools\nircmd.exe sendkeypress shift" sein 😉

              P 1 Reply Last reply Reply Quote 0
              • Stabilostick
                Stabilostick last edited by Stabilostick

                Hi,

                läuft der ioBroker als Windows Dienst oder in einer Benutzersitzung (mit vielen schwarzen Fenstern auf dem Desktop)?

                P 1 Reply Last reply Reply Quote 0
                • P
                  paul39 @SBorg last edited by paul39

                  @SBorg said in JScript führt keine CMD-exe aus (W10P):

                  Öhm, hast du dass jetzt genau so im Einsatz?

                  Ehrlich gesagt, ja:

                  c:\...\..
                  

                  führte zu Fehlermeldungen, es hätte noch funktioniert

                  C:\\...\\...
                  

                  (also mit 2 x backslash), dann hat mich die jetzige Variante auch interessiert, und diese führt ebenfalls zu keinem Fehler.

                  1 Reply Last reply Reply Quote 0
                  • P
                    paul39 @Stabilostick last edited by

                    @Stabilostick

                    läuft der ioBroker als Windows Dienst oder in einer Benutzersitzung (mit vielen schwarzen Fenstern auf dem Desktop)?

                    Ja, als Service.

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

                      Dann wird das mit dem Tastendruck nicht klappen. Der Dienst läuft in einer unsichtbaren Consol Sitzung 0 ohne Ausgabe. Tastendrücke verschwinden im Nirwana.

                      Da musst Du eher ein kleines Programm in Deiner Benutzersitzung laufen lassen, das sozusagen „von remote“ das Aufweckkommando empfängt. Das Programm könnte z.B. als ein kleiner http-Server in JavaScript geschrieben sein:

                      /*
                      Examples
                      
                      http://<ip>:3000/brightness/10  switches brightness of server display to 10%
                      
                      http://<ip>:3000/battery returns a number containing the battery level 0..1
                      */
                      
                      const brightness = require('brightness');
                      const batteryLevel = require('battery-level');
                      const http = require('http');
                      
                      const port = 3000;
                      
                      const requestHandler = (request, response) => {
                        console.log(request.url);
                        var  payload = request.url;
                        var arr = payload.split("/");
                      
                        if (arr[1] == "battery") {
                          batteryLevel().then(level => {
                              console.log(level);
                              response.end(''+level);
                             });
                         } 
                      
                        if (arr[1] == "brightness") {
                            var value = Number(arr[2])/100;
                            brightness.set(value).then(() => {
                              console.log('Changed brightness to ' + value);
                             });
                             response.end('Changed brightness to ' + value);
                        }
                      }
                      
                      const server = http.createServer(requestHandler);
                      server.listen(port, (err) => {
                        if (err) {
                          return console.log('something bad happened', err)
                        }
                        console.log(`server is listening on ${port}`)
                      });
                      

                      Oder halt dort den Keypress-Aufruf rein.

                      1 Reply Last reply Reply Quote 0
                      • P
                        paul39 last edited by paul39

                        Eieiei, das klingt natürlich logisch😊 Vielen Dank!

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        739
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        5
                        10
                        454
                        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