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. Python Script ausführen (GPIO)

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.1k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

Python Script ausführen (GPIO)

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
14 Beiträge 5 Kommentatoren 4.8k Aufrufe
  • Ä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.
  • M Offline
    M Offline
    mimquadrat
    schrieb am zuletzt editiert von
    #1

    Hallo Leute,

    ich komm mal wieder mit meinem Thema an…

    Ich habe an ein IKEA Rollo einen Schrittmotor den ich über den Raspi ansteuere. Bis jetzt leider immer nur manuell über SSH.

    Ich wollte jetzt dieses script entweder mit nodered starten oder in nodered einbauen.

    IoBroker läuft im Mutierst (der Schrittmotor also auf einem slave iobroker).

    Hier wäre noch das script zum Hochfahren zB:

    #!/usr/bin/env python

    import RPi.GPIO as GPIO

    import time

    GPIO.setmode(GPIO.BOARD)

    ControlPin = [7,11,13,15]

    for pin in ControlPin:

    GPIO.setup(pin,GPIO.OUT)

    GPIO.output(pin,0)

    seq = [ [1,0,0,1],

    [0,0,0,1],

    [0,0,1,1],

    [0,0,1,0],

    [0,1,1,0],

    [0,1,0,0],

    [1,1,0,0],

    [1,0,0,0] ]

    for i in range (4500):

    for halfstep in range(8):

    for pin in range(4):

    GPIO.output(ControlPin[pin], seq[halfstep][pin])

    time.sleep(0.001)

    GPIO.cleanup()

    vielen dank für Eure Hilfe!

    PS: Interessant wäre doch, eigene Nodes zu den ganzen billig Aktoren und Sensoren für den Raspi zu machen (Motoren, ultraschallsensoren, feuchte- und tempfühler, kleine displays,…

    1 Antwort Letzte Antwort
    0
    • BluefoxB Offline
      BluefoxB Offline
      Bluefox
      schrieb am zuletzt editiert von
      #2

      Ich muss anschauen, ob es mit rpi-out node geht.

      So sollte es aber auch gehen:

      `[{"id":"6f5fe60c.90a018","type":"inject","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":91,"y":38,"z":"d8cc32bf.2733d","wires":[["f53fa777.0ac058"]]},{"id":"f53fa777.0ac058","type":"function","name":"Control PINS","func":"// Warning:\n// to use rpi-gpi add to /opt/iobroker/node_modules/iobroker.node-red/userdata/settings.js\n\n// functionGlobalContext: {\n//    gpio: require(\"rpi-gpio\")\n// }\n\nvar gpio = context.global.gpio;\n\nvar controlPin = [7,11,13,15];\n\nvar debug = \"\";\n// Create dummy functions to test\nif (!gpio) {\n    debug = \"THIS IS DEBUG. NO PINS CONTROLLED\";\n    gpio = {\n        write: function (pin, val, cb) {\n            if (cb) cb();\n        },\n        setup: function (pin, dir, cb) {\n            if (cb) cb();\n        },\n        destroy: function (cb) {\n            if (cb) cb();\n        }\n    };\n} else {\n    \n}\n\n\n// write one value to all pins\nfunction _write(values, callback) {\n    var _ready = values.length;\n    debug += \"\\nWrite values \" + JSON.stringify(values);\n    for (var i = 0; i < values.length; i++) {\n        gpio.write(controlPin[i], values[i], function () {\n            _ready--;\n            if (!_ready && callback) callback();\n        });\n    }\n}\n\n// write whole sequense\nfunction write(_sequense, i, callback) {\n    if (i >= _sequense.length) {\n        if (callback) callback();\n        return;\n    }\n    _write(_sequense[i], function () {\n        setTimeout(function () {\n            write(_sequense, i + 1, callback);\n        }, 0);\n    })\n}\n\nvar sequense = [ \n    [true,  false, false, true],\n    [false, false, false, true],\n    [false, false, true,  true],\n    [false, false, true,  false],\n    [false, true,  true,  false],\n    [false, true,  false, false],\n    [true,  true,  false, false],\n    [true,  false, false, false]\n];\n\n// Init outputs of all pins\nnode.log(\"Init outputs of all pins\");\nvar ready = controlPin.length;\nfor (var i = 0; i < controlPin.length; i++) {\n    gpio.setup(controlPin[i], gpio.DIR_OUT, function () {\n        ready--;\n        if (!ready) {\n            debug += \"\\nWrite sequence\";\n            write(sequense, 0, function () {\n                gpio.destroy(function () {\n                    debug += \"\\nfinished\";\n                    node.send({payload: debug});\n                });\n            });\n        }\n    });\n}\n\nreturn;","outputs":1,"valid":true,"x":283,"y":47,"z":"d8cc32bf.2733d","wires":[["b9b52194.464ae"]]},{"id":"b9b52194.464ae","type":"debug","name":"","active":true,"console":"false","complete":"false","x":542,"y":35,"z":"d8cc32bf.2733d","wires":[]}]`
      
      Man muss nur noch "/opt/iobroker/node_modules/iobroker.node-red/userdata/settings.js" erweitern mit:
      `~~[code]~~...
      functionGlobalContext: {
         gpio: require("rpi-gpio")
      }
      ...[/code]`[/i][/i][/i][/i]
      
      1 Antwort Letzte Antwort
      0
      • M Offline
        M Offline
        mimquadrat
        schrieb am zuletzt editiert von
        #3

        hab ich versucht - klappt leider nicht.

        der einfachere weg wäre, das python script auszuführen das auf diesem Raspi lokal gespeichert ist - aber nicht mal DAS krieg ich hin :(

        EDIT:

        ich habe das hier:

        functionGlobalContext: {

        gpio: require("rpi-gpio")

        }

        in die settings.js eingefügt, aber nach einem neustart ist das immer wieder weg! Hab Root Rechte!

        EDIT2:

        Aber bitte lieber Bluefox: halte dich mit so nem sch… nicht auf! Du hast wichtigere Sachen vor Dir :)! Spasiva!

        1 Antwort Letzte Antwort
        0
        • BluefoxB Offline
          BluefoxB Offline
          Bluefox
          schrieb am zuletzt editiert von
          #4

          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 Antwort Letzte Antwort
          0
          • S Offline
            S Offline
            starfish
            schrieb am zuletzt editiert von
            #5

            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 Antwort Letzte Antwort
            0
            • BluefoxB Offline
              BluefoxB Offline
              Bluefox
              schrieb am zuletzt editiert von
              #6

              @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 Antwort Letzte Antwort
              0
              • S Offline
                S Offline
                starfish
                schrieb am zuletzt editiert von
                #7

                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 Antwort Letzte Antwort
                0
                • S Offline
                  S Offline
                  starfish
                  schrieb am zuletzt editiert von
                  #8

                  … 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 Antwort Letzte Antwort
                  0
                  • Y Offline
                    Y Offline
                    ykuendig
                    schrieb am zuletzt editiert von
                    #9

                    @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');
                    
                    

                    Gruss Yves

                    1 Antwort Letzte Antwort
                    0
                    • S Offline
                      S Offline
                      starfish
                      schrieb am zuletzt editiert von
                      #10

                      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 Antwort Letzte Antwort
                      0
                      • Y Offline
                        Y Offline
                        ykuendig
                        schrieb am zuletzt editiert von
                        #11

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

                        Vielleicht weiss Bluefox da mehr.

                        Gruss Yves

                        1 Antwort Letzte Antwort
                        0
                        • BluefoxB Offline
                          BluefoxB Offline
                          Bluefox
                          schrieb am zuletzt editiert von
                          #12

                          @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 Antwort Letzte Antwort
                          0
                          • S Offline
                            S Offline
                            starfish
                            schrieb am zuletzt editiert von
                            #13

                            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 Antwort Letzte Antwort
                            0
                            • HomoranH Nicht stören
                              HomoranH Nicht stören
                              Homoran
                              Global Moderator Administrators
                              schrieb am zuletzt editiert von
                              #14

                              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

                              kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                              Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                              der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                              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

                              882

                              Online

                              32.5k

                              Benutzer

                              81.6k

                              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