Wifi Status Abfragen

  • Hallo,

    und zwar möchte ich eine Funktion nur aufrufen wenn sich der Raspi in einem Netzwerk aber ohne Internet befindet.

    Gibt's eine einfache Möglichkeit im Python Script um die Verbindung zu testen? Ich denke da an eine if-bedingung, welche bei Verbindung die eine Funktion aufruft und ansonsten eine andere... oder denke ich zu Kompliziert?

    Vielen Dank:/

  • Gibt's eine einfache Möglichkeit ...

    Du könntest z. B. auf den Rückgabewert eines Pings auf eine "zuverlässige" IP-Adresse im Internet, prüfen.

    Z. B.:

    Code
    ping -c 2 -q 1.1.1.1 > /dev/null 2>&1; echo $?

    (oder hleichwertig).

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p6 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

    • Offizieller Beitrag

    Hallo unikitty,

    auf die Schnelle... ;)

  • Python
    def online_test():
        ip = call("ping -c 1 -w 1 1.1.1.1 >/dev/null", shell=True)
        if ip==0:
            print ("online - Die IP wurde erkannt")
        else:
            print ("OFFLINE - IP NICHT erkannt")

    Danke für die schnelle Antwort aber bei mir gibt es immer das gleiche aus, egal ob verbunden oder nicht:/

    Das Problem ist, dass ich zwar in einem WLAN Netz verbunden bin, aber in diesem Netz keine Internetverbindung besteht.

  • Nein ich habe nie Internetverbindung, der Raspi soll nur checken ob er im Netzwerk eingewählt ist oder nicht.

  • der Raspi soll nur checken ob er im Netzwerk eingewählt ist oder nicht.

    Ausgabe von iwconfig auf "associated" prüfen.

    LANG=C iwconfig wlan0 | grep Not-Associated  && echo "nicht verbunden!"

    Wenn du nichts zu sagen hast, sag einfach nichts.

    Einmal editiert, zuletzt von llutz (27. Januar 2019 um 18:16)

  • @unikitty,

    also ich habe es so gemacht und das funktioniert einwandfrei.

    Alle 2 min. pinge ich die gewuenschte ip adresse in meinem Heimnetzwerk.

    Ist ping ok passiert nichts, ist ping nicht ok, schickt es mir sogar eine e-mail.

    scrip fuer mail auch angehaengt.

    gruss

    gwaag

    Edit: Einrueckungen richtig gestellt.

    Einmal editiert, zuletzt von gwaag (27. Januar 2019 um 20:15)

  • Zitat

    Dann zeige mal bitte die Ausgabe von route -n und dazu Dein Script!

    pi@raspberrypi:~ $ route -n

    Kernel IP routing table

    Destination Gateway Genmask Flags Metric Ref Use Iface

    0.0.0.0 10.0.0.138 0.0.0.0 UG 202 0 0 eth0

    0.0.0.0 10.5.5.9 0.0.0.0 UG 303 0 0 wlan0

    10.0.0.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0

    10.5.5.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0

  • Zitat

    Das ist nicht Dein Script! Das ist abgekupfert von der (:stumm:) Vorlage von gwaag . :shy:

    ich habe schon alle Vorlagen probiert, aber keine funktioniert...

  • Also ich habe eben folgendes getestet:

    Python
    import shlex
    from subprocess import call, DEVNULL
    
    ROUTER_IP = "192.168.0.1"
    PING_ROUTER_CMD = shlex.split("/bin/ping -c 1 {0}".format(ROUTER_IP))
    
    if call(PING_ROUTER_CMD, stdout=DEVNULL, stderr=DEVNULL) == 0:
        print("Router ping successful")
    else:
        print("Router ping failed")

    ...und es funktioniert, wenn ich meinen PC kurz (nicht unbedingt physisch) vom Router trenne. Das ganze klappt auch manuell im Terminal mit dem Aufruf von ping, in $? ist der Return code des letzten Aufrufs gespeichert:

    Zur Info: die Parameter stdout und stderr:

    Python
    call(PING_ROUTER_CMD, stdout=DEVNULL, stderr=DEVNULL)

    sind eine pythonischere Art für die Umleitung nach /dev/null:

    call("ping -c 1 -w 1 1.1.1.1 >/dev/null", shell=True)

    Bitte probiere obigen Code aus, einmal verbunden und einmal nicht verbunden. Die IP-Adresse musst du natürlich anpassen. Dann poste die exakte Ausgabe - "ich habe schon alle Vorlagen probiert, aber keine funktioniert..." bringt uns nicht weiter.

  • ich habe schon alle Vorlagen probiert, aber keine funktioniert...

    Evtl. willst Du eine Abfrage betr. die WiFi-Verbindung, die nicht von der zugewiesenen IP-Adresse abhängig ist.

    Das wäre dann z. B. mit iw möglich:

    Code
    :~$ iw dev wlan0 link | grep -i connected
    Connected to c0:25:06:##:##:## (on wlan0)
    Code
    :~$ iw dev wlan0 link | grep -iq connected; echo $?
    0

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p6 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!