I want to make things more elegant. When the two APs detect that the gateway is down, they will turn off their wifi as well, and turn it on when the gateway is online again. Fortunately, the two APs have enough ROM for python. So I need not mess around with shell scripts.
Below is the python code. Save it on the router and add one line in crontab to run it every few minutes.
BTW, "wifi" is a greate command. It returns json format.
BTW, "wifi" is a greate command. It returns json format.
#! /usr/bin/python import subprocess import socket, sys from json import JSONDecoder import time SERVER_IP = "192.168.1.1" SERVER_PORT = 80 def turnon(devname): subprocess.call(["wifi", "up", devname]) def turnoff(devname): subprocess.call(["wifi", "down", devname]) def is_on(devname): ret = subprocess.check_output(["wifi", "status"]) status = JSONDecoder().decode(ret) return status[devname]["up"] def is_connected(): for i in range(5): try: ss = socket.create_connection((SERVER_IP, SERVER_PORT)) ss.close() return True except: pass return False online = is_connected() wifi_on = is_on("ra0") heading = " ".join((time.strftime("[%Y-%m-%d %H:%M:%S]"), str(online), str(wifi_on))) sys.stderr.write(heading+'\n') if online == wifi_on: pass if online and not wifi_on: turnon("ra0") print heading, "ON" elif not online and wifi_on: turnoff("ra0") print heading, "OFF"
No comments:
Post a Comment