Ich versuche, diese iwlist Scan zu verwenden Skript auf einem GPIO (mit angeschlossenem LED), um das Parsen, was auf eine drahtlose Verbindung:Python-Skript kontinuierlich überprüft die Qualität der WLAN-Verbindung und die Ausgabe an GPIO
#!/usr/bin/env python
import sys
import subprocess
import RPi.GPIO as GPIO
import time
interface = "wlan0"
ledPin = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(ledPin, GPIO.OUT)
def get_quality(cell):
quality = matching_line(cell,"Quality=").split()[0].split('/')
# This now returns a number
return int(round(float(quality[0])/float(quality[1]) * 100))
def matching_line(lines, keyword):
"""Returns the first matching line in a list of lines. See match()"""
for line in lines:
matching=match(line,keyword)
if matching!=None:
return matching
return None
def match(line,keyword):
"""If the first part of line (modulo blanks) matches keyword,
returns the end of that line. Otherwise returns None"""
line=line.lstrip()
length=len(keyword)
if line[:length] == keyword:
return line[length:]
else:
return None
def main():
cells=[[]]
parsed_cells=[]
proc = subprocess.Popen(["iwlist", interface, "scan"],stdout=subprocess.PIPE, universal_newlines=True)
out, err = proc.communicate()
for line in out.split("\n"):
cell_line = match(line,"Cell ")
if cell_line != None:
cells.append([])
line = cell_line[-27:]
cells[-1].append(line.rstrip())
cells=cells[1:]
for cell in cells:
# get_quality now returns an integer
qual = get_quality(cell)
if qual > 65:
GPIO.output(ledPin, GPIO.HIGH)
else:
GPIO.output(ledPin, GPIO.LOW)
main()
Ich weiß, dass es einige Dinge wie saubere Flucht und GPIO.cleanup() fehlt, aber das Hauptproblem, das ich habe, auch nach Stunden und Stunden ein Google und Experimentieren, ist, dass ich die LED einmal zum Leuchten bringen kann, aber ich möchte Führen Sie dieses Skript im Hintergrund aus und überprüfen Sie die Verbindung alle 20-30 Sekunden. Gehe ich das völlig falsch? Gibt es eine einfachere Methode, um die WLAN-Signalqualität abzurufen und eine INT zurückzugeben, mit der GPIO manipuliert werden kann?