Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [gelöst] Exec Befehl im Multihost

NEWS

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

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

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

[gelöst] Exec Befehl im Multihost

Geplant Angeheftet Gesperrt Verschoben JavaScript
16 Beiträge 2 Kommentatoren 1.2k Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • B bonafide

    Hallo zusammen,

    ich hänge gerade an folgendem Problem:
    Schaltung von 433Mhz Funksteckern via Raspberry Pi im Multihost.

    Hier die Daten zur Konfiguration des Systems:
    Master:
    Dell Optiplex
    node -v = v8.16.0
    npm -v = 6.4.1
    Script Engine = 4.1.12
    OS Proxmox
    VM = Debian 9.9.0 amd64

    Slave:
    Raspberry Pi3 B
    node -v = v8.16.0
    npm -v = 6.4.1
    Script Engine = 4.1.12
    OS Raspbian stretch lite
    Wiring Pi

    Ich möchte via Skript einen Taster simulieren um einen Befehl an den PI zu senden, dort schaltet ein 433MHZ Modul (via WiringPi) dann die Funksteckdosen.
    Die Idee stammt von hier: YouTube

    Hierzu habe ich zwei JavaScript-Adapter installiert, jeweils auf Master (javascript.0) und Slave (javascript.1).

    In beiden Instanzen wurden folgende Einstellungen gemacht:
    Erlaube das Kommando "setObject" = true
    Erlaube das Kommando "exec" = true
    Erlaube das Kommando "sendToHost"= true

    Die Skript-Elemente sind in den Objekten richtig zugeordnet:

    alt text

    Hier wird das Skript immer in beiden Instanzen abgelegt, aber im Code verweist es auf die richtiger Instanz.

    on({id: "javascript.1.scriptEnabled.L-Sch"/*scriptEnabled.L-Sch*/, change: "ne"}, function (obj) {
      var value = obj.state.val;
      var oldValue = obj.oldState.val;
      if (getState("javascript.1.scriptEnabled.L-Sch").val == true) {
        exec('sudo /home/pi/raspberry-remote/./send 11110 5 1');
        console.log("exec: " + 'sudo /home/pi/raspberry-remote/./send 11110 5 1');
      } else if (getState("javascript.1.scriptEnabled.L-Sch").val == false) {
        exec('sudo /home/pi/raspberry-remote/./send 11110 5 0');
        console.log("exec: " + 'sudo /home/pi/raspberry-remote/./send 11110 5 0');
      }
    });
    

    Das Skript wurde mit Blockly erzeugt und sieht dort so aus:
    alt text

    Wenn ich den Befehl:

    sudo /home/pi/raspberry-remote/./send 11110 5 1
    

    an der Konsole des RaspPI ausführe Schaltet die Steckdose zuverlässig.
    Beim Skript bekomme ich folgenden Log:

    09:37:15.539	info	javascript.1 script.js.L: exec: sudo /home/pi/raspberry-remote/./send 11110 5 1
    09:37:15.572	info	javascript.1 Start javascript script.js.L-Sch
    09:37:15.574	info	javascript.1 script.js.L-Sch: registered 0 subscriptions and 0 schedules
    

    Aber die Steckdose schaltet nicht.

    Kann mir jemand sagen was ich Falsch mache?

    Vielen Dank!

    Tobias

    paul53P Offline
    paul53P Offline
    paul53
    schrieb am zuletzt editiert von
    #2

    @bonafide sagte:

    was ich Falsch mache?

    Keine eigenen Datenpunkte unter javascript.1.scriptEnabled anlegen, sondern direkt unter javascript.1 !!

    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

    B 1 Antwort Letzte Antwort
    0
    • paul53P paul53

      @bonafide sagte:

      was ich Falsch mache?

      Keine eigenen Datenpunkte unter javascript.1.scriptEnabled anlegen, sondern direkt unter javascript.1 !!

      B Offline
      B Offline
      bonafide
      schrieb am zuletzt editiert von bonafide
      #3

      @paul53

      Wenn ich im JavaScript Adapter einen neues Skript anlege habe ich keine andere Verzeichnis-Ebene gewählt, es kommt nur die Auswahl "Root-Verzeichnis"

      alt text

      alt text
      alt text

      Die ablage in Enabled erfolgt automatisch.

      Kann ich das ändern, und wenn ja wie?

      Danke!

      paul53P 1 Antwort Letzte Antwort
      0
      • B bonafide

        @paul53

        Wenn ich im JavaScript Adapter einen neues Skript anlege habe ich keine andere Verzeichnis-Ebene gewählt, es kommt nur die Auswahl "Root-Verzeichnis"

        alt text

        alt text
        alt text

        Die ablage in Enabled erfolgt automatisch.

        Kann ich das ändern, und wenn ja wie?

        Danke!

        paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von paul53
        #4

        @bonafide sagte in Exec Befehl im Multihost:

        Die ablage in Enabled erfolgt automatisch.
        Kann ich das ändern, und wenn ja wie?

        Nein. Der Datenpunkt unter scriptEnabled wird automatisch erzeugt und dient zum Starten und Stoppen des Skripts. Dieser Datenpunkt darf nicht zum Triggern innerhalb des Skriptes verwendet werden ! Erzeuge einen eigenen Trigger-Datenpunkt innerhalb des Skripts mit dem Block Datenpunkt erzeugen und verwende diesen Datenpunkt als Trigger.

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        B 1 Antwort Letzte Antwort
        0
        • paul53P paul53

          @bonafide sagte in Exec Befehl im Multihost:

          Die ablage in Enabled erfolgt automatisch.
          Kann ich das ändern, und wenn ja wie?

          Nein. Der Datenpunkt unter scriptEnabled wird automatisch erzeugt und dient zum Starten und Stoppen des Skripts. Dieser Datenpunkt darf nicht zum Triggern innerhalb des Skriptes verwendet werden ! Erzeuge einen eigenen Trigger-Datenpunkt innerhalb des Skripts mit dem Block Datenpunkt erzeugen und verwende diesen Datenpunkt als Trigger.

          B Offline
          B Offline
          bonafide
          schrieb am zuletzt editiert von
          #5

          @paul53

          Vielen Dank für Deine Unterstützung, aber ich bekomme es nicht hin.
          Irgendwie habe ich ein Brett vor dem Kopf.

          Ich habe jetzt folgendes versucht:

          alt text

          Das hat aber nicht geklappt.

          Ich habe Dich schon richtig verstanden das ich in Blockly einen DP erzeugen soll?

          Das Projekt lief bisher ohne Probleme auf einem Standalone PI problemlos.
          Erst jetzt im Multihost bekomme ich es nicht hinh.

          Tobias

          paul53P 1 Antwort Letzte Antwort
          0
          • B bonafide

            @paul53

            Vielen Dank für Deine Unterstützung, aber ich bekomme es nicht hin.
            Irgendwie habe ich ein Brett vor dem Kopf.

            Ich habe jetzt folgendes versucht:

            alt text

            Das hat aber nicht geklappt.

            Ich habe Dich schon richtig verstanden das ich in Blockly einen DP erzeugen soll?

            Das Projekt lief bisher ohne Probleme auf einem Standalone PI problemlos.
            Erst jetzt im Multihost bekomme ich es nicht hinh.

            Tobias

            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von paul53
            #6

            @bonafide sagte:

            das ich in Blockly einen DP erzeugen soll?

            Ja, den zum Triggern (Licht true/false).

            Blockly_Exec_RPi.JPG

            Ob sudo in exec funktioniert, weiß ich nicht.

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            1 Antwort Letzte Antwort
            0
            • B Offline
              B Offline
              bonafide
              schrieb am zuletzt editiert von bonafide
              #7

              Es ist mir fast schon peinlich.....
              In Deinem Beispiel sind jetzt zwei Variablen, Wert und cmd.

              Ich habe versucht diese nachzustellen:

              alt text

              Der Datenpunkt ist auch jetzt in der Übersicht richtig eingeordnet, wenn ich jetzt hier den Wert ändere tut sich jedoch nichts....

              alt text

              var Wert, cmd;
              
              
              createState("Test_L1", function () {
              });
              // Test_L1
              on({id: "Object ID", change: "ne"}, function (obj) {
                var value = obj.state.val;
                var oldValue = obj.oldState.val;
                if (Wert) {
                  cmd = 'sudo /home/pi/raspberry-remote/./send 11110 5 1';
                } else {
                  cmd = 'sudo /home/pi/raspberry-remote/./send 11110 5 0';
                }
                exec(cmd);
                console.log("exec: " + cmd);
              });
              

              Heute klappt irgendwie gar nichts, an einer anderen Baustelle (Conbee Stick) geht auch nichts....

              paul53P 1 Antwort Letzte Antwort
              0
              • B bonafide

                Es ist mir fast schon peinlich.....
                In Deinem Beispiel sind jetzt zwei Variablen, Wert und cmd.

                Ich habe versucht diese nachzustellen:

                alt text

                Der Datenpunkt ist auch jetzt in der Übersicht richtig eingeordnet, wenn ich jetzt hier den Wert ändere tut sich jedoch nichts....

                alt text

                var Wert, cmd;
                
                
                createState("Test_L1", function () {
                });
                // Test_L1
                on({id: "Object ID", change: "ne"}, function (obj) {
                  var value = obj.state.val;
                  var oldValue = obj.oldState.val;
                  if (Wert) {
                    cmd = 'sudo /home/pi/raspberry-remote/./send 11110 5 1';
                  } else {
                    cmd = 'sudo /home/pi/raspberry-remote/./send 11110 5 0';
                  }
                  exec(cmd);
                  console.log("exec: " + cmd);
                });
                

                Heute klappt irgendwie gar nichts, an einer anderen Baustelle (Conbee Stick) geht auch nichts....

                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von paul53
                #8

                @bonafide Wert ist keine Variable, sondern eine Eigenschaft des Triggerdatenpunktes (unter Blöcke Trigger) ! Hat leider die gleiche Farbe :white_frowning_face:

                Weshalb befindet sich der Datenpunkt Test_L1 unter scriptEnabled ? createState() legt ihn direkt unter javascript.1 an.

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                1 Antwort Letzte Antwort
                0
                • B Offline
                  B Offline
                  bonafide
                  schrieb am zuletzt editiert von
                  #9

                  Ok die Eigenschaft habe ich gefunden und getauscht.
                  Damit das ganze übersichtlicher wird habe ich die alten "Test-Skripts" gelöscht und ein neues erstellt.
                  Dieses wird wieder an dieser Stelle abgelegt:

                  alt text

                  Allerdings nicht im Ordner "Enabled"

                  var cmd;
                  
                  
                  createState("Neuer_Test", function () {
                  });
                  // Neuer_Test
                  on({id: "Object ID", change: "ne"}, function (obj) {
                    var value = obj.state.val;
                    var oldValue = obj.oldState.val;
                    if ((obj.state ? obj.state.val : "")) {
                      cmd = 'sudo /home/pi/raspberry-remote/./send 11110 5 1';
                    } else {
                      cmd = 'sudo /home/pi/raspberry-remote/./send 11110 5 0';
                    }
                    exec(cmd);
                    console.log("exec: " + cmd);
                  });
                  

                  Wenn ich jetzt manuell den Wert ändere passiert nichts, auch kein Log-Eintrag.

                  paul53P 1 Antwort Letzte Antwort
                  0
                  • B bonafide

                    Ok die Eigenschaft habe ich gefunden und getauscht.
                    Damit das ganze übersichtlicher wird habe ich die alten "Test-Skripts" gelöscht und ein neues erstellt.
                    Dieses wird wieder an dieser Stelle abgelegt:

                    alt text

                    Allerdings nicht im Ordner "Enabled"

                    var cmd;
                    
                    
                    createState("Neuer_Test", function () {
                    });
                    // Neuer_Test
                    on({id: "Object ID", change: "ne"}, function (obj) {
                      var value = obj.state.val;
                      var oldValue = obj.oldState.val;
                      if ((obj.state ? obj.state.val : "")) {
                        cmd = 'sudo /home/pi/raspberry-remote/./send 11110 5 1';
                      } else {
                        cmd = 'sudo /home/pi/raspberry-remote/./send 11110 5 0';
                      }
                      exec(cmd);
                      console.log("exec: " + cmd);
                    });
                    

                    Wenn ich jetzt manuell den Wert ändere passiert nichts, auch kein Log-Eintrag.

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von paul53
                    #10

                    @bonafide sagte:

                    on({id: "Object ID",

                    Ja, es muss auch erst die Datenpunkt-ID "javascript.1.Neuer_Test" zugeordnet werden, damit der Trigger darauf reagieren kann.

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    B 1 Antwort Letzte Antwort
                    0
                    • paul53P paul53

                      @bonafide sagte:

                      on({id: "Object ID",

                      Ja, es muss auch erst die Datenpunkt-ID "javascript.1.Neuer_Test" zugeordnet werden, damit der Trigger darauf reagieren kann.

                      B Offline
                      B Offline
                      bonafide
                      schrieb am zuletzt editiert von
                      #11

                      @paul53

                      Ok das habe ich angepasst:
                      alt text

                      var cmd;
                      
                      
                      createState("Neuer_Test", function () {
                      });
                      // Neuer_Test
                      on({id: "javascript.1.Neuer_Test"/*Neuer_Test*/, change: "ne"}, function (obj) {
                        var value = obj.state.val;
                        var oldValue = obj.oldState.val;
                        if ((obj.state ? obj.state.val : "")) {
                          cmd = 'sudo /home/pi/raspberry-remote/./send 11110 5 1';
                        } else {
                          cmd = 'sudo /home/pi/raspberry-remote/./send 11110 5 0';
                        }
                        exec(cmd);
                        console.log("exec: " + cmd);
                      });
                      

                      Bin ich richtig damit das wenn ich in den "Objekten" hier den Wert ändere zum. ein Log-Eintrag entstehen sollte?

                      alt text

                      Vielen vielen Dank für Deine Geduld!

                      paul53P 1 Antwort Letzte Antwort
                      0
                      • B bonafide

                        @paul53

                        Ok das habe ich angepasst:
                        alt text

                        var cmd;
                        
                        
                        createState("Neuer_Test", function () {
                        });
                        // Neuer_Test
                        on({id: "javascript.1.Neuer_Test"/*Neuer_Test*/, change: "ne"}, function (obj) {
                          var value = obj.state.val;
                          var oldValue = obj.oldState.val;
                          if ((obj.state ? obj.state.val : "")) {
                            cmd = 'sudo /home/pi/raspberry-remote/./send 11110 5 1';
                          } else {
                            cmd = 'sudo /home/pi/raspberry-remote/./send 11110 5 0';
                          }
                          exec(cmd);
                          console.log("exec: " + cmd);
                        });
                        

                        Bin ich richtig damit das wenn ich in den "Objekten" hier den Wert ändere zum. ein Log-Eintrag entstehen sollte?

                        alt text

                        Vielen vielen Dank für Deine Geduld!

                        paul53P Offline
                        paul53P Offline
                        paul53
                        schrieb am zuletzt editiert von
                        #12

                        @bonafide sagte:

                        Bin ich richtig damit das wenn ich in den "Objekten" hier den Wert ändere zum. ein Log-Eintrag entstehen sollte?

                        Ja.

                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                        B 1 Antwort Letzte Antwort
                        0
                        • paul53P paul53

                          @bonafide sagte:

                          Bin ich richtig damit das wenn ich in den "Objekten" hier den Wert ändere zum. ein Log-Eintrag entstehen sollte?

                          Ja.

                          B Offline
                          B Offline
                          bonafide
                          schrieb am zuletzt editiert von
                          #13

                          @paul53

                          Es passiert nichts, der Log bleibt leer.....

                          paul53P 1 Antwort Letzte Antwort
                          0
                          • B bonafide

                            @paul53

                            Es passiert nichts, der Log bleibt leer.....

                            paul53P Offline
                            paul53P Offline
                            paul53
                            schrieb am zuletzt editiert von
                            #14

                            @bonafide sagte:

                            der Log bleibt leer

                            Kein Log-Eintrag im Reiter "Log" ?
                            Die Logs unter dem Skript sind immer leer, wenn man den Reiter wechselt.

                            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                            1 Antwort Letzte Antwort
                            0
                            • B Offline
                              B Offline
                              bonafide
                              schrieb am zuletzt editiert von bonafide
                              #15

                              BINGO!!!

                              Ich bin ein Idiot!!
                              Arbeite mit zwei Bildschirmen und habe jeweils auf einem IOBroker geöffnet.
                              Bei Änderungen entstand so kein Log-Eintag auf dem anderen.

                              Dein Tipp mit Sudo war dann auch absolut Richtig, das weggenommen und schon schalten die Stecker wieder!

                              Vielen vielen Dank für Deine Hilfe!!
                              Mach jetzt ein Bier auf Dich auf, und schreibe Skripte für meine 15 Steckdosen!

                              paul53P 1 Antwort Letzte Antwort
                              0
                              • B bonafide

                                BINGO!!!

                                Ich bin ein Idiot!!
                                Arbeite mit zwei Bildschirmen und habe jeweils auf einem IOBroker geöffnet.
                                Bei Änderungen entstand so kein Log-Eintag auf dem anderen.

                                Dein Tipp mit Sudo war dann auch absolut Richtig, das weggenommen und schon schalten die Stecker wieder!

                                Vielen vielen Dank für Deine Hilfe!!
                                Mach jetzt ein Bier auf Dich auf, und schreibe Skripte für meine 15 Steckdosen!

                                paul53P Offline
                                paul53P Offline
                                paul53
                                schrieb am zuletzt editiert von
                                #16

                                @bonafide sagte:

                                schon schalten die Stecker

                                Bitte noch [gelöst] in der Überschrift eintragen.

                                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                1 Antwort Letzte Antwort
                                0
                                Antworten
                                • In einem neuen Thema antworten
                                Anmelden zum Antworten
                                • Älteste zuerst
                                • Neuste zuerst
                                • Meiste Stimmen


                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                695

                                Online

                                32.4k

                                Benutzer

                                81.5k

                                Themen

                                1.3m

                                Beiträge
                                Community
                                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                ioBroker Community 2014-2025
                                logo
                                • Anmelden

                                • Du hast noch kein Konto? Registrieren

                                • Anmelden oder registrieren, um zu suchen
                                • Erster Beitrag
                                  Letzter Beitrag
                                0
                                • Home
                                • Aktuell
                                • Tags
                                • Ungelesen 0
                                • Kategorien
                                • Unreplied
                                • Beliebt
                                • GitHub
                                • Docu
                                • Hilfe