Я пытаюсь использовать этот iwlist сканирование разборе скрипт для включения GPIO (с прикрепленным LED), что указывает на беспроводное соединение:Python скрипт, чтобы постоянно проверять качество связи WLAN и выходом на 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()
Я знаю, что у него отсутствуют некоторые вещи, такие как чистый побег и GPIO.cleanup(), но главная проблема, с которой я столкнулся, даже после нескольких часов работы в Google и экспериментирование, заключается в том, что я могу подсвечивать светодиод один раз, но я хочу запустите этот скрипт в фоновом режиме, проверяя соединение каждые 20-30 секунд. Неужели я об этом совершенно неправильно? Есть ли более простой способ получить качество сигнала Wi-Fi и вернуть INT, который можно использовать для управления GPIO?