From 07376629307f8ec87a082d5dbc5b0f615bf7c5ba Mon Sep 17 00:00:00 2001 From: brentru Date: Wed, 19 Sep 2018 14:20:08 -0400 Subject: [PATCH] TheThingsNetwork Feather LearnGuide --- TheThingsNetwork_Feather/arduino_wiring.fzz | Bin 0 -> 59274 bytes TheThingsNetwork_Feather/ttn_decoder.js | 59 ++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 TheThingsNetwork_Feather/arduino_wiring.fzz create mode 100644 TheThingsNetwork_Feather/ttn_decoder.js diff --git a/TheThingsNetwork_Feather/arduino_wiring.fzz b/TheThingsNetwork_Feather/arduino_wiring.fzz new file mode 100644 index 0000000000000000000000000000000000000000..e5598430efc483355fcddfd8f138ced8feedff8b GIT binary patch literal 59274 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 z z4JAmn>@=rgKpm=S0wu8xu2awNARRQlo~MJ$ zBl81f6Vp@r#wC=P=KRGY2j^$oeuC{egR&T+08KIp7}ge!%~`r!w~85T;ntr`srl!U z77`;0G$TWDs<{fwPlUt#4&w|J5;5ExU=AKvEFUQ`to=KtsBO=~f?6$!4uiyXgfUo8}V ztlxV;C*69}QL14#twn1jZOcMDNO)NBcS#(ERNG> zb7?F3CR~O$dHMP<8!uOtFnJRi?lZ2nn;oHMi^j=NR!WX{PbnO;c-7DYr(6f$jK-GV zhPShMgm^hkGdTbQx6a1XRtEQ{_b=Sk1zpn%hrY<1qo-e9m_ze)#NgMT?;?@i0aQ6; zmsWX?!2~fTf|AcJ*C&2D9@cf)e+!?PpPJ-UAg8>uoLVZcEfsX~JheAgET;k%lCisE z5p+y`omPmxfppmIvz{%#e8#^qmUYP?+R1UxBRNE}`7~{FyY1iC-nyB;Xsc;)@$e)O z9%fA_dMzaWPc&ji#nyZQ#6CTwmNI(BUd>fa-UMoyNg#HcxOwaoL9cO$r&_ z0M0kbTqUZuk>*k+0$GjIoXR=_dmPq$4sL0;7^hLPT?+S>S4c^&a1ma;g%DS^k?hX+ zH?d8B%n!G$w9mX|m1h@rbZ!pWmZeYicDpTQ#XiT$JbC9sF8#V&;q4F#x31~<+byBI zlX!mCwhq%tAg&j?xL%vrO&$Dy`x8R@FTr-o~iWYQB@8;V)NTM-<7YjMyxK!y0FK|M(qhXzknJijq7#318z)sX#{ZM zV#o=;RQ=hKCtkOrVUUz+^t(bA?BQbAQf0$TUO=*t$2=z_P`x45wvPjl66A+5bI!tE zVW5)TGNZB?A^dWKRDi;8dUg;Op<~Te8tz0qk-~F&*n(7AsRt!cq@Vwaj8bsfigeAD zBh$RIOe$^nDl<0zJ;_ZE1$w$JWOR`i9&>m|PZ}pA7O<66gg02D*E|3c%zz*`LxU7q zi^ga4QOs7XH8pJ>@b)a~3G zhTke@`&VB>V^>0s=GkVlxipxBenm5@*xZvJ5R34VMQx5&eqQw+O_r5wmRFpy{BzMO z8oFTeoA^C~1`!bql&+~ab6pHwyNY3Q2121IhzYtUp3nwDiPP*=kZ~MLu7(HFB?bpO zt?6({EF-fE80X0_3<0o@0)ZKyR*A)3WI`bsA7Sz|gzfRJmanNgy5Q=A7&K&}(1)qn z=BY(q)4&{#!ncKJdXyPIYmYu3XE9CU;!TiYSblWx?C`FIRD` zo)=`DJc{QW9ES3Cfdv_ZbJn+!)sy=h$pB4c0VHQAVbd~@!<+=bEXz!UFlFI-t!U3~ zU6gC?T{aZpx0vW`xkcJk-Xv8_smH@nX# zzX3IuOsll)F^3NSS zCoGP0S<>U2x1Z)lmss8yi>RDP&Rzq4ayn>{7!mO`4xKo$|P(~1jg(0&U zg#2=cL;@gFW~dpCOhO16`KauH-t1CQPXBl3PBwHJKa{n~PrFhN>0L^Z=OiS&isJg_ z>bIiy;-~7b{D6up*Gi-L19GQ9OMjc4B^vAHtopoCqGd_T!83P=nRbD*W%_fC@{wez84DnOI?ZhFnM+6@f-!;vBt^$Y{$+$!&bNO)rF5WKEr-{zFlbnj&%&ftoO-@VSw1fWdTScMN$c^$UxZ^uApDSs-g^%&$vSvhQjk|@vKQ2`RDGH)l5M%kK?xjE0FrACbKy%LJF0MtYIl{zC z?Wo7IV1d^XpURG+6iZ4?bQYjhMLt&Y=ME!}{L7!7VDQCe%@OEr&8;Si!pRqIS+4K~ zYN`RC+=EqzI-U0pT8sO#Vjo+Fh%YIUb2Zy!5&+WllL)Jpe-)?-vsK*_VN>1-tW8)N zq<1i(^X3apc$d;Qc?a1brtq|M-RiJ2dXkF4OChz-C)yU6oHd?A?d8K1bVx^^7POA8 zn#I!i?w-LrM#Yupw%I{^F8XW4oESS=pE2NWEEl*d!k@bPteKH;6nGq930Qt>VL{ zdm!(Fk=|nOg~=F?pz`ACXlr&F(lcL9_ykpOJ0AnzmJT_vkQDQhBtmKZPN33%bh!}g zykg3FvDDAjd}uN6@mBa5AeuXBlX*OeUzuIXER`HlQtH@eKnzYQ{X3rOVH8mqkYP4& zDW3}>bo8O^{9TU8o>`s`R#IVrk2QU$G%lfRSKORl^hVtzz!`=}VqDbo3GP>GHXD;q28U;fjOnURB$mBEPqFaF8Grf*2k%E)ZM{#P)f{Y#lF zYG~N(|HUn~b@Djrj&tiK--n#+eXsg{pqa|&mPGud?QD+6I9Ch4*myhV65J#mS2(zFOOh_c5C0%)`jKu`D|mr1m*nxYRsWC zl5t|*7$(}I>689x#trwAeAW}6CZJ^Ti}t1dwN7KQMgC@f)4L~2hD=sgc9)V0X8*wX z&Ve3J$LEcCooCA%${*lu^P+fSXpzE0_dT{!Yv@oPsjA@Jv|(G?RE)f!{w=?vCL3PW7fy{pxxrd3(F#y~EVWqooI{u5-r@mFJViyBjOc7bFop zvSV-Y&Kv|Gm4z{cVbkguIBldy~G zUWi}91aIvtw<9)Tj`0$ zOXd3#7|X15ebHxCf+<8^IG}p&DMAFT=oO@PK`p59ebK?d~kL5BFlm!0G`rqqthSyLL48LUE< z&?-R#e?C9K42x01HOowQ+t4Ul(4uVgRWZ+SE;T&42v|4K1FUxErEF&TBs*6dIyR6K z2oDQ3Q|SmRxC};R(wvO$vL2=4@9QkJXw^VXWW`^x z{pj|>F~mrVr~e;%m(`UCs?7ZyP~Ju zjDaINO$7+XI>Oi9iMvkDkO-aob1FjG>%A2qlwFdYcLuoKD_BHN*1NYN4 zM=CsdBXlxK7Sbhipo7#*`Uh+V1kC|>&@iNEOHMul##IAW#{eh4>EjR;0tw2gBU@mI z64MsWq>5I~%Uuwp@c4;AIQ^3BS>wZaWzq*(&KD01qfd)DzxpbTplw27>A?B>?1t+W{W zi?OD(5q_pkDY!R=RL1k7KOBa{qyO%#Uu7SBAqWBseA*hI#16Tlshd9(&fNoeg|7pB z27467;5;PdP7r?;-2rwCpS|LR3WT40V@3lI#;GJXs6+wc7#U=6onfcsx6=l zatU|Ct5tx-Wf-~3ON7ipzl$zrl@=|~yWn~~qTxn5ZL zREUCAny80SbmPiHe!5jgpsZ6B|C&vPoDEk?t(lXqJ!w_8wejt7|*~6hh;uv z9cXB>^Ysk{4@xpvi7y|8S4CRMyNd$JcW?u7;p@%_0$vuf*!E^+Sc6#3NOed~d+c>m zu0p3V1ZcNFbt9(ATfQGGjpYfZLG-w$Rk#H2X-S>iA2~U{0wakgqU|CGKg2iG?U7o* zr0DFaVkD}b5AI@i&1xcLR6pyHn?5#m6jG=~=gHZAF)$ zaBySvn7Vzd!Czr(8rBRKj72^ZvaI#2XjL;*yKhEpdMk%FM{ED=={x!=7NllAJ+vrdC^ zh{GV%=QlcO(=^e+aSFqL2~M75@0FGYjB(A>b!(mLHGvOuSUdT+%bIJva6@154mDXnve+M9ov z#!$(KV9SK;%C5GPqom;XDb{piM)#%wy{itoT4%X~mPJNl6)MQ%ywPldKkKyUo$BiNpE0HKF2&Ii%rUwv8 z126OxUdPq1bfeQg1vxUcWNgf~@2^ZI51~AKdMdRPu8>gE=S1`v6=h$!h_dC~p^29p zKkAJ3c3zi0LqSUUBPvTS&Bo>#;4-Ae?Y0Vfo3b~`2Nj{vW6icf{nvDwZ+)Z^__>T& zdBD(e1N~ur(t5sUz#$B;XeB={iK|%uAp?f46wibuKE|4a0>*AAytDamxP_703B(nAk7A3_@PQ0a^kS?{Kzw@)RKK!)2v9-7N>swuqNmvFAy6Q zPOlty(<=^zCzEWOhsbVpz&4}{jz4Q_z-nDet3`jhaeRc{in)!@qitFskE=Pm5_x(J zu`xFFhJ*D>Y^6`TX%Eo*eH?NpKj&W1P~mjon_k&KZSc7ixZe2RvUpKr%29P^ruUdX zP&264I&#lU5)l))eeP~=NATUdDP7k4xl9-=^s(1+BMB2?%x&5E2tG+rN9h@c(n8{@+o- zpa0&dn;FFggqUI> z$>im_VT1aGi?6ry^0Tw6y^EBR4&@t!l69l{Zk*ZJNPkxzS+t4Asl$`=>z?Q-iWTEo zcf_iACr=J_@&cXepOatAc;Gp6?BjdFH?5P_0d(j1>u!x<0XfzUmP}bvc=-4OMuad4 z561t(1HE48*MDw!Lihu$Y1x!SydIXi>N@09YxWI!BGv45xMo?AGZ!YzR=;?vdPY~# z;qSTGyQEaMT#Y?G8C2P}w^mCKr;A=e$y;0o)P%v!$tZ6tg+wlDV@W2)-j>?4x zGf<@mf4l7^4e&R%8x0;gsD3N^oZtHvu8eTYcC4=-@5g5o43Oxn`6|+5-UXY(v6TfK zt{q`Vx6TUVoA)eUxiUAcnuaa56W3Q8pH`inZBw+Ol_=cQ`y)MMvMIz!vA%b{cI4W$ zw4%Kr4I;_C#npWivt&^%c5kt4ty9^m1RdJdD*F%KsIvPZu36M~TRYc_l@~`S{B*TE zi8lGzGrr34+R;C?JMf=JpGmX^&0d4-d7J2vd}}AO^8{s5J^#pZPuClwmds++$?qMo z{c!A{>e8Xzt8V>_(5lIW;=g}tX&EC{f%b}0SzmcKe8rZkHg>T?qsgbHw4lD`P_}er z0S3+fI=`<`ZFu#3yC(VE#S6es6x~knz#yV%N|og|y2`&WcLVp#v;M*q(Pv%t@-wPG zmey2>RRt70K>2M^5b?T+grD}2+*j+>mo5r{X`yah@iM-sqm2fzTi(z8g9~_iaCyBx z!WDLt7y##jD0;4^XjUI`tM>;&7fzU*ym_xJj>oi&KIVo-0u|fZ{YhP(w+qZ7-We` zq$7)}Y&gY-0$7s@wl9xiQGXG`_0;uJ|67&J1H(f4mbw`+;)z|EoOPtkF98FRiiIQ0 ze-J})=YJ4Go>yt!VJO~3Ij{!TCUxs(nUUieUntPyag@>{P_SW2C0W|={qR#L(hZ9> z^DGr6g)S$oeegs=Y45?R^}2m?iCo514@#|!jh9rkE~)ug`Th(k;P>KK4!EkK`~%sb zcyR-B)?^o7`K#03%>5D(oeDR96&gO|bO={dW?Kbpi<4qTwOWd_pDsomDh4QGYGMB< zh7VBE|0ssh{gSX=xRqi&zB~YlKWL(X&&XB8Rr>AaFqv3l53^DvC5y#1bUYkW77-EKT6~d{!EvX6&WEK8GAhR=$Xef2ad%9jMCg#q!? zQwYg-GR3g{iXw6P;2=3tq^(OKSmv9a+KM}ix%*F4)(6W6tln|K7BmG0IEG)Fl^ZwP zCD@fxn{iWThDLV`rKL^VC{FtzwL<26GpHd0#?tFzv4|yfrtTP%Q?lFO++i&?$Dz|X zyw|i5G70R)+lieB>_woKH3&_Lz=-TIpvS{g%lfNagVwxkI>_8rCRIkgQh!l|%{|VP zMqx=3EI&!xDO#|v2WSKfxi%ICV@r18UEv+JB;73!MJDe>cL8N&o;I@q!;k9`(PZ@_ zyQ9%Mi&W?y>8iv(?NAbV;yrSCJ16!aK_Huh=U=wA-hz?@@S*hedxKO$&1Yx9{@|NE z>f>#I*~=^c1c3Ly@ML#&T@~)DVyoqtHuX(F*McydQBxYgsUoQo zo#8Q;Y*HD4S+*l^UqHi&yq$782HaKE5c%Q31)-fqI@j_q#_+d*FOP3f7Vwk1K5bWa z>NyYPCcwr8xYVOEuaFohEx(yyRUUqo6JgLew|N%b(33p}LTF$S?fHr-Iz+*i?$e|1 zi5#px2*{_!B4@00;^rR9RRY+_@r$sw5g*~4!I3}6J%E6_8tedRV5j;mv>FAbwTlb= zdxb74LTe%v?eSGSQmGM)Pm+-vp-YE{$N^Ji0^PlnfSVuOJQdV$Yxcm$}a z3jG2T_`i<&<8c zBLP&VMqn-xMg9viguIA&h+zdp*KM}LvO|$2PxVCyYw9K);gIf~2E#^6dzB)nxxr2I z-R*7~_$AdVNrund_MGY)e@qY9(rdP#XyV+Xg?!U5w{;ojkj@7msppVC4RQyy9S3R3 zISAbo4(U3!FxV0{YXS7t#Kdlz6Lhi`o=2#f)cH7Mt#Vt2h}Xi}F69QnQ~mpg>u5R8 z_DA5B-1HXWEe%aIq_=tGJ7DN$+Mj3_8tUv~R1?wHvP|aE+e7h92UV4wMS-ga+;(Er zmQ7)Z$0;7IQ7+jW3eGSUwPN6^C}2b0 zhIn}FKle-#vGPW%gw}SDK1eOenS)h;%Mlyn0qW;GZ6Cy~!lS^AOEc&eR-g5KbtiU% z&N=!6_Wic2nUiLtg$GfV7#h}Ut;80fe$gX!nA`r=0IxH6)C23HcpTxJ*U63v#8`}~ zFh@=bG5=78R{v0jKVd4AYW_tTuEqRA8HQ;5Lm67${G|;0A=Jqxn?!X&5I|>T{);l? zaDTv!WbEfK`v9aTM=)uAmW{$VS^z8Wt@F*0m;pv3i_&{rs{yBT0-C}95w4URjieT- zR#BP!Hg;ao4iM6}!iaxB!ooKiKKI+LX`$O`=7+g0$w4vELtjw|B@j!+xsUTCzXz=4%ZRX^27P=t!HYAA$zZ)E^L7iB&?%;cP3 zpq;u=I7f}0dIdhvkxTQ5SoYcxRN#hyOdI57r{T@1)bpcYO`Dc-u)FuUc(4c3e|br{0B31{s%K$1e1qo(kMA5UPU;h)e$@q zO2@|T=w4EE4Y{;;^OYd#_;o@zVlGgSSX#vVBw*CtwaL?Xy?r#)LhIQ8!1ncvFZN4s zV9MNx#{_7cQQ^9hi?GZEP3L!i;)INK#GO+z(+AEC*g)(KA!JI3t}oN0RD+<(O$EjdN9#-WUyI{GEXb_)IKXwi}g z_M+Q)=opv-3;iF6jZ#|x!P|u+#oU`N?!zn0ATBsN@(nw+#y;H0=&oKZO`MRb zTag9dSn-vvlHidwp?9M}{eU2k->}#7i?a9~biH4mJ0RB-*th-qbH@UowF};ABkNM| z|JDr6M>)M4ULt%bXPQp_(G16jI&k}nxqa@zw{NJlTkK{qAJP-<4v4^cWtS{WNyR5b z*Cj5rKY2hQx*5pwl(`TfxX=+$_nN)yrge5}B^-_h`lf>hg8k(;T(QMMSHMAvS-8U7RS*D`EMw{lo#MH<;YR;=y({bFs- z?@AV1w;^v?AwCUXhHvk6EKj0-G?>TCtikp9&{8NCUQd7sL~3#YfmHjU2YBIw{xn-t zvz^n~GjPC>KHLTDf8&QfTyV-BPTm#JvCc1w>pFc(j|ZPqY`4M{S_0mK*TeNzHh(J< zZ<`uya7`+K-^Gtq^rx5LdOOC9(_{OxyR$PlWKWt|nr!orYZhFj=ab5K!2WP$<~BCH_WPnY=~|i$~z2f1|5D7ZrL4Hg`6^Hk;-Sf zC(y$sY~<+pxauS@Oie9{$aI=++~*XO*i09Y!01sXm?4?m6L+ibX9MC>|6=?EyZ3O5 zoSUIb&*~S)2;+OhQ|pkU*vX6)w9O}Iq>Ceau>C?F;I$XarAykA0|^Da>$GHy0!cWA z(W7SJHH1Q}R9Y-X60enaDydb7SDgZ|8*gOgu0H4s_2=jZDqQK*(+`04WuTeLO1b2y zFzeme@~l6eaOfd`K_oRCt_B(p!2nG~ri4eQ>jm*7j#l1MUoKE|dM&Akl3iksF%Q++p4ZTBkYTW<41Htq7fwAX*?PS4atFRvZifxwo zGib~11;rbF|KamGXH1^W=UTd_1^7I`WMH;sm&8-{i{$R>?dERLEby-tma zx*fl=Bd3jP=@LIcvid3@0=gi|b5s!}WQ*$b6{(*$69S@TCbzaFRo7dQLJvW_Q+4e= zNJKNNT+rBwIrH(u@J*E)EW=T+p(8B6v4IVO{W+bD4+N_2qfZ9KPej6DaSJ^u?^AEZ zwV<0slc-XtcAj(>A&?!u*_Q%LO;AargJx(h-0~7S1J$l~WeI!n%6Sk&cnl(6N&##0 zMbketcS4`R-!qzuB+(bsl~`;l&_7V`P_HV#*f}OWpyBIsq~ZL&V!PTIZ%PBiVU&$G z`{VlSXm5!ql`4v2$+KHfEcuSXyhpHn7TXyjQ?wX!yHh@eejITLBM?%E^;(hYZ_?=| zkodFKAz&+1rqrQ@NSMoO4S_p>F%+uBIS`)TP2}N6@v)B5o!BeIh702lRIVbJnj30Q z8G#_euC}fR^4=gE|M5O`c^tDqB*CXg2Jyp@glgJyiLeImKFGH{W}INflNG80y9L;! zRQ?VJOX0 z$Rym#kyG8CZ@%XIMP|F5FSwJH$=?vz%a{RkA8I?x9$pG&kUXw`eJO|p( zv3GKFlVvD)`-+ebB?atfr?6m;<*Zk}laJoglzRNk%nQUZ}WtkFFgq^=#uA4xU%+J6x_-&cjBi z6G$c%%KCv5MG@o}TFG(x*jQ$Zugv*Q0-l+1#fpHCl(gnSNFl|Bc(DXtw3~FS8X>Rw z5>wppD>Zh=idU=svc{#qNe1HGreKHYl2ptLlDr86d!Sjo1QNAj*Oj5i2i70Hq=~vC zJr<3UO4B@M9Pf#hBl(rix^vu}`vXoymRGA!>CTa(l~8ILu>MY@ zX)F1!fKX^5p!9R!(oDoOn!TZtj0zwmXcAn4CMJ@W;Li3}=8y%b1<8o2AAh^7pfo44 zk^i9~xbJO(L}KP=6xrfK8n>h%oZp)WwMS*3NA&(`V`pkZ4?umiawfKOHqbpE?xw)t z0MSe-D*hcAydJ<3>G>Oj@9<#Iv}r~}#A<5vC{lsA45pwACTX17g!G>` zOZpMR$=i$82%@^B44svfy->wdXZO|)N~D0JR0f~+pB)?>H1;r;&i<_(R|o+&^dzbr zJ)S4q&0GQ-T5h5I?vaTmDVO?)E~(S`7I%)t#x1$7vk+VVS|&HRBh-}`7P>s-8TntgFQa< zz^V{e4o1HYFFAQ>t)m;zMOU|H@q6BR|1&>pdrsJbg8%?b!U6zj{I~r4KflcTo1At2 zwz{EbH!@;jVqsw7FfiaSWHMx6XJIrnWHDxCGty%>{wIB3s#@8svm$(D>+~^TWa=gh zDb%PGqG)vFgL1;0a9VDI1?OAQGLp(kSza$+i;cPcnu9fK2Lz@BPIl$o;+fuz<5s3~ z&Op^A#zEfYN>gcBY;i9 zy64=Pg)B6e9U2f=Ts}PnlUq(sMLMddCszGS)Lf|TVlsGrOvd57yN9ugZ7x)-*`BxwmnhUMaC$MgrciR5jlLq> zI&uT6$)hxuJoO=y;CM61?$k%92NC>47~)#0U@n?t!;=6IM|Exrf=Pnv?)0pj@mkP?4S33J`H!jooBFdo%;} zZ!hS)UqJ5)14umBm8Y~uZk>~KSWr;K!_f>uH6@up&#gJgriTE4H*3a0Klvm_>9Jbh*Tf-qp%*s0HkFN zjLfYkaFXinDXnhD-7ho4bPgZ^?X^SIQ^47?(-)edZj2ugoac)BIusUy^ACiuumxXt zg)j(2i)NyXB?e>*Zr>}>iwmF?jy42zDkC^MaFZV0fh*czaG~C;TH9QNd)&Hszmvni9qWY3&b&0OagUFYvN)6vo z<;t>GqiL?lR~tgC0|R6~o#uyR&rgdYP`90S+m~VrNWK;4;x=-ODbuAPJd27 zk`c`NHuN6XYV2?GFNYy|)y_V4w_!NAnW zO3%^E;D2{Y`2WNHE;dtItM=>cXkOE*wTtjF<-}0f;&OGHhtYdw3y$&S?5A#-3M6Yw zjcDjYgU&vm0J*~cgZct!yMuJ<6gLR$$4KDMNE~0E)=e>a5a@Vsn4NIPnYJ@HoQA*_|~<`)C_o*!FkzBj-c_Ji&|S7hxCl z*M?{ImkU?NZktHDXR^h!AKoLia_XlaD1{eQ?i(i zuN`qg=b3Q$j>Y|G59 zRavZxX)z?d(nLzOB&nLJ99(sk zb0X-jXA^w;jss~U#WdTbK|qX^gaq{u73&Ett7&J1ar;n$;gcUqs9o+*7TZ*>uH@2kRaV0oneP?nf-HH1A*EWX6x zSO`~YGCrjEcH;008BIZ$fl`s4U+4pudpVYo11CpUQLa85S~SVe`vv0Nza|4BPTf5o zg8#U)YfV?Py}CA~PN%G5+Z|3-pyJB+Ys>T)P4LTQ?HKyLy1C?r@rl`v0+aY!YC8L! zx(-e+f?WbL{s9Cro{aNJo=%hvHa# zmG`zCG2T$>o4PKBUC~_c!$k>42t=%dQ+3fVShTH)bBy;xT3V zns&>p%s|7d?J%$;+LFr!T#W$T z0*&EnLXRmEQ`yU$w@w9@UfN|XNd67Y6UCrjvLUzITwu<9pWsp%Y6hfa3cW#6JN0Ni zHq6Apn=$~B{o!zs!HTDodU*bWanDTkR9TdxKf!qL&{}j5iEJ15l47xPQ+0N>y&C&~J zwk*kBy_#cDZ!V#=6r~WV%8=+uEHNG@CQ!_V*AX3`r+1s=dhB~w@`qF2QY}qHEG7&a zU(GB4KxzO$Pyo59i9sg+g6@U-gS`FWa)Fx#CRehqS>*Rn7F^Eti46T2CgsEGy15d= z6XJm+8A}}Wqz3!M4z(Xr1S;A+g4R7^-V09aXi};GyJ;}(=yHievx$t}zRxbjr>OgB zzol=3Xcg!=6LlAl`!x0eA=#^JqETQT!@ytU#Dr~^06^3LPr zYjJ!6;+thj({Y2sOuAh2&o8zEOWA$aK%snMzAUB>M80ZQ_KV9)rE3P0-GGKUMYvMb zKyt8GnD&SOf<+B2gAD+hT%uF}E5i|$OFIpu{Sx6NE-WM4kaJU7e-3jYar6w&AG-2h%>zA#a$O*A`7!jXH zym6(XN;Mh<3TRd0X{%D1V=nt)Y^OxEJMGoyVOzT=)q7%;KB^dbE>BK_3lPL9#HB6X!&dGHm9qT0ea^Nn-a*>^kIV z!6KD9GzR`P$SvP-=T-pqk1esLPW&w$Py1QEFtu6VYm^#`XH%9PLr=y2C>x?_;x}bK z(kX1VNILxfXeVyI#DQ03-^BeW|d{e6BVvh-}UHjjY?`N$ZW;j)dr6v=E*RxDsWXYAl^Nv7Gth7#$9q@hefv9b9(f z7ItD~<4)UQS|!=D_M2np^?i_C!Y+~`Y}PLu;v<1*h9e%?JAx!d4hD+{$+3y@M&NQT z-5PhTVQ1Fl*Su{E*~`@Bk-*DE(XZW(m+sV{-98>iR?%^56GbHA zymcZnH>Bsqs+>55;=J{nTjumbiz~^E4W1V2vm@n8CCj>v%9wswSp!inyN`!dCQ!P{ zLv=uHKLb&dIwuIxg+rxR`y25}tJ!OQ$g6@&cfObQ@3|@qKO`M6{@5#9d=FbaQD5k# z&7M0-eJBHytd0N@hQ0pjJO@-Go2R1vNDM~w_x8FA!`!mn9<3PcBol}r*&f`S_F{IM zuv`1YS1$_ht=yIVbhqsBbHUP&#(jsBw~>R=>#R@VnJ?_<>gF*&gD9RpU&Z>dAXID| zWPUU^6e^>77*xZ=olID*eB1P*FcebBf(b-l8Nq9@2NTrJ*WbtdX`EGl2Eh#_s0b=r zK^Vnykkib6xt=?MtPqDm`tfg9vr`G3TB~f6_`o6Yk|R?2E|P_^On^#>d^&Qg_(4KE zD6uKyHKH(fD9D}~UIx7lWh69>ETSk9n8Q38@f-h?C1KY%A?g7(wR5bD>Yu^eWSNqO zp++n$P7O=Qr7|afCxh%&Rg%tZ7kUgb*OkdaM{Mps_mfobmxi>m!4z0!2FaYs?P6FW zzYJ`5yMHlN%IdVLhJsmHMol(f?w&-`aC?nmx;R3Jt2M#qgywxY(ORUE7iE9^uK+%$ zWy?`cae;>lmaV74Fr{Ien`IVuEx;-7ueGNaZd;}mWGAE6!m|AEZgZ;0a@RdzP=t%a z8n?K(kw-E~H&BrBzU;y*l)edrY=geAVMfn@p6b5SakEyU%z694W-lmP<`qg*P<>@Y zFXatPMI><7aRC1=7*;y2JJVXL^)i5{foQHWfra1P0~ZQy{pu zxEGfYoKT>+OK~j)ibH`S#R*beiWMnPpoL#}_nmj|>wACP_e;*np4sotd}ek}Hrbik zT|6?dWCUGZvZZV(HzGojfKZ2_DDkZPAsX4Qms|*bAtxQ|xV%;two3=llJR-pf@EW- zmJV_I>1?F89Ezd9V%<;(PtJiFaSED1*xPYyiy1YNHsWnz_r!r8Sh}tEODdNTPf1cJ z1j1feUz@uYqx93Vwj5>kN%UG^e6Hh9MYgUR$l+isbAH`1?KjbW$9k%y5SQF|+H zgqwV+?=<;1lt3p?D5mec|KTsHaHk1*dN6IgXRN}>Vv+M98G_4-=j;Zq(CjZr@FLgH zW?7b62KD}{+(^vn7jQ132%mU0I8VbXy4G)=k^AbtM1;cYg3HT4Eon?RO61S+LvcSu zK-=vd@dF=^`i5^f+0oL`Cd6xHJXeeMce%iCqw1bL;$I1@p6{@2h?gpVbyIRJFT2>O zjbdRr*zn9&wx+ys!zw1$_$lhooww6&C+O1|SMo#zKdh<89$_Z5eb;p|d7^nncyC}G zOfw^g!i-WH1r)ioE9jIc`^f<|d*@~N5=>*Kh*Bm?6%ABY8U_PC6{m-%$SR^xG|u0? z&krg>%ad7%0sc4wOU<_*2#2EB4P$!lvGO!$n*#&*o|xrEJL9NG)?Tq(;Q$9^cG{lRZ~jP>O4qrJ_o;2kfFvqH}E;Y$Msy;J0r%;_moO#Sx*eY z?Mg^Tm0{DsclJLD!c|1deH&zE#Q7!o^%@HOJZ*Ou_ic5#y6Ml~E|i+3NFvt12LNc( z0suDuvBdiOj-G$5uS`uLR@_$n+zyH$50V z2tUS=UimPQ`N+hN9J2Mr$Oob8IQYTF%_7B$^o0O9Lz7(LcQ*gSdnlQXv%EN#L+8Vi zbMK>;sPN^%AW?ra!;H%}@oq3WeC@Sw$=|uV+Xc7H1q2nzS1N`E#1G z3+5SVwo~?F{VInZ^PUE2l(g|=saSQm7cL|cC9!+AS`xkN$v*U>#7Sr;H1vQ`9QA{f zhysMt_T8lr-a^Q0>@_{bGLb|@5vn;mC9cC@kp9#Ay@p~mGixZd#5hoX9-5hfApIUx zb1WnwMmV!3My>8HKsY4*-B}lBroPu_K8h-`$)E`bEaxyZ&IlPA1iJEe$CJjoQm&Q7q-&9Orym>Yqr)U+4QM>ipkS*C! zv~?xTrmqg85vcvsZ!iKSkEKL~Q~w*nmown~M689D9_`B?Ax|eGxV*z|Yc}65i{& ztr(pg_~m4Z%2?XV6ne=M_2BE**aQlm>M8rjd$MaeDgzcQy(xPNoqBJ+^WD3|pyhPY zC^ZnZF|6MszfsDcyNI!_Ym^FmW~C5aZZmEdq;YI#d7JaHnkeJgelm$nD>w@-W{qLO08-4c~@LzLak&UmYL@>-?hb$&vYrv|fHo7vt3)0ay^dz`6} ziAIA?w6}t@d(XiUV+*ho>W;ShaN%Vy+iRYJ!Uu-OB%Ce{ZDbzRo)1(b5A(k=ITYW6 zZ$X<}iuRyraT~?y7koX{s-0xqa4Uy20s6i2TvngQPrk+%M395@%yjTwbq%ouRAv>! z;-V|I06B57sAIHAFXWn|GbZhZi1Xibj5XpnUf{u|nRYTJbG3a3S-FXbp1D58Iro6n zP2_!FNLkIDdap?S$%eEDZxl|qg(8k+o;=YO#J4Ja<-cHWh@E`^oS=Bjr))RRk3u*e z(hU2y5i~gQF#l%b-RY@|ZM?^;(S7bC)cX>FJDuCyumaMOL6;Sm4UJLL0N+c}%Wn)P zX=3ghF3)nsXt|E56eW(4|0_HEE|5xI$QEMa4MT>?Eywh=Bu+epXo9)Q@IIo^ZWxXh2fq1<<+=g(KLS*-6d-ot^ z*g7R{{rEvdMp{c7dI zcZu|?<$CvbPC1321xRixz1F44Ob|kknY!&}tRP?-pn&zI6UkcW^_4USgCCfIFuiy1 zax4dQc~b10V{u)uvN5>)@BXtKpV#+O@d1Dc1Pb5*a&q^wbG3V6!(r`v@O&W&87#kZ zfThiU%!6XQEPLY^E9SXjsjVywFHA~hhK2N3DCNVF9OG~810fxbC`l8V_zbpHy9!YO zM+s=kJGf#?SbW%{x4*2!TqUAhQ%K+#sow2-P-R`rlfi@V>+7@D`ng{h7t5LP(Ou>Y znUFVQ9YflIY@A0QdM#d!ZBr??(L}?|I&G6(vUy~hK@kQinC4_xq3%02zXGHzB;B*b zv`PFX2P?0C3C1msUdtO|Tc3^oLMaJ2yzUD3`}O{ZhA-m~4qZkGd?E42ncBtn)&A?f z;nPbcSI1{)6~1{~gOG8rF4bV)Dk@ZW3vMZO#_)kq}ZVi`h%2 zlZE(G48bEA4nd#N$!FD*Rm+zp#{Ms6bq++~?rblYIORo3AKud9w5Ust+`MOx?z229 zCMDVozdop$H{NafNtlgh^7w_AU`65xl zTD{1`xMX0;E5dd6Y@4wk-mX8^OAG>MLk$|mFT2!R(nwDF-CUj*zxh!g5S9E+{bync zwI%(Bn>3qS)m}%>)s|75jvMDwIIgyj$wAYnb68?2>xPIP^_K=%<(GiH@Epzza4QO1 zeC7NeIyWD`fx)wwFBde-C`N919(>Et9z~bmlGX zH!-?`Aes1TC&#_})7#e{uGq#z&zASL1tpsOlJu|VGj}6Rnqkiu4<@FG-sO`<`}l18 z>l|=8XL0Hjv@F<8mY-yuDcY*=sRdjfz1^YJU^H2|mMF8wozhYIu49{>E8KYA*fB6> z>etKxUWD zbuOi(&Dn{|S5Fq2e4oO7-tR<@m%8a#M%ON8d3@pDvOl97nGA8s^J|WL@Q8S< zDsmCq+(pQ@nbH>4k4;A%TV#t#d-4+q>&K@XOUtuWr9DYYSgQ>;i-nX2acCcPJ*Y6? z&Vo%yGK6y3@+kRi^tq^dZrAAQ>0ZW4vT@!fkDas+A#zeNz)Rs1a!cRTt(f#4)HSsH z;_O*f9o~GQ+NRlf(Yl$)I~eJ9Y}G!@bx}Uz5z%L9!sw3fH$QPnlcToz@h2;9UtiN`fSTqJxaghH{C#wd9OL~7+%M@}0W(+Y>?K^6B09l|hq4)Y`;x})kD z3-EXbnklVdJx8?E>P13q)F)E_SkHG_4YxcYN9vQ(cslL?v&tOiz~kWE)bh~Cr!*6W z_b1_jGnbJzz3a(8qJ-dbt=lCdpWJ!Ki8tpS5omoF=FWTVc#u}(n}hEmdWPd`!=oe2`!HIP$`6d6)RecS9;x1!}W<{T4McuSs?Er zxKKCbj*1sWS2F9*D(kLkCL5TnGPFz2b!lP*6Yve67uttJAo4BMJ_{|ts~(V9N8=0J z2^o4~o5rp(j}}`mZkJI5>0f%)n;^$@UihLr;?YF{jqKV40^a_B+!@Z7; zPrR8$ayGHtSzpbvx|T0Uo}Mi3rbKR()Uimu=D*BX#PEUlJbJotT%<1iq5Sq*hSOMn z(Cg$@ZnN$!_lvWhFR>E~h;Z_gtij~BQwyA@JXyl){(RahnN+VcSjkPYZU&XbNR8iBd&hb!ZXrxQIm27&v%24S-4;VjH1W3bl4 z>*1d+fS3j6>^Y123G^Ct_d-0kj~3fMjHy+qx@rgMkMlj^hxBgahAGikn`5`5#06Mi z0sJ~Yl5q#NX_`H{ACj0yiY<&4E=daN){!>LjxFyL!#|=xv==Uv793MGPV5Pq*pT;_t=pNVic39||VnzNqTcPtS61XX+by zY0kqsl#xM$)ica!mxR6Hr*sABUl%HZbp9NmK1Upy=}N4;u|PzQ)-%*HSjdM@8~1+J zW4Nvhi?piTdkV|guVL%*S9ZAoSr|O}k+ep&+F56I@L1lVnR?dFd1pk22VKd1Gg~RH^QwaG6n$p0ZX%@_7r9)$8g4)|e zu*(XXf|TL2Y-1#TiJVw|p)fZo;#x+k<8WO6R+4!t4@; zlj=VbqDCT!EifspjfT0M)5gg*NOoa2G}f1@5^fsV+7?c_}Er!I^1Y%LnFQoeP}F4~jNP6_|Mw&gX-K*^e65+he;zbBG2F)l-O zxf~c8=+q7!Dc?n}c&^YyHoYZ3>AyBSWsBJG^dP!;#oylKVYk%rYt>eK339+2o<}0@ zAu(yN;a59`K;1xNMMxDfDs4Uwp&_(kSbRooELp^N-=VfEWq>C7L&E(EJhJ4f43$W~ z{FxQrcv*=mzgS;d<&-6nMVy$NTct%RDWyreoMCDy&uMuNbp-8Wy?2suEIQ1B=EFBh zezeERHIwB5Kh{S@`>B6g<_Cl>9(eD5#)Th8QS-D_YDSof+14@EHc10@q3b(K%Z;=T z{jGp+y(*GS2i8S93ASoW+qLn_$iIqo7J=(paVYxo)6O+{EfbDi$39(9xV}^0!x10N zw-t8jilz^=G3iJQ^7r7}68uW9Y>Z5%yhvz*DoF^L*wC%i&0Oul#&Fv5iA@-H?cC7#*ptGSR%5Om;Sd&PlGHmwD8Qc>EiSR_>+p~q zt4_7-bK4GKQ>bKt?@W4wq6zM4KcDL|2GcTvS^K$ndYd&{%NwaUBXQixjYbY*@`n~D zhO*(cAH5qg1H03epNL3cz6BYLLw3MX>vo6pQDS_ro6HW$%y+$u-aC9;kDHw0@39v3 zx%K7?-U^a1V&pjq~s(B4cQ> zs(}b)&Zt?x2h@3}Ob-fuYXJxO*)P+LjL<8g!D9?G-4Xw6JqbkSy4|DMb;aAArIkmgo)`f zrC5cPPsM37HG$nfOaulK#W~F)U`qRnHJYKIUi;cAb%AoK6(X8!*JAY}HB{t)5y~vQN20>8mbc zKe5ZKh_-Vg2a=^7SD+~AQdK>r3$cDFq}KpTPqTUypyennuBC=D3o`L*Q|5RJr9WYj z+$D6%DzzvW6_7JB3%-xVuv&YcRW&lFjajZGDcBXldH*(hVJq4dBv`V6{~yLei2 z&z_L=b2Wt)mNS2J?PZBemEMh5^@=)=lioZGu>Y{CjUEbe?4t-)ROTJ$g(ibin`R^W zO*B)>w>s;z(LCvJoQl{%UAWpGSvSce6xZXlF|Fqu8FA3`*NfumqAx!F5 z<~F7$*>7U*ZIj}Sw)ExHu29f+8@&6$OPnbyCxi}lnHlkngtXRXvDp70sCf-0U~SQcoP4lM@Cm?IvthEc#}i3en;10Rii#ZR*#o| zCbRiR!%x&)E{Akfi)&Ed^cLuIoVe2MhG=i+XnHdDum7mNkJk!SG#1L2KISlg7e}vh z;;n&8E>qe51eHA0E9ylODSm};K4vY4wAe~FUXhsRgSBkzIHt&V<*~Yn07{x&_#u8T zigyq*;N!kGS{j}6u(;Pe)r1sDXzS-=L4cOd6SOmuoJk%*oGXh;v0 zHBLO;uHi1Sw&9Z%@ZJ@E{cIj(M)=<9bMvN1kqVTHRFnA>MQ!B*lntC=ynJ0dT$WL& zI8J4i#IsC1QL2{OBl@+Ui)1c1-qfP6mG$*Ih-A9qT!XUV%J$>DZn5fb8T_OK&RBy` z9@RnwRg#cpy^i1+;~lLm2unnkE_KD=C^XCgC@+634}+#ulR>DZTGRQQlu@M=u!!G? zT@rZDGNVyZ3LG&#M4y|`WZ;EH{2BVbr%(j=(6*dkQHs{7aSg;&crZgAy!OR_T>$u2 z+=!hYh+(&Y&(KNd)Hnu7*4#K|$qN8)qqK0Ffr(#p^!uknaqN z@y6|AVgcT_?4`;CgYTMuiV8x`DZ~W96WIs4_`#t(YXO)AF(8U$yvSJvEIc75dhD85 zAf2L;|!19jCtsczzPg?(u_H$Dx z!ewGIVkfxcFl0a@o@lb_Y$&-3rNthGGrf^Zvc-Oeu3t%9cG`x7bM;>y3t{Cs!zETDt$h!9?6a4h9 zd3h8d8oWP45Ik9Ypi3AW#=CZdRZt9K$izcmQqaLu5~9a$jcuVza8}rNBYiCoSdDpK zKU&BR9DY}C^c+n+qshn=4Sy8+O0=N+j>)Y7Z1GQe=#IYjRLH^;5;CgfyW=o)KqH%J z+8l1!L5qJ8DrHOcEP#I)Axjh;OVC`L+Q^ zh-F#kOL%s0Vq|%3RGY+Xl-;6gK1Bfn0E9?S6$tPxhDR;F$-HXzApl_f6ae5u*518P z{wR>2&Jb7k{~-xX5b5`F{v9E` z46(F=SPGj9Snvr6L3jlCdAS6+tj&4<8~RO1ytAAf0D!ZB0#NxkbW$7u0GX)9VeX0) zX8sc5YWY7{%FSi^7e1tz->rtmm8a4n?ZcM=0POw^w^#c=aR09Trhfr7H5CvP5a71t zv*hCu<`Lkw;u16$<`*=#=PTcSU|r?EF&^qqaX3`Byyge;e*U+5XFz{~qi76SaNtchtY%3IBrpdy&uIyW)2r e{hvx@jQz!9ule-e{kumP$TvAMUTd&+NBtj+xKlL% literal 0 HcmV?d00001 diff --git a/TheThingsNetwork_Feather/ttn_decoder.js b/TheThingsNetwork_Feather/ttn_decoder.js new file mode 100644 index 000000000..770428b3e --- /dev/null +++ b/TheThingsNetwork_Feather/ttn_decoder.js @@ -0,0 +1,59 @@ +function Decoder(bytes, port) { + // Decode an uplink message from a buffer + // (array) of bytes to an object of fields. + var decoded = {}; + + // temperature + + rawTemp = bytes[0] + bytes[1] * 256; + + decoded.degreesC = sflt162f(rawTemp) * 100; + + // humidity + rawHumid = bytes[2] + bytes[3] * 256; + decoded.humidity = sflt162f(rawHumid) * 100; + + return decoded; +} + +function sflt162f(rawSflt16) + { + // rawSflt16 is the 2-byte number decoded from wherever; + // it's in range 0..0xFFFF + // bit 15 is the sign bit + // bits 14..11 are the exponent + // bits 10..0 are the the mantissa. Unlike IEEE format, + // the msb is transmitted; this means that numbers + // might not be normalized, but makes coding for + // underflow easier. + // As with IEEE format, negative zero is possible, so + // we special-case that in hopes that JavaScript will + // also cooperate. + // + // The result is a number in the open interval (-1.0, 1.0); + // + + // throw away high bits for repeatability. + rawSflt16 &= 0xFFFF; + + // special case minus zero: + if (rawSflt16 == 0x8000) + return -0.0; + + // extract the sign. + var sSign = ((rawSflt16 & 0x8000) != 0) ? -1 : 1; + + // extract the exponent + var exp1 = (rawSflt16 >> 11) & 0xF; + + // extract the "mantissa" (the fractional part) + var mant1 = (rawSflt16 & 0x7FF) / 2048.0; + + // convert back to a floating point number. We hope + // that Math.pow(2, k) is handled efficiently by + // the JS interpreter! If this is time critical code, + // you can replace by a suitable shift and divide. + var f_unscaled = sSign * mant1 * Math.pow(2, exp1 - 15); + + return f_unscaled; + }