WLAN-Verbindung mittels Python Skript - auf Raspberry Pi

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
simonW
User
Beiträge: 6
Registriert: Freitag 10. September 2021, 11:30

Hallo zusammen,
ich habe eine Anwendung, die mittels eines Python-Skriptes Daten an einen Endpunkt sendet. Das ganze läuft auf einem Raspberry Pi 4B.
Nun hatte ich das Problem, dass es eine WLAN-Unterbrechung gab und daher die Skriptausführung abgebrochen ist. Daher möchte ich gerne im Skript überprüfen, ob eine Verbindung zum WLAN besteht und wenn nicht diese neu verbinden.
Das ganze läuft mit Python 3.7
Mit Micropython auf einem ESP32 habe ich das ganze schon einmal umgesetzt, ist ja sehr einfach

Code: Alles auswählen

wlan = network.WLAN(network.STA_IF) # create station interface
    if not wlan.active() or not wlan.isconnected():
        wlan.active(True) # activate the interface
        print('connecting to:', ssid)
        wlan.connect(ssid, password)
        while not wlan.isconnected(): #warten bis wlan an
            pass
gibs sowas in die Richtung?
Danke schon einmal :)
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich mache das über DBUS: https://github.com/deets/yocto-pi-lap-t ... plicant.py

Aber ich halte das für das falsche Vorgehen. Das System sollte die Verbindung von alleine wieder aufbauen. Du musst nur dein Skript so robust machen, dass es im Fehlerfall wieder von vorne loslegt.
simonW
User
Beiträge: 6
Registriert: Freitag 10. September 2021, 11:30

Okay, das ist ein Batzen im Vergleich zum Micropython-Code. Ja, da hast du recht und hast mich auf die Idee mit
-----
try:
xx
except:
yy
-----
gebracht. Aber leider beendet er nach dem gescheiterten Versuch die Durchführung. Kann man denn wenigstens mit einem Befehl prüfen, ob eine WLAN-Verbindung besteht? Ansonsten wäre ein Sprung im Programm hilfreich...
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Man springt nicht. Man schleift. Ein try/except tut das nicht, es sorgt nur dafür, dass eine Schleife drumrum nich abgebrochen wird.
simonW
User
Beiträge: 6
Registriert: Freitag 10. September 2021, 11:30

Ja, hab selber gemerkt, dass man Sprünge sowieso vermeiden sollte..

Im Detail geht es bei mir darum, dass ich Daten mittels POST-Request an einen Endpunkt sende. Die Daten werden zuvor aus stdin "bezogen" Das Ganze geschieht Periodisch. Leider bricht der Vorgang ab wenn das WLAN-Problem auftritt, aber auch wenn das von mir jetz implementierte "except" greift.
Stehe leider auf dem Schlauch was ich das am Besten lösen kann..
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Code: Alles auswählen

while True:
    try:
         tuwas()
    except <was-auch-immer-der-fehler-ist-den-du-bekommst>:
         time.sleep(10) # dem System Zeit geben, die Verbindung aufzubauen
simonW
User
Beiträge: 6
Registriert: Freitag 10. September 2021, 11:30

Danke dir, ich konnte das Problem inzwischen lösen. Hatte das try-except in einer falschen Konstellation eingesetzt. Nun funktioniert es!
Antworten