2016-07-12 8 views
2

Я пытаюсь использовать этот 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?

ответ

0

Похоже, вы не вызываете main().

if __name__ == '__main__': 
    main()