From 03964dcaf85da6957cf68270eda1bb7d1718787c Mon Sep 17 00:00:00 2001 From: joBr99 <29555657+joBr99@users.noreply.github.com> Date: Mon, 31 Jan 2022 18:58:48 +0100 Subject: [PATCH] added button and text item --- HMI/nspanel.HMI | Bin 11014950 -> 11014950 bytes HMI/nspanel.tft | Bin 7619764 -> 7632040 bytes tasmota/node-red-example-flow.json | 477 +++++++++++++---------------- 3 files changed, 217 insertions(+), 260 deletions(-) diff --git a/HMI/nspanel.HMI b/HMI/nspanel.HMI index c37ac8ba0bbcb43c7e42a9744f0299dc4f8f2f27..f91e5cc9da0d12e1226e40f120866dc56ee9d787 100644 GIT binary patch delta 10070 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 QBWFdQ3C2phpV96A05v3}yZ`_I delta 30730 zcmeI5cYGC9`v2$Nn#@oPg_1wjQ71O*GMg`(v9`JB0PG6Q$^_xk>~uh-9G&bgWQdCqg5b3V_^ zojWA);jcePcy`qX39By%KHGmy$ql{MZ48dN_2ukSO`d4iyK?P_ggsLm@4B(|<@dH5 z{L&X6@Yf$NqmE`R8kP>=^XK)-xA9e8X!QwO<%M4qTj!M-+|wE;P)N)eFuKuf!}xF_Z|5Eeh2DX0V`-FScz81s$tc%lB{Ga z#j0i1w(3}^R+^P=WmuV3U8|l|-)dkrw6d&hE62*U8d-T(W2=dkZ#A_FtY%ho>pZK4 zb-vZoYGt*y+E`($t<}zIZ*{N=ts<+~>S%ScI$K?=u2wgzyVb+G!0Kt0SiP*?Rv)Xc z)z9j04X_4UgRH^U5NoJ4%o=Wuutr*=tkKpO>q2X+b&++kb%}MUHO?AuO|T|fldQ?s zW!4mHsx{3jwWeD$teMs2v-7+@X?RE`;B)(Z;S^D3VhVtyZ}d~KKl7$LW0!7OJas2-M7Icl`|gZudU3%$oL zTtxdmX_11;A1*P?VCD7W&6g7@XHPa?OsE_*&3rAPGCY%Q#vHak&o^I5sQhFxzkfN( z_JJiNH(bT<=PhSD+A`NARMuW;?o6nxc@x{%kIY!@_wGIYIJBKz(!`xnv4!Jwq61NX9*8c3={Fr!-Jg zz}4HFqM%4Qv17Pa?!V8>lJ(D-Ie`o0(0aK2;5p^?*!_;%o;lgEP@Y!7&6qiVW^|@< zGD%?8OETA+`BL}*^sN5R;a*oat>Gz;n za#m;^l~*|V{%^`jpGPoe`e8FG6df{s(L%Z9A@gCl>hiGJD?2L|RAL=2YW|$rWl=SH zsbExz9C;Ycibu`XiTC_eRV8D3nssG#Fp^if_fhkg>O8AinftiPGm1U>Nk{C;<(te~ zlvM*6{0yX?o+%5SF)s-2Pp#bejQN<|RTKMZ1kknaIdekI{i)dez%}yJGiLM3yv^oy zXBmA_X-?qyo?Fft-+HSazn$Z=Dj(RYq8wxvRPK8b=M%HBpt9jB`rDDO@mqB|T>l17 zhnzRfdlD*lzh$N)b$ON{UlS|C@0zOu^2vMVn}K{8u-EL>>Y}d2&CfTkn3B@6sj+F> zio)i`gU>YRl4%^g_um8R7;o+PZqRwgx9=7YttYSSHJ3`sKC^GafkY%!Aey^oaZcrn z`^<+EG9J0@JMWjQXc8GKtG~oK^1}hM`Pzf#EP3;w**uuOR*oJt^Mko>RHlAqo)?h5 zhs;UxIGe1)Xs$bKei{6@jtmQ!-4l;POeqYQStPH1ZN47Pz^;Y^byb_G+Ip(3&$cie z$mVMY{1<4DDuuPp=1m%cu+&FQu9MiUQ@C5_a8c*ta50SF_SiS(YvJz7$pxzIq1v9R zEny3{efg@~_OjhJ?hV4CPNq7E9gD)wqX0lBEDVAY!@_SqnVU_WN`FPr{G}}*eY*gUMGzna8W_KZM zgKJv44RO#jz?0={M&ZaB#RiW#ZZ>WC0wW7JesKY!U*&=foknsniBsMGrr9;f*UQZo zd|h+3*(fiQ{f!etlki&Y<-a4k29o)2v*CZ)mNk$eKbrN!pQ>H|T(zI6cCTvpu|>Wd z;H%1)FJk$!KUJRk5ow1^2#htm$$KNsPE5^SvN+vL3Z%$&KbZvu3Cxc`P1S}}o21%g zwngDUoiy2Zz1djq`pK*vGp?Zw65|{51PauWlArBN#ms%=-k;4`^;2kHi2o8AK>C`f zfs{1qaFbaNp|t(QY#MjpEB>#knnA~QJ{A;)M=cyRYgV`*mUNhqi~WD6F09mhc8Vbz z-^A^KD~YGA!8#dhYO_18FO^-=d?=mjJYY$ zt`4q|;o|V+6N@H?J2-cS3I^J;i+6?{nlU`w&b7UBbfiVL-OKB#>Mi8e)9$@B(xk%f zy~G(?to99K6;W4VgqhG2W4yDetmSN-oNQJ^DF&sg*yX5_npJ!50-?WD_ zhte$=8PVo^1|Ddo+Lo$qt=cwhA!K{LDj~zNDHu7gNm~Gx*!hG!?1nS612QIdmysB` zLgppF^=RejLe-8@?O4@b#1^i{@m0CLSh)^dBFTx7#_Ih&F>;MO@dw;fRlnbUk{D6% zx5%Ey;$Fmlf4_}?H}GHje%mrRk`}xtUAiUftHMfIUSX!l*U6Dq`CE`3EU^n-=fZGN zmoDMr;!fehuFhp?rL2Ay_J2=_{5xRCmRgYk3DE%y*Vc|)p77n;r^IX$StWrwkrL_D z+iY^@@<5HX2h8+4uMVUHzs!>5bs_`0|Dvu}ox*{i)dh?1m&5ZDYVVI-3!5bcf+|}( zhXVnXt}%0K{UTSlZIgL5+E zhowmDZ_*;E1$FU08V)p6ZGF{dsWzJ}PLaF}`&KzOL#AG7)^`tTpbYEz56aI)AB*#r z(WxumFN(vRI`Aui$nb$cMV1lBkx$bj1$e1Sk2DGNmnIpJW(7T!?>?&SrP{u#?Z+0u z4YGp^43JwhBF$swy_HGHe==X28Oh^T;U->vau~tg$-u0Vi5U9J*33wg;6ki;F1G3W zOl;F^ZY!in9=!& zF+co*a`lpGUsUbOs(pnmoWH?W<@{CKdGNIiIaxoF%fR8ronzl**q_9{R2~kg_MmDH ztM+TQ@cC_Q-;QM1pTunYuawP!|7@>5iD72vp0}+MF^HKnvmzb&Iyfs54yWQhEgVQ! zZJKH`RGY~b5j5bdT21Y3OunixO6@TC+yl4u^^$Sj;Ts#=;*Rdl@C|C% zO4a^RwX0NnBU?DSg|EudpJI+~%9JI!vGj`FqNP+vzV=tMmgF~zB!!<;em1H0Db+r$ z+Gp6pb0uGu=VxutdC!5cxbE7Dcwbm-pWM7_JJ~2w7~ZA)>{jh3s@aLaJF~JX4?CO0WbTQlK9za-k)JkXAH~#5QL7jON(kQt0)}x^+WaHZ zK5$ef{v&d01+7>XH#CgZhpVb+RVxT98+&-|7~cmk+i{`oaKg5)6XU(l;;Avd7rd$h z4wu{ZNip6FZwhnXjC_#C$$mfuSA{_|WvDnhE|>l@vLpLPe7hJ`uO?ux=11wb4XgQ4 z%C})Pv|`b#ffZL1k8?HTj83lx_FN4)qVsUBhWvB)YGBXRke6UJE8dEjAs+lFzq}RM zk#_>$Mp1RtK|5;lpuGQXq)p(2)O{O~lkmx*jvSVZoILj|&dA9Rpz6qB&&bJn3+m>K zocuJZ)&cg6oV=@Hq@C5lr)H(u?8IuTb#cO%jqgO-tC(q`Zoc`7?n2m;{fb%@TQ+%7 zY_3y2{0uluRB`*Ei+CJyRjAlF!aaZ~?iBJ~xDjSR^-#~a0t&_gItlI!ar>ce%gHvI0u0$&gPKC)MxZgSXe#Dg4k4MszL+If)Wyy8hAtMb~wT$SdjAV^awT$4D zkvzwTHwK4^DxAjg)5M48dt`JC;OXxaI_lNLo|r4wGJ;b^29%BJ3~^6PA6iD(t98c= zZ7$p1ixkM{7LkYZdZWXmWuiTRJW(n>!s*&u-uMuwE6GT>)?&hvVv^r-7N?lx9x-80 zG08n*f>TU#hN{H`rY8{61~`TBQddsw(G{G!lJ`M%hS1)bm_D?w;A-75!u*2Ii48WZRa>ypM5uZk6(MdGuqPo;36*3PUPN{w5~VN`q5Ta*v|mRFvGKC^!`* z_b3WZMajQ}qL1u^qRI%9fvXaN5eJn?@h&LJZdR=*y15}_^HH^;;8c`+t`A=b?w-c+ zv&e@p_9*I_*u(&*FkULki9L#fQ&I9csLl}DI}_7~Ruo*VJ7ySDbjiognYtPs9$9PH z1ITMg`_FKuu9ouMI8#YHy26sWlApnpT32xDO777WoVt>GbOoobnqcu*9f6A@C0)tam@-?W=5ZXHv(}&g-T&+817}K@uXE;+gfO#aXY1?j)+|O}` zw?T$|4moMXfA-a~!HRN{Uvw6yoaAl6^}8tSDJQu{PH@UeK7bKdpjnRlRdC8lZsIf@ zzZY`y0AJPn3?nXUgM7Ica8D%J7yS@v*qW`X}Sd+9!-<%0pv-t_dukL z+}H;t2I*Ki zZjjK!b#0LszJ#7MVAXn}n>vuah^qAjr=H|nefZ1ZFj0lmIDTI7;jeo1bPae71Drxf z)RPl?^aQ7#x9y(i(zOLvoLX;M9=ZqaipoB==|tP7TTTL&M}lI6ZlQuj+k<5tsFj+MVSrQUh;njbkDTC?ll)y& zXNY@Z`p|O1UadQ37?X3?LFe?`hYpXXDfR&J6uI>%PS2ssaC+|l8mA|rM_L$DTJkfP zRZ9y_X~{j(f>T;@kF?;FmfRyPIHe`$8|fF{Kw2K)t9s92#3k;Nc}E~EyIHlg=%%z} z2T--N;FOkpzYqTk944xSTz(Gu@WUQyT?4+x0H@FqZ;&`KH$i`t0jIR&U!Xce+!ND> zmKOGE-7&+MwCj%IOy#DPx@~LOwn?(=Tb!v$vhiD-skB;#(ONcGQBLyV813eile`FA zzmdY8a>nD7ll(FG*Kee-Cu6-DXX^9cMNAb0R{*9;$O$zD660_>(E7rj`jVxfYJI_} zFFAvc#}Q;j+>Ugg0h!?V(t$b?*Y)Aa;9MLF7v|X4cbphw?GB#nY6URV34sAj2=aP9 zj_6n?1nij*5c!A5&g^^)DRp<(w!8CX-ZA7rzTABbIY6tr7^Jm^6?1^xlLO$~MsiOM zfHMc;apnMdfB4rq0DCTooH_8wapV9GxJ`IbB?Kd`gq%g^fQz$F=KwgjmaG6(YYomE zAaCx&TX=H7HK3)>fY#vnQiXv!6Swiv*;XfarWsP0H+jW-BEQ8fHMck zFYw_do*Zxu=n~os)?tkOQMJq}1J=YIl#8VJDFTqh;Ai0QvP8t#bpMIY92o0dVF( zJkA^-_v8TVnFHjTkprtvAqRNC)!{{z5RAAIau%HfF3vuk1K^Z`>_SwX1K`X7@{4@< zC7v8`4H)M$U;;S4RAHdb#1nn^7;r6}%YL%sMCAZFm;;Q|lLO$)0rE+x@f3t0Gv5M?#Tgg=0H5o93c1H z55PVt#+d_4&maeA#MR+Nl@N@$5^@%u11`=!ode*Mf^06T&H-@d0Qr0$zR;5ct^tdE z21LN|r3wReCNB5kbHKH9F8j+JCn^Wf!5mxycNKTIY7P@qxD+>ICFs9lLO$)fq0xbK<;@ffIV}7{0MSj zd=2CP54bwKs1kw^S3=IBbHK&fr*ijV0b6_qYz4=cDh$+__yr%n z30zC(vVX~OqH+Ko%mGH~$pLWY0Qrlk@fxycfWVIY92o0dVF3xhDs}nFH}SbAa6QUI6=~7-tT2OGOUQh^xbkDj^tg zCFCqR2V9(eItRch1=;_g>Kp)P4v@d&!{77dfNQ{Zp8+3&<4Y9=>P)=Dhrb1`rE}ST z4y0Y|WC?OmLGT6=IxK(-%MYY$HC$q)GOug>KaYQW)hI~4y09ABz1P-o&JKKu)C zEt$*yTgM4J(GR6(peaT_*P|hHPf`*U)s^t91%?%cC-(>sPT|Qt!h=)zc$~tM^WU)aV*%JxcybD#-2mr554bwK zs1kw^S3=IBbHK&fr*iW>LVQO-aQIS%fjSc>`0$f3 z=Hgh~_958Yg^vf}h)KXmJ?B3-bAUV%1L8TN6P*LFS34(r8X^bMF{ISp-N5cnm$$Q! z1L<-)3pqe5&wBu@m;>aV8~|qykb80foH-DWGY7~$?*Xu94v;ekl5>y)JmBiURSCg} zDVZ6DabNWbq;_t2gvLB@CFI)N5rlHSv~`Dz}ryvu$BxKrqd!ZXln;d|H< zP_i;ogT6j28J0#1R;Upi2As)T6?e1|huQ^WgadLNaXiY1R*07@1?u4s-{DuZg77>5tKMfAaarW7T6k~@PZmMd!h=(I@~98L0$dC4vR~p6-qmp>1~4d= zkZa;)KHLP?!n^FR26qbmP6%#2QXCje*1$+I|1h8i!k!PL7nMmXZ!S!td?3qa9_{|kr+OFJGp>lQL zs)Tf?3GK_ihs_K9Rrf!`}pVPviLcrw`x8JacxQaXACt!T_g` z_nK)>JOfbwEC4vug8{vU8qW`X==6X+^{0I`m%(kzV?XEK0XNMaP4nyl&ky~8Q&)1&$3SrEO3q)X8B+vZdB8P; zs}h0{*VjSz6hT*Zvua(@&Fv-Yh^lo3r>^8hKD;xydm6`27a!g=(XFd%;%*q=6voT* zo)cG}_XrrAx{?>7a*ZtH&cr;{x`L~9$9&sdk~)_EPj-JWoV3-pjcwcha-<_p)Bcj% zseDQvtyq~^ypD$&R|U8wWCKMymG{dVjBh=;(ZqH{-bD6x#hXk{r}7Lb?p$6`LCB)h z1IA1b@&YW!&6ytLGhnaN1NKZ0a!-1IGd;+s!(N~E;7kv4{C<`cc0qdZfLjNyN(e^W zror+;7o-QfS#^4#o4ZRk9JMO8y&T59ARp?(M}oVjar}((;iEn2;hK011~`Qi^S6{Z zaXmnN+JiGa$cLbEjV!cxCg!nD4{){anD1D69PWzrC@^K71iKOjKbkj-N$7e6dGP*8md(oI*#GlM{R7 z1gD(jb5OOME)CkETuS0pv~P*50^^uaq4xypbL3R_W))kz(lHcgVZvl5tY8{B1~`TB^4*ye&j8e?DL8c{ zUxmswve4d{n8#XIaJ6pOR&!a`8>i_Bumx`00^9b4EbD{Q^n`5e1377x11l{XtSBe> zz_U2zB^))xlGV&%=J-d9*T zvEq@0hdZ&Ja>ok$xUquAjTPL9^%!D(Yf#)+&vRm}J4D6WZ%8cGJa7%MUm&Kjf!;_!)5bG>)GtAC5^YsxKR^i33hFh?w#6CXy3-ZX&^X`5`}v$~Cgk z-kF%k`tk#=)(zWgE)NfL-d1X3QjezR+XKkYmnj$GZKbw6FbcYojDQb)zQB^Yk}p4t zQ&;jC;QBfQd+JK=(G{G!l0OA|tt&WnCC4w>%BIoKl?NVOVZ`;-mL6lEE4x|orAi3h z+!nHQRIMvGbtO;r;hEqtImb_3A70O+t83!=7~m8JL|r+tM^|v_N?r$5>+14DA6i#% zweFa2n@ib+cw5N_^GMp#w#}DeV{w}1%d)YMlUAP76jqdz{5i~|Wd^65jz8fO8)&>oVt>GbcH>2CHLqGPF=~LX6O}YmgBA- zoVt?#23@C(gRVUA=n5mQucI6p2VL3CiZ4~@gSwJ+Mb)~3Q&;lNKD;|POwRGs!-rqs z(bYAv{m0m<9Z^?K?9mnW)Rnvws@B!zhaR-9;A-8lt>%(70jKF;uu`{eYuk3PoSuNw zbg;CU2svqWDW=hK!isW|nD7lYAxoYdK+0Im!D#&Tf91D^7jMhN5bH;fMN?5BK3CsaL!KqkRTk2<{HlnRu)Z9|F$B zv2X#7{l(yR;lIkFg9*V%JqZEMgdo4j#}S?Agn&I00wPbwv)ri|QtIw*V|P!LBbOlu zrb_M<UN^BFJ~96nWXPdv|uPXp)T zSlspt!0o~uz{Jb}M(W7{aOME{d>==2qH_TDYUkw0G~~b%4C(Cd4%^*JWKSt_V2RY4 zjvSyBe@9>E0IZk;tv!mK{SWJNa@Sel56rD#y=tKHRd?#9jhp z<6~J)uo9K;Wh~^5qg6hRZURTls<`cM2G=UO{M@3sY@dls`)V9}KG?UlC0#Ag%z~t= z<;z)+lvebnrGphECFiqzH>afJmx60aVNXfP`<=xpDfz{2NnuY($p_#A=&{-SP{$+B zqvUo@tUczaSm({bqhwmK>PN}#>_^FDx5=S7<^8hnz_<9S-k|ojqdTPET>O;b+&OrR zeBIpgQ6U=MAv@=m_p97}WqI$bDk>8Lu|G*v+xWB|9wIde7>5yPhLLI14&ycwPnGzC z9Lm1z@J@Mhe@U(bBE#M@gGM9 zjUV7|3I0&`4LI}OUmH}vAGQ?F!#d&9?Onf=UmeDuNPF^^@`lo`d2~Dez*trD==(MH z^u?9BpB!x-ZJe5gKg@Li&pA)y4`}V_yEZwxIs4oG_&4bR%xQ1QlJ{Fg8wS7aFNa%1 zHy2gmDb0dG=bH6aDOQ0kDIPT3LAhFvGYL^=vEtkq&GH8+bnx^PU?xU+!xat<3I$k8%&8o;_@XENYF|dyJ5k zt)rW348yJDmQi;;h7HKZpJix^5C`DTCkz`Ui`yW?$z$-Nwy0-&c}IGM;brm|85hP5 zEW*|EQ`ED~_PJurMvS)m+`yu-(z`9(FTdC@7F~k08fO^!OL}{_KLy*bC&OY2esN%G^|-FG zw>{jSnj|M+Ri>k-1lZs-vKRHj<6~p~jbZx}n((4;BjLGHIX8d__XLFVXwyNkK3mh@FE|TRP z;eHux=i?(s!WD@A57pzg$*4|nzpPx!Ix%{5wONAbaWZ{&WwqHpm-|717JiC~-+H1yt`FEnfA{PBa zi2k>m<<%b1_kt@EWPPn@gOq=*;kXfrV-nX)E0X;eM6W8^1=R00uRAX6RhLUT{|fK& z2XXz|wMJI=M8pSgH;l1&oI9?AOesOc2XB`pCDAuiLThc4{)sAr;E6kBYA+1`$9mjS z-hb}!!P34rhW}%|4DO8ufBaWO_rSSkWr>W*z8Fo%KQ5h*>&PnnW5LINl@5L2{?G=z zRXup_xRp}X2ksATkgUGZt?kbI%{KYV!_}sI66Uzh!2|IVc*va*SYe#{+uDB7t@R5Y zu}$B2)HOuj?-y;D)L3;553QLtT1xsyXS5r%(Y87Kn9J7XJ_|ppc1pQFX7t-A+xx@+ z{KswEI#0UB$bAFgzf5&qtNf=9j7}}O88)X}cGQi`*SjG2;A?i#Ggjnf}gh93awtKHs?nl$Ni=Fv&_88t_<`s zc2-L7p>SUg+tL^D$nqt_IQDY&xT%sh4DQQcke0*XKJ695C`WY`=e+X%&2i5g;MPd& z*8>fWv{xj3I0VRf4L1m{d&jMoy~80u19VkYyAZMQmPXLrIIvTsE6 z<>2r)Wc%=Fjyzf`T05z?GCF`!&E@#W=*k+nvUPdo9myXXZ5PDr=wHh>*GPC5x5e*D z?TezVg9-1-Qzy!wPQfo~cG(R+=so$7eD}M&OQ=!neZ%;}`||0 z0NdSr5ZuJ<|Xt!Y=}7% zW9~ePUq(A>NZVN$g98~q3v}_fxJmrhkovPhaUgwWN1qGsJ|_9UmN$^pvS=0$D11`m z<2YGRrN!82%V6WX_(82t(N&Ztd) zHsqzb=)CSnS$+y5OMW(t_P<~>>ZiXL^58slmi#RFxzVRIB}MPa3jd0VodSt_9KO(h^SLFYBT%IgNh-K8>AO7;TyWC@U6X%-f*del?`$ zB8}AfN#buhTWCF8OEXC45?#+;y}8Y(dTMheFi_hc}6DHi8f9v z2xJ;-aJTk!pu_-|rV$Lgw#qQRtuo}Z2!`Q6lFKn{g%QAGNBMg>GGv7zKa@wGNvzd! H=CuC>GaYOI diff --git a/tasmota/node-red-example-flow.json b/tasmota/node-red-example-flow.json index 26de3914..3aafec68 100644 --- a/tasmota/node-red-example-flow.json +++ b/tasmota/node-red-example-flow.json @@ -1,18 +1,18 @@ [ { - "id": "ba6c8bb20b9aa4cc", + "id": "1b16bf0e99b71548", "type": "tab", - "label": "NsPanelTest", + "label": "nspdebug", "disabled": false, "info": "", "env": [] }, { - "id": "052fd99a211925df", + "id": "fc261f2d1db2acab", "type": "mqtt out", - "z": "ba6c8bb20b9aa4cc", + "z": "1b16bf0e99b71548", "name": "", - "topic": "cmnd/nspanelTest/Screen", + "topic": "cmnd/tasmota_nspdebugtest/Screen", "qos": "", "retain": "", "respTopic": "", @@ -21,16 +21,16 @@ "correl": "", "expiry": "", "broker": "aeedd16f1f009dd0", - "x": 1050, - "y": 100, + "x": 1190, + "y": 140, "wires": [] }, { - "id": "18f314835090d302", + "id": "3adbb7a87040adcb", "type": "debug", - "z": "ba6c8bb20b9aa4cc", + "z": "1b16bf0e99b71548", "name": "", - "active": false, + "active": true, "tosidebar": true, "console": false, "tostatus": false, @@ -38,16 +38,16 @@ "targetType": "msg", "statusVal": "", "statusType": "auto", - "x": 970, - "y": 40, + "x": 1070, + "y": 80, "wires": [] }, { - "id": "df42e19d07582858", + "id": "3f8b47affabd553d", "type": "mqtt in", - "z": "ba6c8bb20b9aa4cc", + "z": "1b16bf0e99b71548", "name": "", - "topic": "tele/nspanelTest/RESULT", + "topic": "tele/tasmota_nspdebugtest/RESULT", "qos": "2", "datatype": "auto", "broker": "aeedd16f1f009dd0", @@ -55,18 +55,18 @@ "rap": true, "rh": 0, "inputs": 0, - "x": 130, - "y": 40, + "x": 260, + "y": 80, "wires": [ [ - "1d856f40c8269b5d" + "799924b71e358164" ] ] }, { - "id": "1d856f40c8269b5d", + "id": "799924b71e358164", "type": "function", - "z": "ba6c8bb20b9aa4cc", + "z": "1b16bf0e99b71548", "name": "check for '\"{\"csv\":'", "func": "if(msg.payload.startsWith('\\{\"csv\":')){\n obj = JSON.parse(msg.payload)\n msg.payload = obj.csv\n return msg;\n}", "outputs": 1, @@ -74,232 +74,43 @@ "initialize": "", "finalize": "", "libs": [], - "x": 350, - "y": 40, + "x": 530, + "y": 80, "wires": [ [ - "18f314835090d302", - "849608f486fde47c" + "3adbb7a87040adcb", + "85003e2af29ab409" ] ] }, { - "id": "99ce3ff2cbdb8946", - "type": "server-state-changed", - "z": "ba6c8bb20b9aa4cc", - "name": "", - "server": "7b975ed1.2c58d", - "version": 3, - "exposeToHomeAssistant": false, - "haConfig": [ - { - "property": "name", - "value": "" - }, - { - "property": "icon", - "value": "" - } - ], - "entityidfilter": "cover.nspterrasse_cover_1", - "entityidfiltertype": "exact", - "outputinitially": false, - "state_type": "str", - "haltifstate": "", - "halt_if_type": "str", - "halt_if_compare": "is", - "outputs": 1, - "output_only_on_state_change": true, - "for": 0, - "forType": "num", - "forUnits": "minutes", - "ignorePrevStateNull": false, - "ignorePrevStateUnknown": false, - "ignorePrevStateUnavailable": false, - "ignoreCurrentStateUnknown": false, - "ignoreCurrentStateUnavailable": false, - "outputProperties": [ - { - "property": "payload", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - }, - { - "property": "data", - "propertyType": "msg", - "value": "", - "valueType": "eventData" - }, - { - "property": "topic", - "propertyType": "msg", - "value": "", - "valueType": "triggerId" - } - ], - "x": 240, - "y": 140, - "wires": [ - [ - "d88c79558c101384" - ] - ] - }, - { - "id": "849608f486fde47c", + "id": "85003e2af29ab409", "type": "function", - "z": "ba6c8bb20b9aa4cc", + "z": "1b16bf0e99b71548", "name": "pages", - "func": "var pages = \n[\n {\n heading: \"Rolladen\",\n items: [\"cover.rolladenfenster_cover_1\", \"cover.nspterrasse_cover_1\", \"cover.rolladenterasse_cover_1\", \"delete\"] \n },\n {\n heading: \"TestPage\",\n items: [\"light.schreibtischlampe\", \"cover.rolladenterasse_cover_1\", \"delete\", \"delete\"] \n }\n]\n\nfunction genPage(pageNum){\n var out_msgs = [ { payload: \"entityUpdHeading,\"+pages[pageNum].heading } ]\n\n pages[pageNum].items.forEach(function (id, i) {\n \n var type = \"delete\"\n var iconId = 0\n var name = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.friendly_name\")\n \n if(id.startsWith(\"cover\")){\n type = \"shutter\"\n iconId = 0\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",\"+iconId+\",\"+name+\",\"+type})\n }\n if(id.startsWith(\"light\")){\n type = \"light\"\n iconId = 1\n var optVal = \"0\"\n if(global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].state\") == \"on\")\n optVal = \"1\"\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",\"+iconId+\",\"+name+\",\"+type+\",\"+optVal})\n }\n if(id == \"delete\"){\n type = \"delete\"\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",0,dc,\"+type})\n }\n \n \n }\n )\n\n\n \n return out_msgs\n \n}\n\nfunction handleButtonEvent(pageNum, words){\n var out_msgs = [ ]\n pages[pageNum].items.forEach(function (id, i) {\n var name = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.friendly_name\")\n if(words[4]==name){\n if(words[6]==\"OnOff\"){\n var domain = \"switch\"\n if(id.startsWith(\"light\"))\n domain = \"light\"\n var action = \"turn_off\"\n if(words[7]==\"1\")\n action = \"turn_on\"\n out_msgs.push( {payload: id, action: action, domain: domain})\n }\n \n if(words[6]==\"up\")\n out_msgs.push( {payload: id, action: \"open_cover\", domain: \"cover\"})\n if(words[6]==\"stop\")\n out_msgs.push( {payload: id, action: \"stop_cover\", domain: \"cover\"})\n if(words[6]==\"down\")\n out_msgs.push( {payload: id, action: \"close_cover\", domain: \"cover\"})\n \n }\n }\n \n )\n return out_msgs\n}\n\nwords = msg.payload.split(',')\nif(words[0]=='event'){\n var pageNum = parseInt(words[2])\n pageNum = (pageNum % pages.length)\n pageNum = Math.abs(pageNum)\n context.set(\"currentPage\", pageNum)\n \n if(words[1]=='pageOpen'){\n return [genPage(pageNum), null]\n }\n if(words[1]=='buttonPress'){\n return [null, handleButtonEvent(pageNum, words)]\n }\n \n}\nif(words[0]=='extUpd'){\n if (context.get(\"currentPage\") === undefined) {\n context.set(\"currentPage\", 0)\n }\n \n return [genPage(context.get(\"currentPage\")), null]\n \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "func": "var pages = \n[\n {\n heading: \"Rolladen\",\n items: [\"cover.rolladenfenster_cover_1\", \"cover.nspterrasse_cover_1\", \"cover.rolladenterasse_cover_1\", \"delete\"] \n },\n {\n heading: \"TestPage\",\n items: [\"button.beamer_key_left\", \"cover.rolladenterasse_cover_1\", \"light.schreibtischlampe\", \"sensor.kleiderschrank1_si7021_temperature\"] \n }\n]\n\nfunction genPage(pageNum){\n var out_msgs = [ { payload: \"entityUpdHeading,\"+pages[pageNum].heading } ]\n\n pages[pageNum].items.forEach(function (id, i) {\n \n var type = \"delete\"\n var iconId = 0\n var name = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.friendly_name\")\n \n if(id.startsWith(\"cover\")){\n type = \"shutter\"\n iconId = 0\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",\"+iconId+\",\"+name+\",\"+type})\n }\n if(id.startsWith(\"light\")){\n type = \"light\"\n iconId = 1\n var optVal = \"0\"\n if(global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].state\") == \"on\")\n optVal = \"1\"\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",\"+iconId+\",\"+name+\",\"+type+\",\"+optVal})\n }\n if(id.startsWith(\"sensor\")){\n type = \"text\"\n \n if(global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.device_class\") == \"temperature\"){\n iconId = 2\n }\n \n \n var optVal = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].state\") + \" \" + global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.unit_of_measurement\")\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",\"+iconId+\",\"+name+\",\"+type+\",\"+optVal})\n }\n if(id.startsWith(\"button\")){\n type = \"button\"\n iconId = 3\n var optVal = \"PRESS\"\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",\"+iconId+\",\"+name+\",\"+type+\",\"+optVal})\n }\n if(id == \"delete\"){\n type = \"delete\"\n out_msgs.push({ payload: \"entityUpd,\"+(i+1)+\",0,dc,\"+type})\n }\n \n \n }\n )\n\n\n \n return out_msgs\n \n}\n\nfunction handleButtonEvent(pageNum, words){\n var out_msgs = [ ]\n pages[pageNum].items.forEach(function (id, i) {\n var name = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes.friendly_name\")\n if(words[4]==name){\n if(words[6]==\"OnOff\"){\n var domain = \"switch\"\n if(id.startsWith(\"light\"))\n domain = \"light\"\n var action = \"turn_off\"\n if(words[7]==\"1\")\n action = \"turn_on\"\n out_msgs.push( {payload: id, action: action, domain: domain})\n }\n \n if(words[6]==\"up\")\n out_msgs.push( {payload: id, action: \"open_cover\", domain: \"cover\"})\n if(words[6]==\"stop\")\n out_msgs.push( {payload: id, action: \"stop_cover\", domain: \"cover\"})\n if(words[6]==\"down\")\n out_msgs.push( {payload: id, action: \"close_cover\", domain: \"cover\"})\n \n if(words[6]==\"brightnessSlider\")\n out_msgs.push( {payload: id, action: \"turn_on\", domain: \"lightBrightness\", brightness: parseInt(words[7])})\n if(words[6]==\"colorTempSlider\")\n out_msgs.push( {payload: id, action: \"turn_on\", domain: \"lightTemperature\", temperature: parseInt(words[7])})\n \n }\n }\n \n )\n return out_msgs\n}\n\nwords = msg.payload.split(',')\nif(words[0]=='event'){\n var pageNum = parseInt(words[2])\n pageNum = (pageNum % pages.length)\n pageNum = Math.abs(pageNum)\n context.set(\"currentPage\", pageNum)\n \n if(words[1]=='pageOpen'){\n return [genPage(pageNum), null]\n }\n if(words[1]=='buttonPress'){\n return [null, handleButtonEvent(pageNum, words)]\n }\n \n}\nif(words[0]=='extUpd'){\n if (context.get(\"currentPage\") === undefined) {\n context.set(\"currentPage\", 0)\n }\n \n return [genPage(context.get(\"currentPage\")), null]\n \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", "outputs": 2, "noerr": 0, "initialize": "", "finalize": "", "libs": [], - "x": 750, - "y": 80, + "x": 850, + "y": 120, "wires": [ [ - "052fd99a211925df", - "18f314835090d302" + "fc261f2d1db2acab", + "3adbb7a87040adcb" ], [ - "0b70cd75a6d41665", - "d6e07a29c223130d" + "9e65c8b0a6164b41", + "c2ce60ae97237e54" ] ] }, { - "id": "3ed79a6caf585c59", + "id": "ad12712f4d203754", "type": "server-state-changed", - "z": "ba6c8bb20b9aa4cc", - "name": "", - "server": "7b975ed1.2c58d", - "version": 3, - "exposeToHomeAssistant": false, - "haConfig": [ - { - "property": "name", - "value": "" - }, - { - "property": "icon", - "value": "" - } - ], - "entityidfilter": "cover.rolladenfenster_cover_1", - "entityidfiltertype": "exact", - "outputinitially": false, - "state_type": "str", - "haltifstate": "", - "halt_if_type": "str", - "halt_if_compare": "is", - "outputs": 1, - "output_only_on_state_change": true, - "for": 0, - "forType": "num", - "forUnits": "minutes", - "ignorePrevStateNull": false, - "ignorePrevStateUnknown": false, - "ignorePrevStateUnavailable": false, - "ignoreCurrentStateUnknown": false, - "ignoreCurrentStateUnavailable": false, - "outputProperties": [ - { - "property": "payload", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - }, - { - "property": "data", - "propertyType": "msg", - "value": "", - "valueType": "eventData" - }, - { - "property": "topic", - "propertyType": "msg", - "value": "", - "valueType": "triggerId" - } - ], - "x": 210, - "y": 180, - "wires": [ - [ - "d88c79558c101384" - ] - ] - }, - { - "id": "5b2f799c3a7f35f4", - "type": "server-state-changed", - "z": "ba6c8bb20b9aa4cc", - "name": "", - "server": "7b975ed1.2c58d", - "version": 3, - "exposeToHomeAssistant": false, - "haConfig": [ - { - "property": "name", - "value": "" - }, - { - "property": "icon", - "value": "" - } - ], - "entityidfilter": "cover.rolladenterasse_cover_1", - "entityidfiltertype": "exact", - "outputinitially": false, - "state_type": "str", - "haltifstate": "", - "halt_if_type": "str", - "halt_if_compare": "is", - "outputs": 1, - "output_only_on_state_change": true, - "for": 0, - "forType": "num", - "forUnits": "minutes", - "ignorePrevStateNull": false, - "ignorePrevStateUnknown": false, - "ignorePrevStateUnavailable": false, - "ignoreCurrentStateUnknown": false, - "ignoreCurrentStateUnavailable": false, - "outputProperties": [ - { - "property": "payload", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - }, - { - "property": "data", - "propertyType": "msg", - "value": "", - "valueType": "eventData" - }, - { - "property": "topic", - "propertyType": "msg", - "value": "", - "valueType": "triggerId" - } - ], - "x": 210, - "y": 220, - "wires": [ - [ - "d88c79558c101384" - ] - ] - }, - { - "id": "3414f15a3307fbf5", - "type": "server-state-changed", - "z": "ba6c8bb20b9aa4cc", + "z": "1b16bf0e99b71548", "name": "", "server": "7b975ed1.2c58d", "version": 3, @@ -351,18 +162,18 @@ "valueType": "triggerId" } ], - "x": 230, - "y": 260, + "x": 330, + "y": 300, "wires": [ [ - "d88c79558c101384" + "cd7f5a96eb38397f" ] ] }, { - "id": "0b70cd75a6d41665", + "id": "9e65c8b0a6164b41", "type": "debug", - "z": "ba6c8bb20b9aa4cc", + "z": "1b16bf0e99b71548", "name": "", "active": true, "tosidebar": true, @@ -372,14 +183,14 @@ "targetType": "full", "statusVal": "", "statusType": "auto", - "x": 1090, - "y": 180, + "x": 1070, + "y": 200, "wires": [] }, { - "id": "a50a1e9fc3bf78b5", + "id": "05197826ebe7c1af", "type": "api-call-service", - "z": "ba6c8bb20b9aa4cc", + "z": "1b16bf0e99b71548", "name": "", "server": "7b975ed1.2c58d", "version": 3, @@ -393,16 +204,16 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 1310, - "y": 180, + "x": 1290, + "y": 200, "wires": [ [] ] }, { - "id": "d6e07a29c223130d", + "id": "c2ce60ae97237e54", "type": "switch", - "z": "ba6c8bb20b9aa4cc", + "z": "1b16bf0e99b71548", "name": "", "property": "domain", "propertyType": "msg", @@ -412,6 +223,16 @@ "v": "light", "vt": "str" }, + { + "t": "eq", + "v": "lightBrightness", + "vt": "str" + }, + { + "t": "eq", + "v": "lightTemperature", + "vt": "str" + }, { "t": "eq", "v": "switch", @@ -425,25 +246,31 @@ ], "checkall": "true", "repair": false, - "outputs": 3, - "x": 1090, - "y": 240, + "outputs": 5, + "x": 1070, + "y": 260, "wires": [ [ - "a50a1e9fc3bf78b5" + "05197826ebe7c1af" ], [ - "0b6ad0f2656e74d7" + "20f5ee9a5622c10c" ], [ - "71e4c21eb50c9af2" + "967e2ba5ebf31f47" + ], + [ + "e51c68a584fd494f" + ], + [ + "b64afa1882d55eaf" ] ] }, { - "id": "0b6ad0f2656e74d7", + "id": "e51c68a584fd494f", "type": "api-call-service", - "z": "ba6c8bb20b9aa4cc", + "z": "1b16bf0e99b71548", "name": "", "server": "7b975ed1.2c58d", "version": 3, @@ -457,16 +284,16 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 1320, - "y": 240, + "x": 1300, + "y": 360, "wires": [ [] ] }, { - "id": "d88c79558c101384", + "id": "cd7f5a96eb38397f", "type": "function", - "z": "ba6c8bb20b9aa4cc", + "z": "1b16bf0e99b71548", "name": "extUpd", "func": "msg.payload = \"extUpd\"\nreturn msg;", "outputs": 1, @@ -474,18 +301,18 @@ "initialize": "", "finalize": "", "libs": [], - "x": 560, - "y": 140, + "x": 660, + "y": 180, "wires": [ [ - "849608f486fde47c" + "85003e2af29ab409" ] ] }, { - "id": "416addca2587c3d7", + "id": "06ee793a02d15ff6", "type": "inject", - "z": "ba6c8bb20b9aa4cc", + "z": "1b16bf0e99b71548", "name": "", "props": [ { @@ -503,18 +330,18 @@ "topic": "", "payload": "", "payloadType": "date", - "x": 320, - "y": 300, + "x": 420, + "y": 340, "wires": [ [ - "d88c79558c101384" + "cd7f5a96eb38397f" ] ] }, { - "id": "71e4c21eb50c9af2", + "id": "b64afa1882d55eaf", "type": "api-call-service", - "z": "ba6c8bb20b9aa4cc", + "z": "1b16bf0e99b71548", "name": "", "server": "7b975ed1.2c58d", "version": 3, @@ -528,12 +355,142 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 1310, + "x": 1290, + "y": 420, + "wires": [ + [] + ] + }, + { + "id": "20f5ee9a5622c10c", + "type": "api-call-service", + "z": "1b16bf0e99b71548", + "name": "lightBrightness", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "{{payload}}", + "data": "{\"brightness_pct\":{{brightness}}}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 1280, + "y": 240, + "wires": [ + [] + ] + }, + { + "id": "967e2ba5ebf31f47", + "type": "function", + "z": "1b16bf0e99b71548", + "name": "calcMireds", + "func": "function scale(number, inMin, inMax, outMin, outMax) {\n return (number - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;\n}\n\nvar id = msg.payload\nvar attr = global.get(\"homeassistant.homeAssistant.states['\"+id+\"'].attributes\")\n\nvar mireds = scale(msg.temperature, 0, 100, attr.min_mireds, attr.max_mireds)\n\nmsg.temperature = mireds\nreturn msg\n\n", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1270, + "y": 300, + "wires": [ + [ + "41eac1fcf4784c53" + ] + ] + }, + { + "id": "41eac1fcf4784c53", + "type": "api-call-service", + "z": "1b16bf0e99b71548", + "name": "lightTemperature", + "server": "7b975ed1.2c58d", + "version": 3, + "debugenabled": false, + "service_domain": "light", + "service": "turn_on", + "entityId": "{{payload}}", + "data": "{\"color_temp\":{{temperature}}}", + "dataType": "json", + "mergecontext": "", + "mustacheAltTags": false, + "outputProperties": [], + "queue": "none", + "x": 1450, "y": 300, "wires": [ [] ] }, + { + "id": "b4ee2c699f24babb", + "type": "function", + "z": "1b16bf0e99b71548", + "name": "pages", + "func": "msg.payload = global.get(\"homeassistant.homeAssistant.states['sensor.kleiderschrank1_si7021_temperature']\")\nreturn msg", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 870, + "y": 580, + "wires": [ + [ + "1f8f8e6dda770b85" + ] + ] + }, + { + "id": "48655032e4a2ded6", + "type": "inject", + "z": "1b16bf0e99b71548", + "name": "", + "props": [ + { + "p": "payload" + }, + { + "p": "topic", + "vt": "str" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payload": "", + "payloadType": "date", + "x": 680, + "y": 600, + "wires": [ + [ + "b4ee2c699f24babb" + ] + ] + }, + { + "id": "1f8f8e6dda770b85", + "type": "debug", + "z": "1b16bf0e99b71548", + "name": "", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "statusVal": "", + "statusType": "auto", + "x": 990, + "y": 600, + "wires": [] + }, { "id": "aeedd16f1f009dd0", "type": "mqtt-broker",