From 249d32ce35011ca076c06cf8a250e810c92d46c2 Mon Sep 17 00:00:00 2001 From: Yurii Date: Mon, 10 Jun 2024 14:55:14 +0300 Subject: [PATCH] chore: more info when scan wifi --- src/PortalTask.h | 8 ++++- src_data/dashboard.html | 8 ++--- src_data/network.html | 2 +- src_data/static/app.css | 22 ++++++------ src_data/static/app.js | 55 ++++++++++++++++++++++++----- src_data/static/fonts/iconly.eot | Bin 0 -> 3976 bytes src_data/static/fonts/iconly.ttf | Bin 0 -> 3816 bytes src_data/static/fonts/iconly.woff | Bin 0 -> 2220 bytes src_data/static/fonts/iconly.woff2 | Bin 0 -> 1664 bytes tools/build.py | 3 ++ 10 files changed, 71 insertions(+), 27 deletions(-) create mode 100644 src_data/static/fonts/iconly.eot create mode 100644 src_data/static/fonts/iconly.ttf create mode 100644 src_data/static/fonts/iconly.woff create mode 100644 src_data/static/fonts/iconly.woff2 diff --git a/src/PortalTask.h b/src/PortalTask.h index 846e2f2..d4f5be3 100644 --- a/src/PortalTask.h +++ b/src/PortalTask.h @@ -361,10 +361,16 @@ protected: for (short int i = 0; i < apCount; i++) { String ssid = WiFi.SSID(i); doc[i]["ssid"] = ssid; + doc[i]["bssid"] = WiFi.BSSIDstr(i); doc[i]["signalQuality"] = NetworkMgr::rssiToSignalQuality(WiFi.RSSI(i)); doc[i]["channel"] = WiFi.channel(i); doc[i]["hidden"] = !ssid.length(); - doc[i]["encryptionType"] = WiFi.encryptionType(i); + #ifdef ARDUINO_ARCH_ESP8266 + const bss_info* info = WiFi.getScanInfoByIndex(i); + doc[i]["auth"] = info->authmode; + #else + doc[i]["auth"] = WiFi.encryptionType(i); + #endif } doc.shrinkToFit(); diff --git a/src_data/dashboard.html b/src_data/dashboard.html index 967fe81..3ca5d28 100644 --- a/src_data/dashboard.html +++ b/src_data/dashboard.html @@ -38,8 +38,8 @@
Current:
-
-
+
+
@@ -55,8 +55,8 @@
Current:
-
-
+
+
diff --git a/src_data/network.html b/src_data/network.html index 8ca226d..0449f84 100644 --- a/src_data/network.html +++ b/src_data/network.html @@ -82,7 +82,7 @@ # SSID - Signal + Info diff --git a/src_data/static/app.css b/src_data/static/app.css index b18c9c2..8e9bc06 100644 --- a/src_data/static/app.css +++ b/src_data/static/app.css @@ -86,18 +86,6 @@ tr.network:hover { cursor: pointer; } -.greatSignal { - background-color: var(--pico-form-element-valid-border-color); -} - -.normalSignal { - background-color: #e48500; -} - -.badSignal { - background-color: var(--pico-form-element-invalid-border-color); -} - .primary { border: 0.25rem solid var(--pico-form-element-invalid-border-color); padding: 1rem; @@ -194,3 +182,13 @@ tr.network:hover { margin: 1.25rem 0; } + +[class*=" icons-"],[class=icons],[class^=icons-] {font-size: 1.35rem; } +*:has(> [class*=" icons-"], > [class=icons], > [class^=icons-]):has(+ * > [class*=" icons-"], + * > [class=icons], + * > [class^=icons-]) { margin: 0 0.5rem 0 0; } +[data-tooltip]:has(> [class*=" icons-"], > [class=icons], > [class^=icons-]) { border: 0!important; } + + +/*! + * Icons icon font. Generated by Iconly: https://iconly.io/ + */ + @font-face{font-display:auto;font-family:"Icons";font-style:normal;font-weight:400;src:url(./fonts/iconly.eot?1717885802370);src:url(./fonts/iconly.eot?#iefix) format("embedded-opentype"),url(./fonts/iconly.woff2?1717885802370) format("woff2"),url(./fonts/iconly.woff?1717885802370) format("woff"),url(./fonts/iconly.ttf?1717885802370) format("truetype")}[class*=" icons-"],[class=icons],[class^=icons-]{display:inline-block;font-family:"Icons"!important;font-weight:400;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.icons-plus:before{content:"\e000"}.icons-minus:before{content:"\e001"}.icons-unlocked:before{content:"\e002"}.icons-locked:before{content:"\e003"}.icons-wifi-strength-1:before{content:"\e004"}.icons-wifi-strength-0:before{content:"\e005"}.icons-wifi-strength-2:before{content:"\e006"}.icons-wifi-strength-3:before{content:"\e008"}.icons-down:before{content:"\e009"}.icons-wifi-strength-4:before{content:"\e00a"}.icons-up:before{content:"\e00c"} diff --git a/src_data/static/app.js b/src_data/static/app.js index 51034fe..48fd387 100644 --- a/src_data/static/app.js +++ b/src_data/static/app.js @@ -150,19 +150,56 @@ function setupNetworkScanForm(formSelector, tableSelector) { }; row.insertCell().textContent = "#" + (i + 1); - row.insertCell().innerHTML = result[i].hidden ? 'Hidden' : result[i].ssid; + row.insertCell().innerHTML = result[i].hidden ? ("" + result[i].bssid + "") : result[i].ssid; - const signalCell = row.insertCell(); - const signalElement = document.createElement("kbd"); - signalElement.textContent = result[i].signalQuality + "%"; - if (result[i].signalQuality > 60) { - signalElement.classList.add('greatSignal'); + // info cell + let infoCell = row.insertCell(); + + // signal quality + let signalQualityIcon = document.createElement("i"); + if (result[i].signalQuality > 80) { + signalQualityIcon.classList.add('icons-wifi-strength-4'); + } else if (result[i].signalQuality > 60) { + signalQualityIcon.classList.add('icons-wifi-strength-3'); } else if (result[i].signalQuality > 40) { - signalElement.classList.add('normalSignal'); + signalQualityIcon.classList.add('icons-wifi-strength-2'); + } else if (result[i].signalQuality > 20) { + signalQualityIcon.classList.add('icons-wifi-strength-1'); } else { - signalElement.classList.add('badSignal'); + signalQualityIcon.classList.add('icons-wifi-strength-0'); } - signalCell.appendChild(signalElement); + + let signalQualityContainer = document.createElement("span"); + signalQualityContainer.setAttribute('data-tooltip', result[i].signalQuality + "%"); + signalQualityContainer.appendChild(signalQualityIcon); + infoCell.appendChild(signalQualityContainer); + + // auth + const authList = { + 0: "Open", + 1: "WEP", + 2: "WPA", + 3: "WPA2", + 4: "WPA/WPA2", + 5: "WPA/WPA2 Enterprise", + 6: "WPA3", + 7: "WPA2/WPA3", + 8: "WAPI", + 9: "OWE", + 10: "WPA3 Enterprise" + }; + let authIcon = document.createElement("i"); + + if (result[i].auth == 0) { + authIcon.classList.add('icons-unlocked'); + } else { + authIcon.classList.add('icons-locked'); + } + + let authContainer = document.createElement("span"); + authContainer.setAttribute('data-tooltip', (result[i].auth in authList) ? authList[result[i].auth] : "unknown"); + authContainer.appendChild(authIcon); + infoCell.appendChild(authContainer); } if (button) { diff --git a/src_data/static/fonts/iconly.eot b/src_data/static/fonts/iconly.eot new file mode 100644 index 0000000000000000000000000000000000000000..955eb43aed17ca52bfc990efb61ee3f2e7aa55c2 GIT binary patch literal 3976 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 literal 0 HcmV?d00001 diff --git a/src_data/static/fonts/iconly.woff b/src_data/static/fonts/iconly.woff new file mode 100644 index 0000000000000000000000000000000000000000..412a1ce26f781586822366b0a86620967f7f913c GIT binary patch literal 2220 zcmY+Ec{tSDAIHBlV;M$v7nNm5!yseqCQD;?kt}5i!`Oylq9Ka1Z|R!sWY3avk<=w( zj4dH+2{()_+-_MTskz_o@Av!T_j#W8b3X6a`JCsR^PJ~=uAMhE1t0(z@HznTbL3t7 zkN=tff0)@j;sF2x2kBFAq@v`MGS1tpV8NUYGGkDLi{*ww#30Wr003nJxhVj^((QgB z75R}PeZkxc&#u6ewv37SIp&4DtclGI$m_P(Lb@ z5P?@HSE=BAdBB=dkn!(|KB$Q(il*uCGBErmrLY8LHjFDA*DRa@vqhr0xp@H*eA)wT zj^tGo|2dyuWmyIL{gNkOlkXb4XQh7gV=Ny=@!KyyvHQ_r9op$uyIkO;I;$uqv_vd; zveJ`iW;)@|KYnyQT9>*$<`+|=R8i)xIMU!Q%7yJTOMT`)=ix}5Bs%grT|LE=d!HTn zAf?JQJuJ;fM#Isk+Vygj&Gdk1;Ye@Zp@FCeDb!=4x^r~=uL>={X@LXq0ue<-g6E`H z5uN^uPM;j0CdI~}!0X zhY#=yO6{fP&f-%#uTv%(7t)wSsu!HMI z#*yM6+HIy*#Vyj}nmeiiQVE<|OV5ni=i+;-FSf_K#dc(LHdUe_P+m2&M_5g%k-_1b z7v6#Ra$`Y6ns25BnB0HYO zp`pK_W$+MG(aIXlf}3?R4jCO zCmA>Y^;6`{jPE4^2OTV4mBr(hGHhILo+fu?e|wXl(0^{CIN{;CPg!DnVOb(~i)Q^} z>)8h;%Fo1~*2(iYj}>}$(>!Mz#i@OBP}MbM!z1X}Lh`0iV#1U`a!GL5CBZmBM7C17 zbht|t0)O*F!xD$?ohJGIeLJ@->sjR(3+Xf2hi~fb^x?E?j|@4#3ZXu`v(=q;aI&`3 zwNUs|QR6mQ)r4e;k3#E^b5XCVFOfUE;b(OV2CeP5MDEFDR67~f#a~RjKF~zU%_3OK+XS$W7+-X}j*; z)%U)Shod0{D~`OTs5O~pCnJ3FOYOU5L7Wj$Iv+B%r!+qi45Q7LD1+G|dM6>cDqFp{ zAp0&yfc4m*b93()bv1govQ={@dgIL`ALZEn*7XlV^R(5P5AAW?x)wrs8~p>0*#pt3 zlZGMLYqfZhzU}DtFn{9=d0wfR+Qy9sE%O72+pZq;iqflf!xyXP-6`&E8?}h0GxJ}@ zq(*iyg}<|W6?5iue7-dp<{@17+GQhOOAOzCM=CMDIF9mmkqqlE zy@SguksREcfsRNGA?T~of=JWmeCEQVZ zZ|imADPh{M`nyje@@pTE^2aWqiH`IbpVOSlpd_x&vTn(=AZ+`-7gAeBEbUI^G3Z8GE2AJ5!a09ghoM4y! z*}uT3XR%6Kb7Nx@A#nw)a;6KLbszwkXmIiVoClz4NzzG?JPl$dV)0`4#I#iPiCzS( zj0hCCtHV|IzddX{FmxJ2ccIp{K@$)6N)y)2aNQ$NS{(Hk(Tw#-_)$vPD$0|5ngq!X!@<-YRe&k zrtw=}%c2cf>|-OB9R7XRpqKr;afX1&SZm6Q{kael{+pC&oFzRLE_8D~u`Tu5PG||H zry=*CH1QmJ7FuIN-G98oI{A#=A&(f=YbZfMZB@ys$!j=C8TaL+cIaYyuSvdh#r6g+ z6HSpXsNC1)3FutU86&L49E7B6k%*LrAA#!}d V!ch_1jIO@kZqY?V>pcxD@DF2v!_)u( literal 0 HcmV?d00001 diff --git a/src_data/static/fonts/iconly.woff2 b/src_data/static/fonts/iconly.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..724540a219446a713289dd03a4e07f573c13716d GIT binary patch literal 1664 zcmV-`27mc?Pew8T0RR9100w{n3jhEB01oH?00u7r0RR9100000000000000000000 z0000Sf^-I80EY|;h-8Oq3rYY1HUcCAfe-{B1%rMEf)E>F4G|Tr9U%KMfo@_Io^*aE zOfke7Y6^X?4?u?Vgd7{>&UEu{m)1@FO7J|@`QN!!)%`lv9jQCemy&!BpkxFke^&Gk zUU>y+r5<<kqY$sHK&VNR7~-iOF=aki;4dqNPA7nIk(hzEL+vIPVlfTWAzr*(L60YC? z_-2$<7L3Jm12|9%_B+7!=>FwJKRi&J6nMYAM)uM00xKT@XTnSzl77wv2-trbI6#A? zz(5WNfRE6`T<1UdPxdKbX0X!Xj&`!M0(Xc#6HcorsQG>i z^{qS4?d$|vn%X+LLIq_dRdo$nMM)Vsd4Za=NJ@oJ^bzUlx7NCi99wA$@XmwyN$ zD6~q|dLv7*mdWJwBc!8Ipkq*`V^N~x zP^IHhrxVbi6OpBpQKVClq*IZh(~zUnk*6~d&{?R_*+|nli0E9T=={J6Vi-ZpD8!6L z%oxOsgP3s-I2OQ!AaEL8%hyz>vS)m7DCs2f-3fbd09ASPTG(*u8Mf^Bq_q}Ff zo=KR{w|;1hP1{VvHZBhIbivxI=1|o*6qB`|RH6K<7eyz9G!gtiIO7mXuNaL(Lv780%Y~?K`-a;G6`A);3c)RnrRcVb z^85CuiiR^C_5G`dF~i#@$K(ZBw6(^!Hx!v6fQ&&isJ&(?qM%-ZH3 z!IdiAnMdB*a|8dVFe<2uD@9Hph0sYpjQJu)_UjQacix`$5B+Shb-pRD)A;Mkhvzo8 zUyILi9p7p$#+&++8+?xKILl!E%G|x;7n`cSQ2OGEDl*+W_v!a2UcUkj>V&E9YzlpeOP*%s#!)G_s@ve*F~s zj{GUTm^Idz_?`j;D~_v{9iHCoH_tbKZr%C6$ACux5FE$zF)gyfSUwth06on*#$arc z(7DRiqCXCIM?g=X0ib|o!3+RE#%l-w;Q|4m%y9_-&6Q*@lxK&p$}U%rttA#O?#mm| zq?AAePOw->Ifu2tCK$So9VK_MEAS{=W6$*UwdO}I{1asDKRh+QW~aS%S3w|_44%aH z?WdRyLv;I1_0fUqDp>b>cI{1%tjMIgYWM^p<*QW+D^(~qD!97Pkd>Lj7WZB{xrl&p zD}EVOkI=3`DA>PeCF)IL)L;-1MLM;T=sQx?b9|vt6E)`6Ovtz24oVCLjT;1sLJ9I` zsjvkpu&z@tl&q+lZkU$sxZEDEtem`pqLQ+Ts!*h+uA!-=t)r`FUfN#|)f~#GcG7wL zF6t`6;OGyz%n_yF;%g#6#HesoG@tD+i;QVn`1ag?Q=N5T)GMVbHD4|im_=-ZPAoyJ K)Hg6p0ssIlW+5>E literal 0 HcmV?d00001 diff --git a/tools/build.py b/tools/build.py index aeb2a0f..932f6c1 100644 --- a/tools/build.py +++ b/tools/build.py @@ -25,6 +25,9 @@ def before_buildfs(source, target, env): dst_name = name + ".gz" dst_path = os.path.join(dst, os.path.relpath(root, src), dst_name) + if os.path.exists(os.path.join(dst, os.path.relpath(root, src))) == False: + os.mkdir(os.path.join(dst, os.path.relpath(root, src))) + with gzip.open(dst_path, 'wb', 9) as f_out: shutil.copyfileobj(f_in, f_out)