From abfc847793e4862832b9c32035e8ce80eeeba286 Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com> Date: Sat, 28 Mar 2020 00:29:50 +0100 Subject: [PATCH] New method of sending date - direct from SPIFFS to MQTT!!!! --- Init.ino | 2 +- Logging.ino | 19 ++++++++- Widgets.ino | 4 +- data/configs/dht22.config.txt | 2 + data/js/function.js.gz | Bin 18140 -> 18228 bytes data/widgets/widget.chart.json | 2 +- ...2-esp8266_iot-manager_modules_firmware.ino | 15 +++++--- main.ino | 36 ++++++++++++++---- mqtt.ino | 29 +++++++------- set.h | 4 +- 10 files changed, 76 insertions(+), 37 deletions(-) diff --git a/Init.ino b/Init.ino index 423a711e..74b8a6be 100644 --- a/Init.ino +++ b/Init.ino @@ -41,7 +41,7 @@ void Device_init() { ts.remove(STEPPER1); ts.remove(STEPPER2); - #ifdef layout_in_rom + #ifdef layout_in_ram all_widgets = ""; #else SPIFFS.remove("/layout.txt"); diff --git a/Logging.ino b/Logging.ino index 423062bb..a0329b24 100644 --- a/Logging.ino +++ b/Logging.ino @@ -103,7 +103,25 @@ void choose_log_date_and_send() { } //=========================================Отправка данных=================================================================================== +//прямое выкидывание данных из файла в файловой системе в mqtt, без загрузки оперативной памяти void sendLogData(String file, String topic) { + File configFile = SPIFFS.open("/" + file, "r"); + if (!configFile) { + return; + } + configFile.seek(0, SeekSet); //поставим курсор в начало файла + while (configFile.position() != configFile.size()) { + String tmp = configFile.readStringUntil('\r\n'); + String unix_time = selectToMarker (tmp, " "); + String value = deleteBeforeDelimiter(tmp, " "); + String final_line = "{\"status\":{\"x\":" + unix_time + ",\"y1\":" + value + "}}"; + //Serial.println(final_line); + sendCHART(topic, final_line); + } + getMemoryLoad("[i] after send log date"); +} +//старый метод выкидывания данных с использованием оперативной памяти +void sendLogData2(String file, String topic) { String log_date = readFile(file, 5000); log_date.replace("\r\n", "\n"); log_date.replace("\r", "\n"); @@ -134,7 +152,6 @@ void sendLogData(String file, String topic) { json_array = ""; getMemoryLoad("[i] after send log date"); } - //=========================================Очистка данных=================================================================================== void clean_log_date() { SPIFFS.remove("/log.analog.txt"); diff --git a/Widgets.ino b/Widgets.ino index a1aedfa7..1a675337 100644 --- a/Widgets.ino +++ b/Widgets.ino @@ -15,7 +15,7 @@ void createWidget (String widget_name, String page_name, String page_number, St jsonWriteStr(widget, "order", page_number); jsonWriteStr(widget, "descr", widget_name); jsonWriteStr(widget, "topic", prex + "/" + topic); - #ifdef layout_in_rom + #ifdef layout_in_ram all_widgets += widget + "\r\n"; #else addFile("layout.txt", widget); @@ -40,7 +40,7 @@ void createChart (String widget_name, String page_name, String page_number, Str jsonWriteStr(widget, "series", widget_name); jsonWriteStr(widget, "maxCount", maxCount); jsonWriteStr(widget, "topic", prex + "/" + topic); - #ifdef layout_in_rom + #ifdef layout_in_ram all_widgets += widget + "\r\n"; #else addFile("layout.txt", widget); diff --git a/data/configs/dht22.config.txt b/data/configs/dht22.config.txt index 23a01f4e..00441d8e 100644 --- a/data/configs/dht22.config.txt +++ b/data/configs/dht22.config.txt @@ -3,6 +3,8 @@ dhtH DHT22 2 Влажность#DHT,#% Датчики any-data 2 dhtComfort Степень#комфорта: Датчики 3 dhtPerception Восприятие: Датчики 4 dhtDewpoint Точка#росы: Датчики 5 +logging dhtT 1 10 Температура Датчики 6 +logging dhtH 1 10 Влажность Датчики 7 //2 - номер пина датчика //варианты отображения: any-data, progress-round, progress-line, fill-gauge \ No newline at end of file diff --git a/data/js/function.js.gz b/data/js/function.js.gz index de40f1289e8b5a8288da0e68e9c3289c5c925c90..571ba85a25e1d95d0b15de1357d8068ad4b0b99c 100644 GIT binary patch literal 18228 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 literal 18140 zcmV(xKw@V{~b6ZZ2wb0PH>MdfT>=|NRsQ_iI2N-E1d0ZDmv1 z)=k=;=F%^APrGaR_@hL~VoZ@bBxPH1{T%y1`(isY07;M{B`V2w+n&u=StKrlnZaOg z0My=J_I?&)_Kmm^ez*`(pS=})?aT5tYW~R97vi}U!p6#98dP#!g{rg*I z{@xSu-V0|U#$k9}7+|UjyOVI<%X@$8CEqQ_vSkcSue@Zo9G4osh{AcFy>yZr&uO#2 zJO11gk+b)g-rnAg6EWwVbH{9U|8TU2k6nD3E`v$pg#j}ycE884+1)HU+GF07nYUix zhPT~cUcLMdhJ7pkxfF3i?XVH_4#X`h)|wXdePF;yQEK-UjB_J?c{6?|CW&dh@+MIj zhtq_>pPl_^P|rQ!Sh9=)i3MOPQH@357O-7LetY8h{@9sZx91|6g>Kt*5~uCNt6)Mn zA_cOBJ+c}9@uxEml9NRCT^9r@Fx8;8O+ya(x6jXbpYxV1ZgFn45qpWK>=s1AaaVETBw{jif-A8; zGlbt=ml~d8LqL-~l~oN%ojNcpL@Q${?+9eP2!mLhiMzytI;ej*DzMK+m~T!AD9$NN zN22EYJHSUoCdb7ff~1px)blpu&SC*8!9fCgcO4My&NPhX9Uxo;lh73|SJN%$*2KB9 z^7+0J$=Y<&^k#FO&oj;h;1aE%$N2?7g^`$vrPpEwi<1#-!kn6Q7t45NN;H0Y`~68c z2l4@T6PjBsZu3?}9l|(=1{apXI}=O9tz}BcK-^U_8^WZwWWl@83rzl)TYa4N40)1? zcChqQF~})jEdSh;qioht9>#wt(siP6akNW>>jaXvnER+G?Fp>mMEoM(lsW|X8Qqoj zq|a&;GObAkyiOydLN2!}YGl5qk$FiY%dVi6B|V@7E&)~lGV$i16v@I6M3@pTuDm!A zTo%8J!{A5fO5|^EmCgayxZz|u2X2EF1XcrifhGi|u+(IWnz-|Uxv3L zI&oq_Ohk>C13;xHID7n9q1K%wk^ch-AC^c=K>ifAWEgl4apG-$Irg34nrCLG2z0&` zXcAss`C^U4v>0SlE3F(O-Z}=zimF~j#N}_q)LHr{PPhPI=1ICP5eGAwd2t&U>?@pb zieUkybLEH962Q`NqRFfahAAfQn+H}m215bji;`zB_yM zlC^B)#8Gv#7*@OQpM?vcp}zh*;a$y=qXKuMWpEjXlWUQn8qAmsT>~LoNRJQv?9;3n zP_yvCw>7!!%3vMbq9==Ta?YK|U3x*tiMSjRCY-AXvb73&;KjRH#X6 zn}mTM``+L!*|BQXY{vo>qG%aqcQmT^tgwO2JASVgLWVA7TP!trS!^b zLAY{t7z2fda22HE9*itSv`m?ZqA)6uMkPdFuZL~p&=+08KjS5PPQAd#l8t{m3ehi( z4Cp`uQX-d%@LL8Ju?am@Gh0!yx27xtjhG9t+eJyEtQmBt?{=)Oc>o9o{LU7B;Ys^~f zLYd)#ATpTG!4BI|=C-MzGwt66*_(P-v4l#Ura0PiJ{A!fNh&w9Ii7~0sT$|pDnmQZ zVO(rr6=O|EWg0Q5_`IfdR!e(Tmp48pB8on&YFZM^y5$Rlw#y*%@p`=y7zv>Z8ppc| zb^x@4@`PwK)1D4P8M6)E+B6$2o@v2x5-|95d@r~*QiYj_yQGtVn8z6Q_X99?M^xtc zKt_l{6*olA!5vb`S*Mo)WtomL6(1gJf(7PhB4e2nWe%*}JanEU@=@0k! z*_$8M>=*sha#w0TUVym`Vb;Mw#iX7{cct}Jt3XGpOIqR0H1~Tf#s;t=a;YR3r0FQr zGWDW3;kjtDf==BuRzCUcA$$5TBl@o(2KBC5wJ7}mlB#tIQQtC9xQsMz9Y6Pq-}yML z)={R%P2F(Vtc;xsue9ZnMPn-)VzCv(Vq_k(IBb>1Ve4A@93!r;(8n=a=c|j0%(Sj9 z*03&g?56$f2Hr-&mLxNA5{B2FD8!-@DpGC4lYvn z$EKJ&i_CieV7)fy7P4VOj{}`ImCT957&Ya~5S(U!6$^SjO~ME#62$NO1f3hb8B(mX zNhKmKA?O9+m(CD9YpelTDKxY03$JA__@P>5qfi6m$}TjOW6;lZ8N|XGK(tIN08zOP zgbHeaL;}4%%-!qBHR54%22bGQjk;UrsK^) ze;)U|0fh1ef2aErw9Pk!$FQcn&*e9_Ky!^ib@ALJmeN!0%&pbTW}05Y>2p9|MwgS& zU(TU52WoZUD^0!(fHad`h@8spD(v){vDqHepEED28M<}AARYItLWDt z78-rq<4KK35E|b!Xt3D15k}jfjZ&j!OseER+gtaLLVrEYcEi;U{R0MPV!hFuN^{}C>+mLWqJ{1;)0 zjoKXQ@>-JtU8^srLW>ifeisevaRa-$$u9sItPk#+xu_7YHus%Xrm*Ze1B`8{$Bo{N z(f{JWSW7?Vu$v?zv&K85B(pvb^}}t-4i*P(m?dm7Xnn@6ZpiA)UEWwTRwXR7m-5P| z?10|7B+U|TY+5~_K9L|Gwx-%E8fF_hOQUcJ-#tnMb?mKxB)ztvO7&SNfvF& zOl7UWrHGO&uVy;!v30LDY)z+&DjJmim>#U*LEkjTX`!PEI|u!Ja2FNeG_xzWw!Gtf zAQfnMTAYz8aB6VwT@XYS`-u#!<&m&+Z=G)68oQtl{rL?>1mhUpE0?Mmr#*=_PvRUUq z&07)hLB5-)G>3Ogl+T)(#lp!4a8cHz^a) z^U>EKOkFFEIX_yds0#M zw4&@;McH4s6UbX>mlpp}Qnv`7Op1}E(ns6MB1|o3M4@YyS3+%eGIkq{O_1Ayi5D!E zda{bn=w@okDyk?BK6W@+#^Ext4gHLgI-WG*;3O!La%p~KYZN_xoL3C_WbO_p;e74{ zu1)K=#YZX6QCA_rTwh_O)y6V?tx>6wMfEkpKypi zL#|$Ia=x?jR6RilN(9eBAKc^Z$}N>I10#_oX~RrIk=wLoc5(N@iG=enFu^IQf8049 z6ejn$mr}HKmKT8eZ5X-#0<-+5T*gezhixGL$*|iaTDv2tq*o)I-R zx={1G6$IK_$z0#f*sHyO6!{UCB;XoSk_lZY5AnD zDa}ySz&FZ8xvA_+L6+jVU5qC)F}WUxcbXu}RQRHR*xllm2#BIN4+DjaE9^N4t_l0n{N`8^X6+3wO=VwwqbmFq1q?b zAN&c0N~f%eP`TbsI_)xv+>vSpjQtI6S(e02YhGwqQNto8iI%zq-7+PuWwG0;R~6j6 zhc1%($k#zQjxkpbWrYggS;-_iRp@`^ssjI}gu^ZotCVyJFqikuS~w#~ZOO(L+}IjL zD@B~<7!WS&!rCAc@4lAIbTSi8(MZ>YZP>Yyzp=)K!Lb|#E9j}Ck&_>}I{$~$dB5NJ z@}hU;wRwl847x_}aRJc^oACLP;^zdmH z^Z*8Sp$FtpzCaPVGc3x@&<^RI7^Y#eOTOoKzJMu7zfi{#a$&;>J0((8DwUX{`-@(z zog0@;Elb}XU)!iqjkLovYG9IM_1wTIme*lXvt$!!+fXl5-z0N3>WdsDxeG#C zLt>#Fae1h5V^E4@Z;b)%YzLs7C&I0gWvE-o688^@yf?@4zywJZ5hzF5s*>C&Twpj; z(n=MQqVG=S+6$%SU^@fNAk{jVhGTt(q>VdQxKTW0Ih8SO}aZ?jBgSpjvz0F_8CQlLPN(!EXm zy#^#*PJ<$A>936nxG$MJjalLO6=ihkBWHB4sy4=z=U28%sXnjBvI<+67dJFAjW$3& zoqd!XDKSPP%+O?ElnVnLdLiQ^`}48_gJE z@GaM_o5JbH1H>BsrMI?tUgVohNX&EDomG0NAGL-kg zUIOjO&=oh{MA+dqHcsz#!?UXI09>lkPCjR+T&(;0_7CmDefS3tc#M8z=(Cp37d^$x z$wb8QC=KmLMg>i$&W!+yl>a$Wkr>RkQ6>MHZcwhal!Jq3pRHZ*px+HDsScw;Jxu&? z>8|UA{M0lx(9TU4*24q@Ey!6U>`` zLLyRR*2z#Oqtb=G38P_p&(y|~N(Reb4IQQIGU|4$emv3fL8DVCbVYSrX@zC;w26KV z0#P}UR21|ds*s6QLwiJLseAXE$~o2rmodeu+G|y+fR^Lztkv`&qQ+;me;5_@tsozrZJ7^=o!( zmJ63nBfp*8|908Jv3rBkQPMufE#sjr3qTOTC7!hm^}YzbAc1;>K*t<$U@uNErU1)$ zpqa*P`E|tmZ*gJ!e#>e{em2i6{+|SWh1?}lS593jh8BNnVVgIBXVy!RGhXR*CTr0% zcFlDKN>AyxCsXmsJHuR7##V-&prjy-8x2z(+5x3&_)eIm`C835jxfQObG8M3x$&t^4v;wEl>u`tSy^jI?YR0;M7+zGutZ%H!K3(h?N!@r zzqgnT;Vo0Utrb6g!CQA5_TTCLk>NVHueM6vaQW(yrIUN@C2e`mQC;%Zd-~xGxxvY{ zZ71mgwT_IQ5LQ?9ff1c#hJ{LO4z%2CAZ}%)+I45NDZD;P$}E%1JJ{fx#7n#uw-2Aw zWsqM&uIhtHFK9Q%3yb^!KCi-NJ(8t>zlZQSTZ%?KZozME^C$56S^eJd)-h&F`1=&c zfTt!srjZAKpTXw^JZ}LzE zlotMS|FiNh^i=IHr5WRt!=>CZ0MRU%v^6P1C>xpIa781P-B}&+wTsE4n!Bs_g{!I6 zKNq()aDHoY#AVS1=I7;Y$PLNt$#tG$tVviK1#4cF-1o0aIsSYT2223XUu4q$z(?i& z8{{m}RJ|6rXEXc>;8e-#w|>(f$e`S+?@dJq0Hi;Xq5VQe?Xd|6Xq;&E+nQ;8(5;sG zR5mWU(G*U;B%B)(STx-Y%wheuztli+>@J9ceO+;C7$bV-KCB=t`#wnb?Nk~l4ZhFm zB|RVUJ>I*$=#p4jN0P`JArBQ&A%Lq`cCc~~8+jx}-x4d9L%TE;WgQXYOQ#MRGN7ELTOEjI{mu2+-46Wz^bn-3E+XsIBH^rXUmrp zK7;q*K2bCRPg^|FHgAF6v221}35gW#?sCg4rmuGYy+g4TmX{b&j)KIboAw|=N zAT;1F{f1fjLEN9#p%TS`LsbX^ED2czIWAjqOw`5>1fRbq#! zHX@z5uCyu^e4Uxci~AiF02i%&n!~H&UX~sxn;<&ZU{q%fs+c{fxWTq-Bt=uC1yT*V zgi&qi1<sZpv~r(lMa-(<+F{T~ zg`%vC_2L-6U3~B%;^9#oVZ}<^rkuS2B8Z0^DkicD5t9C2P^p)t9S#*!OBJJ-BiLv-#Ua{7ZWglAhN&dx+`c#yJ;b0$WpK}rP)3KcKw22C z;`wh`;8`Y?z;l}dLDzkk6q$plp`s3*WcdLc>w`B1K3@QxlfO{zcPDo;}<8m7B(ejB;Z1jQUiC^FrB#^ zR1jz3&Q##1%vm*&G`brwRY!orWsj`r`kr?#<-j0MJ9*gYv!Yu*>I#MKgDz^DUJeFe zlLlO{i{&2hK^df6d#`5yvgTc)J-IBhkQH2ZQU6xZ z^}YX3@BjM#fBo|BfBC2P|NZ^{eE-+-ns?P99%(pB zr)b&Ojn)l~2JBM@%>%@ua{8p$UNIwYlKp$E3>Et88OfcFFh|&W@Bizon6ww0c3#5? zexG;8n0zngMb&>P;>cjL7IeM`lOQ;_oR7tV_f zjB-{mmWX!@+CZ_l-7b5p^&Tsgr22g8LCrGJ|X}p0tP&ga}UxyNN3}0 zv4BGss$MxY5X8+zmVSJNHIC}uu(Ywjnv=kV6PUy#hbU~qtvSx7*`oLH(a}-A5YKy= z&81yZ(u_RvQ0iY_?_6>St+JdGpzR#@CI6w1$}h}-)^%Bj81eteqF=;PLYoF`-Y*xg@smoJVFH)K^bet|Wpua~fGKTEba= zIr=esn~&PBvsrd@bnt!pWqOdGr_1q46o-b(cD)f2N58cOrciK5mm8o;H29Z@tH(UF z4~MKtQZ&)jvcU~pOSHEZY9%v1im`x+HP7Y~KuKA1q6Wur zECtSJzDQ3&qAX{YqR9FnlLDW-pi${eSZxYskMXz3cauaP57?d8q6TII@q(Eohi4Tq zo?tOIwnMkAij5qe&5svAr(sZj%RU8+@Ttn&c2e)nk;T@-|x&X3Opm~u`qwfaSC_pVGGWWcJ=;j zizB9eI?9(uk{2W083`C=n)7ap;4A7pz#Q)|nH=P|OEqI+d1(~(tSF~UlVzE1d0yAx zg}r?7l|$AQITIXmaQXQL4k@%Z^UO$TU%}Vr`vv!WG_Kro(5k(eUeu;Z{{cI zDZ_aE?D;oA?SAKer@ei@`&qmD+4g;Z+aE^L>?}`VL_#S05ueIReb=EbmjAAsDq73z>+C#P zJRapqtu9Th9YpBA7W8QW!!b0-V&h7uF{dI5`QP9)S)OFj>&tInzX^rw9?U>qq{(c| zO084aW$7HS+a|VIc)oe|s`)U49xlG|)8~s^+SSTV#o={AiQ9YI+i+~b$i~SWj>*)yb-lg=w9#>JTBk{xvDuT5wymKZ*MATRih<(0@;6@;J`RV zrq67E;Bhj|^ysptz|><_wHRYYnUbEChuU#Pa!(F#5r>UI0Vjr806pgifWy8gqYG~T zw+h=ipgZQDep9Tgj3Nf5saAW8z-V8k7}42%NcJgJ+)MZOqI42bo)(y;6ox!C839;Z zpr>zc!r%RhD?4(PN@fl-Ef{um{Wc$6&r@puj!0`qZ+aS}{is)jS}1kC(V`O6u1-&y z@_n}d+Yu_(f&-7vHTBe1bw;Y%jX}+QUhYO)Q7`I5G7%H2BF|=9vH^Rbxa${>tNB@e zQhOJsldwk@_+-Rp%1Jyp0r1Jk4K>UeqKK>Ux&}5^*W987bzUqt*<` zP85iZMxO`xb}7q^$XW_-{VR=V>R!k5({+k0hY`AwmP*BJ)ao|tHr#kU#A^cbrvChR zg$MgW07PysmiIRelgT6Tgvh*-e4xakoyAgdxZVvz-sgzm8>3w2D_mm(nCsvj89E~q zd9Wh#X2WZ@X@Klpz0vsiW+Im+Nh%4EVKND@ z@pff(hK!XXp6#t43}4kv*Ei&fQBVf002Xc;v8B`@wP%)$cer5`rvmBGDNQCI;Sl zirr#W+(o5c!{sCnmM6g9BViRbt<1g%eIXo20!H~VlpRrxy&nVz<9phdXt64@Fl3T_ zv6@;XB{xyeR81xL6ejs0B~evbK5^>Iv{G#&YcFyK`CBf-Nuki21~X!-TLq zAI%0~H~bJW)`0;=8q7qd3EDdGxQ$7Uq}BBNv-1r02dZlDw?28#e9 z^F&Gp-pZ zLK)asgnlr50IxKko-5ABU{bsAk-9>yf$A@6m@7=dykvm~5b8J3 z;%wwFxvlbe5Zlqp$WYzKt+)@!hly-H8mG(4UZ>UVn{KHR?3c{|`=M>pPwx>^+kpjo<3r9`jOgkO%ZE?6HiO94X1YriPgQ$PORWhXtL5MZw)#(kr^A>< zNbKVU3018$N7XJM&FYi{L^>HXOSwpn0UB@y!K>u>>BYPj*7k^V+I{)q>SRjcwB!cmd@<;FX^O#U4;#E#EtL|FmLqpt&Quu zVb~j8x!uLZ%Z7TOab{v5O!wW!dns*Acu)ogVCV(&j1N!^udnkNzQCuyx(^ zpnXi?$Mi2iIt+|#4qbpSKt>4=ZY6GL{fuwcE5K1m5C^ zr!YSe?wk1}iSW0{VwsLHb_-dNF0*+*{4E&z%B$%Q-CvuvXEY6!f`o2ZpNdDuAvr%u z7UBgbSDd4*uEJkf%?H1b?gOqR@%CPfb091b>W!_wP$T-P;C)3v#e1kR1luonTjtI} z6Vm)_j$!t>qM+@ z)W1pS3J17fD~5%Ic5g5XyVmuiT2%Mut+-j73%l*60WW^5h!?KgSp*m_Q;kV5Mih*o zZN$MK%+T$Cyju=*`DpUP2vzaO#MPq11jd&qYyYyxuQE{~H>*tmOq}m<1!=)DMtbgaOii}#A=B9B{ zi&**_kD7Y>!BVS2qTYTa)DINz^qQegi^OyLflrG)e7G>EjvZRP$!`=Q^?H}Bib{R+ z_=IsOm^Fr<@}YyoOBIaDTgwPc<+`W7UEIbsl`U4>Qo6!smlWwre&stVTl_j#l-ZBx zhO(>N;ss^RapU{R#?ZfBPyc#7t$#h)wDSROC%c0WcsZ3eXXWnx8^4;&>3VM_tCH_x zGQ>;t9>se};EsQ7{g_B&c=!Iyudt^=nTNV1tfSH-T`RufA|A^>{AJW z<_aX!1@EpLSEcg}OTJ(kR+3f*k>8=Aq^6-TbAx<`-*PO@{m)L3z=oI&g0<2rGR zF0m83+{|hd724JcdDRlt@7ty+C%>(cmqbCO9tq!DPm-F_DOwv*70MM?s8W7F0oop=vsgt3(%X{D10#DA^+PUT+zRUQ zhru}<$k}3O?L5O?oNXu2YegYEhQTOHXLl(Ga=+f=GWrwJOCm9kUq<0L(sLQX_kVn}q* zRTce7ZTAv1`P%GBFJKw-C=<4l$C&ZR!@iP>(W%%$%WUPIA%+3!!Kg-)Z)a0m+0WmQ%+^LT?-?cu25nn~G6re{5fF*{V>$kT4+ zmgn0JXl==8=f?9`Lp+T@_0T0O&T753WX_UK~2fSpG@zs&Ux?+(nMJz!&?yvW0!f-xwjvgJKPb|6&tK2wqAlR$P-}Jk3iqC{FxTByJm@nh^idZ}6 zCz%C^2jv1KOV(%A1la?AGlM}BN1Nz?Pq$wAz*}YSa0}2yJ>|WlMe`k(7fhqg^-PL|7MDd0CxEQDxP^o{A|=ov_T}^}unK%95p1 zfDG+HBzGvvTKK$neu9^J4TDpNm11hUq)>bn2*EXVV1yR6aan;ERbwOURKYD*+5l6k zjUQiEjIy6>l>H=7mMs`#Kdr(T5Vi|pK-rC-s_-Q$Y=$mB)KZ;IkR_U|#8qnJDiyfG zjVWAj7+dDCgIlqD@KES5&&fk&?xV+oY@HLPU7-tjvDkB?u=9}F!AHm!aYSlA5l~Hx zP^8YV8eG zSC3nv#ib(7mCC=ER~8nglNdFz@07NfA-V017D;3ygq$>gX;kg6Kxni-xZdDsZ^5&U(Wgy@U@B7+voU=cOg zLA?E$|lRMZ_KjX?f5rKLNI0qs`FW_vNw5Hi{EqeCm%}eE0g=Gk_b`;8j4by_+gOJp!YJNQ z1;ViWdI%#XexBt^g`RhW4TTIRNA6^S%Z`#9ayibE#oJ^-qBhEN@iCIt6#v1;8@atN zPN&a6ju6xP(>Gt^w^u^PFDIEzCkG4_>hTA4h?rkdo;Eb&s`Nl+T(8MkgR4;M!yr}! z$@H+c$J5&fx+1NAFQ7zkZC2u3)#D&+hYdM-1levIXs-!07;d=Y7uLPWRl#motjZmU zL%4pESxr*+iXKF^3mlkgP7Zv44IM3!qahj?9_Xd$t0IkF^|U}I8Lv3s_PRRbno>}ltUM5ud zf+B(!TJ*2Vz{#A)0#3j9fOGXhp|%S!sjDo&^h*)&9Tmb)cCj2C^XTEAc>dz$cW=!8 zLBsR=IaH+^^{aBcA88|e&~-WB$I3In9kcO zc!x^Tr3JNzD5%|?F8lnj<#^Qc>5QybY|rtu;ic!ZN;1`T73W;O@|?F%81YsNXEm7= z!jF+U^RKza#4^$2+RC6>Up;*z7e>9rp%Xk#&tY6RO)RqHd=XeEWC8zm^@Ikrq{mJ9^`v%<}IR(=EMp_)8PkZ>zL$vaW086dY^m z!tJWUdsT(^s|p|3o8Tslv6+R_ z-P@Z-Uwr*EDr`z*5f!OWd|;HlYj%y;P3oEZo6WwOVP5(p1}MKv7QX- zVBIJYTEzCfhI~wsiG>b~HU$ZHebQiEQE16oLg-@U6=SA|$bu?O04YC%tUcjPrh6-s zwO%hgRY_4&tr35!j$mzp!--4d)j3YSX*C5xAG$dubZ8ay7 z#?cIdCguz&wCpq=bfW&%TFoCg+CS(tKV2KZrw#z0cAB594d62efX_P3&({Xrs1andnqaVYiWfYi{uQ7 z_>AZX=jfP{*D{Y2ic>OIOjwC`8tTvDv&EEtR1ZOTK*}H2I2Q?S<-tfbst-h@VmuJ( zc~G2)lxr1_ME-H(Gm*P3orRL?{8Cz-kEYW|s<)^O5)Ae!{7m2`sdeJ}XYT zeQ|P-r#~eJTi+bEy7wRa-QfY#Lt&i6&u>47gXTRTLQMR7m%y&yHGPDh(K_d5JyVVZ zi)MLR_&_-rltAo8@(==Erg_e3f)9Z|?yHT;HWNbe1_6McpGB7fs#ICRYom+eT&B z5rynCyYpJx=gIN_9cm7K%4X^A2jwk3jOTk|-IRV!F7HAWW`+EC9 z=ac4EUs%f_sDFUcC{_@#YwN8poyT@4Mg#}AH5!;BTqJ0wiJ5{mJerlJCT z#0uD?(?Mv4=R|wObyjH9(yM(?E6x7}jee z#?T030!#k_ga#}@7zbNyxmh5*$65Acno!=#m;-T4MwhvgZ`Bu(Yl5;#Xkx@2G@-W> z9#DB8dHQb+c*5RlJTkQx+^c** z>PJ3}#dzdSg*V1DawG9HBaEZRt?|id@n~7=FzXTk+d}n>3t=mUuMAOps4Fj79(!FR zkCdmZ(VQy?05&M?=8amrLUNL1`e-_3Y~|WdgprVY@gmYD&m^)qY>BK37T8Ga!}F>nak=u{+%e=M@@Z6oo`Og;-Iq?{1N1ztCEw~`5JIaX0h$Rv_7fTbS{Vb&wr@5k564*TLv6MXfb}J*D6hb zUEbjBwh~MVqv;Zf7n}2@k`DOAHrvK)p0(w+Jj~uKzP=1@msd6}FjsV6n@F=H4A$yzvEzMid93~8uZWqt@Y&N~zX}9gM zZ(HvOX&jnLjiF1cF${M?BbmVtw_-(xSukwRxae@P6S6o!a6s5Ul-Yo-H+Y*WU2Cpj ze;l+i28FzFf}(P^Xk5nqG7gJ~1Mc2Kn=Es5>mLoGkArA86xatw1?RJ4BNB!T%$+gK zU_I)Cc24>$>=_0>7(}n0e*Ngr#sju<%EgxH{x0gZd{N{u6aXdt4d&^rxxg&yLQ3J1 zE|lQmVighQQjso@D`hjl-r1aEu2C=tl4b;OfDKI%4mM|4!zk8q@O7Tz0x`3#R-a?Z zMGe8!mgXq%*w_XTw6%2fyFE_V3P*D5K<8}5Os(DfS5`!r0!-X|0S(JG8}TjAn@5kI zeUQ~rYp@)RPYO%mL%pj18=(0E;P&P77vEYoBezfc@CSqnH}P9#H>G|C_PZtj+gyRt z-Sykk;p)rWxWn$)_QAduOW|2g5jCU6dVC{L3i)=puXh(RFLnAIoMMfQmhJ27Jcz$)MvAangz7otpGgnwOW)tva8PHu_ZKL|%~_@}^-@ z6y3A?EKBbE%g&&yOcV>cs_{8iz$gvS|E$Rs# zI~67z(lZv0GN?ZW@q7ZZ1{}#M%Wwpn=VQr)@e4nB96x4@@+wx}?g!f`3p?wmDc3XL z8!p#zR4{%i%#uzaoMmBxR`s4+0Un6c*?XnF&fsSDkA(Lr~N>D9iQll9H% zXiN@tH1h&M9g#Y>xfJF(+M_A->8_=qxQk5(VFREy!e%Jq)sU+h(xnE>v{&~^lD;H~ zPAD>3Z7w3@G$N7Pa8+J0_>wHU?wHC{woMNZ^>?l`h;0}#;A^=%;WXvhkJclkC~X2v zPNb-GgxU%2ov-#)+-2A9tG-`RP0RU2WXH1?RLk(IR?J?jMz~>SPWj761%CpzEL)Z8 zvb=DxXr}rjl)r;q{Wr6i)=?syz3BmUrryF+vAQ3vj*rSVnzYgA)s?>6M6mJ7;#EMI z!gKFiG=**eG+=LVAeph6xh2&Sx_gZM*5swExRG>dM9~Z#hc{_P!^XZ!PuYe^w8l>$ zDl1H1{&G-nk8R?%;!Vy^40jw=Z%bcc-@v`&leBysJl8;$)h1chyD2qfM$97wqwX89oUHHUeQ<;Fi zLL=gJ31$!ej|8(n-2boyIeAEUgW>uUpl^Yl+|9=&?{=;rWUc(8+) zsQT4=YY2of+~fT<1o9Z}%RL65>xR-@?YDEodga20Ho0k9Eayu4*hO`#}j5 z|Ey}w7YSyEFI5x2L%j>SaAI}uz)3KA%zV$EF=Rfy_LjiDw$x(K3M-db>o{lb)g>1`Ts40EqmS=hL zn6Oo2q{T4Y*x=~y@bL&d6ij4voZ##FNM5;fdM3tZ$Yhc5cLAJScfu)wo?`=w`f(8l zmvOKK|J7RvK*^{)VAn}a|b&-b?QukL=mt_^G@p%nO70iY(y z$2uf;Bh$Eq^?LeTR1h^|4qv!OCDh}E&3vgh2+B1ZKJDrLTF2 zcfmzZb_6@HC&6Cz&4XEO68m@t^uEbn9Us=YB#m_v+*+oo1+l#}4!M%3o^d6mZpi*ll3F~N*9 zdlsYGBoM1;Qi#R+FfgZNhGeyeP?AdK{_qgWd|q4Pk5L?HVh$6XMV_?|Vp#lc%U!lc zXUmgp(PGOi<0*Hm!*XOP;zS7$BJltynF1=07O+Hv@ZfMdn*Av4Dqa1aCV39$nzpi> zd)^32acA=!?i4{IDSc5iLVO7QWW|Dv_&0&w{xxWc0jwq^v!gO4@z5(R=($R@3H{j| zS8H-GTB0Gn{wB@o^)F;pZ&ol(>m78NHXkXKwj2YKv^5HbK?S*zFa874RVyK1S7wBN)@J^ki`6&=Yib^QMUv=jp`xYAe74w8E8)vcr8&Xfr z$T2|jDMHO)J>22sF5W!r zB2K>GVY*W*SHV*f9}*i8COu3Y2c!#~Wkgov(Tv)Hr=W2H8oRaqI-3C>bAUcj2l;ur z9G{2-u?={w_9}l&k|db{a}#!9npf-9@SOjSmPDNM0ehCjf#HGyU!d9(G>yTt->LQ{ zB=8f_*(RI=y_MzcD^qpqujw20ft;fX4k8_K`oa0d=(2eXrtva&LFsC*-`Ako!j2 zTU?o&#@=&j{`aG4I{70E3l)%Y%5mJK^3))0sXA5eltS{(786R%OlJ1VXz7wV6Dh!Sgo>8oi8Xjr3=y)J>% zUu1*in}BBJvTTG>lFdEF?0I&!81s9&s3&Y^6)eHIaYch`;~!clqx{?R*~>*X2UJ|5 z2%=oVcw{mMDc3Kje$dmT>Lt_u$A>lakTBE@wt5Q3BEy#=?{)c_B5nb9cCRi5tI9dL zFrHmq;8Lj6GHQUT*cWhn`SQ6i-jC2W;$g5Qb+A|g8M3zIMBoxjUS*jymwAl#7&Y}H znP;GlJh~c5)hwP^sCSaJD4?y>o?04P(Ho7*WEukJI3;}Ic9W4xkUu&yHC)Dwum%s#sSLK`kuT?PMkGsqyG8u23|Oqg>C#e@Ne!EBpv?{u z3&HANBMLDNI*bF^-VXfx-#iU*p-QoRtAge(1-Bs6(BSvHz)9F;*#7?mev#Hl HX*>Y{p|S-T diff --git a/data/widgets/widget.chart.json b/data/widgets/widget.chart.json index 0ab13678..47c6473b 100644 --- a/data/widgets/widget.chart.json +++ b/data/widgets/widget.chart.json @@ -1,5 +1,5 @@ { "widget": "chart", "series": "Temperature, °C", - "dateFormat": "HH:mm:ss" + "dateFormat": "HH:mm" } \ 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 828f9e59..10589ee8 100644 --- a/esp32-esp8266_iot-manager_modules_firmware.ino +++ b/esp32-esp8266_iot-manager_modules_firmware.ino @@ -35,18 +35,21 @@ void setup() { SSDP_init(); Serial.println("[V] SSDP_init"); //-------------------------------------------------------------- - ts.add(TEST, 3000, [&](void*) { - String json = "{}"; - jsonWriteStr(json, "test", GetTime()); - ws.textAll(json); - getMemoryLoad("[i] After loading"); + ts.add(TEST, 10000, [&](void*) { + + //String json = "{}"; + //jsonWriteStr(json, "test", GetTime()); + //ws.textAll(json); + + //getMemoryLoad("[i] After loading"); //Serial.print(GetDataDigital()); //Serial.print(" "); //Serial.println(GetTime()); - }, nullptr, true); + + }, nullptr, false); just_load = false; } diff --git a/main.ino b/main.ino index 478c65a3..f2717244 100644 --- a/main.ino +++ b/main.ino @@ -12,7 +12,21 @@ int jsonReadtoInt(String &json, String name) { JsonObject& root = jsonBuffer.parseObject(json); return root[name]; } +/* + DynamicJsonBuffer jsonBuffer; + JsonObject& root = jsonBuffer.parseObject(json); + root[name] = volume; + json = ""; + root.printTo(json); + return json; + DynamicJsonDocument jsonBuffer(1024); + deserializeJson(jsonBuffer,json); + jsonBuffer[name] = volume; + json = ""; + serializeJson(jsonBuffer,json); + return json; +*/ // ------------- Запись значения json String String jsonWriteStr(String &json, String name, String volume) { DynamicJsonBuffer jsonBuffer; @@ -43,10 +57,10 @@ String jsonWriteFloat(String &json, String name, float volume) { return json; } /* -String jsonWriteArray(String &json, String value1, String value2, String value3) { + String jsonWriteArray(String &json, String value1, String value2, String value3) { const int capacity = JSON_ARRAY_SIZE(1) + 3 * JSON_OBJECT_SIZE(3); - + StaticJsonBuffer jb; JsonArray& arr = jb.createArray(); JsonObject& obj1 = jb.createObject(); @@ -54,13 +68,13 @@ String jsonWriteArray(String &json, String value1, String value2, String value3) obj1[value1] = 1; obj1[value2] = 2; obj1[value3] = 3; - + arr.add(obj1); - + arr.printTo(json); return json; -} + } */ //=============================================CONFIG=========================================================== void saveConfig () { @@ -231,14 +245,14 @@ String addFile(String fileName, String strings ) { } // ------------- Чтение строки из файла -String readFileString(String fileName, String found) -{ +//возвращает стоку из файла в которой есть искомое слово found +String readFileString(String fileName, String found) { File configFile = SPIFFS.open("/" + fileName, "r"); if (!configFile) { return "Failed"; } if (configFile.find(found.c_str())) { - //return configFile.readStringUntil('\r'); //'\r' + return configFile.readStringUntil('\n'); //'\r' } configFile.close(); } @@ -328,6 +342,12 @@ void getMemoryLoad(String text) { */ //=================================================================== /* + { + "type": "button", + "title": "Конфигурация устройства", + "socket": "test2", + "class": "btn btn-block btn-primary" + }, { "type": "hr" }, diff --git a/mqtt.ino b/mqtt.ino index ac63248c..72e7332b 100644 --- a/mqtt.ino +++ b/mqtt.ino @@ -169,12 +169,9 @@ void sendCONTROL(String id, String topik, String state) { } //=====================================================ОТПРАВЛЯЕМ ВИДЖЕТЫ======================================================== + +#ifdef layout_in_ram void sendAllWigets() { - -#ifndef layout_in_rom - all_widgets = readFile("layout.txt", 5000); -#endif - if (all_widgets != "") { int counter = 0; String line; @@ -193,23 +190,23 @@ void sendAllWigets() { psn_1 = psn_2 + 1; } while (psn_2 + 2 < all_widgets.length()); getMemoryLoad("[i] after send all widgets"); -#ifndef layout_in_rom - all_widgets = ""; -#endif } } -/* -void sendAllWigets2() { +#endif + +//прямое выкидывание данных из файла в файловой системе в mqtt, без загрузки оперативной памяти +void sendAllWigets() { File configFile = SPIFFS.open("/layout.txt", "r"); if (!configFile) { return; } - // while (str.length() != 0) { - - // configFile.readStringUntil("\r\n"); - - // } -}*/ + configFile.seek(0, SeekSet); //поставим курсор в начало файла + while (configFile.position() != configFile.size()) { + String widget_to_send = configFile.readStringUntil('\r\n'); + Serial.println("[V] " + widget_to_send); + sendMQTT("config", widget_to_send); + } +} //=====================================================ОТПРАВЛЯЕМ ДАННЫЕ В ВИДЖЕТЫ ПРИ ОБНОВЛЕНИИ СТРАНИЦЫ======================================================== void sendAllData() { //берет строку json и ключи превращает в топики а значения колючей в них посылает diff --git a/set.h b/set.h index cb408502..a86a0aa0 100644 --- a/set.h +++ b/set.h @@ -5,9 +5,9 @@ boolean start_check_version = false; //#define OTA_enable //#define MDNS_enable -#define WS_enable +//#define WS_enable -//#define layout_in_rom +//#define layout_in_ram #define TIME_COMPILING String(__TIME__) #define DATE_COMPILING String(__DATE__)