From 322c14db1a4ee019e439b9f0586a6f4b7a043eaa Mon Sep 17 00:00:00 2001 From: xiaowusky Date: Wed, 27 Dec 2023 16:27:32 +0800 Subject: [PATCH] =?UTF-8?q?desc:=E5=A2=9E=E5=8A=A0=E8=81=94=E5=8A=A8?= =?UTF-8?q?=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 6 ++ .../safetywatcher/watcher/ui/HomeActivity.kt | 12 ++- .../watcher/ui/LinkSettingActivity.kt | 63 ++++++++++++++++ .../watcher/ui/SettingActivity.kt | 6 ++ .../safetywatcher/watcher/utils/LztekUtil.kt | 49 +++++++++++- app/src/main/res/layout/activity_home.xml | 71 ++++++++++++------ .../main/res/layout/activity_link_setting.xml | 42 +++++++++++ app/src/main/res/layout/activity_setting.xml | 28 +++++++ app/src/main/res/mipmap-hdpi/ic_link.png | Bin 0 -> 6157 bytes app/src/main/res/values/dimens.xml | 1 + app/src/main/res/values/strings.xml | 4 + 11 files changed, 256 insertions(+), 26 deletions(-) create mode 100644 app/src/main/java/com/yinuo/safetywatcher/watcher/ui/LinkSettingActivity.kt create mode 100644 app/src/main/res/layout/activity_link_setting.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_link.png diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f0ca2c5..da55d0e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,11 +44,17 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> + + pumpSwitch.setOnCheckedChangeListener { _, isChecked -> if (isChecked) onPumpOpen() else onPumpClose() } + itemLink.setOnClickListener { + linkSwitch.performClick() + } + linkSwitch.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) LztekUtil.openLinkSwitch() else LztekUtil.closeLinkSwitch() + } + itemSetting.postDelayed(500) { itemSetting.requestFocus() } @@ -254,8 +262,10 @@ class HomeActivity : NoOptionsActivity() { if (builder.toString().isNotEmpty()) { mBinding.tvWarn.text = builder.toString() mBinding.tvWarn.visibility = View.VISIBLE + LztekUtil.openLinkI0() } else { mBinding.tvWarn.visibility = View.GONE + LztekUtil.closeLinkIO() } } } diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/LinkSettingActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/LinkSettingActivity.kt new file mode 100644 index 0000000..8f5acd9 --- /dev/null +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/LinkSettingActivity.kt @@ -0,0 +1,63 @@ +package com.yinuo.safetywatcher.watcher.ui + +import android.view.KeyEvent +import android.view.View +import com.yinuo.safetywatcher.databinding.ActivityLinkSettingBinding +import com.yinuo.safetywatcher.watcher.base.NoOptionsActivity +import com.yinuo.safetywatcher.watcher.utils.LztekUtil +import com.yinuo.safetywatcher.watcher.utils.showIme +import com.yinuo.safetywatcher.watcher.utils.showToast + +class LinkSettingActivity : NoOptionsActivity() { + + private val mBinding by lazy { + ActivityLinkSettingBinding.inflate(layoutInflater) + } + + override fun generateContentView(): View { + return mBinding.root + } + + override fun initView() { + mBinding.linkDelay.setText(LztekUtil.getLinkDelay().toString()) + setListener() + } + + private fun setListener() { + mBinding.linkDelay.setOnKeyListener { _, keyCode, event -> + if (keyCode == KeyEvent.KEYCODE_DPAD_UP) { + if (event.action == KeyEvent.ACTION_DOWN) { + tryFocusBackArea() + return@setOnKeyListener true + } + } else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) { + if (event.action == KeyEvent.ACTION_DOWN) { + mBinding.tvSave.requestFocus() + return@setOnKeyListener true + } + } else if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER || keyCode == KeyEvent.KEYCODE_ENTER) { + if (event.action == KeyEvent.ACTION_DOWN) { + mBinding.linkDelay.showIme() + return@setOnKeyListener true + } + } + return@setOnKeyListener false + } + + mBinding.tvSave.setOnClickListener { + saveData() + } + } + + private fun saveData() { + val toString = mBinding.linkDelay.text.toString() + if (toString.isEmpty()) { + showToast("请输入具体数值!") + return + } + val toInt = toString.toInt() + LztekUtil.setLinkDelay(toInt) + showToast("保存成功") + finish() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/SettingActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/SettingActivity.kt index 7115ec1..41762b3 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/SettingActivity.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/SettingActivity.kt @@ -8,6 +8,7 @@ import com.yinuo.safetywatcher.R import com.yinuo.safetywatcher.databinding.ActivitySettingBinding import com.yinuo.safetywatcher.watcher.base.NoOptionsActivity import com.yinuo.safetywatcher.watcher.ui.view.ConfirmDialog +import com.yinuo.safetywatcher.watcher.utils.LztekUtil import com.yinuo.safetywatcher.watcher.utils.SpeedUtils class SettingActivity : NoOptionsActivity() { @@ -55,12 +56,17 @@ class SettingActivity : NoOptionsActivity() { startActivity(Intent(this@SettingActivity, SpeedSettingActivity::class.java)) } itemSpeed.visibility = if (speed == 0) View.GONE else View.VISIBLE + itemLink.setOnClickListener { + startActivity(Intent(this@SettingActivity, LinkSettingActivity::class.java)) + } + itemLink.visibility = if (!LztekUtil.isLinkSwitchOpen()) View.GONE else View.VISIBLE itemCloud.setOnClickListener { startActivity(Intent(this@SettingActivity, CloudActivity::class.java)) } itemNet.setOnClickListener { startActivity(Intent(this@SettingActivity, NetSettingActivity::class.java)) } + itemRecovery.setOnClickListener { resetFactoryDialog.show(supportFragmentManager, "resetDialog") } diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/LztekUtil.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/LztekUtil.kt index 33fd227..f15aded 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/LztekUtil.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/LztekUtil.kt @@ -1,13 +1,16 @@ package com.yinuo.safetywatcher.watcher.utils import android.os.Environment -import android.os.StatFs import com.common.commonlib.CommonApplication -import com.common.commonlib.utils.NVME_KEYWORDS +import com.common.commonlib.utils.MMKVUtils import com.common.commonlib.utils.StorageUtils import com.lztek.toolkit.Lztek import com.yinuo.safetywatcher.watcher.constant.STORAGE_WARN_THRESHOLD import com.yinuo.safetywatcher.watcher.constant.STORAGE_WARN_THRESHOLD_NVME +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch import org.easydarwin.PushHelper object LztekUtil { @@ -84,4 +87,46 @@ object LztekUtil { } return false } + + var linkOpen = false + var mLinkDelay = 5 + + fun openLinkSwitch() { + linkOpen = true + } + + fun closeLinkSwitch() { + closeLinkIO() + linkOpen = false + } + + fun isLinkSwitchOpen(): Boolean { + return linkOpen + } + + fun openLinkI0() { + if (isLinkSwitchOpen()) { + GlobalScope.launch(Dispatchers.IO) { + delay(mLinkDelay * 1000L) + GPIOUtils.setGpioValue(11, 1) + } + } + } + + fun closeLinkIO() { + if (isLinkSwitchOpen()) { + GPIOUtils.setGpioValue(11, 0) + } + } + + fun getLinkDelay(): Int { + val localValue = MMKVUtils.getInt("link_delay") + mLinkDelay = if (localValue > 0) localValue else 5 + return mLinkDelay + } + + fun setLinkDelay(delay: Int) { + mLinkDelay = delay + MMKVUtils.put("link_delay", delay) + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml index 159f2a0..2fbbdc4 100644 --- a/app/src/main/res/layout/activity_home.xml +++ b/app/src/main/res/layout/activity_home.xml @@ -7,43 +7,43 @@ android:id="@+id/surface" android:layout_width="@dimen/_1920dp" android:layout_height="@dimen/_1080dp" - android:layout_alignParentBottom="true"/> + android:layout_alignParentBottom="true" /> + android:scaleType="centerCrop" + android:src="@drawable/ic_icon" /> + android:layout_marginStart="@dimen/_12dp" + android:layout_marginTop="@dimen/_132dp" /> + android:paddingTop="@dimen/_50dp"> + android:layout_marginStart="@dimen/_13dp" + android:checked="false" /> + android:layout_marginStart="@dimen/_13dp" + android:checked="false" /> + + + + + + + @@ -183,13 +208,13 @@ android:id="@+id/tv_warn" android:layout_width="@dimen/_536dp" android:layout_height="wrap_content" - android:padding="@dimen/_12dp" + android:layout_centerHorizontal="true" + android:layout_marginTop="220px" + android:background="@drawable/sensor_init_btn_bg" android:gravity="center" android:minHeight="@dimen/_100dp" - android:layout_marginTop="220px" - android:layout_centerHorizontal="true" - android:textSize="@dimen/_30dp" - android:visibility="gone" + android:padding="@dimen/_12dp" android:textColor="@color/white" - android:background="@drawable/sensor_init_btn_bg"/> + android:textSize="@dimen/_30dp" + android:visibility="gone" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_link_setting.xml b/app/src/main/res/layout/activity_link_setting.xml new file mode 100644 index 0000000..00f5de0 --- /dev/null +++ b/app/src/main/res/layout/activity_link_setting.xml @@ -0,0 +1,42 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index cbd4453..70f1268 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -201,6 +201,34 @@ android:textSize="@dimen/_36dp" /> + + + + + + + + + !W51+H3X_Zp7{;{!XHq^26ngHH{93;)J-DWOiSbO5D_MI5KHh^Zqel(`p@1U)zA%N!5{$qNEeAr6-(au5d;td6N!+;On|51r~@b>5e z#1h%b_NDI~Z)p5)kx=j>@%a!urt$WRd(e6C=^o=l&HNFNX5IVQHJGc=I7-msOlS- zl)_2<%aIC|`-rUfbSohAF07~;!v=l~CFZmAw$ay(5iy3z<-uxH3BZ+T&`_m@kT&b~ zMeZOGhu6BLgzPq1=Ox7I5sgv|iSoybTA1<%Q^y?#!1U(mgw0e~yib8YVajatvB92N zt`6{eNF@nCdS>L2oQywul;6md`WPX0``9X!6W`5GrV*zZvPO!j^ zymRRi53Ab@+Yt5uReTK-5=fEq+skG8oK3xVdu#*juhjxq(xB$Qvdg9(oB-Oh{{MDI zFlMdczimZ8v3IglcP%Qu{;?aOk&w=DBh7<&UdY zc%c<-gR3}lB|Jofx?KO?1;KzK?f+e%@W_q8-a@rcRogiaI9|RAz?C$q`2wwG8lbIF zS?^n|L@{TU#EDLNCi50C{==~U_+uzjFrkn*S=b-Qiip|mQLt=%Q2qRtwK|nqyXaN) zgBR@c8gkrB_Qq+7y86yd?<&amnF4y2o}u-OuFhBcOQZB>k1T^UiKw6 zeCWkQ4di^Bl_!8pWC~`U`ryHoU!0=JpD2za1sg_8D`Q8V=%imw{q$l7BS%M*55?E) ztKY~M5L>xkEvIL#^{-Dn3;NA!!b5n-`2-z(Lstr8pOK>_+*#}mDZ%U1yr9(F|Kc4o zh+6&S;Q&M~eO(BGjn6jazu`$Fy^RYndXfD|YG;u4DP~RueA`ygs=od@j9;wWY<1(d zJ3o}Zz8uZW{M+f>0pdy!516eZ&(D5A`(H&Dy%jq|;p!clh4H%uqyE+sWfT2HZwuoZ z8fodkP5U`mSuWX zeNs0tYcFkH4?g7Be>mj<{O+xHwj7zQ$CMu*&sD9+O}|e*MhSda3jkcK*CrJH#s#yX zH?-=d2WFpAWC9Lam|9yhK?K#cQ!({dO&#CWO@n?fYe%B~`d(;ts88e9VnJg;ao(=l&Ys(c@s&275Z}^-=M1|8DpAX;koOVh@@tMeANY~pxFZM-R#BgdonGr zSAGit)&8~}1(o4Oc<>_LIjLv6$c}1+K0LRPfbH7`xGW|isG!zJk6kk7o_^5Tx@-L` z23HA2f6p|Bjj=dk#s362_h2lahTADVG$5ECl%{4~MtHyAnm6q=*sxik^OGdC78PTV z!)=$=b^D{)UkBX9wi1us)^C~8{NGh;_Kxs(o@mygs1AeK7Htk{r3%f7&g&fW!bQ;I z`Tb+M)Ha;*>4mq*wKD6me(4!;^?^y}T%shT_k5MNi5P`8Nv@W$2+a0)-@KvVe8*uJ znLQ$odrUcN%MUqD-MG4ueaDUJzS-qRfWn^$_YA^irbK}rdW(#Blk1jOPUH(v`;5IE ztC3%&%&$6u0pG<+^}~ICM2r@0ZtVH^jcuZY*-LRWd`~L>st(hDSc-)OxKgt*b2#$3 zyQv~z^P%f$<_`s5zbvR3qsF%w;=zt4#NcUIR?R?p)D^3UuZ-a{3!F`}i4jto$IXANAB zW_G2@Dp{ekY$FA7Fn46)OzCH`JpuO$ccYU(IcrA{Nu_1^ZRm?8z* zh`W@W%1*)-#XbO3Qa1-(pu3qii*`K~qsc%X?Iiy5d!X&E#tVXb_+iN7Hv6(bP@BjN zHOHFkgCRVGO;u{cs3>6rf^^3z>WL$FED=>-ljUO?wMnaiK3#l?q%W4eo|H`4-f5;( zJ4HPhkEQ=EMev4P4K7xcxv}O$u+n5iFF1?1C$0{()YC|I*mAOn5%IXhek4ZA)y>Hp zp2CD54YftX4c=lllT8dr(oE7%5;m$rCJn#{`2d#7E0%&4n@))Pk&6WDLn&Y?8D`FI zO#x?l?A=knboD6A^Fb~BvMm8?G(a8`%1Vf4#ofG=w?T3W1B*A^j@)(p@Z`@)AU$pg z4F$n-btK1-b|KttCc7H4hUV~8#Y}-@sY^cEFTg6AT>`&UkD*9(Ox6UHr}ubmI-^-8 z9-Q)6TP4`KQg`(4Yfivj^CC!HDJGIo#{VLv>`~9$a7u%Xh{5WFOYfX>2=`pUel0fO zHLC7o{+sW)=VExBThhfLD9KvN&#Gsx(dNW&s>~4l$fdYm1viTb4;B14Q|Qe(Bl$F_ zsojTWQ&UjM)?svv0F`)uegEnG(N@p9f`G~5roA~V6;>*rVwxe->EgzpbE?fZ=BbRwlwIQJnr^-!kIC8CE8y#L zJ7GY&!-{GGByr+e?f0^M)~yBolt~=}vr2C5w5!s5sWZuWW~zMoM43z2Kgx4erV))d z51aWQJ7`1;9HbyPSblVxD&!)I4NQ=AND9_2GynJNAeCti=Ja!B+S8H^{O7u$%!WGe zHA+#z_epppz%{G9SdVV_aMW$(-nCgC(lp3P)&JEKK`h3ZUHWpz00Tk|tpiT_vK4E#9&7H4h zh+E9UMA^N^w>y|D%_*0-?!e;sd{Xckk{Fxzf2juk-8B5jcRR~esh|NzVC$kAcdd22 z%wbhsXLnB@;3{%uppVW4f(s6zUPr17SpeWvH?FYy23Gr{R~_(r$10gXQHqyg`}k18bXx<6ymHRC@|Rbfgw5BtTPJ|R zh?%)|NJ*c#8(&w?8^GuIyJ`vq?>bFy7gecuw|sB_>p6jm@&?Pu)p6sjjq~=r5Xneo zr#8)!=?1__v&3}>7RS4og!z@!leKZ|i^&`3>^%F&WRDS^R%LEQoi zwFtSu3VP7jiotL-a{c0Y!+*y>-kL~!JA^MN#eV7jO4&m<>-YF+iPNvn9yoEdDd-bo z9!*M12z9*z%Hs+zRcyl~C6H*VaBOiQyaANjf4d;CkzwX-ds@9x;iPwY#v&LvI1^6v z2Ag#^>bH`y1&4>#o-0XE5qNJxW#Uh1>r-2QfT&Foo{*Yz;7WR9_Rxa=b_7yWKl3j4Crj97%2;*Jcny)8rbJD;}PI)2|^ZHV*NkD(ra*BO);@~nCs8w-` zi61R=W52h0YCjAk<(Tq7sK0h>Vdaec&S4keHB(1rnw2+r%UKz0yEoDVIWWj2+Xy{% zWU~1U%{Sz&ILRw`7b)D%@za$|#^xM8|0aSA6!@rpK+fApg2I<Z4k*YL<&??CRlg!v-HHOVjHa*h?7A^No=d*{m#(faNYLEB6wsHjr@ zSzc&U3b8kMwJEJ-8?cpQ4sre$1uNoBT$H2Ph`PUOIO{_GGWKpeBeWfe>0jEuV6?b@z=8&(3 zFxMu%NxJtEUJmuOw1534@1Pu(NxF@e+T!i2t;8Rle-eVvQEG~%9p;P!7Z9ebSiVI) zOw_GRtML&^_WAwu6t=6D+dLY(Q*yr}mKSab?QQyv#`Ts1!4JRREK+rb@cj}~QG6A7 zFjfD2_N+OusxNh!_so@tq>?&$?HD$!9B!Qa!%Q(=Chvzw*^fYuxMjNz#h8YQO?zR6 zi>-nW5*1OePlQI&xFn?^DBlNigGXPx?0?4=)i=VCI1>8H-Zyp~4CKj)ts(Hc!@Gi7 z5I(`LGD}ccWD(aq?!TuEV*FeSHpz*7!Y6VFvHEPCdX$6Q1Zece>YmG^UB076H6HXX zdAe#5`*hgD03^q{quvt_8$fvLhdt zbOc4ZLgtr(a!)qh5%f7=R7-vfr*v6xt=uja0r6-2F{ZD6*z2>LW8RvIT}^pLTny=7 z=Vlk%*aURt?B~$@KIafR^7hNBE8DRWY)DDjs>xS;6|`qC|K=5jg@d@D2);V)@x_7- zzDR#L>>QtVxcV?DSTL~U= ziFoxS0b0wZEt=60Cb%ybcyeY)kmIM6>xvJy=ItVw?GQg?Y4ur2PtRbCOE@|1uv95S z;l4+-Vmw4`<~95Kb`w)Vv$G&hk&PEhd3xqRMZq8w2(?_z^bt3^b-#z`VRamL-!Mxq zyV}AFZ1~(aXl&1UhAab30foc4H*+39@4?fvru|+f4g)!Sk)@wla$W=xrc(r1CZ|$u zT3K*6V6;(1LN0?%(>HZT3^B0oDeJARlBhbGmRGVTuV-+sP8jFgB=XS;kL3F%(g|+6 z0oaVe^0|1RlnB;;0|r-0FS|N)>GX*>m+{Ag39(Y)s|hUgIUr99Zh`S_blgC?p)*PC zlbe}z-eeIk9KYy<&{2?xo>Kn7gv@tR)Po|i)N3!VN|(9M6icZ~6Gv{5!EErXx#l6P zUX`L8KTV0WqAk)H!nYb}&&dP*6Nu0mp}WsKJs`;yk*C)lGc=daT&%g_U2P+OQ;gBi z37p1z+PgK0!&6)Jw~asMY7=OZlymiKYsO^wpJmVDoBnKO%kQ05LX^PH*IQ|3yT7y6 z$p?2v|2>hyj{Wh0D3KHzIvzWS8;f7GGU)2g(X;;L4Lp{S0J26-IOVkzK0NaCjJQ>F zs?i=>bos5Wyh6@jF^T5sMyQYK-vG;`GrrN1JztoTa6R(G$(2%N0{f+gt)AI`ch_(R zs#0fGHxshTQim*P3)o?Co5|caI#D~v`MP1 ze2Id6c^@vlylPE}ekbY{!>XqecGCkqPeXsmF7YrDH_MJGP&!c}lm6$kMUR!dmu_kI zwK?U@i*PIa_o{_62pwKz$lROZmWfs{YJeC3ez-hCmi=77ZF5ED&_Uhj z$)RuS$;4M_J9T=vs&7mW!@N(i8+d7aul;!>$Sa9oBG=}c%LrTjj37wouLv*|JJ!6F zIj%^oU0Qtyg}}DVPbTun?#dj7vTF%-x}as`oIhNH@R{vo zPH4MQLVAabxF(w(bp#{>jCPnT% z=tBNYLBti^1wO)RDx8BfsPCC`Qhw3(_)5eR-qh`lvxfsN!wFJ7J=4ZoM#ec0VhYoC zM8?8i&z|y-skt$;*Tcs5l8Xsq%%^80^e1Y~%Pu)SL0Gz{M3N`=^e+gp4y%2f^ZIwr zv7_)azr3+p{ll-|(+PKax*CuIL~nZOQFC1zda5;?>8MYa>*YqlV<<0#kaIB+tCX%> zX3Uqd@@E1z6?*?vwD-!&nD0qOr&PouVX;!e80A@MTe=4~5w!7KcwpN{mO`x|D&DgV zg$|j?Ia5FaE4_N>-S7XDf=L0y!AEyN{8iK>d=*5X4y1TOBBcIzl0a4ol zh(k2Ai__kxm#A9tTx)E-s|b1;Dn+^9E}U%oey}4v4f3poT@RM1F{_xy06lOJ_K^rd z-f^F!_EQ{2>hQcCyLs)_X39~+XASq^ZneY?9fM@$KK<@)1~3vaS{6*f;rM+Z)OGK` o3>-g6CBi)n!Z`Uq$Z~WJJ{u*m`0Y+FqrVTJOstHn4X?%j54ZSFU;qFB literal 0 HcmV?d00001 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 67fbdd3..d9c8241 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -62,4 +62,5 @@ 1080px 120px 624px + 712px \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index aa876e3..fae5dff 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -94,4 +94,8 @@ 无网络连接,请稍后再试! 泵开关 + 联动开关 + + 联动开关设置 + 联动开关延时,单位:秒