Programm in Python

  • Hallo,
    ich möchte für mein Gewächshaus die Lüftung über ein Programm in Python steuern.
    Die Hardware (DHT22, Ausgänge über 8-fach Relay für Motoren und Wendepolschalter,
    Eingänge über Optokoppler) habe ich in kleinen Programmen mit Erfolg getestet.
    Bei der eigentlichen Programmierung (siehe unten) scheitere ich schon beim Definieren der Ausgänge
    in Zeile 48 GPIO.setup(wps2, GPIO.OUT) mit der Meldung: SyntaxError: invalid syntax
    Wenn ich diese Zeile mit einem # auskommentiere erschein die selbe Fehlermeldung, nur eben
    in Zeile 49 GPIO.setup(mot1, GPIO.OUT).
    Kann mir bitte jemand einen Rat geben.
    Vielen Dank.

    #!/usr/bin/python
    # coding=utf-8
    import RPi.GPIO as GPIO
    import time, sys

    # Pin-Nummern verwenden (nicht GPIO-Nummern!)
    GPIO.setmode(GPIO.BOARD)

    # Pin-Nr. den Variablen zuweisen
    # über Relay 1 24V schalten
    v24 = 38
    # mit Relay 2 und Relay 3 einen Wendepolschalter realisieren
    wps1 = 40
    wps2 = 15
    # mit Relay 4, 5 und 6 die Motoren schalten
    mot1 = 16
    mot2 = 18
    mot3 = 22
    # über Kippschalter und Relay 8 die Beleuchtung im Gewächshaus schalten
    kipp = 7
    licht = 13
    # manuelle oder automatische Steuerung des Gewächshauses
    man = 26
    auto = 24
    # rechte oder linke Fensterreihe oder Lamellentür ansprechen
    frlinks = 21
    frrechts = 19
    tuer = 23
    # Reed-Kontakt linke Fensterreihe zu
    reedlzu = 32
    # Reed-Kontakt linke Fensterreihe bei automatischem Betrieb bis Mitte auf
    # bzw. bei manuellem Betrieb und drücken des Tasters Fenster auf
    reedtasterlinks = 33
    # Reed-Kontakt linke Fensterreihe ganz weit auf
    reedlmaxauf = 8
    # Reed-Kontakt rechte Fensterreihe zu
    reedrzu = 36
    # Reed-Kontakt rechte Fensterreihe bei automatischem Betrieb bis Mitte auf
    # bzw. bei manuellem Betrieb und drücken des Tasters Fenster auf
    reedtasterrechts = 11
    # Reed-Kontakt rechte Fensterreihe ganz weit auf
    reedrmaxauf = 12


    # GPIO x als Ausgang setzen
    GPIO.setup(v24, GPIO.OUT)
    GPIO.setup(wps1, GPIO.OUT
    GPIO.setup(wps2, GPIO.OUT)
    GPIO.setup(mot1, GPIO.OUT)
    GPIO.setup(mot2, GPIO.OUT)
    PIO.setup(mot3, GPIO.OUT)
    GPIO.setup(licht, GPIO.OUT)

    # GPIO x als Eingang setzen
    GPIO.setup(kipp, GPIO.IN)
    GPIO.setup(man, GPIO.IN)
    GPIO.setup(auto, GPIO.IN)
    GPIO.setup(frlinks, GPIO.IN)
    GPIO.setup(frrechts, GPIO.IN)
    GPIO.setup(tuer, GPIO.IN)
    GPIO.setup(reedlzu, GPIO.IN)
    GPIO.setup(reedtasterlinks, GPIO.IN)
    GPIO.setup(reedlmaxauf, GPIO.IN)
    GPIO.setup(reedrzu, GPIO.IN)
    GPIO.setup(reedtasterrechts, GPIO.IN)
    GPIO.setup(reedrmaxauf, GPIO.IN)

    # Relays in Grundstellung
    GPIO.output(v24, 0)
    GPIO.output(wps1, 0)
    GPIO.output(wps2, 0)
    GPIO.output(mot1, 0)
    GPIO.output(mot2, 0)
    GPIO.output(mot3, 0)
    GPIO.output(licht, 0)

    # Variablen definieren
    # Wendepolschalter in Richtung auf = 1 / in Richtung zu = 0
    wpsaufzu = 0

    # Hauptprogramm
    # Schleife über alles
    while TRUE:
    # feststellen, ob automatische oder manuelle Steuerung
    input = GPIO.input(man)
    while input == 1: # manuelle Steuerung
    inlinks = GPIO.input(frlinks)
    inrechts = GPIO.input(frrechts)
    intuer = GPIO.input(tuer)
    if inlinks == 1: # Schalter auf linke Fensterreihe gestellt
    intaster = 1


    # Motor auswählen und 10 Sekunden laufen lassen
    # GPIO.output(mot1, 1)
    # time.sleep(1)
    # GPIO.output(v24, 1)
    # time.sleep(10)

    # Motor und Strom abstellen
    # GPIO.output(v24, 0)
    # GPIO.output(mot1, 0)

    # alle Ein- und Ausgänge zurücksetzen

    GPIO.cleanup()

  • meigrafd hat natürlich recht, in dem Fall sieht man's aber auch so ganz gut: Du hast in der Zeile davor vergessen, die Klammer zu schließen. Ist generell ein guter Tip bei solchen "mitwandernden" Fehlern, sich anzuschauen, was jeweils direkt davor steht.

  • Wenn ihr längeren Text, also zum Beispiel Inhalte von Log- oder Konfigurations- Dateien, posten wollt dann verwendet bitte auch einen CODE Block.
    Wenn ihr Scripte zeigen wollt ist ebenfalls ein CODE oder PHP Block sehr wichtig, da innerhalb dessen die Formatieren, also Einrückungen, erhalten bleiben und das für Sprachen wie Python extrem wichtig ist...


    Ganz unten in jedem Thread ist die "Schnellantwort". Da klickst du rechts unten auf "Beitragsvorschau" und gelangst somit zum vollständigen Beitrags-Editor. Da gibt es nun über dem Textfeld eine Toolsbar mit zB B für bold oder I für kursiven Text usw... Hällst du die Maus über einem Tool erscheint auch eine kurze Beschreibung.
    Ganz rechts in dieser Toolsbar findest du "Code" und daneben "PHP". Das sind besagte CODE / PHP Blöcke um allgemein Codezeilen hier im Forum zu posten - das sind sog. BBCodes: https://docs.mybb.com/1.6/MyCode/

    Leider verschluckt das Forum im 'vollständigen Beitrags-Editor' manche Einrückungen/Leerzeichen, aber solange man nicht in den 'Vollständigen Editor' wechselt, oder die Vorschau nutzt, bleiben die Einrückungen erhalten... Das Problem hab ich auch schon ps915 mitgeteilt aber kann er nicht ändern da das am besagten Editor liegt - bearbeitet man seine Beiträge direkt im Thread (Inlinebearbeitung) bleiben die Einrückungen auch erhalten.

    [ code] blabla [/code]
    [ php] blabla [/php]
    (ohne Leerzeichen zwischen "[" und "code" bzw "[" und "php")

    Ein PHP Block unterscheidet sich nur dadurch das ein sog. Syntax-Highlight verwendet wird, also gewisse Sachen farblich hervorgehoben werden.

    Formatierungen, Farben oder ähnliches, also sowas wie [ b] usw (BB-Codes) funktionieren in diesen Blöcken nicht!


    Da diese Code-Blöcke aber leider weder Zeilennummern anzeigen, noch mehr Text als 5 Zeilen oder so sichtbar anzeigen (man kann aber runter scrollen), nutze ich mittlerweile lieber http://www.codepad.org und gebe hier im Forum dann einfach nur den Link zu meinem paste an:
    Links die Sprache auswählen, unten "[x]Run code" abwählen -> [ ]Run code. Und dann einfach deinen Code da rein copy&pasten und unten rechts auf "Submit" klicken.
    Die neu entstehende URL aus deiner Adressleiste kopieren und hier in deinen Beitrag einfügen.

    Weitere Seiten wie codepad.org:
    http://paste.debian.net
    http://slexy.org
    http://pastebin.com
    http://cxg.de


    Geheimtipp für Python Code: http://www.codeskulptor.org


    Fotos vom Bildschirm: https://www.forum-raspberrypi.de/Thread-sd-kart…35663#pid235663

    Zitieren: Zitieren im Forum (sowie Beitrag#3 und Beitrag#5 aus dem Thread dort)


    Es ist halt deshalb wichtig das es in CODE oder PHP Blöcken gepostet wird weil dann die Formatierung erhalten bleibt - also mehr als ein Leerzeichen, der Abstand zwischen den Buchstaben/Zahlen. Nur so lässt sich das angezeigte besser lesen/deuten.
    Mit Formatierung kriegt ihr es auch auf dem Pi in der Konsole angezeigt aber wenn ihr sowas ohne CODE Block postet geht die Formatierung verloren.

    Ein bekanntes Problem hier im Forum ist leider, dass Einrückungen beim betrachten der "Vorschau" oder beim Wechsel von der Schnellantwort zum Editor, verloren gehen. Dann am besten unten rechts auf "Bearbeiten" und dann auf "Inlinebearbeitung" gehen, dann bleiben Einrückungen erhalten.

Jetzt mitmachen!

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