Skip to content

Commit bd6bcac

Browse files
committed
wip #40
1 parent 43e18d4 commit bd6bcac

File tree

2 files changed

+44
-23
lines changed

2 files changed

+44
-23
lines changed

main.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,11 @@ def handle_wifi():
8989
client_params = " \"" + ssid + "\" \"" + psk + "\"" if ssid != "" and psk != "" else ""
9090
logging.info(client_params)
9191
os.system("sudo python wifi.py updatecfg " + mode + client_params)
92+
os.system("sudo reboot")
9293
if mode == "ap":
9394
return "http://coder.bot:8080";
9495
else:
95-
return "http://coderbotsrv.appspot.com/"
96+
return "http://coderbot.locali:8080"
9697

9798
@app.route("/update", methods=["GET"])
9899
def handle_update():

wifi.py

100755100644
Lines changed: 42 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,11 @@
1111
import struct
1212
import json
1313

14-
1514
class WiFi():
1615

1716
CONFIG_FILE = "/etc/coderbot_wifi.conf"
18-
adapters = ["RT5370", "RTL8188CUS"]
19-
hostapds = {"RT5370": "hostapd.RT5370", "RTL8188CUS": "hostapd.RTL8188"}
17+
adapters = ["default", "RT5370", "RTL8188CUS"]
18+
hostapds = {"default": "hostapd", "RT5370": "hostapd.RT5370", "RTL8188CUS": "hostapd.RTL8188"}
2019
web_url = "http://my.coderbot.org/coderbot/v1.0/bot/new"
2120
wifi_client_conf_file = "/etc/wpa_supplicant/wpa_supplicant.conf"
2221
_config = {}
@@ -51,12 +50,22 @@ def start_hostapd(cls):
5150
hostapd_type = cls.hostapds.get(adapter)
5251
try:
5352
print "starting hostapd..."
54-
out = os.system("/usr/sbin/" + hostapd_type + " /etc/hostapd/" + hostapd_type + " -B")
53+
out = os.system("/usr/sbin/" + hostapd_type + " -B /etc/hostapd/" + hostapd_type + ".conf")
5554
print "hostapd out: " + str(out)
5655

5756
except subprocess.CalledProcessError as e:
5857
print e.output
5958

59+
@classmethod
60+
def start_dnsmasq(cls):
61+
try:
62+
print "starting dnsmasq..."
63+
out = os.system("systemctl start dnsmasq")
64+
print "dnsmasq out: " + str(out)
65+
66+
except subprocess.CalledProcessError as e:
67+
print e.output
68+
6069
@classmethod
6170
def stop_hostapd(cls):
6271
try:
@@ -66,6 +75,15 @@ def stop_hostapd(cls):
6675
except subprocess.CalledProcessError as e:
6776
print e.output
6877

78+
@classmethod
79+
def stop_dnsmasq(cls):
80+
try:
81+
print "stopping dnsmasq..."
82+
out = subprocess.check_output(["systemctl", "stop", "dnsmasq"])
83+
print "dnsmasq out: " + str(out)
84+
except subprocess.CalledProcessError as e:
85+
print e.output
86+
6987
@classmethod
7088
def get_ipaddr(cls, ifname):
7189
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
@@ -105,37 +123,48 @@ def set_client_params(cls, wssid, wpsk):
105123
f.write(" psk=\""+wpsk+"\"\n")
106124
f.write("}")
107125

126+
@classmethod
127+
def set_ap_params(cls, wssid, wpsk):
128+
adapter = cls.get_adapter_type()
129+
os.system("sudo sed -i s/ssid=.*$/ssid=" + wssid + "/ /etc/hostapd/" + cls.hostapds.get(adapter) + ".conf")
130+
if wpsk:
131+
os.system("sudo sed -i s/wpa_passphrase=.*$/wpa_passphrase=" + wpsk + "/ /etc/hostapd/" + cls.hostapds.get(adapter) + ".conf")
132+
108133
@classmethod
109134
def set_start_as_client(cls):
110-
shutil.copy("/etc/network/interfaces_cli", "/etc/network/interfaces")
111135
cls._config["wifi_mode"] = "client"
112136
cls.save_config()
113137

114138
@classmethod
115139
def start_as_client(cls):
140+
cls.stop_dnsmasq()
116141
cls.stop_hostapd()
117142
try:
118143
time.sleep(1.0)
119-
out = subprocess.check_output(["ifdown", "--force", "wlan0"])
120-
out = subprocess.check_output(["ifup", "wlan0"])
144+
out = os.system("wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf > /dev/null 2>&1")
145+
out += os.system("dhclient -1 wlan0")
146+
print out
121147
cls.register_ipaddr(cls.get_config().get('bot_name', 'CoderBot'), cls.get_ipaddr("wlan0"))
122-
#print "registered bot, ip: " + str(cls.get_ipaddr("wlan0") + " name: " + cls.get_config().get('bot_name', 'CoderBot'))
148+
print "registered bot, ip: " + str(cls.get_ipaddr("wlan0") + " name: " + cls.get_config().get('bot_name', 'CoderBot'))
123149
except subprocess.CalledProcessError as e:
124150
print e.output
125151
raise
126152

127153
@classmethod
128154
def set_start_as_ap(cls):
129-
shutil.copy("/etc/network/interfaces_ap", "/etc/network/interfaces")
130155
cls._config["wifi_mode"] = "ap"
131156
cls.save_config()
132157

133158
@classmethod
134159
def start_as_ap(cls):
135160
time.sleep(1.0)
136-
out = subprocess.check_output(["ifdown", "--force", "wlan0"])
137-
out = subprocess.check_output(["ifup", "wlan0"])
161+
out = subprocess.check_output(["ip", "link", "set", "dev", "wlan0", "down"])
162+
out += subprocess.check_output(["ip", "a", "add", "10.0.0.1/24", "dev", "wlan0"])
163+
out += subprocess.check_output(["ip", "link", "set", "dev", "wlan0", "up"])
164+
out += subprocess.check_output(["ifconfig"])
165+
print out
138166
cls.start_hostapd()
167+
cls.start_dnsmasq()
139168

140169
@classmethod
141170
def start_service(cls):
@@ -156,24 +185,15 @@ def main():
156185
if len(sys.argv) > 2 and sys.argv[1] == "updatecfg":
157186
if len(sys.argv) > 2 and sys.argv[2] == "ap":
158187
w.set_start_as_ap()
159-
#w.start_as_ap()
188+
if len(sys.argv) > 4:
189+
w.set_ap_params(sys.argv[3], sys.argv[4])
160190
elif len(sys.argv) > 2 and sys.argv[2] == "client":
161191
if len(sys.argv) > 3:
162192
w.set_client_params(sys.argv[3], sys.argv[4])
163193
w.set_start_as_client()
164-
"""
165-
try:
166-
w.start_as_client()
167-
except:
168-
print "Unable to register ip, revert to ap mode"
169-
w.start_as_ap()
170-
"""
171194
elif len(sys.argv) > 3 and sys.argv[2] == "bot_name":
172195
WiFi.get_config()['bot_name'] = sys.argv[3]
173196
WiFi.save_config()
174-
elif len(sys.argv) > 1 and sys.argv[1] == "register":
175-
print "registering: "+ str(w.get_ipaddr("wlan0"))
176-
w.register_ipaddr(w.get_config().get('bot_name', 'CoderBot'), w.get_ipaddr("wlan0"))
177197
else:
178198
w.start_service()
179199

0 commit comments

Comments
 (0)