Hi Christian!
Das ist ja ein cooles Projekt
- Für mich natürlich auch, weil du RevPiModIO verwendest!
Und bei "liveinputs.py" ist mir aufgefallen, dass du eine Funktion gut gebrauchen kannst, die RevPiModIO2 noch nicht hat. Ich denke du willst nicht nur die Wertänderung von Eingang "I_1" in das System bringen sondern von "allen" Eingängen.
Man könnte mit der aktuellen Version (2.2.2) jetzt schon alle Eingänge mit deiner Eventfunktion versehen:
Code: Select all
# Register events to all Inputs
for device in self.revpi.device:
# Use only DIO, DI, DO, AIO Devices
if device.type == "LEFT_RIGHT":
for io in device.get_inputs():
io.reg_event(self.event_input_changed)
ABER: Ich denke es wäre noch komfortabler, wenn der Benutzer über piCtory auswählen kann, welche Eingänge überwacht werden sollen!!!
In piCtory kann man im Value-Editor ja ein Haken bei "Export" setzen. Diesen Haken verwendet RevPiModIO noch nicht. Ich habe dir
hier mal eine Testversion (2.2.3) hochgeladen, bei der die IO-Objekte um
.export erweitert sind und mit True oder False den Wert aus piCtory zurückgeben. Außerdem kann man den Funktionen .get_inputs / .get_outputs / usw. gleich den Parameter "export" mitgeben und man erhält nur Inputs, bei denen in piCtory "Export" den übergebenen Wert hat.
- Screenshot_20180818_182239.png (8.74 KiB) Viewed 14293 times
Mit der Version 2.2.3 (die du per Hand mit "dpkg -i python3-revpimodio2_2.2.3-1_all.deb" auf dem Pi installieren musst) kann dein Quellcode dann so aussehen und reagiert auf alle Inputs, bei denen "Export" in piCtory gesetzt ist
Code: Select all
def __init__(self):
self.revpi = revpimodio2.RevPiModIO(autorefresh=True)
self.revpi.core.A1 = revpimodio2.GREEN
# Handle SIGINT / SIGTERM to exit program cleanly
self.revpi.handlesignalend(self.cleanup_revpi)
# Register events to all Inputs marked with 'Export' in piCtory
for device in self.revpi.device:
# Use only IO Devices
if device.type == "LEFT_RIGHT":
for io in device.get_inputs(export=True):
# Only Inputs with set 'export' flag in piCtory
io.reg_event(
self.event_input_changed,
edge=revpimodio2.BOTH
)
Kleiner Tipp am Rande: Da du .handlesignalend(...) verwendest kannst du statt "while True:" das neue .exitsignal verwenden, dann steigt das Programm sauber aus dem Loop aus, wenn SIGINT / SIGTERM gesendet wurde:
Code: Select all
# Ohne "Wartefunktion"
while not self.revpi.exitsignal.is_set():
pass
# Mit "Wartefunktion" 0.1 Sekunde
while not self.revpi.exitsignal.wait(0.1):
pass
# Beide Varianten geben ein True zurück, wenn SIGINT / SIGTERM empfangen wurde
Bin gespannt was da noch so kommt
Gruß, Sven