2016-07-12 28 views
2

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?

Antwort

0

Es sieht so aus, als würden Sie main() nicht aufrufen.

if __name__ == '__main__': 
    main()