From b32103656286a96df1543d6bc0d27db3b010f10d Mon Sep 17 00:00:00 2001 From: JessamyT Date: Mon, 24 Mar 2025 17:57:59 -0700 Subject: [PATCH] DOCS-1515, DOCS-3771: Add generic and DoCommand guidance --- assets/components/generic/generic-control.png | Bin 48473 -> 17630 bytes docs/dev/reference/apis/components/generic.md | 6 +++ docs/manage/software/control-logic.md | 46 ++++++++++++++++-- .../reference/components/generic/_index.md | 6 +++ .../test-control/generic-control.md | 6 ++- 5 files changed, 57 insertions(+), 7 deletions(-) diff --git a/assets/components/generic/generic-control.png b/assets/components/generic/generic-control.png index f4ee690bcdb22c6e2da2ff5d1f7360382c3e1fae..7fc33c1203b79d188ab6369b88531df29bb55fa8 100644 GIT binary patch literal 17630 zcmeHvby$>N`zK%^BB7ut5+h1V2na}nf^-N1($d}CBBBz~4FgDbhs1z^G=p>uAsxej z)C|p@!LPpW?r-&GSU(%I5>F0I5@b} zmo9=gA*WAQ!4G;CPo5~tJb409cC<6Kur|TLVTyE#=)E7{K-H$tofN?kbFO+e!)dkLZDSjauZp+1$u{X0Ue2QU;D#VKB#4)0uC4-}q15zv~hUd1eN1ux9u5YhS z9v<%d9*8~5FF^JgzGRMj@Yn};WPY%!Yx6Z!AmyQQp{2uQDbtf{GYu5#tHjAecG^Xn zf@XZ&R=G{bGnoagOFM==)868-J%MvcJ0#DNb8Zuq)dj{5y|LYVYyaVn9KnVbRmYb9 z_exEXUgOrs;xkqTxi#r<0@2G2X4^;7G#ru|Ri)HLsQX{bH=kLB<=LYBFzQ3&e^CSrZfNpC##BK8hXp)e!okD6hI0-);ex+7?<{c6pFQK?Fo5qkIOn3? z;^2et*T8?}bi6;G;svLl`}2%TjV&my`b0(sd{;GcG%>MtGPiT~VBwzy8!c?{{Dt!i z1$hA@I~#TbV>?3=c6S?lY!w_KcLDHdW8!Q8aksIybrNtFraLPk0G_e0Ip`o~MVzgK z>0T%(L!Q_=Em;E&2Hyt z#=*(Y&(HCIi-U`c4U}MW^00L_aA&i1y8FA4KkZ1EI2k!w*gIR;*+Q`G8W`HSI1AI! zVLST!=l3{G+%5jqldaP~(*hIZz<$EP$^L-je^<@f!u0=84g1OOYG?EM-JKA&F#%-@ zcN1$(2@4yrs$gg$+?-rOXWjglPyRK~-!;{oOdOxs*?@}9BLCW!e=7g`hyQEEvo2r! zt4lsk?tky{-#+=bn%F4_C^=ey-VCs7D8ebk@n7EkQ(lMzyTJdp;J@C<%k;_6H ze?>#&GRMw!AV^|3G7{p?-EmQq_zC2ad~hzt zezC~Sm*pmDAUE#iV8&pkR6IHeXM(P&nHl(J=6SL!)V1U6 z=AvdKB07Rp3E3wGlzpcG`r3A{Su@*`E?GmCq&;76N zeyY9_>tiImfA#N}uHCWE{k%TuWxO%v}Jq`fru3m-urdkw|wf&N>}NZnc-qYmY6@DN|pIl<`-oV%aV_xEH*p+iVB{?kIR1uLc+}M;6=cTP z57DT2E)&`0sl+05ZwIQQqXQjyLdC3J^g=O}fjx}cE^eGKH7SYVdk97JM+}4C+R00N$~@+`Qzg^m1@ga9g=I+=xo{8DBT8EDVnc=W}$p?unWa$ zM#n3qJjwJL0~l$CwChd(8TzN|U#T$7~Se zW0AL0w!^6{!PoD<@xH=1m#><;M!0ilTRpzojWOo=Cwl{@!{nEoy!=#hO*(lgPKgMEfOSQ(fP6RSBVxdAD6TnI*=e;a(2 z@P<;VkcT>{krKQk&KR-}^`Y@vZQh3-)n;5VS(V8y zv%ym(U3KJ1`NQSL9Z?gn(R~lxrhRIQUX*`ryD?p8*r#$DQNPuB-$#S#b2WAaYJK4{ zX965a(XO7Jz$xt^-~3PX=uEyQZ*MUGcnA%x?}dMwO(lIW=g zU1Nkiw%XM+bm_?$wDURJL39V$>;)EOtl{CGl=IEO^d`=7(_ zEH`QsTKJ_0s_uF7e+svE;IO+rJAd_NacBju~@V6>B$MEIeE?kfizQ# zR%Ndqa7mvj@^mAaO~}L$WKP4 zeiuj>@TVfUs;3wz{(+4x}R!ol@J+>=_lv*pYvewFmi!|d+M1*VN z>{{MmjbpdctkOZ$WWR{l_YK_bmpe5(J~@0`sNd|X9?!1Zvzfw0OmjqnTuSq+v8~UK z=5KvR8^&c)qTlSl`vspi$!GVb=aIvlNIAm!_2eQ^QSB6^Z4D9aNezG7M4hPiI79vP z&Wfn#R<-S9YZAXx+_8smm$i1)GD#PWpM|bdPxWvYN3*rxMGY+_p_4cK&BN2o8mA|I zwWhtPM#6hPpDcQ#jRJ~Hy5f?Jy!RI*tOjy=7O8IaaCy<@WiK{wG#wU;_#C`I)NYjd z9-`cw;2QeWh8Bo%|BpjOnod?#IWhwq}0>t{&3j$=^c?y&YE46WA)Gy<2?qWtzr0EvjS28|%jRcb!aol2$e!OqH} znwLOT+bXJdnim#!3XWsX=o3L4>3Dsw2eo!1Qa{$Xg~O+A@AA%S==;!vGaNfqs1ZWb z;B$!H>XV}N@GNe`kc?D___2>J-Ltf_0ICQj75==;>&>FvTx)!yUXADOYNB3AsEKx^ zY4HS5A%^(yRPBXZm`#ixty6}u>v-Hr6#6os&A7yxSWAkO7kT0Hd^*3A{oIZmVf*om z;X+$^7Nu2H4|`{-YB!_gC=)%+?Mi$VlX$EcMs(eZt;ef6D$~#mt}FeLwvC%l2L#vT zC6Y`rSt5HsrxhA%t;b~RU67_C_Z3^c*6Z3rM+Q@Epn;99C@sx8$L#!Q>MOFlt3wOo z4N?yKTMMq?$i%U!a~H2fbg?&d?^%%4pew+!_E;<%FVv~A)?6aTg7tsQloz8JtP(!f49=WstRmA7W6Y%_4cG_NMBISc2x_`{`utnd z%;WHjw_HoJw|OTE$-FJ?6B68$b`f^HLM+nfuCg_ATS(eDA&dJaqz}BGFj@#BhYB|u ztIZTOc31@oDXA zo2t|Fb~6%~c~SD3sOj+Nt~P|DX)nX0^mI9bm~p?L)K~rCnD7$Zc2SK{Sl9l`1=F#^ z$_1DzP_!_Tt~1lw$7nB*K~SNiTR&lL%Hy}cP-{9HjHWt})vmE7o6MDs4R+;#e`sn z3Ub3SV|GCi@lDv98u7-ZOvSzQx(-#n!QmTbK9({c zy5uy4wCYW*9mj3Go&htWyd?M~5hHRE$D>?6cb{9YZ`zj<$MVDpzwFEM3w7^ZA5Q;dtvT&So^S;%s>M!(Q(fCFGmebov(xih zJY7le)TAvL5o3dHTWnW2)F6uuB8k^QXYtcy^w^l+EDoqjo}?opG# z;iN0VhM}3}iI+kZem?=#G0o?x(RA^1l_3~Z1E*1I`}7H#&k1)JG4F{O-|rZ`A3e0m zjVKWoJs2|k$WT1T(R^fR+h+CoDDCuUsp!cr(k;!05F_BE?Y{SG#>}SIGEhXWZ{^u` zZ7I6DCxP=@jO4k9+*D85)^J)oTRtSpXfg*Wx<60mBm{H0ZB5C&c$duCQmg>hh#nPk zdf)otcCw5JB~xxzRze5s2TJIAIed+3{BAz(0%qFJZv4eNq0u=D1tn)wkH!%%rJOCj z4Lg2iIpMeHFyuxsI!Q6tlZ&kB}GgIa^s!w)QHeU8NW7X!(c_*&G;P>j^fG# zE3u+4AE%~HfigZa;YM&-Ay~P`1(%l)D>GM&{m|mrNaRwQSi675jXRYuId#M{QopVA z4WyEz`ucBWjYntpLY&!^1;{j`FM6i=pc4t;JFfY9_s+?%Y1cgT&x4Z=-6}3^KB-SU z7Vz9zesxZg8ks%EBo#(w(Q3bP#R3K^!VOb>C)RmwO=KxWb;4WJ7P9Xh`@}35LFOGg zIi#V_HiXh{OmfyY^YiMvM}0f5wil{7l{<29s&Ov)wX0IG$U}j`Eba=IqLiA?Wpiz|Q zP1TZ?8LpL*cCO-zUAaKpqvNEPo)34!uMws0k_5KV`b~7d8PQt^U9jI;^*rtqCEuA4 z*cSLf9-4izOh9Lj_H^$ZfA~q$GOZ^3*A?o4eAtK8k4ktyQegm@l{+Na|Y2?6J{*)3my<{QceFd?~zK({0%nWN49)| zR}S`wpza^T8~bD~d4_1D>E?xR|CqYsGyk4}=$CUvpdJ;^$~+ojIbmL(Uafht-YA(8R;`0Db?+IEQP;orJQd>#iRT~ zj|DagPvmY}%Y@mFAI^s6ZyWDu{RnzUS!5CMF?^GNzF4PjoQ6+>T^q(eUYOM}joN+L zl{2@wcB>ry=ABc|-Y2nbtJ05Cj_B(;t8ZP7nhc@+^ z@FI)0-d5~O1@;|tjX(e;{Q63vYT8r(th}8kbsHDYWN|{ zx4tM~)o3$gLk(8OmXl@8M^f#|VD<*}`3_CHFL7$3@pIV0%2W|4$rD~}NJHGXU?I$} zJkA;IKJztjjb?wVT-~`d1kC)?Q%I4&p<@2>XAc;CN=%Hg=V}$>vowWxs9tjlin zM!=&j+nZJ&Ynim|IbVyq(*oXo?+z|Ge7;F8USIk z0B&@bzQ^Maxa5D645A$RpDEJrn*PWPj;C2|S)4mwUxaiNpcZhJX1!l!7HA~`R1+71 zgcfeijr;>L`F|pn?zUyK8Y)O+f1p$6_@Tz!8z zpUK9vEbvbO=gg!#q1u{Avfl5k_~bq>deLX?hdCyp=l2K^I$cv;oS+RqmQXLzVmtNR z+~3Tq3)y0{r#QF-i4oE0vJvK+%}K2Yl@|rtWTKJxBs%g^(Bv!!Q5Ff-Q-2H zZvd63@5K2axaSg2A*y~l&5ym>>mf-Onp!Z$I&~y%sVDx)DY9p0NPiq=W#+N9DK+0O z#~%62NF=V>YQ$r!;xAD6Miqhp2D_EuMl~bnAf&HBWqd%R-kG^>VR2ohh4{u&kEqXm zugUsm`Ead6SDS2r0QP^{G|3RQ@?+Iog9;BUNQT_#s#7cU^qc`fkEJJ@>VP7C5+Ma! zRDoK7bil>ko=rgnERphujiT%pm8usf#c7>HTu*Ix;qWD=gGv1h&&1VH)XE{HSnP7_l<~mD^TLlP1inUP_PCZ+2Xue9F zBYm$c(Ro4&_L%iO9+X~dc2`{2*T9f0*WwW2Ljgif8~u9cy5|*kCi7$Kf zv0K}X7gF^kmp(P=S?PL5W?4_KTah9Eo>6PUH*Ct?t}nh`VCh?sJ=++{^XeVe;J2$y5I5T>BkXTORsHn;2_A zto<|4=nDes4-y{JKC=I@vucrgw7)$jJ{Rdc7EUd=x_!gG9(sadNb`}?Zo6R`cX?F! zJ%G^UYWMSmEuL=kuf({>t`3&a)5H1Oc5DTZPz^tX%i7Ga4Z=G2xu*H_#Sz4yC!wHG z{mk3pMc0Pr#IYo^W@_VA8_#S1C}&6n8P?$Phz&~3E-O6>kVMsKS9?}JFI4XtggxHh zGWDJ=H!^!&mzBk)QleA$%DOZ5{(TVZ?5-7tfAK)=8dMm}J?-5D0r=WjiGLEjgk3}A zcr%%=Sw&!C6ke&{8rWS^S{Cq_hFK&yMa z0>c~zY2^QXSYyQGP)NCYF`=a2*Q>0lj~x2Xs~+qn8nuN15H>!!KFv+fh1p!murINL zl65uH*4eO~o(PF=JkXxX+{i}%om<;ueZr%{3S--c^IY|=*F-v8VtDhNr?+sp2pyx* z1NCf2lYAQti)kDeqN#=WGKa;e*n0B@&9;+V_-R7O04?m_N3Gw%0q|8E9HD~?eyuXEBiPeBfYzT&R;M`9k@rsk-bMewms|UetIpZ`x50oYvt zKFQOQtdy(%Or)3O(%rXvYNZi1C^{|Zw|696v)@A&<~yRV3Ue?%Ia>r0e-JQtktqq? zVbju~C%Uai2cYse3O#pm6;;&$y!H;{P=B_Z2_T8YW8XoqUU~{)^`8YW)O<@2*_RYP z#NjH36lPu6c)H1FOymasZ>H+A_RHQ>;r{YD1ulcH6t1sEW#3-$P^08)l5Y*8W~`kW zR}G^PUWGMGFQnA#0l-$i-g$+k`52u%ypP*%&#PAHBT08p6>O(-F-mS8F?oC!hlvDO4^A0E`qa zG!07H9wzp}lN?5vuDj-W+Y^BNT;@MsTJ&cHEf=o<3HETk{orN#4hZO%IWlbR03y=} zK!a37`;&LX!bo-3QaxA?8;)>0cdwAu#;M<;JK(3Hmr}jptlK2N<#2}d$47;v^@dXY z`fnCL^JKgTcmh3PovQ+mY{p3z)iDKXg*_fSX$IfkCc4xM8GJoohb+;nXHpX0jhS#a z!msQWz4S&KvgV%=c1x$$7TSoJIz-#dz|f;%HyES`Uv9QX-px4@ST|}7y|s0;%`vKb zNS*zne3r{|=jJVb$E>l`s3^m*8Qn3pLiOO1k-?&|Se05^>dJ{~D+-IL#yZVK+TX|H z>zy*|F|K^&kFNn)$TT^_qE=u$Rr;d5zwzzaa6h?i(DbFYXG$sQ^X(dYvgf*0s26LY zcXxNHH&zQv%LR=+6SjVl;LY5)gsO(zGp85^cYcx}dkD?!vPBJ72ZiDT0~m`wZdXG_ccPJLzM5cB}~6}>Nq z^%g9L3MyPttcKWJU8GIM%8fr?6AA@7 zy%wORT7#zS9)!3Jsc9rP$IuBgw>Ai|Vo8rn5alZKXUr;D@0Zx)YTt*^%gf3}f!Vv4 z5_=>fU$#3Nhen8nT?n39!0pe);9Ksiv7Se)LX!+!;3hO6=45ouuq< z$veDutx{##+1ZH$gM}J=%L68jdJfcAk|M6uK}aLT`ZQow+M>XjH5-_yb5d~gJvrK^ zS4wR(g>73iK_Qukze7jT_iw~9pML1J5INbKbI!fZV_D^)-+Zz%qcm2hcfpZ*q8iy< z-FujnSfbo04#B^0&FR;uCe1;48%->rqclu=l1%EiyfEt~TRPsGl8d{5Ws3vMN>>cC zYOjDgKuCK8h#mmIoRP;e#cf!m==br2kozBQH0uMV!6vn=+y=qh*KybHsC<-0TU4*4 z>40UWFSCK)+Ookt+L{$N4YHGkn;tG{tjI z;(7$UBJnTVVOs2PLK`&N@hx>Y9oz~MxX~vgaB~mfv9V1)8@wbBY!K*+w}jlw#)`J!X_1Q70$5FI=MbVAU3lC1&84rEaUt#5*9lP1@9kyc{8Xx8Au`Ar*7r>s-=&JLx1Kk4I|UZQcPLj_&y1-?Xvc2J@yC}dw^HxiPR+2YINU}?<(}`Gx2__ z)(Z8xkZ=n#Bm7&Tj9vXjac|Y3(h0WZMlCNdALF>txzASb8W%y@&g`#4K)$Q)P*$1j zbotfX?*s)>3*3@`$Qw)EA1}|#rn>_K{hgNH)*03hA>GE)!8d9mn9IR4>wO%QT%h{w zkF~_X^}{jK0(62D)l}8Eo5uVM>AJK0Otl6uB~NW`G2g`Q znwayYmai@f+35Aj`#K{TbKGQw+3(wLN)lbm6lT+JnjkMX{2tt=_q_8rzSf0TZm&B) z9088IbS#USqh`oJTLpH&=J-huEuz4A7Ir*D)yf53qtAeSiXr(e2F-YKajcOgx(%{G zrDXxL>WeYCi+2J%I2$M!aqx*swcYeo+I7TlXYM_LKLCx}*TyQdWuh5WK#cbdG->lIWRZPcU<1M4sebOqvb{?t|tEo)dVaZlu7aIeQUuDSL86cSU$dJQ-r_-6=~Jyh(W{s?)4`{wLdmmU||hWF}B z8N$KGUR9CJE_P6(>uZxUl=~)Q0(E6tl68%W_Pths%WEDi)z@Fn=q+EI`3$!074m$> zetpj9hueH{Ak=PvLoZ7zLcaLcH(swBSU5^lw;N}P?Touzz}Lq-1eoqDrzJR-?~!}m zdOb2_s1d6eu98X1PO+;M#)OaVPq@O&){Z{#oiOeyYzIFIT5;Ylgg{^?x7sY)3UL zZ!AlHx=mwGQo%|2%mep-aEbKZTU<^>lB<23!48)4)ql>ne*(ys3hgk>{P9;yzzHQ- zm4#e7qn=2GEqZ^TbAJn*!S>o|-~0H)R1pMZ3=+S(o0MWz7i4s+AG@+1s-mrRIJ7BF zlGf+n^{beC3#Fak`xsDxKD6t%nIi&%{?infPj93O_B5P^Emsj5)hlu+4>C4lkP0_# z7CKxaE>S?}{AUyF{Gx`B^`pW9-pWo>OvipexIX;^IC=q}N0{4ojdy@5*cwz-y5MpR z8pLbT8I!(cTb_VJCt9|`pi!cFEYjEHreOD zN-nh;H~zkMx&)Ph)>E1HBSS_=jb!K!jpAxN1H#f(yX`_p1zJowQ4y51Q`%>ZuvUW^B zDoLtlN%Aq&~Q5E>y{D(BV`GAP-@T^*)On~5l?8pA>g{@|ye_VuD zw=Yb1>kgnjL0*hPCDAP|i4;4wf$IlE9M~{nzlP$tH6El6CAD>|)HG}~X#-a^H^dQS zF(p}z7M3?og>)-6Am_>!;r8o)b-4@LErr??|dZz0%~{FI4L<_%{A+hf5t$hAx0}nksS7P z(b>}PxNVr?RMU0XB1NoE5Hbj@xJ=ITi|Y7~&o1HL% z_F{BgsZ!h>TBSI%^%WKqxlyBWozyAdSa5fICtmAD%>uJ34cL~-qUvKgMj$F%Yq?#X zA>$+Q^;T}M92BC~3vGsrwb>9ZyiHf#hSQV7?@iGrCC@yM%Qs#nepJ)6u$%bwY;`by zZcM?B%&Owt)82X^^pA%MzzD^Iy?yJGlDQ-y&iXv>`NN;E-J0#UyA2CB@pJO#4>YohLbZVDNRxJ>6O^IFu?mfE|;e|HcD;&oXOmpe}5{CFeS=% ziN5GKJI}lwJ>x`<3|r|erFHf?3fwp8r}+*%o}`z(O}ju|My!-R5;qBZY-KHJssWxQ z0@yO`Dts0E{U(rP${f5umR$>*Wof?0c!o zsK45BopHsOLLtq2E2xfF&*A%Zcn+&R>Z5K342r(_ofWe?^-*U(W2-I0#`J5)mve26 zeET}X38jmH*(OsdJ*J14=@OY*{oImjlhFu|3a=3Z?s7@S%I>|H?l%L@f^GfDDNPz8 zHeaqG4-QW~hI=`>`oj&{R~#h{_R#O93RJR#Z&?}m(XdkIc^&OJC~>Z>9K}(SCpl2o zPZAUN@KUE4^s;Oh*&%9*%~CSC6D8Z;o6}I2<^{M1$e=ljZW&#Zr$I~N__q^Cc!uiE zTi!_Imi)@0S89bG5bC~14m(*6SClRnQRaeo#=}MBi=uR;MJW@maxY=XL^?@9PXe>N2ku>Z*&O>WmTO(p8oA#-6P7FY* zq&|2u9f)kp*sVT|vYX6Tefg)A55#O>VaDiC$w}Y&_N&Y`qP#tV7O5~VOwR4n(q6s6 zxlyHak-#mL26>kB`c2+bV|ZG_g7#D4TLeteuz{et+_gJ~Qd!3NkI~hS$`CCAG@I=+ zWGYn&8_2w=q~Z30mtWq8t`k-j+}T(P(|V(GoYI>xwD+aE#tIUz`5-sIm-__oq88cG zodW;$Ufa#N*JI155eSlb`6096iek~!aZrCKGl4Cv7O^kGc zg-La@N)KMSaQV~ys?JT$V3AnOTT!pzuWD$ONLBQ>{s}>C@C0r>rOiWG8Ol|~^5}I% zmswz#N2Wd5H6N9&&$}O!D%$}YMB^_k_-QudCB# zAisR3_zJL&HLn?()#GSJJSr}UQq7c{0ezm1i)RT*yY&9Vyg)f8<_J|&qEdG>rexg9 z)}(FM@Wgh#zfZoSx%u=-o!S-n89q#U7q8D(*UHnx>Cm8eAnVk}t!s~i;rn}*@1alq zsWzVJzzix0uIW<_Dv2D8%&Fv>6773;hUQf;S&DwkH(Fxn@);k@W1$E z%pU?SDE3q6QT0B$bXhe^qMQymVTOrO^z)m(ZsWp1**)JrT0Jkm$1K?Ey`WSjcAfP_ z`$_#rpFS0;&NCvKG#jtnQTP7yyojqpt`7y?`AAx9s}x<1C=7SBh z!-kmJr@H%0q`%`>0*ONxh3X_;E87yQ`*9p0>_W0++}L?}JlRs0K~yTS7kZTggd6e! zITU5#f%0M0?+El4JvKByK16qXJ4YKsYt|dzs_}4B z?fUSYh-|Si4AZ)>z4B9^{o=KW>Na9x$&(l5PYcvaNY%tMSXTC0w5pM$_e}RA4e+s+ zwCRH30tl=sdLBN9*6+?Xe97~vIS-6T`4>r^g@RV1g}#q><;8dTgE5o+{Mv!=pl&IY zrojb5^6sD~PV#2~CzjSU*K z2bB78o4*HBU@GyG!MgdkUs@Y0*DX+IrcI2l`^5^>*>@H#cp#6Qezud`z4jBMl@X6- zLGQh?6`4Uh^E-DUsQo35%f5TDsK149PKllyr1dwyI!eZNA!x?2rOTx_A?@S4?^|gn z>Tx%1p9a&=Tc zDwjBqyaZq@ zIXP9Ovkk)TvougPkT0Wuk+1g@;Dx(|#cI$W{Omk40JiSkZ1{~jgTZXlffpQX3c`Pf z4*~ar0?r$`{cTkbfFyI-+4+orho1#NxQLf)XX%gF3AKcP7mZa9cmL+c{C}`0*XFV_ z&NlG9nm;!Crh1uQZyhiLi+lW!aPc;=2x4!s5)ccB>3I;I+~zj<@Lb$&ZS+>YssqjW zS@l=iy$*<-=Tv`0;1>sgDW~5R|J~mSu;HyX1F8;xcH(n0fGPcGYyOIa!+p?6t%B0` zKbwbpip5KPMuY$CcS|wYnF(Iu>wg972!Njl7=!zNH?tN`$X?JkIW_q1t5?YvYHTN2 zfUhc27z~1tSipp&R*NudPyrf@nCcM(Tr}$J7_hfKPuh+PM2kvnAp#6n%$CsHzQ%js z@fHZP$l0_8RZ}Q=EZyVoRzGlC*V&&9;lLu4kplEf;yC^f2<(yk@)1ZT#0wC{@ab%v%xjF!e%V=pOd5HQPkT@^_K!~+yS4qT@ZZhHyBp^PU$9SDs3t6&ufKi#jD+%#E3L%rT|9_7KE7P9az zBEG8F^~r{02x>9eju(l&v;|PK^4iIlQ`3Nr*#b%P$zsm};8^Fc(gx%No6`E7#xOlo z>5OBuvh_;?N&coIfI1DPsr5ZRSUhH{ouJ!Z>Sa{k!SCQb?wDA`~T8l5+1@YXQEP(^KY zXX|ipbnhDYg*?s5g=_+O!psJE>brqZY5MMw7^A3O0GcQ~h`AoPs zTJhi}^`v^EyTitisU`={!CYwIU~GMJYAzrm%}})M!C;TZYvF}Ch@p7>dTMt-42WY7 z7&(O?*4%8~Nymkj$~@3I?8Xx$qT;?79;W{I@$2Pqw@z#Q4WAcJar`H)zYH~8KX7vW zqwye?z!+uLSTLOt1z4pP(Ev1D9kO@qkIM7UyAI6lc+SU{e--CCP@Ib;qGo?}UWPgl zU(4jTum2J}bwG0_G@PXT%T#IseU@iKdHFBZG+%;4G6C21gJaFy`FrWpj~_n<=AMoX z=v)g2IF^h!&m6I7wfednjy1|+?I5+1I58~r&p2K+fWc2rHVyub1}yo8OW!={|7en*rNad literal 48473 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 diff --git a/docs/manage/software/control-logic.md b/docs/manage/software/control-logic.md index 3dfe21f33e..4c9f2620ac 100644 --- a/docs/manage/software/control-logic.md +++ b/docs/manage/software/control-logic.md @@ -63,7 +63,7 @@ When your new model gets added to your machine, its `reconfigure()` method gets If you want your control logic to run in a loop in the background, you can start this loop here. Be sure to also implement logic to handle subsequent calls to the reconfigure method gracefully. -For example, in Python, start your logic in the `reconfigure()` method of src/main.py: +For example, in Python, start your logic in the `reconfigure()` method of src/models/control_logic.py: ```python {class="line-numbers linkable-line-numbers" data-line="20-28"} # Add these imports @@ -158,12 +158,10 @@ For complete examples that implement control logic, see: Once you have implemented your control logic, commit and push your changes to a GitHub repository. -If you are not using GitHub, see [Upload your module](/operate/get-started/other-hardware/#upload-your-module) and [Update an existing module](/operate/get-started/other-hardware/manage-modules/#update-automatically) for more information on alternatives. - Follow the steps in [Upload your module](/operate/get-started/other-hardware/#upload-your-module) using cloud build. +When you create a release, your module will be built, packaged and pushed to the Viam Registry. -Then [create a new release](https://docs.github.com/en/repositories/releasing-projects-on-github) with a tag of the form `1.0.0`. -Your module will now be built, packaged and pushed to the Viam Registry. +If you are not using GitHub or cloud build, see [Upload your module](/operate/get-started/other-hardware/#upload-your-module) and [Update an existing module](/operate/get-started/other-hardware/manage-modules/#update-automatically) for more information on alternatives. ## Deploy your control logic @@ -177,3 +175,41 @@ Your module will now be built, packaged and pushed to the Viam Registry. 1. Click **Save**. Your control logic will now be added to your machine. + +## Start and stop your control logic with Viam SDKs + +You can start and stop your control logic with the Viam SDKs by calling `DoCommand()`. + +For example, in Python, you can start and stop your control logic with the following code: + +```python +# Start your control logic +await control_logic.do_command({"start": ""}) + +# Stop your control logic +await control_logic.do_command({"stop": ""}) +``` + +## Start and stop your control logic with the Viam app + +You can start and stop your control logic from your machine's **CONTROL** tab in the Viam app: + +{{}}
+ +1. To start your control logic, copy and paste the following command input: + + ```json {class="line-numbers linkable-line-numbers"} + { + "start": "" + } + ``` + + To stop your control logic, use the following command input: + + ```json {class="line-numbers linkable-line-numbers"} + { + "stop": "" + } + ``` + +2. Click **Execute** to call `DoCommand()` on your machine. diff --git a/docs/operate/reference/components/generic/_index.md b/docs/operate/reference/components/generic/_index.md index ff0f4d9e21..9c9f5c8737 100644 --- a/docs/operate/reference/components/generic/_index.md +++ b/docs/operate/reference/components/generic/_index.md @@ -39,6 +39,12 @@ If you want to use most of an existing API but need just a few other functions, {{% /alert %}} +{{% alert title="Example usage" color="tip" %}} + +See [Deploy control logic](/manage/software/control-logic/) for an example of how to use the generic component API, including how to call `DoCommand()` from the Viam SDKs or from the Viam app. + +{{% /alert %}} + ## Configuration To use a generic component, check whether one of the following models supports it. diff --git a/static/include/components/test-control/generic-control.md b/static/include/components/test-control/generic-control.md index 8fcdb797dc..bcac65243a 100644 --- a/static/include/components/test-control/generic-control.md +++ b/static/include/components/test-control/generic-control.md @@ -1,6 +1,8 @@ ## Test the generic component -After you configure your generic component, open the generic's **TEST** panel on the **CONFIGURE** or [**CONTROL**](/manage/troubleshoot/teleoperate/default-interface/#viam-app) tabs. +After you configure your generic component, open the generic's panel on the [**CONTROL**](/manage/troubleshoot/teleoperate/default-interface/#viam-app) tab. Use the card to send arbitrary commands to the resource with [`DoCommand()`](/dev/reference/apis/components/generic/#docommand). -{{}} \ No newline at end of file +{{}} + +The example above works for interacting with the generic component model shown in [Deploy control logic](/manage/software/control-logic/), but other components require different commands depending on how `DoCommand()` is implemented.