Suchen

Registrieren

Vielen Dank für Deine Anmeldung! Du bekommst nun eine Email mit einem Aktivierungslink.

username already taken
Du hast bereits einen Account? .

Login

Passwort vergessen?
Du hast noch keinen Account? Registrieren um den UI-Designer und das Forum zu benutzen oder eigene Projekte anzulegen.
Log dich ein um Beiträge schreiben zu können!



switch ON - Python programmierung

#1 Juni 13, 2019 16:49:58 by PJanow4711

switch ON - Python programmierung

Hallo Zusammen,

ich benutze die Net-Io App seit einigen Jahren für meine Robotersteuerung via Raspi und Python. Alles funktioniert super und ich bin sehr zufrieden!

Wollte eine neue Funktion implementieren und stehe momentan etwas auf dem Schlauch. Vielleicht habt Ihr mal eine Idee … danke!

Wenn ich ein switch auf ON stelle dann wird in dem Python Programm dieses Event nur einmal getriggert. Das funktioniert wunderbar aber ich würde z.B. gerne eine Variable X so lange hochzählen bis der switch wieder auf OFF geht.

Parallel sollten aber alle anderen Tasten weiter funktionsfähig bleiben. Habe schon so etwas versucht in der Hauptschleife mit booleschen Variablen aber das hat auch nicht richtig funktioniert.

Hier wird die Boolesche Variable gesetzt:
        if line == 'switchOn':
global switchOn
self.send('off\n')
print 'Switch Ein'
switchOn = True

elif line == 'switchOff:
global switchOn
self.send('off\n')
print 'Switch Aus'
switchOn = False
Das ist die Hauptschleife:
if __name__ == "__main__":
pollster = EPoll()
pollster.register(Server(("",54321),pollster), select.EPOLLIN)

while True:
evt = pollster.poll()
for obj, flags in evt:
readwrite(obj, flags)

# switchOn ist eine Globale Variable die gesetzt wird, wenn der switch auf ON steht.
# diese if Abfrage müsste eigentlich ständig durchlaufen werden ... aber es passiert immer nur
# einmal wenn eine NetIo Taste betätigt wird

if switchOn:
x = x + 1
Hat jemand vielleicht eine Idee?

Viele Grüße und danke,
Peter

Editiert PJanow4711 (Juni 13, 2019 20:32:42)

#2 Juni 15, 2019 12:14:33 by mcgiver0510

switch ON - Python programmierung

Hallo Peter,

das Problem steckt im Detail…

…der TCP-Client arbeitet blockierend ( blocking mode ) - das bedeutet - er wartet ständig auf Daten von NetIO…

…erhält er Daten - werden sie verarbeitet - danach wartet er wieder…

…dieses hast du ja oben bereits beschrieben…

… zuständig dafür ist diese Zeile :
receivedData = self.recv(1024) ##### hier kommen die Daten von NetIO an

Es gibt mehrere Lösungen…

…erstmal die Einfachste :

…du benutzt ein verstecktes Label…( einfach die Propertys so anpassen - das man es nicht sieht )

…dieses Label muss nun ein “Interval” und ein “SendAttribut” erhalten…

…dein “If/elif”-Konstruct muss nun so erweitert werden - das du das “SendAttribut” von dem Label auswerten kannst…


zum Beispiel :

NetIO - Label :

sends    : SwitchCounter
interval : 1000 <<<- 1000ms - kann auch kleiner gewählt werden - aber nicht kleiner 200

dein Client :


elif line == 'SwitchCounter':
--- hier dein Code -----

Dieses würde ich an deiner Stelle erstmal probieren - wenn das nicht zu einer Lösung beiträgt wird es schwieriger…

…dann musst du dich mit Threads auseinandersetzen…

Edit :

ja - super…

lg
kalli





Editiert mcgiver0510 (Juni 18, 2019 09:02:15)

#3 Juni 15, 2019 16:48:17 by PJanow4711

switch ON - Python programmierung

Hallo Kalli,

Danke, das hat super funktioniert!

LG Peter

Editiert PJanow4711 (Juni 18, 2019 07:52:48)