Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Exec Befehl im Multihost

    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

    [gelöst] Exec Befehl im Multihost

    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      bonafide last edited by 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

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @bonafide last edited by

        @bonafide sagte:

        was ich Falsch mache?

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

        B 1 Reply Last reply Reply Quote 0
        • B
          bonafide @paul53 last edited by 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!

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @bonafide last edited by 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 1 Reply Last reply Reply Quote 0
            • B
              bonafide @paul53 last edited by

              @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

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @bonafide last edited by paul53

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

                1 Reply Last reply Reply Quote 0
                • B
                  bonafide last edited by 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....

                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @bonafide last edited by paul53

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

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

                    1 Reply Last reply Reply Quote 0
                    • B
                      bonafide last edited by

                      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.

                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @bonafide last edited by 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 1 Reply Last reply Reply Quote 0
                        • B
                          bonafide @paul53 last edited by

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

                          paul53 1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 @bonafide last edited by

                            @bonafide sagte:

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

                            Ja.

                            B 1 Reply Last reply Reply Quote 0
                            • B
                              bonafide @paul53 last edited by

                              @paul53

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

                              paul53 1 Reply Last reply Reply Quote 0
                              • paul53
                                paul53 @bonafide last edited by

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

                                1 Reply Last reply Reply Quote 0
                                • B
                                  bonafide last edited by 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!

                                  paul53 1 Reply Last reply Reply Quote 0
                                  • paul53
                                    paul53 @bonafide last edited by

                                    @bonafide sagte:

                                    schon schalten die Stecker

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

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

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    649
                                    Online

                                    31.8k
                                    Users

                                    80.0k
                                    Topics

                                    1.3m
                                    Posts

                                    2
                                    16
                                    977
                                    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