%~329v;$>P`mUr
zT&ycB9r{VzW3?}8V;R$g{N(%t$DirK^eEiu=?OJ_69SGAwLK(&ll#T@{7HbPzp&n^
zj{C`>bKZf7*FaDY)L@V)z7G#_K2|{5zPjMpNX+&JUx(n-vhk?n@30(*+LT1@;+W;~
zX+t5jaq1U7Rz>xO(I@B%O}5U5B;Y#!V&slZ!RQ|sBCOv&>v@F4T?3+6fY53Ygy5X5
za&5JtV1+gqs5R>Oz&Zczm?8;~G3t6_!KIl5I4R(CUxt$akn^>Y$7yg&=CPu+?_tGD
zD}J8|LL(9@R-cKglGGD5=;7l+&jS~D|8b$ldfaVira=;5Y;&kc{W3V$s!c?~`Azhr
zHq)w5;a&8t3qJ!sH(CviA2ZPXRWgCjhjx^yb!`=Mg&V|&7<^s`YQK{IHe&ja9ev(r
z9L-E@Fdeo^$<9i%Dck6y>t9?$Vp5lGCN9H5YGcSjSGe?j;;6$-*x)SY>7D*(9wJek
z{*fg{f=mu4xKl2|pK`=B&*D@27*ow(-nr`5PgWkwQvGvwqeBL`=uW~n1|hjSF(qQW%qdc97X^m=3j*cEXt%8oDZ
z5l}SXE!Y;^xtK27tMd#1H&v%L`CltkgfUG;W_t-~V_gFlP^&WyO6ZEXGx%7za155`
zpiYGhbqflxtKQJXtcq{vZchd2mA?O_9O(LyULwg%9msB?X=teA;oqX8AceUYvDeKP
zGI+ZzSSNjKS3FFVXK>no6L5?v(pfXj>aI65$SLr&R=U#IU>);xZnY->$*R(sC
zA+^mD&t}#5(Jqh_2u6J~Vfqv@_T8nft?B~|Lk|WHHAa&!kp<-o_ywcJ>OEqI{W(^c
zHC%cy1De{qQ}s1w_tfq$3E)584Z>)Of^GkbUo~4NK)$ZT5icq$*+~F2NQ(gCYsM)?
zWK4A#5!hDz5jQ|H3ddDz@IUuZ&CxJOwl?91#2JcfjM_A`JCXp>io>VLN>nT6QG7nF7d-ZD?I@Y6=pcO7*k})#7>wGBl@iq|42UJ-j4>o)z
zV8TN?8{%<L*x
zuG*d3?SpQo@D07HLDPnC65v!G+mORN=P!!=GJn$DGX4s-am8U7`-dwz$a$BS1fYk8
zUR*zZyA(;kU~2qa)%%IQy+LrcV6LsWou6zv%G;-xbz~btsTi=BC7SQejFz{LF7{g7
z?w~=5-`X^fpB?cHm^Pb{pPsqjqI!2?d5c-*$o4pj;T?As=3Vy2Fg{FP*1nak^Xhqg
zuz`s|yZ#<`W{P>xrha;KLS0H_)d1q$t}4T=&2Eb2uAv^gFUD0ksh7@Fb|%uGL8S@5
z_5Ea|OTVNjdB&{7lL#5UFzC2(J?@0;aEo1J8+jYbd9H=s@Qm?-Ho#0Lh81BPzu9CD
z#c{gnEmc-Q)0GYyy-IzWi))qgd9M)NM>4J~!6&ChyPWzJqr)EcgS|7spa)zYw^bdc
zk%uI}cFM$JzDJF;#39Y2O?;UV&sQqqAmz_0c
z;!VKuPG^0M+gWm_`eB?To&NYG!MP|fxHIqgaNtPT&giNiKh&xxDzUMPu-{$?&hyVr>50=NumA0nJpPeKiiAf$U%lzE
ztZmrd-#MPK5vy6Xp>^4I;GzMR1UW`3NLN{qzwwl?0%3KCQqyEWP_~)|8En?y%5$p;%{P
zbJZMyI}oY&+Jp?M!X%6m3Vm!vM9*xVgl?z_Uq}#QiDIzk3qpz_?K1!SsqNMj*6iJd
z7cn#C+UvQGC1b;GEJqgm&vUw~32LgDqiKMrS%$a-}?vlT9t`+o9dNxzH7K`_oIM!YzBD?<M4B$7(tV?1RB_q?iYkH6XEML|K`i~B^0)x;&3
zG6`@MdfmHlQD$ixo7rM|7W&RpC`k8r!i0toF8dRMoML2KCJ#M&-Esxudh_
zVr@mbmNr8NZ?vjXGML(r10xMRN>Dh1s6TQ^|7xs$QPM`%(y97K$)
z8!xfFI`+>+r(7#{Q~&`E;@>ZLLnyB
z*9yKwfU3VOEZDZ-*$D1N7TiyOkl`kP@0^rVeY4eSs3D>{Lr*f!V
z>A8zKN93*4d$dfBj56@wlg!7*p4lAgmBCJT$CLLgIj~_l4mMUtjh!E7uB!`?li`ytX1#0qq?k$FFaDj*&pKEd43Ql`
zMV=8I2WA_na)Y&mKEvB?8p*P@`#RUNzQU-FNPzu1H64E62~%ydf=~6!u$mY
z6!EypuK;7-4wJ%7i%dE<{p>hyI!4Y&vhKR(4O_fM33GEhYEP-4YaRC0H@~9(t_%mC
z1Btb*37f_1F`WBqZJIRIaycY`9SKlj>CEE?jC5-#ag_aeNZ4W^pHLT47Z(wo`z
z`_rqB-q?DZt~~^q1$qDQRa5u~x>KQ}fD{#+P9ep`Y;0wDT0Qb_#(#Wl;6dV%r`#
z=Q&L!WGd?5%>4t%sZ}^zFIUQ0gt*Q~=`(Pg%~guK6%mT(FI)3D)?=>=h#04dhY;!F
z(8{8f6%a`UKTkHc>vyLHe#M-DU$!pX=L&Qi;Ajn`6)WKhxix2!^E&1iLs_XDfN3T6
zQUD_c^;Z`U!c0w9jyG1fR>j`$utn1`pBa5q(zI${5V;;dvLWF(LmaP4dCY
zRlln~{T2R*1Cw^TTRprZKl!{nq2MyGT1L->{iAB4{_=y9
z^$J%Mvm$xj(85DAs{;x>Xb($Ry<0w~ecn)G&gFFrpLxg*B=~MdmXyG+WwX)Bb-Np<
z_`{FT*}l#@4}sG#hkdGhrZD`q
zDcfCfa){UJt!!AcnCw2H6k#%}7zO{t9O2!R~>${d5
z!zY)hDP3W`~_m`u6*c3MjQ0)2keV)Nb5Nn?xj=_3yunwt?#8X*sT~fEG;GBy&
zf}&Q&wC#FTB*C{?}4?$X_M1>zf0|rDKi^gmB4f
z^b+k&X`TIQ8OBMARszk)S^|i=-$Ol_c4orRxXO#V9D7RbuX;0CNy<6KkzJHT*
zA+)Xd;WDZj$bjwE03C=Ps3kk+|IH3k6c(a6oWFgWRyFL*5?LX$Se8k0V_Dv_A~h9Vok$*SoO9t
z1zr}%OS?o*uF3^SB7SGWC|QE;a~ILl6FUXcTeyG7vFa&&YRQ-ly|p=&t64^r)=y2V
zN!}RF`N^%Xsd~fECf0afC&yCVg~~BjDrO@<<&-D=+AICqau`R0)RaCzxcRF*01eg?F#b(m5FA{$@3Qn)3R;`h%-e=5I)v=YFvOdq!
zH^+3cr(7c9#~s?Fahnq-h(O;uV{DECXr2D1yG*ZIc{7I>*`P*$RE?FA9+*YHUK#Wn^;~H#@`^M*FXF@qrPhYWO_Fx
z{5NO9+FP3#CixxF)u7E=CH@|2`O`Jn^@!wOEjIL*5e=rAu<6pXRNOiAXoL(z2mNcW
z$(;{WO|XUBd0Nz>JFy9P{n&Wf&Z+p=c668JMq;erO|nmLnN0zZ-G>))JrvDx<-jY*
zgHg%I&%zAB>nX{g2*X|=8(?~gvV(Jv540k9_3o>yu^Z9k@l-3vm(kO_o#+8sauVQ^(Ex(-UtH4cg6V43%$g0z`J6ku+W7AMh>t7xy1yT-
zRky~U3!{ys3;&r4tMLo<)tNV+{UfebMZ{|bzH|=Qw$nTg4-HaqgFIs99^gbHTHO1
zYAlRD8hj7DvJjL)d;t!B!4AY6{`Pha7uU2xz-zd1o2n#0{iIIk-8>s<{r
zz&f_4r?>Y#2O~PnL#Cpted(b>)ohqwDH$-=DN!F6`)+5)53VIt@Ew2#eW1>ko!;J&
zPm6^`YuOZ87AET*ihSsL8SCX7!ak7zhPgj(S8)d&C{Z9k4lM?0mxYXt$%N2*&~i{U
z!;$%qcr!G4Pl_N+b~lN)hBC`442{Qm6WYn$FYlB(2>^gg_(=42Mm-YrB7V~-zh9ik
zS9*jkIr|3Q;{!}N{v9o5-fy_Urb(7F&<*`+JliA$N&|WUjqh{5&8U&PJU*0TI3u@K
z_5(o`osM2LTtM7;7dTuav1yUmB5VlPsZA~a^Tqs(4%GG)&*+j?cj=``Du7}nZonvK
zBgKBBR;MAa{S7$v_Qc_QzRY30LHNrSAz>d-lf(H0q3Umaf_K`UPmtyAl?GS?$U_`Y
zlZsIg558H4SLH)vrXQ;XuvY_rICnMB?5d9tVFce*W$p>syZ6dg%yX6xQ;(m&fjviH
zS)G)oR5_(y3q>Mw*CEU=wgire_mA|QOUYpRTj1{)b`z(%8R5p9`V(tiQkpL%ri-ua
zxmsnlrgd2#)5(=t0WBI2COb9|$d;dwPNX(P=b3%=*IA;hjYd}cV-%QYrx9Qw#rs_F
z2VLrnmYbF@_>qcxFfQ+))(E-Yb-lO-A?S|c&>ZCSsP4Fm42i;N*pL5O!jSC{tT_5_
zKh|izqCIX|+uPIF|Je|0PQY{o#DqG~{DQfx;v4&x0YQ$Cf+VLj7Ag>Bb^cz2P??4&
zeXMaNSeW2}Qa-@x{Tns2@_zGx#(U2>66=bTvq~yc@{WC_
z>6i}ni;ZYc)N+S%t{1*PxD;8swm16NfM<01mLb=*R8H!!TfQ`e6LYgLzOk!;);Y9sEo5oQK@gnmmll(-y_;HCb&N2umLL5w~+DSdYwKOUY
zT{8g0ty$Ez7STLkHM9ZQA?7{
z<|pyWgwV!I?`so7_T2Y5y>aLieP864WBr&f5bIO3?UkX$%NkR^YqM0ito)t=f!Ct|Ex>(>I`9%IiDExqi}HcEx8(IdSXA~
zI{3jsjZVIy_gU?f5`5M0ZuR;;V|RbHO`DhofqC^+lS?!rR0&(+WQl%m(Q9nm4tkEr
zHVuR-ELR_IntTL*CVMgW!k0RM$9s
zqNq~PV(SF*kyt_0aePj&+5zw`XUKKlF_hu`k(RX+lg(iuG!iAG*`;U4TjAJn&C)R)
z(h_xbi;UhMVqk9e&=+!cay-Oy8jxPaMhbT#0a>6-?JDSmYW|6y
z0z7+Aa-(X_X*IQSxl`$n_cCRjID_5%q^AO6HO0voxOhAC1Rqd%STxLakd$cPFRZ#r
zPWuqI7hbTznO1%`gOdO
zldx5}24?UUTjVwP=n1h0(1e4Y-0SL^IXP6hWKl}aU6IqwU*y+!DGn5#V-TTl=JV{I
zo2=Q0vVNzBOD>tS9Nyun7HNBFldeMejupUosbgs|XiZE;5LZ~v=GAliA+An^SW``F
z9zb24lmvjG^e+{_$G8Arx@uOosA#yfny`Q>doV;eu_{gb@CVyni=SoTcKpYdAq@_R;l4^(b9-7e4)q&goZRFMGhOkmc)sfaeqONVPZ
zLhZ}DraT>*Qg&rFyV1+tH_V%R2Rf;fkQq=3e+9BV+bwf8f0%c*85$bpjzSNffl<1|
z0jf_u4yVgR`c541VO#&FO2qYYKZq0r`!QDb*FA8?wuUQ1>oRh3g7(jgYf>M5Q}Axd
zji!XuP&f66X0=Qx-aWBk`v{WXX`12{F>wx48xzAT6`IXY^zvozrUhzbQLROV=JC)}
z3;hkGrM{|x%!0DxHA}HSe@TyR-!93vPemS|Sk*E;mTafx`@tKn$uIjl+9z7me|uS=
zd2FPFcg(%I%KTxkms60a#Fn+nY{O&Rta@+y93*=ykwfjLbAXkHQu=I}&o^_kE~{An
z&3KzTL4j&28#)2{o9*>JnVH0L+m3Y~QAKN|cnc0J#QDf#@T7`xq6V8o(hR}uU@RuT
zibv!ve@2ub+=3GpgeKGPaP-bpBUX4Ch%<3xweH>gTNO=JE`{GmBt(tQ)&aX&K1
z=T^by4d6@rzzyQ1ujyLncN3jfs~{OZN)Lk4fUkm2?$rY=u+vLX0qmUmej3wQkpUGr
zmV-<>v8TfEAnC~7BdPQrbS%1tzar$)KEH30GJX1fct(0A(HWmS=l>Lo%lB@xsTdwD
zPnT&jq?_No4nLg<7=YC_X5D;ae)VOr1tvj#*Y%{sv7=NuoODi>ZrA
z2_5*s2I{aE)JpI^-Eb(J$>rqPdtgi_=j|uYvI-g7_k6dZ%o3+hFVnXn>dk{2f;+41
z1(a^dPrKbt6XudAa>-S-3_980@{zH0NZ*;&6gVJyuuaQmfVYji^kTNugcLX=%$@qN
zBb{zXPP3o4O>}1tGSH}O_=+VIg5i=rz>n!1i;q5QZ(2ZEV*Y
z$+4gzIee~wP_-tb%VDp697C=j?QYbbBSyHHu%4JLMU`aqoc-~yu}(r|T?OXU^31@&
z^m1y$*b=xlcjXqY)e8?oY!AObO|-l_ChAU5o?F7bY)ls2Eq?vvaHeZT=$^P7#$c^;5U{c3%v|xH&Y`j
zj@-RBHTgBhA4C;-!<>sV^i>#_wIIK=oTM~@UGG=!_2a#V%UrT5L8m7TTd}oY6dL!-
zjf@UW%W4UqVQ;6wlaR&I6fzU3KB%k?<43xO`kH<2ntBFXPq9td=2?YzvAo*Q5=2Vs
zxq8_iMB5}SNnrDrC0y6?A9|9{a@V%56~6N;TmJh!+rx#03J?u;)BrGAJndA{rpQ+~+Y`;n-C)wNyn$*QY#{ykqa
zv%@Cw+%Lhh2Uf3~B~e1o%K6Hig`A}BKGZ9#8TL?;^%2<@6|<7)wNw0{r;!ex^?2Q-
zvZ2BnqhKY2OnhfuKNriU1
z)eUz!W03AO8!(}tE_eH(71La=wxVGL=uE|g@#d85g-aitSioxW{=Z@SMYfpYD9~cx
z5Xa#%ak6E8s}*(^J8tLh1vOCf{JTDcsEp&6ejBbk)soY+I^Du05#2q5%gDl|9p{Ph
zGR(e^(wkM5I&Rae4yX{W0so#3J3tJlM3tNplmdj<*U>UBduT7n@Dps;#q&ZT1B^BJ
z`VRf*jA#(UaDLWLZ7}UqWrcWwA~(pIh7?`SF30k$q0d=;X*z(xHq(vZZKGl{&@j0J
zI!jHz=zgbz*igzQ_aN-%{_ISoPpm(BJ8rC88p}U|
zEZ!A$+!HGiv(dN{I42uxvf|3h!s6P~(+c=;O%p(=!+jMKU3@^(<_it|@vlLmqCk7a
zWYU!XyaY&{#*{=yFU2KPP$mJm1~Nh|q=PUz^uWo$G4Y$;zfHGLEMoWW$%5xhH(09g
zW(Ji#@6xKD`||6Jb~y^shrCyV^Wt=ArwRQ%GYXM05qG8C!p|R~>$d;YO$!rg>&Rqd
z6u$7mb58zXwEiKtT+Blg;{=m8n2QH@4rvW*ctTv_A8Y*tNuef>byochj|1zH-E_Ua9C
zr}Gc^qa3+6J?h?n6RZtZ)1GM!r@FId{OwXtOo2A`NTg8OZ!kWlebwd>1M?F`n1Rf>
z7kSk=kg2k0=Tc#m*-~Otu?)m8sbUSas9-%!_|dwiUC7Giv!38BckOU+$vle$@Mz(B
zmTyKA0o|XB+g!odDW^JCDVZ9b{er5`kb4m@MYs}jm2fP6=)0Gip?Xx8{GWJhn~pm{
z9d`n+C~dj1s=(To?^s8IEMQ`N7&Tz94TbfO
z6*gTSJYGpN%JCN_q@Or*^EK?Q?Fy)WyKJ%oo;ODVx4w}p2g^(omacUe!y1>QE;)PX
zQ2lo!#OC~puaB~JbgzU&)9P`$7W~)lY(uPtnVneCDqeiC_-Wfkt09MDQDUMVWz+Rf
z1y{PIxLH+rL|Q3g`tLP<#p+=6`WKtgJ}$go7jvNTPyTgJ=R0ZAPLHlIMt`PwJv_V+E-#q8F{YPnuV~pXb?xO>r4dWq5o7FSKD4u@tCe^*bo}*5+?DyNn
z4e1~y_c%z;PNHhS^EaP_M?p5IiFq`rVm%CsUJOutnl;_M3fWE!@64UJN?{{***cN>
zt>EFjWWq#NHIDgIlRPB^)H$cOA#BL8B~{92n7L#Lmis$mPWmBl70^rrbnv;3tYYXV
zZ*a3b=BYwkzKvr-j$&KHY*-P3R&rB2QJcD+Pf)v8R&7J1hGURMGVE9+!Bhb$d0Nc!n*ulkJ%&2aKRt{Pr@9DTKI*)
zsG%r{Q*e(ZN2d4w%m??E*A1$wX6=gp9J37sKCD#Mm1hx(s*5a$xD6GDj?R~QwIV0b
zZLmq$)p{AXtQN%_PEphAr%}TCipw1}fcw0Rb7o(@i_xpqAUA8v>dh7zh0%>%^@At9
z55Z&7=}&kVXQNJP&CM*-e6wPzg|-5&+-pn}T#7WL6>>dWsC`&)49l!NmdIDtHpm2h
z*Bn0N|h_g6Xy4!2fcGoP_DD)U(H^v(){vG+sT8%Y3~wn;~u
zeQ?ZaEWu!W$yJ+Kru4kijY)IEk6XDy%Uh}LkTHPVaKpq#$mbvFt--=_h1_x4-f=pI
zFimneu^hh*A!pPVCgvlQMd~ya9hXs*SlP~y-P#Xc9J34ChkqoepJg3%buHM+$u;fg
zx0*Qe^$HE1D-eyW{b(CRpjMhU!O(P0kU4=j
zllhrIJ2L8(x+whfi4OmeEyaGl3b`0kJ*>EYUrfM5$&Cw~LP)^~H1{*eX|M7_qP?
z7($^(==0&Fvd9bn(t_{};l&HFaqu!4_!lo{MgD>Ezj
z=`%Cfk}C*Aq<}Tims`kc`|XEW3RREuzAUsqb}>+9$1H{VUR)|7D^
erflB+)o`zvb=%>e$MN6z&z~IrFYYNwlm89uno>Ie
literal 0
HcmV?d00001
diff --git a/data/index.json b/data/index.json
index bd0b9d88..1b6413ad 100644
--- a/data/index.json
+++ b/data/index.json
@@ -1,7 +1,8 @@
{
"configs": [
"/config.live.json",
- "/config.setup.json"
+ "/config.setup.json",
+ "/lang/lang.ru.json"
],
"title": "Главная",
"class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
@@ -12,41 +13,16 @@
"class": "alert-default"
},
{
- "type": "h4",
- "title": "Device ID: {{chipID}}"
- },
- {
- "type": "h4",
- "title": "IP address: {{ip}}"
- },
- {
- "type": "h4",
- "title": "Uptime: {{uptime}}"
- },
- {
- "type": "h4",
- "title": "Time: {{time}}"
- },
- {
- "type": "h4",
- "title": "Build version: {{firmware_version}}"
- },
- {
- "type": "h4",
- "title": "SPIFFS version: 2.3.3"
- },
- {
- "type": "hr"
- },
+ "type": "text",
+ "class": "alert alert-light",
+ "title": "
"
+ },
{
"type": "link",
"title": "Конфигурация устройства",
"action": "/?set.device",
"class": "btn btn-block btn-default"
},
- {
- "type": "hr"
- },
{
"type": "link",
"title": "Список других устройств в сети",
@@ -77,25 +53,6 @@
"action": "/?set.utilities",
"class": "btn btn-block btn-default"
},
- {
- "type": "h3",
- "name": "my-block",
- "style": "position:fixed;top:50%;left:50%;width:400px;margin-left:-200px;text-align:center;",
- "class": "hidden"
- },
- {
- "type": "hr"
- },
- {
- "type": "button",
- "title": "Обновить прошивку",
- "action": "/check",
- "response": "[[my-block]]",
- "class": "btn btn-block btn-default"
- },
- {
- "type": "hr"
- },
{
"type": "link",
"title": "Скачать приложение IoT Manager для android",
diff --git a/data/lang/lang.ru.json b/data/lang/lang.ru.json
index 9b80f156..9d4d1929 100644
--- a/data/lang/lang.ru.json
+++ b/data/lang/lang.ru.json
@@ -7,14 +7,32 @@
"SetUDPList": "Список других устройств в сети:",
- "SetUDPWarn1": "После нажатия на кнопку 'Переформировать список устройств' ждите примерно минуту, а затем обновите страницу и список появится вновь",
+ "SetUDPWarn1": "После нажатия на кнопку переформировать список устройств ждите примерно минуту, а затем обновите страницу и список появится вновь",
"SetUDPUpdateList":"Переформировать список устройств",
"SetUDPUpdatePage":"Обновить страницу",
"SetUDPNameOfDev":"Имя этого устройства:",
"SetUDPDateExchange":"Включить обмен данными между устройствами",
- "SetUDPWarn2":"Если обмен данными включен, то устройства будут обмениваться широковещательными пакетами udp для формирования списка устройств и для осуществления посылки настроек mqtt. Данный обмен создает дополнительную нагрузку на wifi сеть."
+ "SetUDPWarn2":"Если обмен данными включен, то устройства будут обмениваться широковещательными пакетами udp для формирования списка устройств и для осуществления посылки настроек mqtt. Данный обмен создает дополнительную нагрузку на wifi сеть.",
+ "SetWiFiNameOfDev":"Имя устройства:",
+ "SetWiFiRouterConnect":"Подключение к WiFi роутеру:",
+ "SetWiFiAccessPoint":"Точка доступа:",
+ "SetWiFiWeb":"Логин и пароль web interface:",
+ "SetWiFiTimeZone":"Временная зона:",
+ "SetWiFiNTP":"Сервер NTP:",
+ "SetWiFiWarn1":"Имя устройства должно состоять из английских букв и иметь длинну от 6 до 12 символов",
+ "SetWiFiWarn2":"После того как вы введете логин пароль от вашего wifi роутера необходимо нажать кнопку сохранить, а затем обязательно нажать кнопку перезагрузить устройство внизу этой страницы",
+ "SetWiFiWarn3":"Устройство постоянно сканирует сеть на наличие wifi. Если роутер отключен, то устройство автоматически перейдет в режим точки доступа. Когда wifi появится устройство автоматически подключится к роутеру снова, и выключит точку доступа",
+ "SetWiFiWarn4":"После изменения поля NTP сервер необходимо перезагрузить устройство",
+ "SetMQTTServerName":"Имя сервера:",
+ "SetMQTTPort":"Номер порта:",
+ "SetMQTTPrefix":"Префикс:",
+ "SetMQTTUserName":"Имя пользователя:",
+ "SetMQTTPassword":"Пароль:",
+ "SetMQTTSendSettings":"Отправить настройки MQTT с этого устройства на все остальные",
+ "SetMQTTWarn1":"Обратите внимание что поле префикс может состоять только из одного слова и одного разделителя: /prefix, вариант вида: /prefix1/prefix2 работать не будет. После изменения поля prefix необходимо перезагрузить устройство",
+ "SetMQTTWarn2":"Прежде чем нажимать на кнопку Отправить настройки MQTT сохрание их, если Вы их меняли. Настройки получат и перезапишут все устройства в локальной сети"
}
\ No newline at end of file
diff --git a/data/set.device.json b/data/set.device.json
index c35189ec..2cb731a6 100644
--- a/data/set.device.json
+++ b/data/set.device.json
@@ -2,6 +2,7 @@
"configs": [
"/config.setup.json",
"/config.option.json",
+ "/config.live.json",
"/lang/lang.ru.json"
],
"class": "col-sm-offset-1 col-sm-10",
@@ -11,6 +12,15 @@
"title": "{{name}}",
"class": "alert-default"
},
+ {
+ "type": "link",
+ "title": "{{ButMainPage}}",
+ "action": "/",
+ "class": "btn btn-block btn-default"
+ },
+ {
+ "type": "hr"
+ },
{
"type": "h4",
"title": "Device ID: {{chipID}}"
@@ -19,13 +29,21 @@
"type": "h4",
"title": "IP address: {{ip}}"
},
+ {
+ "type": "h4",
+ "title": "Time: {{time}}"
+ },
{
"type": "h4",
"title": "Uptime: {{uptime}}"
},
{
"type": "h4",
- "title": "Time: {{time}}"
+ "title": "Build version: {{firmware_version}}"
+ },
+ {
+ "type": "h4",
+ "title": "SPIFFS version: 2.3.3"
},
{
"type": "hr"
@@ -37,25 +55,25 @@
"style": "display:inline",
"title": {
"#": "{{SetDevPreset}}",
- "/preset?arg=1": "1.Вкл. выкл. локального реле",
- "/preset?arg=2": "2.Вкл. выкл. локального реле в определенное время",
- "/preset?arg=3": "3.Вкл. выкл. локального реле на определенный период времени",
- "/preset?arg=4": "4.Вкл. выкл. нескольких локальных реле кнопкой в приложении",
- "/preset?arg=5": "5.Вкл. выкл. локального реле физической кнопкой и кнопкой в приложении параллельно (для выключателя света)",
- "/preset?arg=6": "6.Вкл. выкл. нескольких удаленных реле кнопкой в приложении (нужно указать Device ID)",
- "/preset?arg=7": "7.Вкл. выкл. нескольких удаленных реле физической кнопкой (нужно указать Device ID)",
- "/preset?arg=8": "8.Широтно импульсная модуляция",
- "/preset?arg=9": "9.Сенсор DHT11 и логгирование",
- "/preset?arg=10": "10.Сенсор DHT22, DHT33, DHT44, AM2302, RHT03 и логгирование",
- "/preset?arg=11": "11.Аналоговый сенсор и логгирование",
- "/preset?arg=12": "12.Сенсор DS18B20 и логгирование",
- "/preset?arg=13": "13.Термостат на DS18B20 с переключением в ручной режим и логгированием",
- "/preset?arg=14": "14.Контроль уровня в баке на сенсорах: JSN-SR04T, HC-SR04, HY-SRF05 и логгирование (управление насосом)",
- "/preset?arg=15": "15.Датчик движения включающий свет",
- "/preset?arg=16": "16.Охранный датчик движения",
- "/preset?arg=17": "17.Система управления шаговыми двигателями на основе драйвера A4988 (открытие закрытие штор)",
- "/preset?arg=18": "18.Система управления сервоприводами",
- "/preset?arg=19": "Настройки по умолчанию"
+ "/set?preset=1": "1.Вкл. выкл. локального реле",
+ "/set?preset=2": "2.Вкл. выкл. локального реле в определенное время",
+ "/set?preset=3": "3.Вкл. выкл. локального реле на определенный период времени",
+ "/set?preset=4": "4.Вкл. выкл. нескольких локальных реле кнопкой в приложении",
+ "/set?preset=5": "5.Вкл. выкл. локального реле физической кнопкой и кнопкой в приложении параллельно (для выключателя света)",
+ "/set?preset=6": "6.Вкл. выкл. нескольких удаленных реле кнопкой в приложении (нужно указать Device ID)",
+ "/set?preset=7": "7.Вкл. выкл. нескольких удаленных реле физической кнопкой (нужно указать Device ID)",
+ "/set?preset=8": "8.Широтно импульсная модуляция",
+ "/set?preset=9": "9.Сенсор DHT11 и логгирование",
+ "/set?preset=10": "10.Сенсор DHT22, DHT33, DHT44, AM2302, RHT03 и логгирование",
+ "/set?preset=11": "11.Аналоговый сенсор и логгирование",
+ "/set?preset=12": "12.Сенсор DS18B20 и логгирование",
+ "/set?preset=13": "13.Термостат на DS18B20 с переключением в ручной режим и логгированием",
+ "/set?preset=14": "14.Контроль уровня в баке на сенсорах: JSN-SR04T, HC-SR04, HY-SRF05 и логгирование (управление насосом)",
+ "/set?preset=15": "15.Датчик движения включающий свет",
+ "/set?preset=16": "16.Охранный датчик движения",
+ "/set?preset=17": "17.Система управления шаговыми двигателями на основе драйвера A4988 (открытие закрытие штор)",
+ "/set?preset=18": "18.Система управления сервоприводами",
+ "/set?preset=19": "Настройки по умолчанию"
}
},
{
@@ -65,17 +83,11 @@
{
"type": "file",
"state": "firmware.c.txt",
- "style": "width:100%;height:400px",
+ "style": "width:100%;height:350px",
"title": "Сохранить",
"action": "/set?devinit",
"class": "btn btn-block btn-default"
},
- {
- "type": "link",
- "title": "Инструкция",
- "action": "https://github.com/DmitryBorisenko33/esp32-esp8266_iot-manager_modules_firmware/wiki/Instruction",
- "class": "btn btn-block btn-default"
- },
{
"type": "h2",
"title": "Сценарии"
@@ -90,25 +102,40 @@
{
"type": "file",
"state": "firmware.s.txt",
- "style": "width:100%;height:400px",
+ "style": "width:100%;height:350px",
"title": "Сохранить",
"action": "/set?sceninit",
- "class": "btn btn-block btn-success"
+ "class": "btn btn-block btn-default"
},
+
{
- "type": "hr"
+ "type": "link",
+ "title": "Инструкция к системе автоматизации",
+ "action": "https://github.com/DmitryBorisenko33/esp32-esp8266_iot-manager_modules_firmware/wiki/Instruction",
+ "class": "btn btn-block btn-default"
},
{
"type": "link",
"title": "Очистить логи сенсоров",
"action": "/set?cleanlog",
- "class": "btn btn-block btn-success"
+ "class": "btn btn-block btn-default"
},
{
- "type": "link",
- "title": "Главная",
- "action": "/",
- "class": "btn btn-block btn-danger btn-sm"
+ "type": "hr"
+ },
+ {
+ "type": "h3",
+ "name": "my-block",
+ "style": "position:fixed;top:50%;left:50%;width:400px;margin-left:-200px;text-align:center;",
+ "class": "hidden"
+ },
+
+ {
+ "type": "button",
+ "title": "Обновить прошивку устройства",
+ "action": "/check",
+ "response": "[[my-block]]",
+ "class": "btn btn-block btn-default"
}
]
}
\ No newline at end of file
diff --git a/data/set.mqtt.json b/data/set.mqtt.json
index 0bd4acc5..a088c2dc 100644
--- a/data/set.mqtt.json
+++ b/data/set.mqtt.json
@@ -1,68 +1,85 @@
{
"configs": [
- "/config.setup.json"
+ "/config.setup.json",
+ "/lang/lang.ru.json"
],
"class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
"content": [
{
"type": "h5",
"title": "{{name}}",
- "class": "alert-warning"
+ "class": "alert-default"
+
},
{
- "type": "text",
- "class": "alert alert-warning",
- "title": "Обратите внимание что поле prefix может состоять только из одного слова и одного разделителя: /prefix, вариант вида: /prefix1/prefix2 работать не будет. После изменения поля prefix необходимо перезагрузить устройство"
+ "type": "link",
+ "title": "{{ButMainPage}}",
+ "action": "/",
+ "class": "btn btn-block btn-default"
},
+ {
+ "type": "hr"
+ },
+
{
"type": "h4",
- "title": "Server name:"
+ "title": "{{SetMQTTServerName}}",
+ "style": "width:60%;float:left;"
},
{
"type": "input",
"title": "",
- "name": "1",
- "state": "{{mqttServer}}"
+ "name": "mqttServer-arg",
+ "state": "{{mqttServer}}",
+ "style": "width:40%;float:right"
},
{
"type": "h4",
- "title": "Port:"
+ "title": "{{SetMQTTPort}}",
+ "style": "width:60%;float:left;"
},
{
"type": "input",
"title": "",
- "name": "2",
- "state": "{{mqttPort}}"
+ "name": "mqttPort-arg",
+ "state": "{{mqttPort}}",
+ "style": "width:40%;float:right"
},
{
"type": "h4",
- "title": "Prefix:"
+ "title": "{{SetMQTTPrefix}}",
+ "style": "width:60%;float:left;"
},
{
"type": "input",
"title": "",
- "name": "3",
- "state": "{{mqttPrefix}}"
+ "name": "mqttPrefix-arg",
+ "state": "{{mqttPrefix}}",
+ "style": "width:40%;float:right"
},
{
"type": "h4",
- "title": "User name:"
+ "title": "{{SetMQTTUserName}}",
+ "style": "width:60%;float:left;"
},
{
"type": "input",
"title": "",
- "name": "4",
- "state": "{{mqttUser}}"
+ "name": "mqttUser-arg",
+ "state": "{{mqttUser}}",
+ "style": "width:40%;float:right"
},
{
"type": "h4",
- "title": "Password:"
+ "title": "{{SetMQTTPassword}}",
+ "style": "width:60%;float:left;"
},
{
"type": "input",
"title": "",
- "name": "5",
- "state": "{{mqttPass}}"
+ "name": "mqttPass-arg",
+ "state": "{{mqttPass}}",
+ "style": "width:40%;float:right"
},
{
"type": "h3",
@@ -70,42 +87,47 @@
"style": "position:fixed;top:30%;left:50%;width:400px;margin-left:-200px;text-align:center;",
"class": "hidden"
},
+
{
- "type": "text",
- "class": "alert alert-warning",
- "title": "Прежде чем нажимать на кнопку 'Отправить настройки MQTT' сохрание их, если Вы их меняли. Настройки получат и перезапишут все устройства в локальной сети"
+ "type": "button",
+ "title": "{{ButSave}}",
+ "style": "width:100%;float:left;",
+ "action": "set?mqttServer=[[mqttServer-arg]]&mqttPort=[[mqttPort-arg]]&mqttPrefix=[[mqttPrefix-arg]]&mqttUser=[[mqttUser-arg]]&mqttPass=[[mqttPass-arg]]",
+ "class": "btn btn-block btn-default"
},
{
"type": "button",
- "title": "Сохранить",
- "action": "mqttSave?mqttServer=[[1]]&mqttPort=[[2]]&mqttPrefix=[[3]]&mqttUser=[[4]]&mqttPass=[[5]]",
- "class": "btn btn-block btn-success"
- },
- {
- "type": "button",
- "title": "Отправить настройки MQTT с этого устройства на все остальные",
- "action": "udp?arg=2",
- "class": "btn btn-block btn-success"
+ "style": "width:100%;float:left;",
+ "title": "{{SetMQTTSendSettings}}",
+ "action": "set?mqttsend",
+ "class": "btn btn-block btn-default"
},
{
"type": "button",
+ "style": "width:100%;float:left;",
"title": "Проверить соединение с MQTT",
- "action": "mqttCheck",
+ "action": "set?mqttcheck",
"response": "[[my-block]]",
- "class": "btn btn-block btn-success"
+ "class": "btn btn-block btn-default"
+ },
+ {
+ "type": "text",
+ "style": "width:100%;float:left;",
+ "title": ""
+
+ },
+ {
+ "type": "text",
+ "style": "width:100%;float:left;",
+ "title": ""
},
{
"type": "link",
+ "style": "width:100%;float:left;",
"title": "Перезагрузить устройство",
"action": "javascript:if(confirm(renameBlock(jsonResponse,'Перезагрузить?'))){send_request(this,'/restart?device=ok');}",
- "class": "btn btn-block btn-success"
- },
- {
- "type": "link",
- "title": "Главная",
- "action": "/",
- "class": "btn btn-block btn-danger btn-sm"
+ "class": "btn btn-block btn-danger"
}
]
}
\ No newline at end of file
diff --git a/data/set.push.json b/data/set.push.json
index eac5a080..555797e4 100644
--- a/data/set.push.json
+++ b/data/set.push.json
@@ -1,46 +1,51 @@
{
- "configs": [
-"/config.setup.json"
- ],
- "class":"col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
- "content": [
- {
- "type": "h5",
- "title": "{{name}}",
- "class":"alert-warning"
- },
- {
- "type": "h4",
- "title": "Device id:"
- },
-{
- "type": "input",
- "title": "",
- "name":"1",
- "state": "{{pushingbox_id}}"
- },
-
-{
- "type": "button",
- "title":"Сохранить",
- "action": "pushingboxDate?pushingbox_id=[[1]]",
- "class": "btn btn-block btn-success",
- "style": "width:100%;display:inline"
- },
-{
- "type": "hr"
- },
- {
- "type": "link",
- "title": "Перезагрузить устройство",
- "action": "javascript:if(confirm(renameBlock(jsonResponse,'Перезагрузить?'))){send_request(this,'/restart?device=ok');}",
- "class": "btn btn-block btn-warning"
- },
- {
- "type": "link",
- "title": "Главная",
- "action": "/",
- "class": "btn btn-block btn-danger btn-sm"
- }
- ]
-}
+ "configs": [
+ "/config.setup.json",
+ "/lang/lang.ru.json"
+ ],
+ "class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
+ "content": [
+ {
+ "type": "h5",
+ "title": "{{name}}",
+ "class": "alert-default"
+ },
+ {
+ "type": "link",
+ "title": "{{ButMainPage}}",
+ "action": "/",
+ "class": "btn btn-block btn-default"
+ },
+ {
+ "type": "hr"
+ },
+ {
+ "type": "h4",
+ "style": "width:60%;float:left;",
+ "title": "Device id:"
+ },
+ {
+ "type": "input",
+ "title": "",
+ "name": "push-arg",
+ "style": "width:40%;float:right",
+ "state": "{{pushingboxid}}"
+ },
+ {
+ "type": "button",
+ "title": "{{ButSave}}",
+ "action": "set?pushingboxid=[[push-arg]]",
+ "class": "btn btn-block btn-default",
+ "style": "width:100%;display:inline"
+ },
+ {
+ "type": "hr"
+ },
+ {
+ "type": "link",
+ "title": "Перезагрузить устройство",
+ "action": "javascript:if(confirm(renameBlock(jsonResponse,'Перезагрузить?'))){send_request(this,'/restart?device=ok');}",
+ "class": "btn btn-block btn-danger"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/data/set.udp.json b/data/set.udp.json
index 7619150c..6bea3042 100644
--- a/data/set.udp.json
+++ b/data/set.udp.json
@@ -11,6 +11,15 @@
"title": "{{name}}",
"class": "alert-default"
},
+ {
+ "type": "link",
+ "title": "{{ButMainPage}}",
+ "action": "/",
+ "class": "btn btn-block btn-default"
+ },
+ {
+ "type": "hr"
+ },
{
"type": "h3",
"title": "{{SetUDPList}}"
@@ -35,13 +44,13 @@
{
"type": "link",
"title": "{{SetUDPUpdateList}}",
- "action": "set?updatelist",
+ "action": "/set?updatelist",
"class": "btn btn-block btn-default"
},
{
"type": "link",
"title": "{{SetUDPUpdatePage}}",
- "action": "set?updatepage",
+ "action": "/set?updatepage",
"class": "btn btn-block btn-default"
},
{
@@ -49,7 +58,7 @@
},
{
"type": "text",
- "title": "",
+ "title": "",
"style": "width:100%;float:left;"
},
{
@@ -59,14 +68,14 @@
{
"type": "input",
"title": "{{SetUDPNameOfDev}}",
- "name": "dev_name",
+ "name": "devname-arg",
"state": "{{name}}",
"pattern": "[A-Za-z0-9]{6,12}"
},
{
"type": "button",
"title": "{{ButSave}}",
- "action": "name?arg=[[dev_name]]",
+ "action": "/set?devname=[[devname-arg]]",
"class": "btn btn-block btn-default"
},
{
@@ -81,16 +90,7 @@
},
{
"type": "text",
- "title": ""
- },
- {
- "type": "hr"
- },
- {
- "type": "link",
- "title": "{{ButMainPage}}",
- "action": "/",
- "class": "btn btn-block btn-default"
+ "title": ""
}
]
}
\ No newline at end of file
diff --git a/data/set.utilities.json b/data/set.utilities.json
index ee82a0c0..92769f85 100644
--- a/data/set.utilities.json
+++ b/data/set.utilities.json
@@ -1,7 +1,8 @@
{
"configs": [
"/config.live.json",
- "/config.setup.json"
+ "/config.setup.json",
+ "/lang/lang.ru.json"
],
"title": "Главная",
"class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
@@ -9,7 +10,13 @@
{
"type": "h5",
"title": "{{name}}",
- "class": "alert-warning"
+ "class": "alert-default"
+ },
+ {
+ "type": "link",
+ "title": "{{ButMainPage}}",
+ "action": "/",
+ "class": "btn btn-block btn-default"
},
{
"type": "hr"
@@ -25,17 +32,8 @@
{
"type": "link",
"title": "Сканировать",
- "action": "/init?arg=5",
- "class": "btn btn-block btn-success"
- },
- {
- "type": "hr"
- },
- {
- "type": "link",
- "title": "Главная",
- "action": "/",
- "class": "btn btn-block btn-danger"
+ "action": "/set?itoc",
+ "class": "btn btn-block btn-default"
}
]
}
\ No newline at end of file
diff --git a/data/set.wifi.json b/data/set.wifi.json
index 18ebf108..01e5054b 100644
--- a/data/set.wifi.json
+++ b/data/set.wifi.json
@@ -1,6 +1,7 @@
{
"configs": [
- "/config.setup.json"
+ "/config.setup.json",
+ "/lang/lang.ru.json"
],
"title": "Конфигурация",
"class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6",
@@ -8,146 +9,154 @@
{
"type": "h5",
"title": "{{name}}",
- "class": "alert-warning"
+ "class": "alert-default"
},
{
"type": "link",
- "title": "Главная",
+ "title": "{{ButMainPage}}",
"action": "/",
- "class": "btn btn-block btn-danger"
+ "class": "btn btn-block btn-default"
},
{
"type": "hr"
},
{
- "type": "h2",
- "title": "Имя устройства"
+ "type": "h3",
+ "title": "{{SetWiFiNameOfDev}}"
},
{
"type": "input",
- "title": "Имя устройства",
- "name": "dev_name",
+ "title": "{{SetWiFiNameOfDev}}",
+ "name": "devname-arg",
"state": "{{name}}",
"pattern": "[A-Za-z0-9]{6,12}"
},
{
"type": "button",
- "title": "Сохранить",
- "action": "name?arg=[[dev_name]]",
- "class": "btn btn-block btn-success"
+ "title": "{{ButSave}}",
+ "action": "set?devname=[[devname-arg]]",
+ "class": "btn btn-block btn-default"
+ },
+ {
+ "type": "text",
+ "title": ""
},
{
"type": "hr"
},
{
- "type": "h2",
- "title": "Подключение к Wi-Fi роутеру"
+ "type": "h3",
+ "title": "{{SetWiFiRouterConnect}}"
},
{
"type": "input",
- "title": "Сеть",
- "name": "ssid",
- "state": "{{ssid}}"
+ "title": "",
+ "name": "routerssid-arg",
+ "state": "{{routerssid}}"
},
{
"type": "password",
- "title": "Введите пароль",
- "name": "ssidPass",
- "state": "{{password}}"
+ "title": "",
+ "name": "routerpass-arg",
+ "state": "{{routerpass}}"
},
{
"type": "button",
- "title": "Сохранить",
- "class": "btn btn-block btn-success",
- "action": "ssid?ssid=[[ssid]]&password=[[ssidPass]]"
+ "title": "{{ButSave}}",
+ "class": "btn btn-block btn-default",
+ "action": "set?routerssid=[[routerssid-arg]]&routerpass=[[routerpass-arg]]"
+ },
+ {
+ "type": "text",
+ "title": ""
},
{
"type": "hr"
},
{
- "type": "h2",
- "title": "Точка доступа"
+ "type": "h3",
+ "title": "{{SetWiFiAccessPoint}}"
},
{
"type": "input",
- "title": "Имя WI-FI сети",
- "name": "ssidap",
- "state": "{{ssidAP}}",
+ "title": "",
+ "name": "apssid-arg",
+ "state": "{{apssid}}",
"pattern": ".{1,20}"
},
{
"type": "password",
- "title": "Пароль",
- "name": "ssidApPass",
- "state": "{{passwordAP}}",
+ "title": "",
+ "name": "appass-arg",
+ "state": "{{appass}}",
"pattern": ".{8,20}"
},
{
"type": "button",
- "title": "Сохранить",
- "action": "ssidap?ssidAP=[[ssidap]]&passwordAP=[[ssidApPass]]",
- "class": "btn btn-block btn-success"
+ "title": "{{ButSave}}",
+ "action": "set?apssid=[[apssid-arg]]&appass=[[appass-arg]]",
+ "class": "btn btn-block btn-default"
+ },
+ {
+ "type": "text",
+ "title": ""
},
{
"type": "hr"
},
{
- "type": "h2",
- "title": "Логин и пароль web interface"
+ "type": "h3",
+ "title": "{{SetWiFiWeb}}"
},
{
"type": "input",
"title": "Логин",
- "name": "web-login",
- "state": "{{web_login}}",
+ "name": "weblogin-arg",
+ "state": "{{weblogin}}",
"pattern": ".{1,20}"
},
{
"type": "password",
"title": "Пароль",
- "name": "web-pass",
- "state": "{{web_pass}}",
+ "name": "webpass-arg",
+ "state": "{{webpass}}",
"pattern": ".{1,20}"
},
{
"type": "button",
- "title": "Сохранить",
- "action": "web?web_login=[[web-login]]&web_pass=[[web-pass]]",
- "class": "btn btn-block btn-success"
+ "title": "{{ButSave}}",
+ "action": "set?weblogin=[[weblogin-arg]]&webpass=[[webpass-arg]]",
+ "class": "btn btn-block btn-default"
},
{
"type": "hr"
},
{
- "type": "h2",
- "title": "Временная зона"
+ "type": "h3",
+ "title": "{{SetWiFiTimeZone}}"
},
{
"type": "input",
- "title": "Временная зона",
- "name": "1",
+ "title": "",
+ "name": "timezone-arg",
"state": "{{timezone}}",
"pattern": ".{1,20}"
},
{
"type": "input",
- "title": "Название ntp сервера",
- "name": "2",
+ "title": "",
+ "name": "ntp-arg",
"state": "{{ntp}}"
},
{
"type": "button",
- "title": "Сохранить",
- "action": "time?timezone=[[1]]&ntp=[[2]]",
- "class": "btn btn-block btn-success"
- },
- {
- "type": "hr"
+ "title": "{{ButSave}}",
+ "action": "set?timezone=[[timezone-arg]]&ntp=[[ntp-arg]]",
+ "class": "btn btn-block btn-default"
},
{
"type": "text",
- "class": "alert alert-warning",
- "title": "После изменения поля 'NTP сервер' необходимо перезагрузить устройство"
+ "title": ""
},
{
"type": "hr"
@@ -155,8 +164,8 @@
{
"type": "link",
"title": "Перезагрузить устройство",
- "action": "javascript:if(confirm(renameBlock(jsonResponse,'Перезагрузить?'))){send_request(this,'/restart?device=ok');}",
- "class": "btn btn-block btn-warning"
+ "action": "javascript:if(confirm(renameBlock(jsonResponse,'Перезагрузить?'))){send_request(this,'/set?device=ok');}",
+ "class": "btn btn-block btn-danger"
}
]
}
\ No newline at end of file
diff --git a/esp32-esp8266_iot-manager_modules_firmware.ino b/esp32-esp8266_iot-manager_modules_firmware.ino
index 675d6a53..77f73704 100644
--- a/esp32-esp8266_iot-manager_modules_firmware.ino
+++ b/esp32-esp8266_iot-manager_modules_firmware.ino
@@ -17,7 +17,7 @@ void setup() {
ROUTER_Connecting();
Serial.println("[V] ROUTER_Connecting");
//--------------------------------------------------------------
- statistics_init();
+ uptime_init();
Serial.println("[V] statistics_init");
//--------------------------------------------------------------
initUpgrade();
diff --git a/main.ino b/main.ino
index 3f505ae8..f9c47149 100644
--- a/main.ino
+++ b/main.ino
@@ -171,7 +171,7 @@ String u64toStr(uint64_t input)
//==============================================================================================================
//=============================================CONFIG===========================================================
void saveConfig () {
- writeFile("config.json", configSetup);
+ writeFile("config.json", configSetupJson);
}
//==============================================================================================================
//=============================================STRING===========================================================
@@ -286,7 +286,7 @@ String safeDataToFile(String data, String Folder) {
fileName = Folder + "/" + fileName + ".txt";
// addFile(fileName, GetTime() + "/" + data);
Serial.println(fileName);
- jsonWriteStr(configJson, "test", fileName);
+ jsonWriteStr(configLiveJson, "test", fileName);
}
// ------------- Чтение файла в строку -------------------------------------------------------------------------------
String readFile(String fileName, size_t len ) {
@@ -350,7 +350,7 @@ String readFileString(String fileName, String found) {
//=======================================УПРАВЛЕНИЕ ВИДЖЕТАМИ MQTT=========================================================
void sendCONFIG(String topik, String widgetConfig, String key, String date) {
yield();
- topik = jsonReadStr(configSetup, "mqttPrefix") + "/" + chipID + "/" + topik + "/status";
+ topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/" + topik + "/status";
String outer = "{\"widgetConfig\":";
String inner = "{\"";
inner = inner + key;
diff --git a/mqtt.ino b/mqtt.ino
index 9d38e247..abc25564 100644
--- a/mqtt.ino
+++ b/mqtt.ino
@@ -1,7 +1,6 @@
//===============================================ИНИЦИАЛИЗАЦИЯ================================================
void MQTT_init() {
ts.add(WIFI_MQTT_CONNECTION_CHECK, wifi_mqtt_reconnecting, [&](void*) {
- up_time();
if (WiFi.status() == WL_CONNECTED) {
Serial.println("[VV] WiFi-ok");
if (client_mqtt.connected()) {
@@ -41,21 +40,21 @@ void handleMQTT() {
}
//===============================================ПОДКЛЮЧЕНИЕ========================================================
boolean MQTT_Connecting() {
- String mqtt_server = jsonReadStr(configSetup, "mqttServer");
+ String mqtt_server = jsonReadStr(configSetupJson, "mqttServer");
if ((mqtt_server != "")) {
Serial.println("[E] Lost MQTT connection, start reconnecting");
led_blink("fast");
- client_mqtt.setServer(mqtt_server.c_str(), jsonReadInt(configSetup, "mqttPort"));
+ client_mqtt.setServer(mqtt_server.c_str(), jsonReadInt(configSetupJson, "mqttPort"));
if (WiFi.status() == WL_CONNECTED) {
if (!client_mqtt.connected()) {
Serial.println("[V] Connecting to MQTT server commenced");
- if (client_mqtt.connect(chipID.c_str(), jsonReadStr(configSetup, "mqttUser").c_str(), jsonReadStr(configSetup, "mqttPass").c_str())) {
+ if (client_mqtt.connect(chipID.c_str(), jsonReadStr(configSetupJson, "mqttUser").c_str(), jsonReadStr(configSetupJson, "mqttPass").c_str())) {
Serial.println("[VV] MQTT connected");
led_blink("off");
client_mqtt.setCallback(callback);
- client_mqtt.subscribe(jsonReadStr(configSetup, "mqttPrefix").c_str()); // Для приема получения HELLOW и подтверждения связи
- client_mqtt.subscribe((jsonReadStr(configSetup, "mqttPrefix") + "/" + chipID + "/+/control").c_str()); // Подписываемся на топики control
- client_mqtt.subscribe((jsonReadStr(configSetup, "mqttPrefix") + "/" + chipID + "/order").c_str()); // Подписываемся на топики order
+ client_mqtt.subscribe(jsonReadStr(configSetupJson, "mqttPrefix").c_str()); // Для приема получения HELLOW и подтверждения связи
+ client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/+/control").c_str()); // Подписываемся на топики control
+ client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/order").c_str()); // Подписываемся на топики order
Serial.println("[V] Callback set, subscribe done");
return true;
} else {
@@ -123,34 +122,34 @@ void outcoming_date() {
//======================================CONFIG==================================================
boolean sendMQTT(String end_of_topik, String data) {
- String topik = jsonReadStr(configSetup, "mqttPrefix") + "/" + chipID + "/" + end_of_topik;
+ String topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/" + end_of_topik;
boolean send_status = client_mqtt.beginPublish(topik.c_str(), data.length(), false);
client_mqtt.print(data);
client_mqtt.endPublish();
return send_status;
}
boolean sendCHART(String topik, String data) {
- topik = jsonReadStr(configSetup, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
+ topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
boolean send_status = client_mqtt.beginPublish(topik.c_str(), data.length(), false);
client_mqtt.print(data);
client_mqtt.endPublish();
return send_status;
}
boolean sendCHART_test(String topik, String data) {
- topik = jsonReadStr(configSetup, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
+ topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
boolean send_status = client_mqtt.publish (topik.c_str(), data.c_str(), false);
return send_status;
}
//======================================STATUS==================================================
void sendSTATUS(String topik, String state) {
- topik = jsonReadStr(configSetup, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
+ topik = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipID + "/" + topik + "/" + "status";
String json_ = "{}";
jsonWriteStr(json_, "status", state);
int send_status = client_mqtt.publish (topik.c_str(), json_.c_str(), false);
}
//======================================CONTROL==================================================
void sendCONTROL(String id, String topik, String state) {
- String all_line = jsonReadStr(configSetup, "mqttPrefix") + "/" + id + "/" + topik + "/control";
+ String all_line = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + id + "/" + topik + "/control";
int send_status = client_mqtt.publish (all_line.c_str(), state.c_str(), false);
}
@@ -197,7 +196,7 @@ void sendAllWigets() {
//=====================================================ОТПРАВЛЯЕМ ДАННЫЕ В ВИДЖЕТЫ ПРИ ОБНОВЛЕНИИ СТРАНИЦЫ========================================================
void sendAllData() { //берет строку json и ключи превращает в топики а значения колючей в них посылает
- String current_config = configJson; //{"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"}
+ String current_config = configLiveJson; //{"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"}
getMemoryLoad("[i] after send all date");
current_config.replace("{", "");
current_config.replace("}", ""); //"name":"MODULES","lang":"","ip":"192.168.43.60","DS":"34.00","rel1":"1","rel2":"1"
@@ -250,7 +249,7 @@ String stateMQTT() {
/*void scenario_devices_topiks_subscribe() {
//SCENARIO ANALOG > 5 800324-1458415 rel1 0
- if (jsonReadStr(configSetup, "scen") == "1") {
+ if (jsonReadStr(configSetupJson, "scen") == "1") {
//String all_text = readFile("firmware.s.txt", 1024) + "\r\n";
String all_text = scenario + "\r\n";
all_text.replace("\r\n", "\n");
@@ -259,7 +258,7 @@ String stateMQTT() {
String line_ = selectToMarker (all_text, "\n");
String id = selectFromMarkerToMarker(line_, " ", 4);
if (id != "not found") {
- client_mqtt.subscribe((jsonReadStr(configSetup, "mqttPrefix") + "/" + id + "/+/status").c_str(), 0);
+ client_mqtt.subscribe((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + id + "/+/status").c_str(), 0);
Serial.println("subscribed to device, id: " + id);
}
all_text = deleteBeforeDelimiter(all_text, "\n");
@@ -269,7 +268,7 @@ String stateMQTT() {
*/
/*void scenario_devices_test_msg_send() {
- if (jsonReadStr(configSetup, "scen") == "1") {
+ if (jsonReadStr(configSetupJson, "scen") == "1") {
String all_text = scenario + "\r\n";
all_text.replace("\r\n", "\n");
@@ -279,7 +278,7 @@ String stateMQTT() {
String id = selectFromMarkerToMarker(line_, " ", 4);
if (id != "not found") {
//Serial.println();
- Serial.println(client_mqtt.publish ((jsonReadStr(configSetup, "mqttPrefix") + "/" + id).c_str(), "CHECK", true));
+ Serial.println(client_mqtt.publish ((jsonReadStr(configSetupJson, "mqttPrefix") + "/" + id).c_str(), "CHECK", true));
}
all_text = deleteBeforeDelimiter(all_text, "\n");
diff --git a/push_pushingbox.ino b/push_pushingbox.ino
index 169b6c33..9cb062c4 100644
--- a/push_pushingbox.ino
+++ b/push_pushingbox.ino
@@ -9,7 +9,7 @@ void pushControl() {
static String body_old;
const char* logServer = "api.pushingbox.com";
- String deviceId = jsonReadStr(configSetup, "pushingbox_id");
+ String deviceId = jsonReadStr(configSetupJson, "pushingboxid");
Serial.println("- starting client");
diff --git a/set.h b/set.h
index 18f53186..d32c3576 100644
--- a/set.h
+++ b/set.h
@@ -1,7 +1,7 @@
/*******************************************************************
**********************FIRMWARE SETTINGS****************************
******************************************************************/
- //dev
+//dev
String firmware_version = "2.3.3";
boolean mb_4_of_memory = true;
//#define OTA_enable
@@ -97,9 +97,12 @@ AsyncEventSource events("/events");
#include
#include
-enum {ROUTER_SEARCHING, WIFI_MQTT_CONNECTION_CHECK, SENSORS, STEPPER1, STEPPER2, LOG1, LOG2, LOG3, LOG4, LOG5, TIMER_COUNTDOWN, TIME, TIME_SYNC, STATISTICS, UDP, UDP_DB, TEST };
+enum {ROUTER_SEARCHING, WIFI_MQTT_CONNECTION_CHECK, SENSORS, STEPPER1, STEPPER2, LOG1, LOG2, LOG3, LOG4, LOG5, TIMER_COUNTDOWN, TIME, TIME_SYNC, STATISTICS, UPTIME, UDP, UDP_DB, TEST };
TickerScheduler ts(TEST + 1);
+#include
+uptime_interval myUpTime(10);
+
#include
WiFiClient espClient;
PubSubClient client_mqtt(espClient);
@@ -124,7 +127,7 @@ OneWire *oneWire;
DallasTemperature sensors;
#endif
-#ifdef dht_enable
+#ifdef dht_enable
#include
DHTesp dht;
#endif
@@ -154,9 +157,9 @@ Adafruit_Sensor *bme_humidity = bme.getHumiditySensor();
boolean just_load = true;
const char* hostName = "IoT Manager";
//JSON
-String configSetup = "{}";
-String configJson = "{}";
-String optionJson = "{}";
+String configSetupJson = "{}"; //все настройки
+String configLiveJson = "{}"; //все данные с датчиков (связан с mqtt)
+String configOptionJson = "{}"; //для трансфера
//MQTT
String chipID = "";
String prex;
diff --git a/udp.ino b/udp.ino
index 94c99d23..88d36725 100644
--- a/udp.ino
+++ b/udp.ino
@@ -14,10 +14,10 @@ void UDP_init() {
udp_period = random(50000, 60000);
ts.add(UDP, udp_period, [&](void*) {
- if (jsonReadStr(configSetup, "udponoff") == "1") {
+ if (jsonReadStr(configSetupJson, "udponoff") == "1") {
if (WiFi.status() == WL_CONNECTED) {
if (!udp_busy) {
- String line_to_send = "iotm;" + chipID + ";" + jsonReadStr(configSetup, "name");
+ String line_to_send = "iotm;" + chipID + ";" + jsonReadStr(configSetupJson, "name");
#ifdef ESP8266
Udp.beginPacketMulticast(udp_multicastIP, udp_port, WiFi.localIP());
Udp.write(line_to_send.c_str());
@@ -35,7 +35,7 @@ void UDP_init() {
void handleUdp() {
#ifdef ESP8266
- if (jsonReadStr(configSetup, "udponoff") == "1") {
+ if (jsonReadStr(configSetupJson, "udponoff") == "1") {
if (WiFi.status() == WL_CONNECTED) {
int packetSize = Udp.parsePacket();
if (packetSize) {
@@ -66,7 +66,7 @@ void handleUdp_esp32() {
udp.onPacket([](AsyncUDPPacket packet) {
received_udp_line = (char*)packet.data();
received_ip = packet.remoteIP().toString();
- if (jsonReadStr(configSetup, "udponoff") == "1") {
+ if (jsonReadStr(configSetupJson, "udponoff") == "1") {
if (received_udp_line.indexOf("iotm;") >= 0) {
udp_data_parse = true;
@@ -88,11 +88,11 @@ void do_udp_data_parse() {
Serial.print(" ");
Serial.println(received_udp_line);
if (received_udp_line.indexOf("mqttServer") >= 0) {
- jsonWriteStr(configSetup, "mqttServer", jsonReadStr(received_udp_line, "mqttServer"));
- jsonWriteInt(configSetup, "mqttPort", jsonReadInt(received_udp_line, "mqttPort"));
- jsonWriteStr(configSetup, "mqttPrefix", jsonReadStr(received_udp_line, "mqttPrefix"));
- jsonWriteStr(configSetup, "mqttUser", jsonReadStr(received_udp_line, "mqttUser"));
- jsonWriteStr(configSetup, "mqttPass", jsonReadStr(received_udp_line, "mqttPass"));
+ jsonWriteStr(configSetupJson, "mqttServer", jsonReadStr(received_udp_line, "mqttServer"));
+ jsonWriteInt(configSetupJson, "mqttPort", jsonReadInt(received_udp_line, "mqttPort"));
+ jsonWriteStr(configSetupJson, "mqttPrefix", jsonReadStr(received_udp_line, "mqttPrefix"));
+ jsonWriteStr(configSetupJson, "mqttUser", jsonReadStr(received_udp_line, "mqttUser"));
+ jsonWriteStr(configSetupJson, "mqttPass", jsonReadStr(received_udp_line, "mqttPass"));
saveConfig();
Serial.println("[V] new mqtt setting received from udp and saved");
mqtt_connection = true;
@@ -111,15 +111,15 @@ void add_dev_in_list(String fileName, String id, String dev_name, String ip) {
}
void send_mqtt_to_udp() {
- if (jsonReadStr(configSetup, "udponoff") == "1") {
+ if (jsonReadStr(configSetupJson, "udponoff") == "1") {
if (WiFi.status() == WL_CONNECTED) {
udp_busy = true;
String mqtt_data = "{}";
- jsonWriteStr(mqtt_data, "mqttServer", jsonReadStr(configSetup, "mqttServer"));
- jsonWriteInt(mqtt_data, "mqttPort", jsonReadInt(configSetup, "mqttPort"));
- jsonWriteStr(mqtt_data, "mqttPrefix", jsonReadStr(configSetup, "mqttPrefix"));
- jsonWriteStr(mqtt_data, "mqttUser", jsonReadStr(configSetup, "mqttUser"));
- jsonWriteStr(mqtt_data, "mqttPass", jsonReadStr(configSetup, "mqttPass"));
+ jsonWriteStr(mqtt_data, "mqttServer", jsonReadStr(configSetupJson, "mqttServer"));
+ jsonWriteInt(mqtt_data, "mqttPort", jsonReadInt(configSetupJson, "mqttPort"));
+ jsonWriteStr(mqtt_data, "mqttPrefix", jsonReadStr(configSetupJson, "mqttPrefix"));
+ jsonWriteStr(mqtt_data, "mqttUser", jsonReadStr(configSetupJson, "mqttUser"));
+ jsonWriteStr(mqtt_data, "mqttPass", jsonReadStr(configSetupJson, "mqttPass"));
Serial.println(mqtt_data);
#ifdef ESP8266
Udp.beginPacketMulticast(udp_multicastIP, udp_port, WiFi.localIP());