今回は、ここまで作成してきたサンプルをもとに
WIFIの設定をブラウザからできるようにしてみます。
CUIベースのラズベリーパイにおいて、WIFIの設定は
前回記録した情報の表示ができなかったり、
設定したWIFIは保存毎に追加されるので、
間違えた場合でも、設定がのこってどんどん増えていきます。
こんな感じで、お世辞にも簡単とは言えません。
WIFIの設定ファイルの場所ですが、
/etc/wpa_supplicant/wpa_supplicant.conf
に接続設定が書かれています。
そこで、このファイルを読み書きすれば、WIFIの設定ができそうです。
また、ほかのネットワーク設定も存在する場合、
ファイル内をクリアして上書きすると、既存の情報が
消えてしまうので、前回の変えた情報を控えておいて、
該当する箇所を書き換えるように作ります。
表示時(読み込み表示)
# WIFIの設定ファイルの場所
WIFI_CONF_PATH = "/etc/wpa_supplicant/wpa_supplicant.conf"
# WIFIの作業用ファイルの場所
WIFI_TMP_PATH = "../wpa.conf"
config.read(WIFI_TMP_PATH)
r_wifi_ssid = ""
if (config.has_option(CONF_WIFI_SEC_NM, "wifi_ssid")):
r_wifi_ssid = config.get(CONF_WIFI_SEC_NM, "wifi_ssid")
r_wifi_psk = ""
if (config.has_option(CONF_WIFI_SEC_NM, "wifi_psk")):
r_wifi_psk = config.get(CONF_WIFI_SEC_NM, "wifi_psk")
r_wifi_scan_ssid = ""
if (config.has_option(CONF_WIFI_SEC_NM, "wifi_scan_ssid")):
r_wifi_scan_ssid = config.get(CONF_WIFI_SEC_NM, "wifi_scan_ssid")
r_wifi_key_mgmt = ""
if (config.has_option(CONF_WIFI_SEC_NM, "wifi_key_mgmt")):
r_wifi_key_mgmt = config.get(CONF_WIFI_SEC_NM, "wifi_key_mgmt")
ret = {
"url": r_url,
"urlwav": r_urlwav,
"urlpcap": r_urlpcap,
"iot_id": r_iot_id,
"voicerec_on": r_voicerec_on,
"smbconnect_on": r_smbconnect_on,
"smbusername": r_smbusername,
"smbpassword": r_smbpassword,
"smbhostname": r_smbhostname,
"smbipaddress": r_smbipaddress,
"smbremotedirectory": r_smbremotedirectory,
"smbremotepath": r_smbremotepath,
"wifi_ssid": r_wifi_ssid,
"wifi_psk": r_wifi_psk,
"wifi_scan_ssid": r_wifi_scan_ssid,
"wifi_key_mgmt": r_wifi_key_mgmt,
"ret": "1"
}
self.send_response(200)
self.send_header("Access-Control-Allow-Origin", "*")
self.send_header("Content-type", "application/json;charset=utf-8")
self.end_headers()
ret_json = json.dumps(ret, sort_keys=False, indent=4, ensure_ascii=False)
self.wfile.write(ret_json.encode("utf-8"))
書き込み時(保存時)
wifi_ssid = str(body["wifi_ssid"])
wifi_psk = str(body["wifi_psk"])
wifi_scan_ssid = str(body["wifi_scan_ssid"])
wifi_key_mgmt = str(body["wifi_key_mgmt"])
# 作業設定を読み込む
config = configparser.ConfigParser()
config.read(WIFI_TMP_PATH)
r_wifi_ssid = ""
if (config.has_option(CONF_WIFI_SEC_NM, "wifi_ssid")):
r_wifi_ssid = config.get(CONF_WIFI_SEC_NM, "wifi_ssid")
r_wifi_psk = ""
if (config.has_option(CONF_WIFI_SEC_NM, "wifi_psk")):
r_wifi_psk = config.get(CONF_WIFI_SEC_NM, "wifi_psk")
r_wifi_scan_ssid = ""
if (config.has_option(CONF_WIFI_SEC_NM, "wifi_scan_ssid")):
r_wifi_scan_ssid = config.get(CONF_WIFI_SEC_NM, "wifi_scan_ssid")
r_wifi_key_mgmt = ""
if (config.has_option(CONF_WIFI_SEC_NM, "wifi_key_mgmt")):
r_wifi_key_mgmt = config.get(CONF_WIFI_SEC_NM, "wifi_key_mgmt")
bef_wifi_cnf = 'network={\n' + \
' ssid="' + r_wifi_ssid + '"\n' + \
' psk="' + r_wifi_psk + '"\n'
if (r_wifi_scan_ssid != ''):
bef_wifi_cnf += ' scan_ssid=1\n'
if (r_wifi_scan_ssid != ''):
bef_wifi_cnf += ' key_mgmt=' + r_wifi_key_mgmt + '\n'
bef_wifi_cnf += '}\n'
if (os.path.exists(WIFI_CONF_PATH)):
f = open(WIFI_CONF_PATH, 'w+', encoding='utf-8')
contents = f.read()
logging.info(contents)
contents = contents.replace(bef_wifi_cnf, "") # 前回の設定をクリアする
f.write(contents)
f.close()
if (True):
f = open(WIFI_CONF_PATH, 'a', encoding='utf-8')
f.write('network={\n')
f.write(' ssid="' + wifi_ssid + '"\n')
f.write(' psk="' + wifi_psk + '"\n')
# ステルス時、書き出す
if (wifi_scan_ssid != ''):
f.write(' scan_ssid=1\n')
# WPA時は、書き出さない
if (wifi_key_mgmt != ''):
f.write(' key_mgmt=' + wifi_key_mgmt + '\n')
f.write('}\n')
f.close()
# 作業設定の書き出し
if (not config.has_section(CONF_WIFI_SEC_NM)):
config.add_section(CONF_WIFI_SEC_NM)
config.set(CONF_WIFI_SEC_NM, "wifi_ssid", wifi_ssid)
config.set(CONF_WIFI_SEC_NM, "wifi_psk", wifi_psk)
config.set(CONF_WIFI_SEC_NM, "wifi_scan_ssid", wifi_scan_ssid)
config.set(CONF_WIFI_SEC_NM, "wifi_key_mgmt", wifi_key_mgmt)
f = open(WIFI_TMP_PATH, "w+", encoding='utf-8')
config.write(f)
f.close()
ret = {
"ret": "1"
}
0 件のコメント:
コメントを投稿