提交 4d90e9f5 authored 作者: blu's avatar blu

new feature: evwifi

上级 bdcd93af
[Unit]
Description=evdaemon manages edge evsuits
After=network.target
After=evwifi.service
[Service]
Type=simple
......
[Unit]
Description= evedge wifi settings
After=evdaemon.target
After=network.target
[Service]
Type=simple
......
<!doctype html>
<html lang="en" data-n-head="%7B%22lang%22:%7B%221%22:%22en%22%7D%7D">
<head>
<title>evbox</title><meta data-n-head="1" charset="utf-8"><meta data-n-head="1" name="viewport" content="width=device-width,initial-scale=1"><meta data-n-head="1" data-hid="description" name="description" content="web for evbox device"><meta data-n-head="1" data-hid="mobile-web-app-capable" name="mobile-web-app-capable" content="yes"><meta data-n-head="1" data-hid="apple-mobile-web-app-title" name="apple-mobile-web-app-title" content="evbox"><meta data-n-head="1" data-hid="author" name="author" content="bruce.lu"><meta data-n-head="1" data-hid="theme-color" name="theme-color" content="#fff"><meta data-n-head="1" data-hid="og:type" name="og:type" property="og:type" content="website"><meta data-n-head="1" data-hid="og:title" name="og:title" property="og:title" content="evbox"><meta data-n-head="1" data-hid="og:site_name" name="og:site_name" property="og:site_name" content="evbox"><meta data-n-head="1" data-hid="og:description" name="og:description" property="og:description" content="web for evbox device"><link data-n-head="1" rel="icon" type="image/x-icon" href="/favicon.ico"><link data-n-head="1" rel="manifest" href="/_nuxt/manifest.ec4a7e8a.json"><link data-n-head="1" rel="shortcut icon" href="/_nuxt/icons/icon_64.5f6a36.png"><link data-n-head="1" rel="apple-touch-icon" href="/_nuxt/icons/icon_512.5f6a36.png" sizes="512x512"><link rel="preload" href="/_nuxt/6fb06ddeabbea6200c36.js" as="script"><link rel="preload" href="/_nuxt/8a709989afb013926c1b.js" as="script"><link rel="preload" href="/_nuxt/eeafa4dc446371943266.js" as="script"><link rel="preload" href="/_nuxt/6c8af3f3b082004d0c81.js" as="script">
<title>evbox</title><meta data-n-head="1" charset="utf-8"><meta data-n-head="1" name="viewport" content="width=device-width,initial-scale=1"><meta data-n-head="1" data-hid="description" name="description" content="web for evbox device"><meta data-n-head="1" data-hid="mobile-web-app-capable" name="mobile-web-app-capable" content="yes"><meta data-n-head="1" data-hid="apple-mobile-web-app-title" name="apple-mobile-web-app-title" content="evbox"><meta data-n-head="1" data-hid="author" name="author" content="bruce.lu"><meta data-n-head="1" data-hid="theme-color" name="theme-color" content="#fff"><meta data-n-head="1" data-hid="og:type" name="og:type" property="og:type" content="website"><meta data-n-head="1" data-hid="og:title" name="og:title" property="og:title" content="evbox"><meta data-n-head="1" data-hid="og:site_name" name="og:site_name" property="og:site_name" content="evbox"><meta data-n-head="1" data-hid="og:description" name="og:description" property="og:description" content="web for evbox device"><link data-n-head="1" rel="icon" type="image/x-icon" href="/favicon.ico"><link data-n-head="1" rel="manifest" href="/_nuxt/manifest.ec4a7e8a.json"><link data-n-head="1" rel="shortcut icon" href="/_nuxt/icons/icon_64.5f6a36.png"><link data-n-head="1" rel="apple-touch-icon" href="/_nuxt/icons/icon_512.5f6a36.png" sizes="512x512"><link rel="preload" href="/_nuxt/ccafd95c94b36ff0910e.js" as="script"><link rel="preload" href="/_nuxt/0ef3863dc6901723b4ef.js" as="script"><link rel="preload" href="/_nuxt/eeafa4dc446371943266.js" as="script"><link rel="preload" href="/_nuxt/b7dff675fa930397bc4b.js" as="script">
</head>
<body>
<div id="__nuxt"><style>#nuxt-loading{visibility:hidden;opacity:0;position:absolute;left:0;right:0;top:0;bottom:0;display:flex;justify-content:center;align-items:center;flex-direction:column;animation:nuxtLoadingIn 10s ease;-webkit-animation:nuxtLoadingIn 10s ease;animation-fill-mode:forwards;overflow:hidden}@keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}@-webkit-keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}#nuxt-loading>div,#nuxt-loading>div:after{border-radius:50%;width:5rem;height:5rem}#nuxt-loading>div{font-size:10px;position:relative;text-indent:-9999em;border:.5rem solid #f5f5f5;border-left:.5rem solid #fff;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:nuxtLoading 1.1s infinite linear;animation:nuxtLoading 1.1s infinite linear}#nuxt-loading.error>div{border-left:.5rem solid #ff4500;animation-duration:5s}@-webkit-keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}</style><script>window.addEventListener("error",function(){var e=document.getElementById("nuxt-loading");e&&(e.className+=" error")})</script><div id="nuxt-loading" aria-live="polite" role="status"><div>Loading...</div></div></div>
<script type="text/javascript" src="/_nuxt/6fb06ddeabbea6200c36.js"></script><script type="text/javascript" src="/_nuxt/8a709989afb013926c1b.js"></script><script type="text/javascript" src="/_nuxt/eeafa4dc446371943266.js"></script><script type="text/javascript" src="/_nuxt/6c8af3f3b082004d0c81.js"></script></body>
<script type="text/javascript" src="/_nuxt/ccafd95c94b36ff0910e.js"></script><script type="text/javascript" src="/_nuxt/0ef3863dc6901723b4ef.js"></script><script type="text/javascript" src="/_nuxt/eeafa4dc446371943266.js"></script><script type="text/javascript" src="/_nuxt/b7dff675fa930397bc4b.js"></script></body>
</html>
This source diff could not be displayed because it is too large. You can view the blob instead.
<!doctype html>
<html lang="en" data-n-head="%7B%22lang%22:%7B%221%22:%22en%22%7D%7D">
<head>
<title>evbox</title><meta data-n-head="1" charset="utf-8"><meta data-n-head="1" name="viewport" content="width=device-width,initial-scale=1"><meta data-n-head="1" data-hid="description" name="description" content="web for evbox device"><meta data-n-head="1" data-hid="mobile-web-app-capable" name="mobile-web-app-capable" content="yes"><meta data-n-head="1" data-hid="apple-mobile-web-app-title" name="apple-mobile-web-app-title" content="evbox"><meta data-n-head="1" data-hid="author" name="author" content="bruce.lu"><meta data-n-head="1" data-hid="theme-color" name="theme-color" content="#fff"><meta data-n-head="1" data-hid="og:type" name="og:type" property="og:type" content="website"><meta data-n-head="1" data-hid="og:title" name="og:title" property="og:title" content="evbox"><meta data-n-head="1" data-hid="og:site_name" name="og:site_name" property="og:site_name" content="evbox"><meta data-n-head="1" data-hid="og:description" name="og:description" property="og:description" content="web for evbox device"><link data-n-head="1" rel="icon" type="image/x-icon" href="/favicon.ico"><link data-n-head="1" rel="manifest" href="/_nuxt/manifest.ec4a7e8a.json"><link data-n-head="1" rel="shortcut icon" href="/_nuxt/icons/icon_64.5f6a36.png"><link data-n-head="1" rel="apple-touch-icon" href="/_nuxt/icons/icon_512.5f6a36.png" sizes="512x512"><link rel="preload" href="/_nuxt/6fb06ddeabbea6200c36.js" as="script"><link rel="preload" href="/_nuxt/8a709989afb013926c1b.js" as="script"><link rel="preload" href="/_nuxt/eeafa4dc446371943266.js" as="script"><link rel="preload" href="/_nuxt/6c8af3f3b082004d0c81.js" as="script">
</head>
<body>
<div id="__nuxt"><style>#nuxt-loading{visibility:hidden;opacity:0;position:absolute;left:0;right:0;top:0;bottom:0;display:flex;justify-content:center;align-items:center;flex-direction:column;animation:nuxtLoadingIn 10s ease;-webkit-animation:nuxtLoadingIn 10s ease;animation-fill-mode:forwards;overflow:hidden}@keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}@-webkit-keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}#nuxt-loading>div,#nuxt-loading>div:after{border-radius:50%;width:5rem;height:5rem}#nuxt-loading>div{font-size:10px;position:relative;text-indent:-9999em;border:.5rem solid #f5f5f5;border-left:.5rem solid #fff;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:nuxtLoading 1.1s infinite linear;animation:nuxtLoading 1.1s infinite linear}#nuxt-loading.error>div{border-left:.5rem solid #ff4500;animation-duration:5s}@-webkit-keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}</style><script>window.addEventListener("error",function(){var e=document.getElementById("nuxt-loading");e&&(e.className+=" error")})</script><div id="nuxt-loading" aria-live="polite" role="status"><div>Loading...</div></div></div>
<script type="text/javascript" src="/_nuxt/6fb06ddeabbea6200c36.js"></script><script type="text/javascript" src="/_nuxt/8a709989afb013926c1b.js"></script><script type="text/javascript" src="/_nuxt/eeafa4dc446371943266.js"></script><script type="text/javascript" src="/_nuxt/6c8af3f3b082004d0c81.js"></script></body>
</html>
<!doctype html>
<html lang="en" data-n-head="%7B%22lang%22:%7B%221%22:%22en%22%7D%7D">
<head>
<title>evbox</title><meta data-n-head="1" charset="utf-8"><meta data-n-head="1" name="viewport" content="width=device-width,initial-scale=1"><meta data-n-head="1" data-hid="description" name="description" content="web for evbox device"><meta data-n-head="1" data-hid="mobile-web-app-capable" name="mobile-web-app-capable" content="yes"><meta data-n-head="1" data-hid="apple-mobile-web-app-title" name="apple-mobile-web-app-title" content="evbox"><meta data-n-head="1" data-hid="author" name="author" content="bruce.lu"><meta data-n-head="1" data-hid="theme-color" name="theme-color" content="#fff"><meta data-n-head="1" data-hid="og:type" name="og:type" property="og:type" content="website"><meta data-n-head="1" data-hid="og:title" name="og:title" property="og:title" content="evbox"><meta data-n-head="1" data-hid="og:site_name" name="og:site_name" property="og:site_name" content="evbox"><meta data-n-head="1" data-hid="og:description" name="og:description" property="og:description" content="web for evbox device"><link data-n-head="1" rel="icon" type="image/x-icon" href="/favicon.ico"><link data-n-head="1" rel="manifest" href="/_nuxt/manifest.ec4a7e8a.json"><link data-n-head="1" rel="shortcut icon" href="/_nuxt/icons/icon_64.5f6a36.png"><link data-n-head="1" rel="apple-touch-icon" href="/_nuxt/icons/icon_512.5f6a36.png" sizes="512x512"><link rel="preload" href="/_nuxt/6fb06ddeabbea6200c36.js" as="script"><link rel="preload" href="/_nuxt/8a709989afb013926c1b.js" as="script"><link rel="preload" href="/_nuxt/eeafa4dc446371943266.js" as="script"><link rel="preload" href="/_nuxt/6c8af3f3b082004d0c81.js" as="script">
</head>
<body>
<div id="__nuxt"><style>#nuxt-loading{visibility:hidden;opacity:0;position:absolute;left:0;right:0;top:0;bottom:0;display:flex;justify-content:center;align-items:center;flex-direction:column;animation:nuxtLoadingIn 10s ease;-webkit-animation:nuxtLoadingIn 10s ease;animation-fill-mode:forwards;overflow:hidden}@keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}@-webkit-keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}#nuxt-loading>div,#nuxt-loading>div:after{border-radius:50%;width:5rem;height:5rem}#nuxt-loading>div{font-size:10px;position:relative;text-indent:-9999em;border:.5rem solid #f5f5f5;border-left:.5rem solid #fff;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:nuxtLoading 1.1s infinite linear;animation:nuxtLoading 1.1s infinite linear}#nuxt-loading.error>div{border-left:.5rem solid #ff4500;animation-duration:5s}@-webkit-keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}</style><script>window.addEventListener("error",function(){var e=document.getElementById("nuxt-loading");e&&(e.className+=" error")})</script><div id="nuxt-loading" aria-live="polite" role="status"><div>Loading...</div></div></div>
<script type="text/javascript" src="/_nuxt/6fb06ddeabbea6200c36.js"></script><script type="text/javascript" src="/_nuxt/8a709989afb013926c1b.js"></script><script type="text/javascript" src="/_nuxt/eeafa4dc446371943266.js"></script><script type="text/javascript" src="/_nuxt/6c8af3f3b082004d0c81.js"></script></body>
</html>
wifi/index.vue
\ No newline at end of file
<template>
<div class="grid">
<div class="row">
<nuxt-link to="/" class="col-4">返回主页</nuxt-link>
<label class="col-4">WIFI配置</label>
<label class="col-4">{{devSn}}</label>
</div>
<div class="row">
<label class="col-4 offset-2">附近热点</label>
<b-button :disabled="bInScan" class="col-4" variant="primary" v-on:click="scanWifi">重新扫描</b-button>
</div>
<div class="row">
<b-button
class="col-10 offset-1 mt-3"
variant="primary"
v-on:click="config"
v-for=" item in ssids"
v-bind:key="item.id"
>{{ item }}</b-button>
</div>
<b-modal
hide-header-close
no-close-on-esc
no-close-on-backdrop
hide-footer
ref="config"
id="config"
size="mw-100"
title="WIFI连接配置"
>
<div class="grid">
<div class="row">
<label class="col-4 offset-2" disabled variant="info">热点名</label>
<b-button class="col-4" disabled>{{ssid}}</b-button>
</div>
<div class="row mt-4">
<label class="col-4 offset-2">密码</label>
<b-input class="col-4" v-model="password">{{ssid}}</b-input>
</div>
<div class="row mt-4">
<b-button
:disabled="cancelDisabled"
class="col-2 offset-3"
variant="outline-danger"
@click="closeModal"
>取消</b-button>
<b-button
:disabled="!connEnabled"
class="col-2 offset-2"
variant="primary"
@click="connect"
>连接</b-button>
</div>
</div>
</b-modal>
</div>
</template>
<script>
import axios from "axios";
const apiHost = 'http://192.168.0.1';
export default {
async mounted() {
try {
this.getWifiData();
} catch (err) {
console.log(err);
}
},
data() {
return {
connectWifi: async e => {
let response = await axios.get(`${apiHost}/wifi?mode=2&ssid=${this.ssid}&password=${this.password}`);
return response;
},
getWifiData: async e => {
this.bInScan = true;
let param = e ? "true" : "false";
let response = await axios.get(
`${apiHost}/wifi?scan=${param}`
);
this.wifiData = response.data.wifiData;
this.ssids = Array.from(new Set(this.wifiData.wifi.ssids))
.filter(e => e != "" && e != undefined)
.map(e => {
let data = e.match(/ESSID:\"(.+)\"/)[1];
if (data[0] != "\\") {
return data;
} else {
var count = data.length;
var str = "";
for (var index = 0; index < count; index += 1)
str += String.fromCharCode(data[index]);
return data;
}
})
.filter(e => e[0] != "\\");
this.devSn = this.wifiData.info.sn;
this.bInScan = false;
console.log(this.devSn);
console.log(this.ssids);
},
cancelDisabled: false,
connDisabled: false,
bInScan: false,
ssid: "",
devSn: "",
password: "",
ssids: ["NO WIFI AVAILABLE"]
};
},
computed: {
connEnabled() {
return this.password.length >= 4 && !this.connDisabled;
}
},
methods: {
scanWifi: function(event) {
this.getWifiData(true);
},
config: function(event) {
console.log(event.target.innerText);
this.ssid = event.target.innerText;
this.password = "";
this.cancelDisabled = false;
this.connDisabled = false;
this.$bvModal.show("config");
},
closeModal() {
this.$refs["config"].hide();
},
connect() {
this.connectWifi();
this.cancelDisabled = true;
this.connDisabled = true;
}
}
};
</script>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论