Wie erkennt ein Script, ob es auf dem RasPi läuft oder auf dem PC

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
olsvse
User
Beiträge: 8
Registriert: Dienstag 13. November 2018, 19:39

Hallo Zusammen,

Ich habe ein Script, welches normalerweise auf dem RaspberryPi als Ziel-Umgebung läuft.

Gewisse GUI-Punkte kann/möchte ich aber auch auf dem PC testen.
Ich kann jetzt 2 Scripre Pflegen. eines mit GPIO-Handling und eines ohne.

Gibt es eine Möglichkeit wie ich aus Python heraus erkennen kann wo das Script läuft und auf dem PC irgendwie die GPIO-Sachen überspringen kann.

Also in etwa so wie ich unter C eine Bedingte Kompilierung machen kann und dabei teile Ausgeblendet werden.

Oder ist die Benutzung eines 2. Scripts die bessere Lösung?

Gruß,
Oliver
Benutzeravatar
pillmuncher
User
Beiträge: 1482
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Benutze am PC eine Mocking Library. Für pigpio zB. gibt es pigpio-mock.
In specifications, Murphy's Law supersedes Ohm's.
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Auf Linux Systemen (was raspis in der Regel sind) kannst du in /etc/machine-info zum Beispiel Infos zum Deployment oder zum (physischen) Ort ablegen, die du mit Python leicht auslesen kannst. Unter Distributionen, die systemd verwenden, bearbeitet man die Datei mit hostnamectl. Die Infos muss man per Hand setzen, was etwas unkomfortabel erscheint, meiner Meinung nach aber die sicherste und praktikabelste Lösung ist.

Man kann auch versuchen, das über den Kernel (os.uname) oder die Architektur (s. 'platform' in der Standardlibrary) herauszufinden, aber ganz wasserdicht ist das nicht und umfasst ggf. auch mehr als nur den raspi. Wenn Fremdbibliotheken in Frage kommen, kannst du auch mal einen der Wrapper für 'dmidecode' ausprobieren und damit (unter Linux) verschiedene Hardware Infos auslesen (z.B. das Modell des Motherboards).
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@olsvse: Du willst gar nicht wissen, ob das Programm auf einem RaspberryPi läuft oder nicht, sondern nur, ob die Bibliothek zum Zugriff auf GPIO existiert, die Du benutzen willst. Wenn nicht, ersetzt Du die Funktionen, die GPIO einsetzen durch Alternativen. Daher sollten Hardwarezugriffe klar von der GUI getrennt sein, dann sollte das auch kein großes Problem sein.
olsvse
User
Beiträge: 8
Registriert: Dienstag 13. November 2018, 19:39

Sirius3 hat geschrieben: Samstag 15. Dezember 2018, 22:09 @olsvse: Du willst gar nicht wissen, ob das Programm auf einem RaspberryPi läuft oder nicht, sondern nur, ob die Bibliothek zum Zugriff auf GPIO existiert, die Du benutzen willst. Wenn nicht, ersetzt Du die Funktionen, die GPIO einsetzen durch Alternativen. Daher sollten Hardwarezugriffe klar von der GUI getrennt sein, dann sollte das auch kein großes Problem sein.
Danke!

eigentlich sind die Hardware-Zugiffe das Problem.

Wie trenne ich da am besten die Hardware-Zugriffe von der GUI?
Momentan ist es ja so, dass ich auf der GUI einen Button anklicke. Dort wird ein neuer thread gestartet.
Aus deisem Thread starte ich einen weiteren Thread welcher die GPIO ausliest.

Sollte ich jetzt diesen Thread in eine eigene Datei auslagern?

Gruß,
Oliver
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

das einfachste ist, den Weg über ein Mock-Modul zu gehen. Das gibt's auch für gpiozero, musst du mal in der Doku schauen. Damit kannst du auch auf Plattformen coden, die nicht wie der Raspi GPIO Pins haben. Bzw. Code testen etc.
Welches Modul nutzt du für den GPIO Zugriff?
Momentan ist es ja so, dass ich auf der GUI einen Button anklicke. Dort wird ein neuer thread gestartet.
Aus deisem Thread starte ich einen weiteren Thread welcher die GPIO ausliest.
Das hört sich zu kompliziert bis falsch an.

Gruß, noisefloor
Antworten