In Python ein Raspbian Shell command ausführen

  • Hallo an alle,

    Ich habe mir heute einen 433mhz sender für Funksteckdosen gekauft, doch jetzt möchte ich diesen auch in Python ansteuern können.
    Leider bin ich in solchen dingen nicht so erfahren in Python :D

    Der Befehl den ich in dem LXTerminal eingeben muss lautet:
    " sudo Steckdosen/schalter/3an "
    um die Steckdose anzuschalten.
    Das funktioniert soweit auch ohne Probleme, doch wie kann ich diesen Befehl jetzt in Python ausführen?

    LG und danke im voraus :thumbs1:


    PS:
    ich kann ebenfalls den längeren Befehl:
    "sudo Steckdosen/raspberry-remote/send 10010 3 1"
    benutzen, falls das von Bedeutung ist.

  • Hi und willkommen im Forum,
    der Uhrzeit geschuldet eine etwas knappere Antwort, hoffe dennoch dir damit weiterhelfen zu können, sodass du heute Nacht noch schön basteln kannst.

    https://docs.python.org/3.5/library/su…ubprocess.Popen
    Das ist was du benötigst ;;) subprocess.Popen

  • Zitat von "Hofei" pid='293157' dateline='1501282269'


    Hi und willkommen im Forum,
    der Uhrzeit geschuldet eine etwas knappere Antwort, hoffe dennoch dir damit weiterhelfen zu können, sodass du heute Nacht noch schön basteln kannst.

    https://docs.python.org/3.5/library/su…ubprocess.Popen
    Das ist was du benötigst ;;) subprocess.Popen

    Vielen dank erstmal für die Antowrt, doch leider kann ich mir nicht so viel aus der Erklärung ziehen, weil ich einfach nicht weiss wie ich das ganze anwenden muss...
    Wie genau lautet der Befehl? Bin leider echt sehr unerfahren mit dieser art von Python Programmierung :s

    LG Marvin

  • Hallo LG Marvin,


    ich habe es so gemacht vor einigen Wochen, aber mit pilight. Funktioniert seit 2 Wochen einwandfrei.
    Pilight stable version und Kernel vom Pi (jessie) (4.4.50+)

    Unschoen bei meiner Version ist dass der Ein und Aus Befehl immer eine ganze Minute gesentet wird, stoert mich aber nicht.
    Ev. haben ja die Cracks hier noch eine bessere Loesung.

    Name des python script bei mir ist Ein-Aus.py
    in /etc/rc.local folgendes eingetragen:

    /bin/Ein-Aus.py &

    exit 0


    gruss
    gwaag


    Meine config.json in pilight sieht dann so aus.


    Mit ip des pi und :5001 kannst du dann im webgui auch schalten. z.B. 192.168.1.100:5001
    oder mit der App piligth fuer andoroid geht es dann auch.

    Einmal editiert, zuletzt von gwaag (29. Juli 2017 um 10:00)

  • Zitat von "marhar" pid='293160' dateline='1501283767'


    Wie genau lautet der Befehl? Bin leider echt sehr unerfahren mit dieser art von Python Programmierung :s

    Wie viel Erfahrung der Python Programmierung liegt denn vor? Damit wir wissen, wo die Hilfe anfangen muss/soll?
    Selbst wenn du jetzt diesen einen genauen Befehl bekommst, ist dein Skript davor und danach richtig? Das Py Skript wird ja nicht nur aus dieser einen Zeile bestehen, was auch gar nicht gehen wird. Deshalb ist es wichtig zu wissen was du alles selbst schon weißt.

  • Zitat von "Hofei" pid='293189' dateline='1501324389'


    [quote="marhar" pid='293160' dateline='1501283767']


    Wie viel Erfahrung der Python Programmierung liegt denn vor? Damit wir wissen, wo die Hilfe anfangen muss/soll?
    Selbst wenn du jetzt diesen einen genauen Befehl bekommst, ist dein Skript davor und danach richtig? Das Py Skript wird ja nicht nur aus dieser einen Zeile bestehen, was auch gar nicht gehen wird. Deshalb ist es wichtig zu wissen was du alles selbst schon weißt.


    Meine Erfahrung in der Grundprogrammierung von Python ist eigentlich okay. Habe es aber nun über den " os.system("sudo Steckdosen/raspberry-remote/send 10010 3 1") "
    befehl hinbekommen. Trozdem noch mal vielen Dank :D

  • Gewöhne dir lieber von Anfang An, an, so viel wie möglich direkt/pure/nativ in der jeweiligen Sprache umzusetzen. Bedeutet: Wenn du in Python programmierst dann verzichte so gut es geht auf bash/konsolen Befehle.

    Es gibt Python Module bzw Wrapper für die 433MHz "send" Geschichte, die du bevorzugen solltest.

    gwaag führt über os.system() den bash/Konsolen Befehl "pilight-send" aus, allerdings gibt es dafür auch ein Python Module: https://github.com/DavidLP/pilight
    Eine weitere Möglichkeit wäre:

    Zitat


    Ein genialisches Python Programm zum Schalten der Steckdosen über den mit dem Pi verbundenen 433MHz Sender – geschrieben von HeikoHeiko. Gibt es bei http://pastebin.com/aRipYrZ6. Einfach das dort abgebildete Programm in eine auf dem Pi zu erzeugende Datei namens elropi.py pasten.

    Und last but not least gibt es https://github.com/lexruee/pi-switch-python bzw dort wird empfohlen das zu verwenden: https://github.com/milaq/rpi-rf

    Um das ganze übers Web zu steuern empfiehlt sich also: FAQ => Nützliche Links / Linksammlung => [Python] Webserver, Websocket und ein bisschen AJAX

  • Hallo an alle,

    ich habe das gleiche Problem wie marhar.

    Ich kann die Steckdosen mittlerweile auch über os.system steuern allerdings sagt ihr ja, dass man das nicht tun sollte um immer in der gleichen Programmiersprache zu bleiben. (Ist für mich logisch)

    Ich habe das jetzt über das elropi probiert, ich komme aber auf keinen grünen Zweig.

    Wenn ich das Programm laufen lasse bekomme ich einen Syntax fehler in Zeile 86 (mit Vermerk auf die Klammer (rot))

    if len(sys.argv) < 3:

    print "usage:sudo python %s int_device int_state (e.g. '%s 2 1' switches device 2 on)" %

    (sys.argv[0], sys.argv[0])

    sys.exit(1)

    Meine Frage ist jetzt wie ich den Fehler beheben kann und wie ich dann über dieses Programm die Steckdose an und ausschalten kann.

    Kurz zu mir. Ich arbeite mich momentan in die Materie Raspi und Programmierung ein. Ich denke mir fehlen noch ein bisschen die Grundkentnisse zu bestimmten befehlen.

    Ich komme selbst eigentlich aus der Roboterprogrammierung bin also kein blutiger Anfäger was die Programmierung angeht ;)

    Vielen Dank schonmal :)

  • Aha, merkt man nicht :fies: Welcher Fehlermeldung kommt denn? Das wäre die wichtigste Info....und....von welchen Programm reden wir eigentlich

    Wow, das ging ja schnell :)

    ich möchte das ganze über Python programmieren.

    Als Fehlermeldung bekomme ich folgende:


    print "usage:sudo python %s int_device int_state (e.g. '%s 2 1' swit

    ches device 2 on)" % \

    ^

    SyntaxError: invalid syntax

    • Offizieller Beitrag

    Ist der Zeilenumbruch auch so im Script? Dann brauchst du dich nicht wundern.

    In einer Zeile funktioniert es tadellos.

    Code
    print "usage:sudo python %s int_device int_state (e.g. '%s 2 1' switches device 2 on)" % ("bla","blub")

    Wie man Zeilenumbrüche in langen Zeilen macht,kriegst du schnell gegoogelt. Wir wollen ja nicht alles vorkauen ;)

  • Der Backslash steht in der Zeile, das ist richtig.

    Aber egal was ich damit mache, ob mit richtigem Zeilenumbruch, in zwei Zeilen, ohne Backslash, in einer Zeile.

    Nichts führt zum Erfolg :rolleyes:


    Ich habe Python 3.5.

    Aber es sollte hier doch dennoch funktionieren oder nicht?

  • Woher hast du die Codezeilen?

    Hier hat keiner Zeilen wo das vorkommt gepostet... Und somit hast du nicht das gleiche Problem, sondern nur ein ähnliches

    :motz:

    if len(sys.argv) < 3:

    print "usage:sudo python %s int_device int_state (e.g. '%s 2 1' switches device 2 on)" %

    (sys.argv[0], sys.argv[0])

    sys.exit(1)

    Entweder man schreibt das korrekter Weise so:

    Python
    if len(sys.argv) < 3:
        print "usage:sudo python %s int_device int_state (e.g. '%s 2 1' switches device 2 on)" % (sys.argv[0], sys.argv[0])
        sys.exit(1)

    Oder man schreibt das so:

    Python
    if len(sys.argv) < 3:
        print "usage:sudo python %s int_device int_state (e.g. '%s 2 1' switches device 2 on)" % \
            (sys.argv[0], sys.argv[0])
        sys.exit(1)

    Aber besser so:

    Python
    if len(sys.argv) < 3:
        print "usage:sudo python {0} int_device int_state (e.g. '{0} 2 1' switches device 2 on)" . format(sys.argv[0])
        sys.exit(1)

    Es handelt sich dabei um python2 Code, was man an der anderen Schreibweise der print's erkennt. Siehe zur Erklärung Funktion schreibt nicht in Datei

    Du musst das Script also gemäß des Shebangs auch mit python2 aber nicht python3 ausführen.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!