From eb34fd9fe8534e0a0800597daa845404fa4b75f5 Mon Sep 17 00:00:00 2001 From: Florian <1technophile@users.noreply.github.com> Date: Mon, 8 May 2023 13:27:49 -0500 Subject: [PATCH] [BLE] Add moving beacon detection --- docs/img/KBeacon-app-configuration-moving.jpg | Bin 0 -> 47794 bytes .../img/KBeacon-app-configuration-moving2.jpg | Bin 0 -> 42366 bytes docs/prerequisites/devices.md | 2 + docs/use/ble.md | 17 ++++++ main/ZgatewayBT.ino | 49 ++++++++++++++---- main/config_BT.h | 6 ++- 6 files changed, 63 insertions(+), 11 deletions(-) create mode 100644 docs/img/KBeacon-app-configuration-moving.jpg create mode 100644 docs/img/KBeacon-app-configuration-moving2.jpg diff --git a/docs/img/KBeacon-app-configuration-moving.jpg b/docs/img/KBeacon-app-configuration-moving.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8343c47b9a46c46cadd449202720afc5ee503ddc GIT binary patch literal 47794 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≥6_Z9FB*J0Wvedbt!$v`i_*``P?@a4fD_6 zAo4sfOe?-ZoOtH@>MZfV?1Bv8li;!P*c0>yr(RrwCI@LYjdf={574tfOc6L;l8t>zyJbo#z2Yx;tQE4to-Le-w-(MS$b9+k<5{A|Pi z1VKOIDKtX1H0Y~{EdKC-C?8#hz9X45JvW{#Fnf*IF4v*`Nnp+>>KxC!^Mkl66YKgN zgQ51UB>u&Z0cv1u5DDJiB2@3g~$sPNvekl~Uqt{;TgPB8P9OQ0kz- z#qmtg1$w`+WA?k3>V*(Yk0@=T8Sx}K~BuMC)9 zaHVz}0nD`(!N?Cq;F?5_i0-~ekP4x&=DI%5tVQ=L#x&V7o=OpW^z6efNASa7eRb|F zP=jBsEuwJb^`dx>fcqxGI@q0PD7%&{;RV)d?g)ri5th9+;knQ`?Gly$k=IfaIrODW zIIsO4pHG^EXZX0i!W7A&9aYoY29JTUqkS+7FSED_Ud4nNy&<0r+(on%4+-YrjEgPX>&>m+H{22PqoxdfRDO~$;bt2OZ$8I>wIII8C80W7#7Krk zB(bjNbtz99A3oPBb3*zeMkHdp^F6Ew<|jK0#kxO4^!+RWF?~=mnYWa-1-*w?>v?V! zT+Kt4De{m=xu-L8GT6^Qj5clijfyXaVpaWPA`4aZNOLuC%Eq@%L+$1pfw5Wvk;4ij>d1JXC^eGKadX2Xye|nzR zoi%&=jz#u6YVyURNt8At$oEgFr)%nK6MCU1edJHBOA3Z%e638M9=C>dAK~h|ZZ&$({CGtg zV)@r-Ko;7otu`Dag1BiqURy%;R5Bd7=T^R5u6ZMkni{4N8Z>Bl=whUCdpb*{8s6wPeX3o28?(!2eE zXBUk+Q8Z}SV`Ozrs+@3djKs|ZMLUkj9!U8t&ir<@{7ky#8+e}E2b<|m?&dPI2iN(o z5KeK^WA8)Sz+ie|1><35+dB+5>Z_|kaXkE0C48RGRQyp-9@G20V1Tc!#KJsfPvRT~ z+_k>uvIx8~?D3Ak+Hcbe)yRfdFhmy|#(}<=Z};I8h6IWW(C6rga2(VM29L2jzj}KT$9VY41^%jOi+V5X&i5I-W%0*KUnzR zF>L;a@kF{@v1A5ipvKGq>a9Hr)ZEkwo!q&ReJpm!L7h5-srJ~ zPYQboh&+RMKt7MYo!9KsgnI?w;xTnhRhc`((3{)_7CpZkR8+`@9F}M^LZ>~5cSyAKsw6NYkMe8aiA9!K#=w|iF?>)wP@1t)HiAlRKaTP@}i zL=0A0TMJ(w`mjcxbmQE)noJkl(V7gY6Yd8*n5Q!rz(A=l-U>b;g|1_7vkzMNg1Uzh z%}0PsD*U7_3yQ`EQR{pJMBQ_mxaL~_-1;&ZLku{q7#Q5~uJ&T{g|HufI0Eij;S*j` zl>)9Nbc>uzwkD{>qhSO{=MQiN#+7b}aI_BN$~-~);K|g{99ia?p&rp^(bgQ7FSrB4 z1YQcaNjLJ?*&t0Ff(yngxnL7TOHs()?1#JzxGC8Hiqf&Q=6di5k&?B|Ck`c>(g%&4 z0yjHljwf5g7W0C%NNR+_r4FQ!Hb2RvU6lvMy1x)rudxu0z6XoUsjnI?tTDvJD&Dr~ zbFpab=l(2QQu(&&tb-awmBfp!m^n8{>>==WMQNWxBzKBv;ETeaUgWj?)&iX+!AzT* zhV#e3_#%Nj`(0^QZTp|Ne%@_3X}tPUlZ&Q=tO1^|sK@P+-90oCy5eqjiD;1E(DpKy zHi4c3SSPCvW*|SwgIAS)YccefpI1?XtEZQUU!Evm>(CJQ?UqX#@Q?+(eTGAHi}<%K z_*3MIUA6cC*%GiDL~SlonI~4x$}qjxgpBwwUY1uEJB9v`-#ZXi&Z!oa_b{{c2rvn1 zgVs#Mw|Y2CjdU(>2HaZ|hG4ccmIBXp-ub3Xmgi`xfAp}t%rVn`WuS&xFms79glc|5 zX3A{!2w;RQW+G3bS@A>|1LDOJ?~DB%mh~2{R($j8R0r16BR(+;8lyHdv+io)M28w> z4j-POX}_}mI&GVSiYerxaqrd;`3&VE$%Cg_q|zHyB0Cyg!t=&NzO<#qIk|CveA^~| zKje#T?0ubB+O!Cy%iTPodl?bDuw( zteb{YOI5Oy%Sun2nms$gF%!AssQl`bTi%ua6MzmlArVVmiE1WvnT3zFzRO+@)Bn@|LxC(ldhHfaDE7joIfo0e|2a>d0 zL>pvs0ps;zX+VZJsEc3Q8p)xURuZHe{1b3wTRCm6v25wSrgNTCTW@K^v)mU>|73a< zh$6lqxb&LDBJtNVJ#6r7A<*C;O+<2gF|yFL%D(i6YyGZXJTcTS_bU0S>mZ*?oT+gv zUdayHjUl#k0MIzBkSe(fGxS;>xIfHb^W!r_o^r?Ko zmEKn`Ah8p}tu?J}pOCJDFKk+0V!!}NG{o=SS-3|z=^1`{!{$zxd48qQ$-Pq=K;L41 zq%|M6<0a_Hpzh~uAq&KW%8>wCg3b~ugmT#>XQ6)y8rI5}Ken?EXV+Pw4<`=o%Z3}I zPd}Pj{ot09^1#W9&PxWAYidWp!yS=!vIzA{D~w;q$SIGDCP+0l8=S*P!yJoD#B9J zqe;*DJG1EEYg)B-(&w@|E?$|#t%duh3=OY*{Fq{G$30C0P9YA^ z|5^YO&{iPD5S>P;A_)BsDo;c=l*31!9x-@nLd*KB700G3&+|t6bwxwAj7M>9LaFy% zcSJpZR9!9P8=LC=zI@~B8>i_&*(ES!k1l6S>kJ-_(aylYqCU)kY9FR3p(0594hdzC zUm#|-M%8+dDn?BGw(d35{YcUqm3VNwP{j1ALk1nHD%bLMo0l=5@xO77kWFm~w-B|Z z&Fwyd(BMIJnRT&N<%;$3KK~gf(7-qxdGOlmv{4vCG(Mv>#wIHUBhT>(B(#V}dhYF6 z*Thdni16O6U&I8Jo&qj&xMjH3%-{)`{NheooL5dz6e(qqF-U@B=_%teXJou9qMqCI z;p2Hbn|{I4#J;%D6PBjWKFD;Q4xx+QO<&XBMpY|?-^e+W<&Bh46=?Fuy}|Q>%Q3< zYK5{dW+#5m4ZnLOw3iOsu)yG^EjkWv*-F~f=9LLbwxnlrnl>Z*2v+p-mvsk7_qZ|_ zZNoUCq5Bsh>HFfqnwwPiILsx`sGFw_SAy8>vI#FJnAd;j`YU1T>|K;$rn$jnc09cy z=hc*yVcolz+IkGj2E!bVFOj^FW$tMLpo&lg zAuF!`vTEC5B%K?)JytdtYB^L>c8f86`;2FryFpt~>Xdo=>q5r+7dA8?FTwrC5*VT2 z&g3IF;Al23pFdhFNG{M#-S)Mx!|C3#xOLUS^a7K{+jL-4M!js@V41B%RO8iWaP&4< z4ekBO*Mf$qe21w){Pu{VZr&{8QuX-xX+x)@_dyL-?f?A+?Hvf3 zL?e7c4>Xo4Na&3$EgDmiKXHZNHa=p~*v)(asgTnnaOqMz(e6b^!i~S8>sEA^gS}@q zaK7dj9Hfw6|E9q|lfv~_OF=jifLGh~~Ljk4U##cxia68JVi#ph8#jC=p=jx=h zS&*bFp!>BITtP#sk%Xtn4i1+?@(zU+-1EkiMN88{sq8VZodx9L!v)G6DE_7O5fDTM zgA_qk6T5jo8t4V>z@mfXg9VZxxKi-yQ%>_B7h1p#@l-3RaWXep0Thso)zrfS>hS?E z*m>yB4*W@h|7Hp#Wy*+JRn9`xoB;Bv1fVl-2N(Iv!JMe%?(c>0vR~Q8L;7}g3 zU0ZILJwtg)psxto+41bEva|mFBl%o~qPRlea-6noWIJP<7Gb+h{2RmMya<6cA?7Kw zu$2+IcC=>T8eL;eQ|%k)&<$SGPvTzrC3$C9_zmgUFLyhkqNxH7(J_li+<-jwvJYDnMR z+;#Jlj97`5gVSC6ON+sfu{Tn;zn=esSY+7;w_2>E5q&~zdZ?R5VMg(%{5!Q_ziejn z2OJ;2Fa7qJ3w7>Nd4Ar#;Je;^6@%~@`Ng8{1TaJrRXHniinL$u{;Ma4AWCJ9+R~CM zTqj1I`L^%Y-$^T8`cBN@w7IoJ$N9$tGC#wdNjrpS6K3i+R(!91D03$B(q6hqZ6L;k z#oEpzRfBQlti;FW@S)J&cMCt0^fFd=h4i{!zV51g1sQ6T-Iecw;>}@^BF7KYlrJbJ z2;V{Mc8i=RmA673s?3?~{6hQkCE1UXQCM z>)Dd7n6O-avLwe{L6t$+c2ETfJMm~*k!1gpb&aa)_1>R~61mLntUobhAKXs5EUtce zmlrs^XgPbKpyJEnO)LZ_C*O^njsfEfaVNwTsDmwnBNVe-4|9Z=QL_2?^5{da@}v<{ z!K=p^SziQuV!{oz$NI77i`2TH_?yV6)*7#-#XzY}Uk7#yE$dnblr`YWxO@Nu{wLb$ z(R6tO%kbrg{W1oxCNC3Rq)r(>PCs55$*dNa*Nwp5pt0v z2fhWt3Wp+J{fogJ5!35CeY_r9M%$yfF)m;nh9de8I11NToeed36FOIV`(fpe7f|UQ zzf;iC^qvM63{GbC7jYTpfKyyN7$_H+Al8v=-%OGxt6&DJeh&HqV+>*n z>UXF)h(Zg$bJOM~?8LM{OyH#?O+9~GK~Jx*KZx`+zzeA7=zrOtVo2uitrHMo-v zEn=2-To}%DU_qdk;N3^Slo&C09Idtlj}hS`q=r=lh!J=bvYW>D=!Tvi0VmvTw21Co zHluHD{6Sa<{d77Vt5VnZre6pTtzN*@g8Qq(9Lh-yiXG9^)1vyVMJhmxzz})5nE(sE zi_fkZRqop=Fv?WD(D8-%L}HtT_fo$|-(;UJcQ$0$e8yxv+%qqof;~(<0^FeqJdN^O zE=v`{0Y+7X)Hh_~cHyjg%p_Xft#JDLp!N&x63-`Y%8p-m*{7?nRcYpjKg{i5KRrM) zB3n|wY0Hyn$Ql%%W>RKhc`{+A*G3}cAOwq_D^1m4ODwiKAI|LYh53cX)sP42_c8sd zqmjX`w0j-Vl*(i(lRjalHw#8^h(_}kQf`cUg03jhosLFiNKHlf01|_9)F0V**xH+fQl=rKuE{|yh*MhQ{05SuP7V2~8U7!9GzIqD& zhs)^Qi7zb@B$gL#8eYkci>-_#J?ar~$EX;6MzS$zV2STk{i{C&9$a7Xee;ZO&g7LE zYkta3s}po9P_e%&{l=TZ%`Eto045s!b}UWw32DZ>V)4)Du(E?Zh#d2pn8@ooo0 z>?__L0iLZdQJj+FHLxfsvrp3w$xusJC`K)OIVHWY1wpQL_tH}R4^>KJj{ik3^il(i{T^F}S_DlOd zo*gah;6wJev9sk9`fiGDz0`fxJ@vLK3D5EV@$qgS94^j1km&;)mAPLP$yxk700rxQQlcYRsef-{z00}{|B%n=}{130$dTRAmDL>-% zED@{Hvv;;kAxbNx zyEtc(s!plvhx<7?-PMuZ>pR{65kR&pQUwq*#ssd%Iu+~FX^~ps!9`|%A5S&wtU>eP z+QDjlcds%@^XuxNu(LgivE_@Qe9^x|qJf{EVI+x(j-M?on^`O^;A>KH2)vO?gs_9i z@>+5#fh&FVio^>uqkX5;Ggt%1IIZUQ?=paC1GPOQNecerVU3Yspvi5*MD$K+z#YdW zr%}pftZms9LanUwl-J`f(T-?^<=ppb;<0ZhTFowr=p6x-X)hsNu;_VdcKh-&LY`sO zH;Q@CoMeBDt&x9>E1gdMS+T~9voFL`E;cOr?2sgmfX;@!od__lDq%z90$#fUKhg0B zA$V;(Kn1J5htmt> zbO$NI0Dm0{!L6dlz2Nn3kLE5;pJ4eiAU^*z{`%MMNuiT=sUhHqe41n*Zb#YOyng!{C4XMWmQWI61OB$%t4D+O)$c zjxIhbnYGITnQ>!rTXh=Y$^Nun;oIY@Jl1!!lrqa>+4w{H#GzuN$i-v_mH^#FXq1h7 zq%$EQwxUID{rqmJRyGD_AE?3O8~&AlCI(?Kx9~vb{g>ssrBLnPd{Tnl+45aP zCD_A~yF}!Nk@b>k9nUL5CF@c#dm@a_$ znn-3rFn8LYAj#%TPq`ZvQU`H#EgT8BufsNfJY9eKy(<I7q;NZe-PJ-iiFoRu^gl}gE*Y0?9s(#|C8W7UZPF~T&H-AZ58OLzSS}2{p z+#e1t0%HljPB`GNF949}>7wYTb2qUJ5sMT1B=pS^lCK`YX%&^d(U_|Un=Yu03uf67 z(25Q-ced**H+FM}MqKU)5~$^0DoYx|?;rT_W7- zHToRwhdIGBrz6$5zXfQM9C9h=Mha_(&bIUlk9FR$(=-;}y>q>dRy?Wi%MS&BrBVuD z3%0tf3vgqQbtqhh3;DdOrN*<&qEA>8C?YYgB_#U_^Tp+tIL-_9SML(ynO|M%VU};S z6h7!IgWMuCqoU3!$7y@|-w45Zs_=%{tj(~>2gKa7=c;q#bS z;AjzBkdJCPi}(YMZh9;r$Io~KB=`q-w=I5XYn%RP>Kk~fxHrk&KGb1X5y+zOI>kL+;B2YvN7Z-C~7*GGUrvr3IGEvH@;M34VnYgHL? zZF+$U2Hlr|dQMO>=y*5QJOYm0q_~16idN8)oL!g+S~<>8Rb0q26VyPk*v@3$-@t69 z1$^2%Y>#WC6)yqnNgx^Rp?)#BEs!`-OP0ug`FYsCKz}y$&s6-AbboT)zf7q=nc=^S z8479$A}FLrH~rz;;rgrbKF+XU6)B=c1%+&T1T0kEi0@#ueXPTzcKtozddywAg88r% zxtOiZd>B(Uz1EX%(j^O?-%wq%Y8X|99N(}Ri${6DQ7YSBa=D1b>FkDG{zva^vn7Ks z4o4HfjiV!R2)}^ycPXAjxag8X3T@o#h-sn@oFtgpH%r2~t8pi7Gv2+rq1x3Q>o+Z+ zwe))dzM%_ET&tP-PG!on=?e$RpkHDy^bc>Icfvu`0*JDlTUR$MY zw$|>11SpX$T%q*v+8IR9|6=bwqnhg8wcl7#Y0^7EihwlfC?!~EA_5}4M5Tie6_5xa zL6BY|AfOhH2gcCF zS`gNnbIp0*_jUbl31r^Y28w7-;bTPy-xE?CI#GrEY0~YD z85Mz*HMuFi>PrI|QLl`+?`>8GYq>B5=nIb83X$0tqOto1bXGEgzg?TlSO@sVAM)M;q48ZdDaoO0-0n^4bjKd+Y|VQv ziDNfw$9sNOCN9O^^UeSPX7Va3;nYQ70qCb~Uw`9p3YnE|9!OqNod{KjsAkZ#CVxfO*PGYvnz zy`w3?N3&+F?Zux3%FLfOx&~Q!|9+h4^b51UIQ()HN?OM@dL8=pzvb`!M?RlDUY-)2 zId9HB<1;n>#=CH}R(9FR*{N3|p69EI9a+Wr$mlbsv*Bv*%k@U6;biCS@N$$TG)}E$ zL+Ap&|G}f-O}n$-OBO3%sr1-CKPvG+zMe_ER)=e0laFK+LmX36xHfTXWZA>L?3?MgilpR(z@4n*L)vO201iFUXC*Xx$bRsvtQ&tAUp^V{#m50di{y$+-7p*G)T zeSg5d;ix0o3uasS^B7_8bs{Dn&-2A0H(RNvG29ZcTu-yjV_&?NhD4mad16li9>i*Q z>}|X(#1?G9+itnqwajM%YFV7HCowqgGdN^67P@3f(Ton969ksup_&}MZkwT9UvGI_ zDdM*MChm61H4`A5KDV-Vt@5K-#HFKx5E=~l>Ir$A3?W7b{$v`QViWa-HbJO;Bsk?I zI5VE2SLBh)HCm)GpirIid8w*HRNudYUrVBkp+mnkiWl*15z!F+=6Wf zsJQrKy+y{aU1(M&uKr3=m$ECLx*}EFe+C%p?Ts~6jQi`WY}a^xx6iSzVZQkW5D$3W z$<1%WxWb;_3-ms!1PQ%|+v2|>nG%ilKC$uXBo6_FImj$SpQX!E-X#zX$t{t)bHe;{ z)}#J(Iq%Y`b*aN|%nXN}OCEEz<4xr*wq&*&zc>m(2QY?bRqzMcX)0+5$X|YUX4Y_*8vXd-ho*S5YJSd%X?6MR?F(5YDU#s_wx@bp_RV z&4gxalJC0tWJi~a%7~8gg9VTYS@tDNkaXOmKdx(s!$ONh! zO?!cfT;c;N<9b4CMXk@uTB7lj#B5pcY(?T8Z6*%{dTy*}yyI1P?dQaH41)Ib29uv2 zynhnil~)y$2%M3{YaFP+gWO+AF$~e6r2whqyoLJeeUCx6IFX*j8KYoi>W1}AHClqk z1Na9R1b-US9!)z#gfrFFl_Im?EZ)3Rj%#~m9pB+T2yUNBr+$elRTH^L3C`{et@%?e z;DfogOLRE!#_K2%cZX1l)ZvvzwJ8npK&bD$EhgthT1x7pM0739m$(%<-#Kb)G!$5-5R}k>*dG5n zB<8sO^1$oOURdNp3vI*m3?kIRqym|lleA4D#vMh} zos4Uh)x209wd)ICuGeoBX;==2$)O?0PrSX;zPxv#<%XAkRjTfZvVo z-8fj*Y>7iXXc;69D)Ml{^L6-h9=l44c*3yY>9P=q!4W zCxS8q6PAev-8Uu7dBm7iHPxjkDf*dp;$?sS8i?7*>-Qgm`QgtcBr0FjYnpnQD zS%>9Q?Z?Vc=H)2k@#?-trGf~Y)Q6BoWcRN#Z7?;h$Pf9cvVb_*Y`>u?~T{ohYhP=Xpl@bIdjOP zJvAiNL^6vic3!sE_89uj-&S>*;;H2PgB*@$9csPG1Y_squqdzzc-nyZ(QykT5^TUo zfK0rtgb@|tf5>AnGEYl8i2XAeD0OrCF$B=!;LUV?(sTlteS@+>8PvLHkMUGLEU{<@t!D0CdrkB5((v9%Y81wL=0jE34lUc5F(*B zX<^a{cpan>0K`{qN2@an$qlft3E~Kjaw|1yYFyvV1w7&pos8g5`D%)=7pA{GE8ReQ zu=7*dg)wV4@pwOrq>Ae9s^Ka;m8ZMY^qdyWo0_=x6Y3{Eh!gV-Y;%0>@TJ=xn$oa2~WOKyise{GF0lJ48T zD%8^Sqw^KQiQ$gIR7X<3QLvkfdh9efLGbykJb;>?EULyDGz@Mx!?`u5`dkWRFB+&N z=@#5{EJ+u=;~f6%kS?5nET}>7vv#KD~L#pFE$F!slLs%swYHyN&Za`EQ+|AM3U3hB-muy z3PO@zx@md~N0qg!Xt|0x7upHm9?xrU!7`X=KX^8BPg07WqFhB^P>e#RL@N;Q%d$;R zXPr3{_2LY2()o((!;cbTk?>SZXuwrhI|T2BlPwR}TU*GM<}9Gz@wQ)QikgwBnJdBP zQ=4U&f4?rxd(SOp;jC|opXSY%HcALEMdvgI2ey`A*B15aO}5mO_m(&n_>r zr&kzJUmw)z=#rsSQA%dFIa_Teg{uS2N1o}9-T0bPa&^3M)Uy1RL14tysc#Y?F-Jt$ zuhI7@Kxq`8$JTNeGl_AbJtl5*b}wM!;YZc5;d*j*8~*4KVq}=R57nXn3tToT@Uvlo za6QYrec`+KYEWD)q%+5~W5|Zk1UMW02yuTs!C9KvJPRFE3)7e~Es12&_zY~*f)QJn z#ot4?Iw7H+1l+XiJlF~`WkE$yHlVy$(qvehyv7<#pgII*R5}^{Y)!5*E_5(nNO^Xe zxzykA@~eQxB09GtQ4zcEw+h}!2i=K*{0wm)LAA!_M`ja2R!@kpZp4GP>#H;C=5}7t7_IcMt)I0;v3FMK zLidTq3rrtK^a&)5inPW<_9reK6rlxaMGMCZ$-hl$k@GpG-Ba=&epfnd8kef4I^!V) z)wS`@w{GdBFjn8X9U{`;nrM{-s}`JDZAZFL=70 z*^_;DL22=Gowg(Nc?ssjSOQ};^89U`)^ zwKM%BF`b5c+gExV*85%WOC_FmI<1>VH9v^1K?q>lj#Lk@(}LUOh|q*SsUL~I@@iMl zcKtNxSe^R57oGLnR4nOps_`9cV2(tZmc-$3*cBbi{i{f()}P2XK{#O~%n0oH&W_LS z6EJ?`3Y#Fngx1y1-p<+y#a4AIWuEQM^uj27yutbyw#f?CA|`To1kA%viG=A0vucNN zSL<4JW=ThjHxKRhl$Q$Nc76Ty4DC1Rot_Ds$KpMUqa;1mDY$sGZ7$!u3e;Z^A@#YK zteoUJN(X5-FJae29pr+(BV%sTob&Ys2d;ezlREzAT}{OJWOGZdmei+Ize@Q~$0q=% zK*GkNc@N$y%FCmrX~licv`KOwe5A(AwKa7`)t9;+TF9JpS=+AcjbS3Qr;<#f#<%pv zu1jLj%3J@*%ppk8ilAX$b5(#}imBdB@bg(yqeF)#elB+ z57-GfEZAMM>lpDSA>OP5JAgx%^G#C)asH)@*>TMi?tWX5%Xh7BxxXs8E%FZh#Cv%x zYc47WFX?v*S9vurW)wcY?OIn;CsgpVnV@C)eIDBTk#WYf7^Qen;IHEijo#hn^bYBc zvNGmaL=gj3pn!ohD=2f!lBZb7~jE`kC18O1Kykix&14g;u4RCV58d zUK<}?p0aa)sGp>1CUjD0Nv`EpIU5#>=0Rq5%&`Ku_=P$$qpZ|yVV{{`9Y?JB46Tc+on1V_kDg7WJpD-q+q{225#NbX-rFaMDjd5xn$lIicp3Ql0=OSL#ncjZvZc@!l<8v!*>9ObL zBb{u!ZAP1o4kC-a_t@$Jb(l%@2*umROgR_?H8^Rx)_Jbkdf)It+gVKr=W&0=R|oYy zIBmiiKY~zufdZBBmWtYDY+r+8AaMQJq`<-}qF%@@$~uK3U$dLzG!EXw+_zcKV=XM@ zI+`R$RN~80M7||8NdpBSXAIw=7^Vu*G_!{qDcx7vbiH4H|HB9DP({t=WC;=qdJL`p z{oMLcc&;GjYAJevWQ<-bQN{E*g&&ekMcZ^h;Oj3ub~689uhFhhpHq(Jk#Aw*mFdc4 zZeE4?yc09b*we^il`7 zq+hB%IW6OfAO$3*eII!yzRPWS^IwiqCrmdyV#;>&2zhF!eXn!;ldC6^(p%@CSP@V# zH`ON;Cy^?b9c;pp{#=xe?fj*q@f)BW$4Q#|-#I=qUkBzS{c^?Q<~t--M^dp7dpzn= z2}t4k1z0D`Ovy;>-&HX=br~!D{NtaysuJmtzkz1I_m9(zsA$^DV&sszxe&6WE9+e* zTSU+{FD=5)gE4(0-dz12@v&C?*)&cq3zp>KuXf=^b(Z?9cGTL3-D}>XU@xuKE>M+0 zXT2B?k$D>rk;NYFxe+jM)HBljZ8-nO&3jvjciz9i6<)tXuy2YE)&AE|0*81Wow})c zO6E0$6$AvY590$4>d-={n}BiniI2GbbUCI2eRSeXFa;JnetSYzbR#T7t5Rs$GS!I1 z?(nT6dHJ%X*%iC}Y8y<_WZU_o7zPBTH$qn;hUw{Qn~dCwvIsWO&if>vM1QEEVzS2q zfvmrO`|R%!fhS12qy%X`>9k!QsHaAawpZpc*JEmN~+=Zwv75uW#f5P8l!Yl-yw&3qh9AN!}@{IU5l?3GIQ(hm2FuN%-N zeW;ZsoR7vwZJ-2ifMyi!X!(QJdg4li4|qkroICRe(rqvn|1!iKd}=R=YKl3>+*H@# zEuqg-OL%|#0`ap;8o*&iL?huu0-O(JvcS&cbJGjWJQnDCq8ZHY6H)!;75PqU8oX(j z3Zv|$!VG_UD_SuNds#02{Mcz~!8G>V_G>Pf%n@(s3gck5$62jgAro5t$QYyQ3Dg~? z1U36#AF3T4an%Q}p3TQGC)l6h;QMO9Qgz#u3{=C;Kq^M6>pVf{3wVdzX~myQ>j-vH zx`;{AQ4e@s?O@h4-7PiUyvD&7)Sjr!^6tWsV!zkyZ{FixGC)PA%}$SpZuzMuc@`?@ zMV*?9*+y9tOJ;mKf z?VMBrsDJ0#aJ`JTc>4q3H9_P^lLj_+=1t*(zA4=l&N(7`G+Gk**7w`^*V$0#%b&9x zS7QG-NafDXn^fNwzXfe>h@pNy_@tyG1=hxwl$cEp@>iIm7o8KYK%O5jwMX?VT}@@m zVr>hTA=aj{@&D_2cIt`IMkv3j=V=Gz&?_{s^N+#sfeLU;r%@Y8SFUXb3AY?rvyCsjLu+3ef

tmKQt1^^v#UL@Q)3m^6Rtm#phio)Eyo6E; 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 O?D^z>5d)gIi@b&a1 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%0Db#eMN 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 devices advertise without an extra app MAC address, nevertheless this address [changes randomly](https://github.com/1technophile/OpenMQTTGateway/issues/71) and cannot be used for presence detection. You must install an app to advertise a fixed MAC address. +## Receiving signals from BLE devices with accelerometers for movement detection +The gateway is designed to detect BLE trackers from BlueCharm and automatically create a binary sensor entity in accordance with the Home Assistant discovery convention, provided that auto discovery is enabled. + +The binary sensor entity's state will be set to on or off based on whether the BLE beacon's x-axis acceleration value is detected during the time period defined by the movingtimer parameter. + +By default, the movingtimer parameter is set to 60 seconds (60,000 ms). To modify this value, use the following command: + +`mosquitto_pub -t home/OpenMQTTGateway/commands/MQTTtoBT/config -m '{"movingtimer":66000}'` + +To ensure proper functionality, configure the beacon using the KBeacon or KBeaconPro app (depending on your specific sensor) with the following settings: +* In the General tab, set the Trigger Command to "motion". +* In the Slot tab, enable advertisement with the Beacon Type set to "KSensor", the Trigger Only Advertisement option set to "YES", and the Sensor Axis set to "ON". + +![](../img/KBeacon-app-configuration-moving.jpg) + +![](../img/KBeacon-app-configuration-moving2.jpg) + ## Setting a white or black list A black list is a list of MAC addresses that will never be published by OMG to set black list diff --git a/main/ZgatewayBT.ino b/main/ZgatewayBT.ino index 5fd6136a14..d069e66b21 100644 --- a/main/ZgatewayBT.ino +++ b/main/ZgatewayBT.ino @@ -102,6 +102,7 @@ void BTConfig_init() { BTConfig.pubBeaconUuidForTopic = useBeaconUuidForTopic; BTConfig.ignoreWBlist = false; BTConfig.presenceAwayTimer = PresenceAwayTimer; + BTConfig.movingTimer = MovingTimer; } // Watchdog, if there was no change of BLE scanCount, restart ESP @@ -146,6 +147,7 @@ String stateBTMeasures(bool start) { jo["pubBeaconUuidForTopic"] = BTConfig.pubBeaconUuidForTopic; jo["ignoreWBlist"] = BTConfig.ignoreWBlist; jo["presenceawaytimer"] = BTConfig.presenceAwayTimer; + jo["movingtimer"] = BTConfig.movingTimer; jo["btqblck"] = btQueueBlocked; jo["btqsum"] = btQueueLengthSum; jo["btqsnd"] = btQueueLengthCount; @@ -222,6 +224,8 @@ void BTConfig_fromJson(JsonObject& BTdata, bool startup = false) { Config_update(BTdata, "presenceUseBeaconUuid", BTConfig.presenceUseBeaconUuid); // Timer to trigger a device state as offline if not seen Config_update(BTdata, "presenceawaytimer", BTConfig.presenceAwayTimer); + // Timer to trigger a device state as offline if not seen + Config_update(BTdata, "movingtimer", BTConfig.movingTimer); // MinRSSI set Config_update(BTdata, "minrssi", BTConfig.minRssi); // Send undecoded device data @@ -272,6 +276,7 @@ void BTConfig_fromJson(JsonObject& BTdata, bool startup = false) { jo["pubBeaconUuidForTopic"] = BTConfig.pubBeaconUuidForTopic; jo["ignoreWBlist"] = BTConfig.ignoreWBlist; jo["presenceawaytimer"] = BTConfig.presenceAwayTimer; + jo["movingtimer"] = BTConfig.movingTimer; // Save config into NVS (non-volatile storage) String conf = ""; serializeJson(jsonBuffer, conf); @@ -485,14 +490,15 @@ void updateDevicesStatus() { for (vector::iterator it = devices.begin(); it != devices.end(); ++it) { BLEdevice* p = *it; unsigned long now = millis(); - if (p->sensorModel_id == TheengsDecoder::BLE_ID_NUM::NUT || - p->sensorModel_id == TheengsDecoder::BLE_ID_NUM::MIBAND || - p->sensorModel_id == TheengsDecoder::BLE_ID_NUM::TAGIT || - p->sensorModel_id == TheengsDecoder::BLE_ID_NUM::TILE || - p->sensorModel_id == TheengsDecoder::BLE_ID_NUM::TILEN || - p->sensorModel_id == TheengsDecoder::BLE_ID_NUM::ITAG || - p->sensorModel_id == TheengsDecoder::BLE_ID_NUM::RUUVITAG_RAWV1 || - p->sensorModel_id == TheengsDecoder::BLE_ID_NUM::RUUVITAG_RAWV2) { // We apply the offline status only for tracking device, can be extended further to all the devices + // Device tracker devices + if (BTConfig.presenceEnable && (p->sensorModel_id == TheengsDecoder::BLE_ID_NUM::NUT || + p->sensorModel_id == TheengsDecoder::BLE_ID_NUM::MIBAND || + p->sensorModel_id == TheengsDecoder::BLE_ID_NUM::TAGIT || + p->sensorModel_id == TheengsDecoder::BLE_ID_NUM::TILE || + p->sensorModel_id == TheengsDecoder::BLE_ID_NUM::TILEN || + p->sensorModel_id == TheengsDecoder::BLE_ID_NUM::ITAG || + p->sensorModel_id == TheengsDecoder::BLE_ID_NUM::RUUVITAG_RAWV1 || + p->sensorModel_id == TheengsDecoder::BLE_ID_NUM::RUUVITAG_RAWV2)) { // We apply the offline status only for tracking device, can be extended further to all the devices if ((p->lastUpdate != 0) && (p->lastUpdate < (now - BTConfig.presenceAwayTimer) && (now > BTConfig.presenceAwayTimer)) && (BTConfig.ignoreWBlist || ((!oneWhite || isWhite(p)) && !isBlack(p)))) { // Only if WBlist is disabled OR ((no white MAC OR this MAC is white) AND not a black listed MAC)) { JsonObject BLEdata = getBTJsonObject(); @@ -503,6 +509,18 @@ void updateDevicesStatus() { p->lastUpdate = 0; } } + // Moving detection devices (devices with an accelerometer) + if (p->sensorModel_id == TheengsDecoder::BLE_ID_NUM::BC08) { + if ((p->lastUpdate != 0) && (p->lastUpdate < (now - BTConfig.movingTimer) && (now > BTConfig.movingTimer)) && + (BTConfig.ignoreWBlist || ((!oneWhite || isWhite(p)) && !isBlack(p)))) { // Only if WBlist is disabled OR ((no white MAC OR this MAC is white) AND not a black listed MAC)) { + JsonObject BLEdata = getBTJsonObject(); + BLEdata["id"] = p->macAdr; + BLEdata["state"] = "offline"; + pubBT(BLEdata); + // We set the lastUpdate to 0 to avoid replublishing the offline state + p->lastUpdate = 0; + } + } } } @@ -717,8 +735,7 @@ void procBLETask(void* pvParameters) { } else { Log.trace(F("Filtered MAC device" CR)); } - if (BTConfig.presenceEnable) - updateDevicesStatus(); + updateDevicesStatus(); } delete (advertisedDevice); } @@ -941,6 +958,7 @@ void setupBT() { Log.notice(F("minrssi: %d" CR), -abs(BTConfig.minRssi)); Log.notice(F("Low Power Mode: %d" CR), lowpowermode); Log.notice(F("Presence Away Timer: %d" CR), BTConfig.presenceAwayTimer); + Log.notice(F("Moving Timer: %d" CR), BTConfig.movingTimer); atomic_init(&forceBTScan, 0); // in theory, we don't need this atomic_init(&jsonBTBufferQueueNext, 0); // in theory, we don't need this @@ -1040,6 +1058,17 @@ void launchBTDiscovery(bool overrideDiscovery) { model.c_str(), brand.c_str(), model_id.c_str(), macWOdots.c_str(), false, stateClassNone); } + if (p->sensorModel_id == TheengsDecoder::BLE_ID_NUM::BC08) { + String sensor_name = String(model_id.c_str()) + "-moving"; + String sensor_id = macWOdots + "-moving"; + createDiscovery("binary_sensor", + discovery_topic.c_str(), sensor_name.c_str(), sensor_id.c_str(), + will_Topic, "moving", "{% if value_json.get('accx') -%}on{%- else -%}off{%- endif %}", + "on", "off", "", + 0, "", "", false, "", + model.c_str(), brand.c_str(), model_id.c_str(), macWOdots.c_str(), false, + stateClassNone); + } if (!properties.empty()) { StaticJsonDocument jsonBuffer; deserializeJson(jsonBuffer, properties); diff --git a/main/config_BT.h b/main/config_BT.h index 112a7f5806..45dc5c42af 100644 --- a/main/config_BT.h +++ b/main/config_BT.h @@ -94,7 +94,10 @@ extern int btQueueLengthCount; # define TimeBtwConnect 3600000 //define default time between BLE connection attempt (not used for immediate actions); in milliseconds #endif #ifndef PresenceAwayTimer -# define PresenceAwayTimer 120000 //define the time between Offline Status update for the sensors +# define PresenceAwayTimer 120000 //define the time between Offline Status update for the tracker sensors +#endif +#ifndef MovingTimer +# define MovingTimer 60000 //define the time between Offline Status update for the moving sensors with an accelerometer #endif #ifndef BLEScanDuplicateCacheSize @@ -168,6 +171,7 @@ struct BTConfig_s { bool pubBeaconUuidForTopic; // Use iBeacon UUID as topic, instead of sender (random) MAC address bool ignoreWBlist; // Disable Whitelist & Blacklist unsigned long presenceAwayTimer; //Timer that trigger a tracker state as offline if not seen + unsigned long movingTimer; //Timer that trigger a moving sensor state as offline if not seen }; // Global struct to store live BT configuration data