From 3e2a6c51cc306bc020ad4f7eb9235d8243bbbba3 Mon Sep 17 00:00:00 2001 From: Thomas Ballmann Date: Wed, 20 May 2020 12:51:16 +0200 Subject: [PATCH] wifi wizard mostly done #31 --- app/src/api/device.js | 18 +++--- app/src/components/SetupWifiConnect.vue | 31 +++++---- app/src/plugins/vuetify.js | 7 ++- app/src/views/Setup/Wifi.vue | 83 ++++++++++++++++--------- app/yarn.lock | 10 +++ src/app.cpp | 64 ++++++++++--------- 6 files changed, 129 insertions(+), 84 deletions(-) diff --git a/app/src/api/device.js b/app/src/api/device.js index 987d0be..afc17e3 100644 --- a/app/src/api/device.js +++ b/app/src/api/device.js @@ -4,9 +4,17 @@ // eslint-disable-next-line const _settings = { + system: { + country: "AT", + language: "de", + timezone: "", + utc: 0, + dst: 0, + wifi: "" + }, device: { - angle: 0, theme: "black", + name: "dummy" }, playlist: { timer: 60 @@ -17,9 +25,6 @@ const _settings = { lang: "de", unit: "metric" }, - datetime: { - gmt_offset: 3600 - }, cloud: { mode: "active", url: "http://", @@ -65,7 +70,7 @@ const _stats = { } // eslint-disable-next-line -const _wifiScan = [{ "rssi": -59, "ssid": "xd-design.info", "bssid": "38:10:D5:34:80:1B", "channel": 11, "secure": 3 }, { "rssi": -75, "ssid": "FRITZ!Box 7430 JI", "bssid": "38:10:D5:5D:FE:7C", "channel": 1, "secure": 3 }, { "rssi": -87, "ssid": "Vodafone Hotspot", "bssid": "AA:0E:14:BD:50:ED", "channel": 1, "secure": 0 }, { "rssi": -88, "ssid": "WLAN-548426", "bssid": "E0:60:66:55:7F:C5", "channel": 1, "secure": 3 }, { "rssi": -89, "ssid": "Familie Kalinowski", "bssid": "C8:0E:14:BD:50:ED", "channel": 1, "secure": 3 }, { "rssi": -91, "ssid": "WLAN-507287", "bssid": "E0:60:66:48:6C:6B", "channel": 1, "secure": 3 }, { "rssi": -94, "ssid": "TP-LINK_7238", "bssid": "A4:2B:B0:D8:72:38", "channel": 3, "secure": 3 }] +const _wifiScan = [{ "rssi": -59, "ssid": "paperdash.io", "bssid": "38:10:D5:34:80:1B", "channel": 11, "secure": 3 }, { "rssi": -75, "ssid": "FRITZ!Box 7430 JI", "bssid": "38:10:D5:5D:FE:7C", "channel": 1, "secure": 3 }, { "rssi": -87, "ssid": "Vodafone Hotspot", "bssid": "AA:0E:14:BD:50:ED", "channel": 1, "secure": 0 }, { "rssi": -88, "ssid": "WLAN-548426", "bssid": "E0:60:66:55:7F:C5", "channel": 1, "secure": 3 }, { "rssi": -89, "ssid": "Familie Kalinowski", "bssid": "C8:0E:14:BD:50:ED", "channel": 1, "secure": 3 }, { "rssi": -91, "ssid": "WLAN-507287", "bssid": "E0:60:66:48:6C:6B", "channel": 1, "secure": 3 }, { "rssi": -94, "ssid": "TP-LINK_7238", "bssid": "A4:2B:B0:D8:72:38", "channel": 3, "secure": 3 }] import axios from 'axios' @@ -104,9 +109,6 @@ export default { * @param {*} cb */ wifiScan(cb) { - return cb(_wifiScan) - - // eslint-disable-next-line return axios .get('/api/wifi/scan') .then(response => cb(response.data)) diff --git a/app/src/components/SetupWifiConnect.vue b/app/src/components/SetupWifiConnect.vue index 42882d5..6085582 100644 --- a/app/src/components/SetupWifiConnect.vue +++ b/app/src/components/SetupWifiConnect.vue @@ -1,7 +1,7 @@ diff --git a/app/src/plugins/vuetify.js b/app/src/plugins/vuetify.js index 5ab13ce..46c8c10 100644 --- a/app/src/plugins/vuetify.js +++ b/app/src/plugins/vuetify.js @@ -48,8 +48,10 @@ const MY_ICONS = { //search: {component: () => import(/* webpackChunkName: "icons" */'!vue-svg-loader!@material-icons/svg/svg/search/baseline.svg')}, memory: {component: () => import(/* webpackChunkName: "icons" */'!vue-svg-loader!@material-icons/svg/svg/memory/baseline.svg')}, lock: {component: () => import(/* webpackChunkName: "icons" */'!vue-svg-loader!@material-icons/svg/svg/lock/baseline.svg')}, + settings: {component: () => import(/* webpackChunkName: "icons" */'!vue-svg-loader!@material-icons/svg/svg/settings/baseline.svg')}, // wifi + signalWifiOff: {component: () => import(/* webpackChunkName: "icons" */'!vue-svg-loader!@material-icons/svg/svg/signal_wifi_off/baseline.svg')}, signalWifi0: {component: () => import(/* webpackChunkName: "icons" */'!vue-svg-loader!@material-icons/svg/svg/signal_wifi_0_bar/baseline.svg')}, signalWifi1: {component: () => import(/* webpackChunkName: "icons" */'!vue-svg-loader!@material-icons/svg/svg/signal_wifi_1_bar/baseline.svg')}, signalWifi1Lock: {component: () => import(/* webpackChunkName: "icons" */'!vue-svg-loader!@material-icons/svg/svg/signal_wifi_1_bar_lock/baseline.svg')}, @@ -64,7 +66,10 @@ const MY_ICONS = { wb_sunny: {component: () => import(/* webpackChunkName: "icons" */'!vue-svg-loader!@material-icons/svg/svg/wb_sunny/baseline.svg')}, open_in_new: {component: () => import(/* webpackChunkName: "icons" */'!vue-svg-loader!@material-icons/svg/svg/open_in_new/baseline.svg')}, face: {component: () => import(/* webpackChunkName: "icons" */'!vue-svg-loader!@material-icons/svg/svg/face/baseline.svg')}, - autorenew: {component: () => import(/* webpackChunkName: "icons" */'!vue-svg-loader!@material-icons/svg/svg/autorenew/baseline.svg')} + autorenew: {component: () => import(/* webpackChunkName: "icons" */'!vue-svg-loader!@material-icons/svg/svg/autorenew/baseline.svg')}, + check: {component: () => import(/* webpackChunkName: "icons" */'!vue-svg-loader!@material-icons/svg/svg/check/baseline.svg')}, + visibility: {component: () => import(/* webpackChunkName: "icons" */'!vue-svg-loader!@material-icons/svg/svg/visibility/baseline.svg')}, + visibility_off: {component: () => import(/* webpackChunkName: "icons" */'!vue-svg-loader!@material-icons/svg/svg/visibility_off/baseline.svg')} } diff --git a/app/src/views/Setup/Wifi.vue b/app/src/views/Setup/Wifi.vue index cf40fb1..fd71be1 100644 --- a/app/src/views/Setup/Wifi.vue +++ b/app/src/views/Setup/Wifi.vue @@ -13,40 +13,49 @@ > - - - + - Choose Another Network + Choose Another Network - + - @@ -63,8 +72,11 @@ export default { isLoading: true, settings: null, + connectSSID: null, + connectingSSID: "", + wifiAvailable: [], - wifiConnectModal: false + wifiPasswordModal: false }), created() { apiDevice.getSettings(settings => { @@ -77,6 +89,21 @@ export default { }); }); }, - methods: {} + methods: { + onWifiSelect(wifi) { + if (wifi.secure) { + this.connectSSID = wifi.ssid; + this.wifiPasswordModal = true; + } else { + this.onWifiConnect(wifi.ssid, ""); + } + }, + onWifiConnect(ssid, password) { + this.connectingSSID = ssid; + this.wifiPasswordModal = false; + + apiDevice.wifiConnect(ssid, password, () => {}); + } + } }; \ No newline at end of file diff --git a/app/yarn.lock b/app/yarn.lock index e5efc3b..da11d35 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -2447,6 +2447,16 @@ cosmiconfig@^5.0.0: js-yaml "^3.13.1" parse-json "^4.0.0" +countries-and-timezones@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/countries-and-timezones/-/countries-and-timezones-2.2.0.tgz#4a37bd0997e5c9928c6f6958d33ca6814a3ac68a" + integrity sha512-Sk0Xo/f26nj+txU/Kau1V2rKg52tRUJSJoU2xSB/fRNOm266/gPhJhHzupP2czxj3o+XIoI3uwHnWA+T8a5jpA== + +countries-list@^2.5.4: + version "2.5.4" + resolved "https://registry.yarnpkg.com/countries-list/-/countries-list-2.5.4.tgz#c1a0ab8f63c0972b266254d63e595ea86a6cfe1e" + integrity sha512-6+AIKth3MCOEWTLOVTgR7zTe6oH3JlL0MworsJwIyG0jQi+cKeChOEPvcKszNtGAuCp7p+OrqdxPWxjhu8LqoA== + create-ecdh@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" diff --git a/src/app.cpp b/src/app.cpp index a073bb4..8289737 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -69,11 +69,11 @@ void setupApp() AsyncResponseStream *response = request->beginResponseStream("application/json"); DynamicJsonDocument doc(668); // https://arduinojson.org/v6/assistant/ - doc["wifi"]["rssi"] = WiFi.RSSI(); + doc["wifi"]["mac"] = WiFi.macAddress(); doc["wifi"]["ssid"] = WiFi.SSID(); doc["wifi"]["connected"] = WiFi.isConnected(); + doc["wifi"]["rssi"] = WiFi.RSSI(); doc["wifi"]["ip"] = WiFi.localIP().toString(); - doc["wifi"]["mac"] = WiFi.macAddress(); doc["wifi"]["channel"] = WiFi.channel(); doc["wifi"]["dns"] = WiFi.dnsIP().toString(); doc["wifi"]["gateway"] = WiFi.gatewayIP().toString(); @@ -141,6 +141,8 @@ void setupSettingsGet() root["system"]["timezone"] = NVS.getString("system.timezone"); root["system"]["utc"] = NVS.getInt("system.utc"); root["system"]["dst"] = NVS.getInt("system.dst"); + root["system"]["wifi"] = NVS.getString("wifi.ssid"); + // gmtOffset_sec // daylightOffset_sec @@ -280,44 +282,32 @@ void setupCurrentImage() } /** - * @todo + * scan for wifi */ void setupWifiScan() { - //First request will return 0 results unless you start scan from somewhere else (loop/setup) - //Do not request more often than 3-5 seconds server.on("/api/wifi/scan", HTTP_GET, [](AsyncWebServerRequest *request) { String json = "["; - int n = WiFi.scanComplete(); - if (n == -2) - { - WiFi.scanNetworks(true); - } - else if (n) + + int n = WiFi.scanNetworks(); + for (int i = 0; i < n; ++i) { - for (int i = 0; i < n; ++i) + if (i) { - if (i) - { - json += ","; - } - - json += "{"; - json += "\"rssi\":" + String(WiFi.RSSI(i)); - json += ",\"ssid\":\"" + WiFi.SSID(i) + "\""; - json += ",\"bssid\":\"" + WiFi.BSSIDstr(i) + "\""; - json += ",\"channel\":" + String(WiFi.channel(i)); - json += ",\"secure\":" + String(WiFi.encryptionType(i)); - json += "}"; + json += ","; } - WiFi.scanDelete(); - if (WiFi.scanComplete() == -2) - { - WiFi.scanNetworks(true); - } + json += "{"; + json += "\"rssi\":" + String(WiFi.RSSI(i)); + json += ",\"ssid\":\"" + WiFi.SSID(i) + "\""; + json += ",\"bssid\":\"" + WiFi.BSSIDstr(i) + "\""; + json += ",\"channel\":" + String(WiFi.channel(i)); + json += ",\"secure\":" + String(WiFi.encryptionType(i)); + json += "}"; } + WiFi.scanDelete(); + json += "]"; request->send(200, "application/json", json); json = String(); @@ -338,10 +328,23 @@ void setupWifiConnect() Serial.print(F("deserializeJson() failed with code ")); Serial.println(error.c_str()); - request->send(404, "text/plain", ""); + request->send(404, "application/ld+json; charset=utf-8", "{}"); } else { + JsonVariant ssid = doc["ssid"]; + if (!ssid.isNull()) { + NVS.setString("wifi.ssid", ssid); + Serial.println(ssid.as()); + } + + JsonVariant password = doc["password"]; + if (!password.isNull()) { + NVS.setString("wifi.password", password); + Serial.println(password.as()); + } + +/* if (doc.containsKey("ssid")) { NVS.setString("wifi_ssid", doc["ssid"]); Serial.println(doc["ssid"].as()); @@ -350,6 +353,7 @@ void setupWifiConnect() NVS.setString("wifi_password", doc["password"]); Serial.println(doc["password"].as()); } + */ request->send(200, "application/ld+json; charset=utf-8", "{}");