Hallo zusammen,
ich bin an den ersten Gehversuchen von sh.py. Ist echt was tolles was ihr hier auf die Beine gestellt habt! Da ich Python-Neuling bin habe ich da wohl eine einfache Frage an die Experten.
Ich habe eine Logik, welche die Jalousien fahren soll (Automatik auf dem Jalousieaktor). d.H. Jalousie unten, Lamellen geöffnet. Ich möchte nun zudem, wenn das Balkonfenster geöffnet ist, die Jalousie des Balkons nicht runter fährt. Dies löse ich mittels einer Sperre auf der Jalousie, welche ich dann wieder löse. Soweit so gut. Ich würde nun gerne die Methode "run" aufrufen. In dieser Run-Methode sollte wiederrum eine Methode aufgerufen werden. Dabei kommt es aber zu einer Exception:
Logic: Automatikjalousie, File: automatikjalousie.py, Line: 26, Method: run, Exception: global name 'setSperre' is not defined
Fragen:
Wie kann kann ich eine Methode innerhalb einer Methode aufrufen?
Gibt es eine elegantere Variante als mit Threads zu arbeiten?
Sind sh und logger nicht "Global" verfügbar, warum muss ich diese übergeben?
Kann ich einer Methode auch ein Item übergeben, welchem in dann einen Wert setzen kann?
Hoffe jemand kann mir da weiterhelfen....
Danke und Gruss Buffi
ich bin an den ersten Gehversuchen von sh.py. Ist echt was tolles was ihr hier auf die Beine gestellt habt! Da ich Python-Neuling bin habe ich da wohl eine einfache Frage an die Experten.
Ich habe eine Logik, welche die Jalousien fahren soll (Automatik auf dem Jalousieaktor). d.H. Jalousie unten, Lamellen geöffnet. Ich möchte nun zudem, wenn das Balkonfenster geöffnet ist, die Jalousie des Balkons nicht runter fährt. Dies löse ich mittels einer Sperre auf der Jalousie, welche ich dann wieder löse. Soweit so gut. Ich würde nun gerne die Methode "run" aufrufen. In dieser Run-Methode sollte wiederrum eine Methode aufgerufen werden. Dabei kommt es aber zu einer Exception:
Logic: Automatikjalousie, File: automatikjalousie.py, Line: 26, Method: run, Exception: global name 'setSperre' is not defined
Fragen:
Wie kann kann ich eine Methode innerhalb einer Methode aufrufen?
Gibt es eine elegantere Variante als mit Threads zu arbeiten?
Sind sh und logger nicht "Global" verfügbar, warum muss ich diese übergeben?
Kann ich einer Methode auch ein Item übergeben, welchem in dann einen Wert setzen kann?
Hoffe jemand kann mir da weiterhelfen....
Danke und Gruss Buffi
Code:
import datetime import threading def setSperre(sh, logger): logger.info("Auto.Jal: release Sperre Wohnen") #doit if sh.reedkontakt.wohnen() == False and sh.presenz.anwesend(): threading.Event().wait(2) logger.info("Auto.Jal: setze Sperre Wohnen") #doit threading.Event().wait(4) logger.info("Auto.Jal: release Sperre Wohnen") #doit def autoJalEG(sh, logger): threading.Event().wait(4) logger.info("Auto.Jal: fahre EG") #doit def run(sh, logger, doSperre): if doSperre: threading.Thread(target=setSperre, args=(sh, logger)).start() threading.Thread(target=autoJalEG, args=(sh, logger)).start() if sh.zeit.morgendaemmerung(): pass if sh.zeit.morgen(): pass if sh.zeit.tag(): pass if sh.zeit.abenddaemmerung(): run(sh, logger, 1) if sh.zeit.abend(): run(sh, logger, 1) if sh.zeit.vormitternacht(): run(sh, logger, 1) if sh.zeit.nacht(): run(sh, logger, 1)
Kommentar