Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Python Script ausführen (GPIO)

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Python Script ausführen (GPIO)

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

      Python kann man in javascript adapter einfach ausführen lassen:

      http://stackoverflow.com/questions/2097 … om-node-js

      Einfach

      createState('startPython');
      on({id: 'startPython', change: 'any'}, function (obj) {
         if (obj.newState.val === 'true' || obj.newState.val === true) {
           var python = require('child_process').spawn('python',
           // second argument is array of parameters, e.g.:
           ["/home/me/pythonScript.py"]);
           python.stdout.on('data', function(){ log(data); });
           python.on('close', function(code){ 
             if (code !== 0) {  
                   log('Error: ' + code); 
             } else {
                   log('OK');
             }
           });
      
        }
      });
      
      
      1 Reply Last reply Reply Quote 0
      • S
        starfish last edited by

        nach obigem Script versuche ich mein Python-Programm auszuführen, welches bei Aufruf per modbus Daten von meinem Instrument abholt. In der Konsole funktioniert das wie gewünscht, der Wert wird auf der Konsole ausgegeben. Beim javascript Aufruf haperts aber noch ein bisschen.

        (python script name ist natürlich angepasst) - wenn ich richtig verstanden habe, sollte die Konsolenausgabe stdout in iobroker eingelesen werden?

        Dabei ist mir nicht klar wie

        1. das Script getriggert wird, dies sollte in regelmässigen Intervall geschehen.

        2. ich die Daten auslesen kann (wohl unter Javascript.0 … aber dort steht kein Wert)

        Kann mir jemand auf die Sprünge helfen?

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

          @starfish:

          nach obigem Script versuche ich mein Python-Programm auszuführen, welches bei Aufruf per modbus Daten von meinem Instrument abholt. In der Konsole funktioniert das wie gewünscht, der Wert wird auf der Konsole ausgegeben. Beim javascript Aufruf haperts aber noch ein bisschen.

          (python script name ist natürlich angepasst) - wenn ich richtig verstanden habe, sollte die Konsolenausgabe stdout in iobroker eingelesen werden?

          Dabei ist mir nicht klar wie

          1. das Script getriggert wird, dies sollte in regelmässigen Intervall geschehen.

          2. ich die Daten auslesen kann (wohl unter Javascript.0 … aber dort steht kein Wert)

          Kann mir jemand auf die Sprünge helfen? `
          Es war ein Fehler im Kode:

          So konnte es aussehen. Alle 5 Minuten:

          createState('pythonResult', '');
          schedule("*/5 * * * *", function () {
               var python = require('child_process').spawn('python',
               // second argument is array of parameters, e.g.:
               ["/home/me/pythonScript.py"]);
               var result = '';
               python.stdout.on('data', function(){ result += data.toString(); });
               python.on('close', function(code){ 
                 if (code !== 0) {  
                       log('Error: ' + code); 
                 } else {
                       log(result);
                       setState('pythonResult', result, true);
                 }
               });
          });
          

          Ergebnis dann in javascript.0.pythonResult

          1 Reply Last reply Reply Quote 0
          • S
            starfish last edited by

            hallo bluefox, danke für die Antwort,

            jetzt läuft wenigstens etwas, aber wohl nicht das erwünschte:

            odroid 2015-06-03 23:29:01 error host.odroid instance system.adapter.javascript.0 terminated with code 6 (uncaught exception)

            in javascript.0.pythonResult steht kein Wert

            der manuelle Aufruf:

            root@odroid:/# python /root/strom.py

            2.36

            (Skript angepasst)

            1 Reply Last reply Reply Quote 0
            • S
              starfish last edited by

              … ich komm nicht weiter

              wenn ich die variable data initialisiere var data = ' ';

              dann verschwindet die Meldung uncaught exception

              initialisiere ich mit irgendeinem Wert, wird der auch unter javascript.0.pythonResult angezeigt.

              irgendwie funktioniert die Datenübergabe via stdout nicht, aber da blick ich zuwenig durch

              1 Reply Last reply Reply Quote 0
              • Y
                ykuendig last edited by

                @Bluefox:

                Es war ein Fehler im Kode:

                So konnte es aussehen. Alle 5 Minuten:

                gekürzt...
                     var python = require('child_process').spawn('python',
                     // second argument is array of parameters, e.g.:
                     ["/home/me/pythonScript.py"]);
                gekürzt...
                
                ```` `  
                

                Versuch mal den 'unbuffered' Parameter -u mitzugeben…

                Singemäss:

                ["/home/me/pythonScript.py"], '-u');
                
                
                1 Reply Last reply Reply Quote 0
                • S
                  starfish last edited by

                  hallo Yves - schade, gleiches Bild

                  ! inMem 2015-06-05 12:49:04 debug message * system.adapter.javascript.0.alive val=true, ack=true, ts=1433501344, from=system.adapter.javascript.0, lc=1433500654
                  ! javascript-0 2015-06-05 12:49:00 info script.js.modbusstrom: 12
                  ! inMem 2015-06-05 12:48:00 debug message * javascript.0.pythonResult val=12, ack=true, ts=1433501281, from=system.adapter.javascript.0, lc=1433501161
                  wobei 12 der Wert ist, den ich manuell vorinitialisiert hab.

                  ohne var data = '12'; siehts so aus

                  ! odroid 2015-06-05 13:00:00 error host.odroid instance system.adapter.javascript.0 terminated with code 6 (uncaught exception)
                  ! odroid 2015-06-05 12:59:30 info host.odroid instance system.adapter.javascript.0 started with pid 12531
                  ! host-odroid 2015-06-05 12:59:00 info Restart adapter system.adapter.javascript.0 because enabled
                  ! host-odroid 2015-06-05 12:59:00 error instance system.adapter.javascript.0 terminated with code 6 (uncaught exception)
                  ! inMem 2015-06-05 12:59:00 debug message * javascript.0.pythonResult val=, ack=true, ts=1433501940, from=system.adapter.javascript.0, lc=1433501940
                  ! javascript-0 2015-06-05 12:59:00 info script.js.modbusstrom:
                  ! ReferenceError: 2015-06-05 12:59:00 error at Pipe.onread (net.js:526:21)
                  ! ReferenceError: 2015-06-05 12:59:00 error at Socket.Readable.push (_stream_readable.js:127:10)
                  ! ReferenceError: 2015-06-05 12:59:00 error at readableAddChunk (_stream_readable.js:165:9)
                  ! ReferenceError: 2015-06-05 12:59:00 error at emitReadable (stream_readable.js:404:5)
                  ! ReferenceError: 2015-06-05 12:59:00 error at emitReadable
                  (_stream_readable.js:408:10)
                  ! ReferenceError: 2015-06-05 12:59:00 error at Socket.EventEmitter.emit (events.js:92:17)
                  ! ReferenceError: 2015-06-05 12:59:00 error at Socket. (_stream_readable.js:746:14)
                  ! ReferenceError: 2015-06-05 12:59:00 error at Socket.EventEmitter.emit (events.js:95:17)
                  ! ReferenceError: 2015-06-05 12:59:00 error at Socket. (script.js.modbusstrom:9:57)
                  ! ReferenceError: 2015-06-05 12:59:00 error data is not defined
                  ! uncaught 2015-06-05 12:59:00 error exception: data is not defined

                  1 Reply Last reply Reply Quote 0
                  • Y
                    ykuendig last edited by

                    Ich bin mir sowieso nicht sicher, ob das nicht besser mit exec als mit spawn gemacht werden sollte ?

                    Vielleicht weiss Bluefox da mehr.

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

                      @starfish:

                      hallo Yves - schade, gleiches Bild

                      ! inMem 2015-06-05 12:49:04 debug message * system.adapter.javascript.0.alive val=true, ack=true, ts=1433501344, from=system.adapter.javascript.0, lc=1433500654
                      ! javascript-0 2015-06-05 12:49:00 info script.js.modbusstrom: 12
                      ! inMem 2015-06-05 12:48:00 debug message * javascript.0.pythonResult val=12, ack=true, ts=1433501281, from=system.adapter.javascript.0, lc=1433501161
                      wobei 12 der Wert ist, den ich manuell vorinitialisiert hab.

                      ohne var data = '12'; siehts so aus

                      ! odroid 2015-06-05 13:00:00 error host.odroid instance system.adapter.javascript.0 terminated with code 6 (uncaught exception)
                      ! odroid 2015-06-05 12:59:30 info host.odroid instance system.adapter.javascript.0 started with pid 12531
                      ! host-odroid 2015-06-05 12:59:00 info Restart adapter system.adapter.javascript.0 because enabled
                      ! host-odroid 2015-06-05 12:59:00 error instance system.adapter.javascript.0 terminated with code 6 (uncaught exception)
                      ! inMem 2015-06-05 12:59:00 debug message * javascript.0.pythonResult val=, ack=true, ts=1433501940, from=system.adapter.javascript.0, lc=1433501940
                      ! javascript-0 2015-06-05 12:59:00 info script.js.modbusstrom:
                      ! ReferenceError: 2015-06-05 12:59:00 error at Pipe.onread (net.js:526:21)
                      ! ReferenceError: 2015-06-05 12:59:00 error at Socket.Readable.push (_stream_readable.js:127:10)
                      ! ReferenceError: 2015-06-05 12:59:00 error at readableAddChunk (_stream_readable.js:165:9)
                      ! ReferenceError: 2015-06-05 12:59:00 error at emitReadable (stream_readable.js:404:5)
                      ! ReferenceError: 2015-06-05 12:59:00 error at emitReadable
                      (_stream_readable.js:408:10)
                      ! ReferenceError: 2015-06-05 12:59:00 error at Socket.EventEmitter.emit (events.js:92:17)
                      ! ReferenceError: 2015-06-05 12:59:00 error at Socket. (_stream_readable.js:746:14)
                      ! ReferenceError: 2015-06-05 12:59:00 error at Socket.EventEmitter.emit (events.js:95:17)
                      ! ReferenceError: 2015-06-05 12:59:00 error at Socket. (script.js.modbusstrom:9:57)
                      ! ReferenceError: 2015-06-05 12:59:00 error data is not defined
                      ! uncaught 2015-06-05 12:59:00 error exception: data is not defined `
                      Es war ein Fehlerchen drin:

                      createState('pythonResult', '');
                      schedule("*/5 * * * *", function () {
                           var python = require('child_process').spawn('python',
                           // second argument is array of parameters, e.g.:
                           ["/home/me/pythonScript.py"]);
                           var result = '';
                           python.stdout.on('data', function(data){ result += data.toString(); });
                           python.on('close', function(code){ 
                             if (code !== 0) {  
                                   log('Error: ' + code); 
                             } else {
                                   log(result);
                                   setState('pythonResult', result, true);
                             }
                           });
                      });
                      
                      1 Reply Last reply Reply Quote 0
                      • S
                        starfish last edited by

                        8-) 8-) 8-) 8-)

                        Jetzt läuft alles - danke bluefox.

                        :idea: Sollte man das nicht (sticky) unter "ioBroker Skripten" und/oder im wiki aufführen? Zumindest die Lösung passt dort m.E besser hinein.

                        1 Reply Last reply Reply Quote 0
                        • Homoran
                          Homoran Global Moderator Administrators last edited by

                          Wenn du mir sagst welches das aktuelle und funktionierende Skript ist.

                          Und einen Zweizeiler wozu es gut ist kommt es da hin:

                          http://www.iobroker.net/docu/?page_id=57&lang=de

                          Gruß

                          Rainer

                          Gesendet von meinem LIFETAB_S785X mit Tapatalk

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          729
                          Online

                          31.7k
                          Users

                          79.7k
                          Topics

                          1.3m
                          Posts

                          5
                          14
                          4486
                          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