Hintergrundprozess

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
sadfsdgsg
User
Beiträge: 4
Registriert: Sonntag 19. Mai 2019, 17:01

Hallo an alle,

ich bin neu hier(und bei python).
Mein erstes Projekt soll eine Heimsteuerung per Raspberry und Arduino werden.
Aktuell warte ich noch auf die Hardware, das GUI für den Raspberry habe ich aber schon fertig.
Per Touchpanel sollen Lichter (für den Anfang LEDs) an/aus geschaltet werden.
Klappt soweit auch alles ganz gut.
Nun möchte ich gerne per iPhone, genauer Siri-Kurzbefehl zusätzlich Zugriff auf die Beleuchtung.
Gedanke war, einen Hintergrundprozess laufen zu lassen, der auf vorhandensein einer Datei wartet.
Wenn diese da ist(wird per Skript über SSH erstellt) soll sie ausgelesen und der Text darin ausgewertet werden (-> z.B. Licht 1 an).
Wie kriege ich solch einen Loop mit in mein Skript integriert?
Ist meine Idee vielleicht viel zu kompliziert?

Ich freue mich auf Antworten und Meinungen,
Beste Grüße
sadfsdgsg (Ja, der Name ist Absicht :P )
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Macht man so nicht. Wie ist die GUI denn geschrieben? Mit tkinter?
sadfsdgsg
User
Beiträge: 4
Registriert: Sonntag 19. Mai 2019, 17:01

Ja habe ich per tkinter gemacht.
Ein GUI, welches mir die zukünftigen Ausgänge anzeigt und per Farbe des Knopfes anzeigt ob an oder aus.
Das Ganze ist per Variable status hinterlegt.
Habe schon überlegt das ganze per threading umzusetzen, arbeite mich da gerade rein.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Threading ist möglich. Du kannst zb eine Bottle Webanwendung schreiben, die dann HTTP Anfragen verarbeitet. Wichtig dabei: nie aus dem Thread die GUI direkt manipulieren. Dazu mit after, create_filehandler oder den verschiedenen Var-Typen (IntVar, StringVar...) arbeiten.
sadfsdgsg
User
Beiträge: 4
Registriert: Sonntag 19. Mai 2019, 17:01

Vielen Dank erstmal für die prompten Antworten!
Ich hätte aus dem Thread dann eine Funktion aus dem GUI aufgerufen, welche aktuell lediglich den Status des Schalters von aus auf an, Bzw. Anders herum setzt(später kommt dann noch der Befehl an den Arduino hinzu).
Fällt das schon unter das von dir erwähnte direkte manipulieren? Wenn ja, warum soll das nicht gemacht werden?
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@sadfsdgsg: GUIs sind in der Regel nicht thread-safe. Du darfst die GUI nur aus dem Thread heraus verändern, in dem die `mainloop()` läuft.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
sadfsdgsg
User
Beiträge: 4
Registriert: Sonntag 19. Mai 2019, 17:01

Ah Okay.
Habe nochmal ein wenig tiefer gegraben und werde das vermutlich über mehrere Programme laufen lassen.
Die Kommunikation dann wahrscheinlich per Socket.
Ein Serverprogramm, welches quasi nur fleißig liest und die Befehle an den Arduino weitergibt, das GUI, welches die Befehle per Touchdisplay entgegennimmt und an den Server sendet und dann meine dritte Lösung per Siri Kurzbefehl an den Server. Entweder per Pythonista oder indirekt per SSH.
Fuchse mich da die Woche über mal rein.
Bin ja noch neu im „Business“, hört sich das nach einer lauffähigen Geschichte an?
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Klingt mehr nach Panzertape und löst kein Problem das du jetzt nicht auch schon lösen musst. Auch deine sockets wollen irgendwie in die gui integriert werden. SSH macht auch nichts einfacher. Was triggers du denn über ssh?

Immer dran denken: beim PI gibt es da draußen unglaublichen Unfug...
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@sadfsdgsg: hast Du Dir schon Gedanken gemacht, wie Du das mit den Siri-Kurzbefehlen lösen willst? Am einfachsten ist es wahrscheinlich, dass das eine bestimmte Web-Seite öffnet, und mit HTML hat man auch gleich eine viel schönere Touch-Bedienung zusammen, als man das mit tkInter jemals könnte. Und die kann man, wenn man möchte, auch direkt vom Smartphone aus bedienen? Und mit Websockets hast Du auch gleich die direkte Rückmeldung.

Ansteuerung von Hardware, über WLAN? Da gibt es den ESP32 mit MicroPython. Spart man sich einen Raspi mit Arduino, viel Geld und Strom.
Antworten