From 38c05dd4757cf8bf0c8830610e735e4782e520c2 Mon Sep 17 00:00:00 2001 From: "liujw155@outlook.com" Date: Mon, 22 Nov 2021 18:15:03 +0800 Subject: [PATCH] add air contral --- src/manifest.json | 2 +- src/pages.json | 6 + .../device/pages/air_conditioner/detail/detail.vue | 459 +++++++++++++++++++++ .../device/pages/switch_manage/switch_manage.vue | 191 +++++---- .../device/static/images/air_conditioner/close.png | Bin 0 -> 4318 bytes .../static/images/air_conditioner/heating.png | Bin 0 -> 1847 bytes .../images/air_conditioner/in_under_heating.png | Bin 0 -> 2111 bytes .../device/static/images/air_conditioner/lock.png | Bin 0 -> 1154 bytes .../static/images/air_conditioner/normal.png | Bin 0 -> 2414 bytes .../device/static/images/air_conditioner/open.png | Bin 0 -> 3170 bytes .../images/air_conditioner/refrigeration.png | Bin 0 -> 1391 bytes .../static/images/air_conditioner/switch.png | Bin 0 -> 1128 bytes .../static/images/air_conditioner/temp_add.png | Bin 0 -> 291 bytes .../static/images/air_conditioner/temp_reduce.png | Bin 0 -> 193 bytes .../images/air_conditioner/under_heating.png | Bin 0 -> 920 bytes .../static/images/air_conditioner/ventilate.png | Bin 0 -> 940 bytes .../static/images/air_conditioner/wind_0.png | Bin 0 -> 719 bytes .../static/images/air_conditioner/wind_1.png | Bin 0 -> 656 bytes .../static/images/air_conditioner/wind_2.png | Bin 0 -> 795 bytes .../static/images/air_conditioner/wind_3.png | Bin 0 -> 691 bytes 20 files changed, 577 insertions(+), 81 deletions(-) create mode 100644 src/subpackage/device/pages/air_conditioner/detail/detail.vue create mode 100644 src/subpackage/device/static/images/air_conditioner/close.png create mode 100644 src/subpackage/device/static/images/air_conditioner/heating.png create mode 100644 src/subpackage/device/static/images/air_conditioner/in_under_heating.png create mode 100644 src/subpackage/device/static/images/air_conditioner/lock.png create mode 100644 src/subpackage/device/static/images/air_conditioner/normal.png create mode 100644 src/subpackage/device/static/images/air_conditioner/open.png create mode 100644 src/subpackage/device/static/images/air_conditioner/refrigeration.png create mode 100644 src/subpackage/device/static/images/air_conditioner/switch.png create mode 100644 src/subpackage/device/static/images/air_conditioner/temp_add.png create mode 100644 src/subpackage/device/static/images/air_conditioner/temp_reduce.png create mode 100644 src/subpackage/device/static/images/air_conditioner/under_heating.png create mode 100644 src/subpackage/device/static/images/air_conditioner/ventilate.png create mode 100644 src/subpackage/device/static/images/air_conditioner/wind_0.png create mode 100644 src/subpackage/device/static/images/air_conditioner/wind_1.png create mode 100644 src/subpackage/device/static/images/air_conditioner/wind_2.png create mode 100644 src/subpackage/device/static/images/air_conditioner/wind_3.png diff --git a/src/manifest.json b/src/manifest.json index 25d192e..32b6894 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -54,7 +54,7 @@ }, "mp-weixin": { /* 微信小程序特有相关 */ - "appid": "wxf1294b279ad1b845", + "appid": "wx7106e84614cf0060", "setting": { "urlCheck": false }, diff --git a/src/pages.json b/src/pages.json index 72a67ad..5669244 100644 --- a/src/pages.json +++ b/src/pages.json @@ -226,6 +226,12 @@ { "root": "subpackage/device", "pages": [ + { + "path": "pages/air_conditioner/detail/detail", + "style" : { + "navigationBarTitleText": "空调管理" + } + }, { "path": "pages/index/index", "style" : { diff --git a/src/subpackage/device/pages/air_conditioner/detail/detail.vue b/src/subpackage/device/pages/air_conditioner/detail/detail.vue new file mode 100644 index 0000000..57ccce3 --- /dev/null +++ b/src/subpackage/device/pages/air_conditioner/detail/detail.vue @@ -0,0 +1,459 @@ + + + + + \ No newline at end of file diff --git a/src/subpackage/device/pages/switch_manage/switch_manage.vue b/src/subpackage/device/pages/switch_manage/switch_manage.vue index 5dda6b5..2d35389 100644 --- a/src/subpackage/device/pages/switch_manage/switch_manage.vue +++ b/src/subpackage/device/pages/switch_manage/switch_manage.vue @@ -46,6 +46,10 @@ {{pageInfo.detailName || '-'}} + + 详情 + + @@ -58,84 +62,7 @@ import store_name from '../../components/store_name/store_name'; import deviceServer from '../../js/device_server'; import deviceApi from '../../js/device_api'; -const showArr = { - 's1': { - id: 1, name: '照明管理', isOpen: true, isClose: true, isLongOpen:true, isTiming:true, - openIcon: '/subpackage/device/static/images/open.png',closeIcon: '/subpackage/device/static/images/close.png', - longOpenIcon: '/subpackage/device/static/images/longOpen.png',timingIcon: '/subpackage/device/static/images/timing.png', - openName: '开', closeName: '关', longOpenName: '长开', timingName: '定时', hardware_type: 'Light',iconNum:4 - }, - 's2': { - id: 2, name: '空调管理', isOpen: true, isClose: true, - openIcon: '/subpackage/device/static/images/open.png', - closeIcon: '/subpackage/device/static/images/close.png', - openName: '开', closeName: '关', hardware_type: 'Air',iconNum:2 - }, - 's3': { - id: 3, name: '风扇管理', isOpen: true, isClose: true, isLongOpen:true, isTiming:true, - openIcon: '/subpackage/device/static/images/open.png', - closeIcon: '/subpackage/device/static/images/close.png', - longOpenIcon: '/subpackage/device/static/images/longOpen.png',timingIcon: '/subpackage/device/static/images/timing.png', - openName: '开', closeName: '关', hardware_type: 'Fan',longOpenName: '长开', timingName: '定时',iconNum:4, - }, - 's4': { - id: 4, name: '门禁管理', isOpen: true, isClose: false, - openIcon: '/subpackage/device/static/images/open.png', - closeIcon: '/subpackage/device/static/images/close.png', - openName: '开', closeName: '关', hardware_type: 'AccessControl',iconNum:2 - }, - 's5': { - id: 5, name: '门闸管理', isOpen: true, isClose: true, - openIcon: '/subpackage/device/static/images/in.png', - closeIcon: '/subpackage/device/static/images/out.png', - openName: '进', closeName: '出', hardware_type: 'GateControl',iconNum:2 - }, - 's6': {//TODO 等待接口 - id: 6, name: '平板管理', isOpen: false, isClose: false, - openIcon: '/subpackage/device/static/images/open.png', - closeIcon: '/subpackage/device/static/images/close.png', - openName: '开', closeName: '关', hardware_type: 'Router4G',iconNum:2 - }, - 's11': { - id: 11, name: '水阀管理', isOpen: true, isClose: true,isLongOpen:true, isTiming:true, - openIcon: '/subpackage/device/static/images/open.png', - closeIcon: '/subpackage/device/static/images/close.png', - longOpenIcon: '/subpackage/device/static/images/longOpen.png',timingIcon: '/subpackage/device/static/images/timing.png', - openName: '开', closeName: '关', hardware_type: 'WaterValve',longOpenName: '长开', timingName: '定时',iconNum:4, - }, - 's12': { - id: 12, name: '互动设备管理', isOpen: true, isClose: true, - openIcon: '/subpackage/device/static/images/open.png', - closeIcon: '/subpackage/device/static/images/close.png', - openName: '开', closeName: '关', hardware_type: '',iconNum:2 - }, - 's13': {//TODO 等待接口 - id: 13, name: '监控管理', isOpen: false, isClose: false, isDetail:true, - openIcon: '/subpackage/device/static/images/open.png', - closeIcon: '/subpackage/device/static/images/close.png', - openName: '开', closeName: '关',detailName:"详情", hardware_type: 'IotSim',iconNum:2 - }, - 's17': {//TODO 等待接口 - id: 17, name: '窗帘管理', isOpen: false, isClose: false, isDetail:true, - openIcon: '/subpackage/device/static/images/open.png', - closeIcon: '/subpackage/device/static/images/close.png', - openName: '开', closeName: '关',detailName:"详情", hardware_type: 'Router4G',iconNum:2 - }, - 's18': { - id: 18, name: '路由器管理', isOpen: false, isClose: false, isDetail:true, - openIcon: '/subpackage/device/static/images/open.png', - closeIcon: '/subpackage/device/static/images/close.png', - openName: '开', closeName: '关',detailName:"详情", hardware_type: 'Router4G',iconNum:2 - }, - 's19': { - id: 19, name: '物联卡管理', isOpen: false, isClose: false, isDetail:true, - openIcon: '/subpackage/device/static/images/open.png', - closeIcon: '/subpackage/device/static/images/close.png', - openName: '开', closeName: '关',detailName:"详情", hardware_type: 'IotSim',iconNum:2 - }, - -} import { mapState } from 'vuex'; import util from '../../../../utils/util'; @@ -180,7 +107,7 @@ export default { } }, onLoad(options){ - let _pageInfo = showArr[`s${options.sid}`] || {}; + let _pageInfo = getShowArr(`s${options.sid}`) || {}; this.pageInfo = _pageInfo; uni.setNavigationBarTitle({ title: _pageInfo.name }); @@ -190,7 +117,15 @@ export default { }) }, methods: { - + toDeviceDetail(e){ + console.warn(e); + console.warn(this.getSwitchStatusQuery(e)); + let _queryObj = this.getSwitchStatusQuery(e) || {}; + if(!_queryObj.data || !_queryObj.data.name || !_queryObj.data.value)return; + _queryObj.data.value&&_queryObj.data.value.op&&(_queryObj.data.value.op = 'info'); + let _qrStr = util.jsonStr(_queryObj); + if(e.hardware_type == "Air")return util.routeTo(`/subpackage/device/pages/air_conditioner/detail/detail?qrstr=${_qrStr}&name=${e.hardware_name || '-'}`, 'nT'); + }, getDeviceList({ stadium_id, hardware_type, @@ -405,7 +340,7 @@ export default { // status -> 开关状态 0 -> 关(右), 1 -> 开(左) // 数据结构参考 src\subpackage\device\js\ouxuanac.md // 空调开关数据结构独立判断处理 hardware_type === 'Air' - getSwitchQuery({ switchInfo, status }){ + getSwitchQuery({ switchInfo, status = '' }){ let { hardware_connect_method, hardware_type, @@ -498,6 +433,88 @@ export default { } } } + +function getShowArr(key){ + let _obj = { + 's1': { + id: 1, name: '照明管理', isOpen: true, isClose: true, isLongOpen:true, isTiming:true, + openIcon: '/subpackage/device/static/images/open.png',closeIcon: '/subpackage/device/static/images/close.png', + longOpenIcon: '/subpackage/device/static/images/longOpen.png',timingIcon: '/subpackage/device/static/images/timing.png', + openName: '开', closeName: '关', longOpenName: '长开', timingName: '定时', hardware_type: 'Light',iconNum:4 + }, + 's2': { + id: 2, name: '空调管理', isOpen: true, isClose: true, isDetailBtn: true, + openIcon: '/subpackage/device/static/images/open.png', + closeIcon: '/subpackage/device/static/images/close.png', + openName: '开', closeName: '关', hardware_type: 'Air',iconNum:2 + }, + 's3': { + id: 3, name: '风扇管理', isOpen: true, isClose: true, isLongOpen:true, isTiming:true, + openIcon: '/subpackage/device/static/images/open.png', + closeIcon: '/subpackage/device/static/images/close.png', + longOpenIcon: '/subpackage/device/static/images/longOpen.png',timingIcon: '/subpackage/device/static/images/timing.png', + openName: '开', closeName: '关', hardware_type: 'Fan',longOpenName: '长开', timingName: '定时',iconNum:4, + }, + 's4': { + id: 4, name: '门禁管理', isOpen: true, isClose: false, + openIcon: '/subpackage/device/static/images/open.png', + closeIcon: '/subpackage/device/static/images/close.png', + openName: '开', closeName: '关', hardware_type: 'AccessControl',iconNum:2 + }, + 's5': { + id: 5, name: '门闸管理', isOpen: true, isClose: true, + openIcon: '/subpackage/device/static/images/in.png', + closeIcon: '/subpackage/device/static/images/out.png', + openName: '进', closeName: '出', hardware_type: 'GateControl',iconNum:2 + }, + 's6': {//TODO 等待接口 + id: 6, name: '平板管理', isOpen: false, isClose: false, + openIcon: '/subpackage/device/static/images/open.png', + closeIcon: '/subpackage/device/static/images/close.png', + openName: '开', closeName: '关', hardware_type: 'Router4G',iconNum:2 + }, + 's11': { + id: 11, name: '水阀管理', isOpen: true, isClose: true,isLongOpen:true, isTiming:true, + openIcon: '/subpackage/device/static/images/open.png', + closeIcon: '/subpackage/device/static/images/close.png', + longOpenIcon: '/subpackage/device/static/images/longOpen.png',timingIcon: '/subpackage/device/static/images/timing.png', + openName: '开', closeName: '关', hardware_type: 'WaterValve',longOpenName: '长开', timingName: '定时',iconNum:4, + }, + 's12': { + id: 12, name: '互动设备管理', isOpen: true, isClose: true, + openIcon: '/subpackage/device/static/images/open.png', + closeIcon: '/subpackage/device/static/images/close.png', + openName: '开', closeName: '关', hardware_type: '',iconNum:2 + }, + 's13': {//TODO 等待接口 + id: 13, name: '监控管理', isOpen: false, isClose: false, isDetail:true, + openIcon: '/subpackage/device/static/images/open.png', + closeIcon: '/subpackage/device/static/images/close.png', + openName: '开', closeName: '关',detailName:"详情", hardware_type: 'IotSim',iconNum:2 + }, + 's17': {//TODO 等待接口 + id: 17, name: '窗帘管理', isOpen: false, isClose: false, isDetail:true, + openIcon: '/subpackage/device/static/images/open.png', + closeIcon: '/subpackage/device/static/images/close.png', + openName: '开', closeName: '关',detailName:"详情", hardware_type: 'Router4G',iconNum:2 + }, + 's18': { + id: 18, name: '路由器管理', isOpen: false, isClose: false, isDetail:true, + openIcon: '/subpackage/device/static/images/open.png', + closeIcon: '/subpackage/device/static/images/close.png', + openName: '开', closeName: '关',detailName:"详情", hardware_type: 'Router4G',iconNum:2 + }, + 's19': { + id: 19, name: '物联卡管理', isOpen: false, isClose: false, isDetail:true, + openIcon: '/subpackage/device/static/images/open.png', + closeIcon: '/subpackage/device/static/images/close.png', + openName: '开', closeName: '关',detailName:"详情", hardware_type: 'IotSim',iconNum:2 + }, + + + } + return _obj[key] || {} +} \ No newline at end of file diff --git a/src/subpackage/device/static/images/air_conditioner/close.png b/src/subpackage/device/static/images/air_conditioner/close.png new file mode 100644 index 0000000000000000000000000000000000000000..f325981b58691c53d886c11c474211b8587d3456 GIT binary patch literal 4318 zcmX|_cQhMZAIB51ir9Ov)~MY+v;-km>>4e#S5c`wN{t8&irQimd(|qcHnoD-TdSxV zwOh0`;`P4oInVE$d%vIG_?~;t{p+3^W2mnQreLQ4003aPmYUIx4*hqLgKqXLv~~53 zJTufaQNK|P29uMMla-Z~k&%&^nR%1mz)k!MH+)mSiGPd#Z{1k_b^X`yzp;Pe|E-(! zW;j>y5AfzBK3^k!W56Fu#v_g${DX+^EwQHR6<-1eY6R{+v&v4Fn)T9ED(ob;8H54= zw4`t~6_b}sqvkQmg;KP5_z-xAk5~Tk+Tfu4p{KK(Ciu;`$Vk1^4(4FKR-`)%+6|eKzz{?mNY4F}cu9qLO}J247A8P!#iNJmx1{+HNKG`X%5 zr)2qk1FzM{rYpG^JPAyOb-B;+(8;nA(lrgAod?hap5s>!WRrJE!^mTFSj~Q$YFGx- z092DrI|eN7+&<82N*0LGJW$HDQT8PKJiLn&PAlc`Q8`&Sb12Vx7bGX}W=@Yq2h=RJHYH?+^q`nr!Da=AnR@8=1Ol<0vaFI^ zpYx`qTwG(pu*iGUF$FQn$!%vIOA?6L+}YaKjE*i#AfB&8BGs8rNK0I&eRe#4_@S%& zSDi8hBjsAfI2xbUWG9RF6Jc|ZpN4;y&pzbBRz^cOCtICfB|6pv9VfgH;0$B^a4{fp5Gkg`I%=9^nk&mtODQk~M;2kw(1#X)i+axxp zeQ|jE-k3e>=Vpy5g3Mme@Ig_M&5z$TQ(NSK z7nV7Gk%v&n{-X}>v4HB(#bY=p{7Z3ecwd_Iw>HRBMaX6o7`QmmX22K>pe-m{6=GKAlgJ(et$7sqD%U5-<-`Bn zUji2Qo>U8)c|b);cSo#r1N6;iZ^wT1NQ2jqkJW4qO&tpB#@+35lUXF&#L0~`p$K-= zCVoG_Z>ZB6x}3#HtiVOd9gP-U=;bHp7zc;gx_Tn`sPeI=HgR(+6y^~Plk3d zT_pN80_3=M9p+8#@RxO>IL(E-@J!^PY^#fnx1Tj1=#Op;!13*1Rp{SsnRu0uz9%cB5UyGM}#0kGkP*SDX5U!EG8WYL2$_rBJ?yMmTQR5FPZ=$9B zo`xQcz!kp1H0@S*=!Ab>-kWqbuHL{EP3LX}Pl?R#_--eH+)G z%)!QIOXXU;)VgF$zUlmlWXfdMM}>Vvx3j)JGLHSA$SRNe6^SP!s

Wc&o`UV1+=PQTzK5v^DKGC z7n44u7{v;anh^)R25-Di9P<*9^LL8R%{kn-mtyObe)LbFWJ)8_eO8ym-oEA{9;~SN zL=NsoE-+e+hnl9cILJ6wkvm^ey`DIB|VAk19+u+ z?uNK22$}qLg|XX^?z{c(@ep1QIl7-c%&u)d=B%m0(rB#BH$qLJQ`H}b+@$+D9OUYi zFRv~~LKZClQ_hYH6=^H`6gIB4b^<=s27S0P?Vi{}@x(cjuvp;NuJ6?$5h_9H)e zE_T3o92jbInl`KJz!4`kJ+8rDD%_|c?pdGjv_C^38leqZiC=lW+H<=vc;P=gh2KL5 zsLp$dL{3#c?X7}mxO{nA8=-Hwy(tA9pFPjm2;}T1nK>LpVTh9c2&QIsp_#R)UHQ$Z z9xs=I2$8G5BbDP8WcgBUC*|R5F;Lc8WNIzva`LvkNGux#3Yuq_yNBa27O5o!I=V;- zwpOo7cFNRtEc%pD=(@1A0^T$8b)W)hcb-YP(YGx4V8e;RJ-D zvKe@&q^`hwi$N!Kq1XYk-$TJ!7L1QDy?F<{s+&q^ z?OSKgW%}H`P8j*IY{cV-!;u}!CDS02X;4|g8Kn`rdrmvN_ojCW;HWXg-Tqsx11m|S zLffOA@%j_*v@+*9nx(@LEI&k(l$x^gWO4=T=k-D3N-_KIa%<#c6gwURhMQ2bb6z8( zu(At*w7iJU#|73WE-xp2e?J$G{aN~|8g21NGU#NMgT(qi8D&oO4_oH~Aov5nRfoAH zn*KE=*~%c_C)Qz(&C1}z!296K0~|{?^7!5@*e>BYWjY`aT?z!* z@N%MK_STVhEN&kXOFF3-7L3UU>UdH5GJNg-(T}o(P0AJ zIfzhW<;q&<~1osVAv3d9U;Q>QzSb?IR^hP?x~) z%Xy4dIi47F)t0Vo{$fcVc$xH(*@@-swbVlI*q{{j3e-jUh@ncA^$B!I z%RZqLZj+<=>_uF7v#?%+FmuG(Y8=suhCt{#e>hkUK7lXQJAt+1?ZLrT}h#)90l{h z%t4zZiDC@#yt_t zfjCM{r;z2N_!b)EIKm%%uDO?S9_&z9w_mZ`!b4_`@8mQ-x!x6v4(XKkTRw9PI$Fla zEa=oyTgjTvQ@R-(L`-cl>+0L8m6q**Ux^^pUDb_BP5n8DUCE@EEFPCQ@$WV211CA? z$%VwJ0DnFKx&v>m36=t`p!Z4v>c!P_?JLhMr3ODJitMH&d;(Stkgz z5?mL6^zhU9F1|eht#jf0s~L>~+whSl1U=X6j|+z9@%`w~x0lo7bQ|8C+QsIYZ#vYL zo~!rvFr2{){f-hw$O)WwgB3G(jE%A-jhEVWUdRYGxk`pEb*Wr7hDGNSFh#kP#P2Jh zN0f}HCaBajQO_AOPZL7EN+76s;&%3F>sOv{`$2R3OIIUmjjytzWv%Agug4lTJ?OIz zz&sWm)D6>P=mbC(Y0!L%@!(7cj4&(ONNtN&)IFcZzrSs)+ zxT;_CaWp}+#?I8HM9uf8&|z@Dj57sc&C6LBaU(^o0`;{N;llRh^=7;~5xnlVZvyPl z4q3K8AU&?brc?^J;QIY&kMfFn9h}RfDcXCeSXq=N_LnksRlU-==gaL)l1{*RH1Y`4 zgc_BHwEuvTm2J{t*gMP)rz6KVM?X*0zDz!F3z&<2s**Lm%gxkcGemae7#GSM)S&Z? zQu9zV^jIgye~Qxd6WrybMl4uA%jE3Bffu&luShUG(sZR03YB=!J)ha9ejwzPqyh6x z*!LB}QUzZu6o3qj3_wKBR!+nq2SugA-`r%@LsQ%=ne`f#(FlS&Sop~3_)eyq*SqJY z=XF%}{$$Hv^sb!Q+N)d3t9Chl5qOshE4PrD$FmLiuhO06RfSBe?RY3yhZDCn8}|8_ zsW~$t;fcF=(E`y@eTgKb=B)xoT7F>W3s)5%_Biy`pElt5H|RlWi&(Qs>wS*2T&ne) zuxPS#k6Y{B;)SD>dbGY+jC%hm|LVT+51NaAHsFiITOoH6PS=wm_CwGMQh<5_BN|(<*(f7Dhr=*BIz5kK#QC20{~oI KU#&*f7WE&Tq&eRJ literal 0 HcmV?d00001 diff --git a/src/subpackage/device/static/images/air_conditioner/heating.png b/src/subpackage/device/static/images/air_conditioner/heating.png new file mode 100644 index 0000000000000000000000000000000000000000..4e3db478e816580e5ec74225385cd9a258ca5bec GIT binary patch literal 1847 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 F`!8_|y>|cr literal 0 HcmV?d00001 diff --git a/src/subpackage/device/static/images/air_conditioner/open.png b/src/subpackage/device/static/images/air_conditioner/open.png new file mode 100644 index 0000000000000000000000000000000000000000..659a3115206b48b8c547d0c1032f236e7b6855a1 GIT binary patch literal 3170 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 E09YFW1ONa4 literal 0 HcmV?d00001 diff --git a/src/subpackage/device/static/images/air_conditioner/refrigeration.png b/src/subpackage/device/static/images/air_conditioner/refrigeration.png new file mode 100644 index 0000000000000000000000000000000000000000..eaa84187f1d9d59539c05ff0875e6b3ffe19e452 GIT binary patch literal 1391 zcmX|BdpOg39GwHT_jx|=`+h#}`#j(OzBjzR+_tO0RX`xnb`N(K zUqF-pAEhk-L!Y<52ZZd6^>YQZprC-sWYXz$zyK&JDx%S7fGI32%*)FI81TRa01z=4 zjLmhku$gZ9&CZW95CIn|l?w0=52OIbABK>Chm8_^y-t8+KPj%xz{GF;cc9Bcp80H> zZ0pw|Nk(y4_YQV`dYpN4hE2geY)s}S5D1d);ez&y9ABV`?$UL4Ia|Qee%^bHry0gc z8kKL{9*#v4z+NLHQJvM1=0xkbJCo6Ai^bm^^>U7)A^yA6gz4wIxF3eWy1CA&E6J$* z)6m+~RDZ8rAI`@xD=>a!ayPh5z(uoeAdMo~Q>w<)t!lZ*=cdv&I>w@MyYd{a0<^w1 zly(VH_;1b^SA-0Waz~I{UYND4ze#lCRh$B^o=oZJA+pAf%!qq3(}E&KlTdF{1fMZv zGkhR9_$AXkz;-$6tf6&+j_mI4f`A5ZLDwv+-y*9Irytpr^jnnA%Flw4WsxfN+GW{l zl-lvcjk;dd>b3rN(GF3h6{x)TX;rWSsc8lGjDjUvVWpBYluq~R>orL&@}TU)WAvD( zqdn{A17R~xOZR=a5Tfz==`+wdIwh-CMFAsJFoNiJy{{+S8+rAO4&I=jA@PqnkoxUr zqWH%UB)k#SLC&eoPVYreH1a|tCX!;8W%-=uOL>jiujt1O2+f;++ySR*2FO z)fI2R9j6Nk`jI=tJOANl$3Zo*`WVvxa28osL zi5-Py-=N292hYk3jClD~AWPR=P&vbh_tDQy5Eu+UH>@5$Qh{2;=h!U{3C%B+JQSAb zc9M^)FYVQbN)bq~xFNv0Rc60d{?(|)Edwt)K>Qog+}rBiFpFoJOq743eeQuUe~qoH zx;U?My==U+w*8Yns?6r`gLqx2+;{xI6iSbnCq&!Q=CxpQ&Xv2Gxy)O5rwKdr6$*t4 zQ&!x@{{T6G?!AcOOVz%5cXJJ9i%BwIyLA1BH z+kAVL1vu!cW_WsaRIP5i698XW=m6wTW!I5lfv#S0$dy)SPiSac3LTppCmVDYWx zc)=cLi4r{dMb7txvHFxb_yx*3BH}zWgnGP(gK#y`Ai{!67faunxYfl!4$lvq%TeYF zONeHVo|uo@ju#ShOtBiL=en^Wci52=)e@}?O0mQA$!?x?>zhGy!dky=<+w_bGFw!C zwLlsnC&fW5mAEZ|gIDv`j2#KlT?p0umJ6>3J=sGQ+|uV>xr#1p;fI`*mm7u+AhOci zK?~%L(JSaGolse(%@>-dX19c;6d^I}i_wEe^Qn4$E@llk&te)4;O{f`mq|0#lRfmD z0-xZtC)LvDw;Fd(J1@TO*>|WY*Pn&1>6m%vbZ{oit^E&gV~CBSjNHbUBsA!E>ZGq~ t&#M$)USH6#Ci(e#9Yg7#b4$Wi!ZZ_<7p4x_)c_wD$ivmkrSd2t?LP)Vwl)9& literal 0 HcmV?d00001 diff --git a/src/subpackage/device/static/images/air_conditioner/switch.png b/src/subpackage/device/static/images/air_conditioner/switch.png new file mode 100644 index 0000000000000000000000000000000000000000..e60bf9f63adce5ac32772ef1a33af17645864fcd GIT binary patch literal 1128 zcmV-u1eg1XP)TZ8}o3`I;lV5>2SFxTgjC$y&YEy>)#Zm zigm!r7#S`OKo3@PgO0{z4jJx-%hRzGdHlTm-EYeAvyom;w2ZKi3_zA*H3I$&NU2xXoOfF%{zA$RB*r^SkddA6j`tWkZK&qH>* z*$mM3QbN1xUAc5N23hLw{Dv)_4cJYO;*x!3W~6P8O5!-#x~T2u3d+8ij8yD=Y<9w~ z$g-l_xajT8h$sX`k`1*2*X8cyI?2&5yN#RN4rQ&t^}u>QgEu`5IOg!w@LeRvPj3e% zW-#v=pTSYSJs{4|iSH~netJ8wJet9r>G?C>f$@O7pW1HxXdm$Z3vRTq`5D;gKM@~; z0T{$BpM|`Q0Xy~HV5j~#VwK#R zDqcMuFiE&8VyFHXT&C+8%2wpLXyqC~TDrh4y#-t;FaGMU0u(`9d+n=SV3+Bt3RIXYM4F<`3U=#{ zz;YQFEfS0{X_o;a?O?b52pkU+f0Sd3diD>o9qiU0fwPG}%CYkWlG(v-{rSM&yZUT{ z>jjt7xh9auQzj6m%)S16HwoXj#q%WszEhv`C3~LJ+cPHgwi3i$4O;XsEZX#N)_Ovj z>W6ATSZm{MtA!cBw*Cfqh@U_zom z0~1ms8kkT&Q@}t;f8AhO!cG8_N)!s1R+JIIq%!pVz|O9Ix54$y<@8Py$P@MN``sj5 zx5f8M1YD`l`z3onN^k#mLT@Qye1Zw}GYxF5pFM#s)!@4{0vl}6Z?I*~!4`H0Tgo16@qVD~3PCq$pv9H)yudh8s(7~vXL{i# uoIu--Uc1qXFB`4Svb8M0X1YMz2mb-MUi{cPKoX_^0000iWS0Fum_U!3kFar!`&YTHh zKm-K~5*7g!ag_x51v7~Lc)8^2Mt5r+qZNsFfuhSjT^vI!PA5Ase0vh=kPvpDfp?2U zqsmm<4JQq))-o}RGU^od1V$;H-u8loBObRV)f*F+D zJeDhn6dY1fKj0!EVG+~2FhNx0zz;=U9@W(aOyzA)T)hGqgquHZJtNUm@H!+dqLrOT z-Ls~#!TiSuHk*4IhsAHEs2Hpe@a&vbP}Xp=PpaEls6Mf0yM(yHDy9R`r3?&nv^H(_ Swc!UjnZeW5&t;ucLK6Ty9A|O> literal 0 HcmV?d00001 diff --git a/src/subpackage/device/static/images/air_conditioner/temp_reduce.png b/src/subpackage/device/static/images/air_conditioner/temp_reduce.png new file mode 100644 index 0000000000000000000000000000000000000000..72889be06e640a0cd1e6e9f79975e5d982118dc9 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)I=|G% zbLLDS7eXdh2h0bm;4BI93ufSWDYoS5Mt2+K3x`hv1wB1o978NlCrhwiVQ7kAw39t_ zETTb?nYn$nkeI-w0|7?D+6Czzhx8U6ThJMsBy`wECSir=gHH9eV(z!UKFlT!HlT>CbE&(F1cMHEcQ%o`Wo4+h0C|RGXsK4i*wiw|5|)&d#mtM;j@nOxl)1h zNk1Fs$Xq`7`{MR{-*a=T>zf`a+=|~LqclCvlP@TGy&h+Du}q51`T9aRPQFFH+f0fx zbFO7%u^aaO`SN)2#TiHVioPB@q+R6uTA}o-UBFdO*(HLV=T3jCU*h@hLF;^XpCk3@ znL*a?cSq@ka)gLC>Ulj-_*J8k^5WFbo3}PeA7NiN>zd=4eHz_+XWlA^_7eA3DW7oX zsdxBK2aAcf9KV$I*E}jwv3UKtg+D+x=gqygX>v6Vk$j)Ho`|H|20ZDU^Y+l~*8R^8 zO?kK_Zf8xy6NP}}nS4fDPp@$*6$n3cTJo^tC+CcnCL!z>A1eO#Um3!F^LWGBsV^1I zdA(RX`Q4NUYt}AIv3nlEUKq*YvD}9J;@oYC4;7zIe5r72?>E%dJkVt!4SM{IQjX zAoF+WtB%KXrtB_TWbvBSPI@I@(z}hXL}J)qE;tt?lXB{iz@8@|?3Qtd*qYv+5v99JrOf8vb?b<^u!9NKaC`@wbp`r2O?AAUKT k>%{*JX9cCD^M5ekF#P*P_-fq_U_M~*boFyt=akR{0FJJ@4gdfE literal 0 HcmV?d00001 diff --git a/src/subpackage/device/static/images/air_conditioner/ventilate.png b/src/subpackage/device/static/images/air_conditioner/ventilate.png new file mode 100644 index 0000000000000000000000000000000000000000..a97ffcfd59e203d2e7ceda311295265ef392c4d9 GIT binary patch literal 940 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 ZXV_Si(x)sP+5${_44$rjF6*2UngAU}cGCa= literal 0 HcmV?d00001 diff --git a/src/subpackage/device/static/images/air_conditioner/wind_3.png b/src/subpackage/device/static/images/air_conditioner/wind_3.png new file mode 100644 index 0000000000000000000000000000000000000000..1f0d17c252d12738853e7d8d2cdeab3ffd52c4f0 GIT binary patch literal 691 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P3?%t>9eV(z>;rs4T!HlT>C4DMEb`vYvy;7)Q~4?!=QbPcd+`7HT?Pgw zeoq(2kc@k8XP;iT+JMKkaFP|j(4p7=_kX>#LhFf}=nD5+wy!?Qg~+z(JTz5IC_lk+ z*d@oQ-Pb;1nQl(|KIUcLx7az!dCoI?CmUPW&NuB1*Eh#)2Io&+7Cf_z+4Ze?%!NCR zi*~RDvv*x$-ShmY6(e`V0Vc5x4Xl598d!B6oNt;Or1kLN=Y*MaJGprJ!tV3C9!Yj< z3VvceHRJbINe;dmi$77U%-@q0?M{dYbIJVNp{{Gp_2zY~=7Ix{3$MR@&&z5ypLzZM z2YuJ~2WA!i`MXr?`2Bb&!=7n7yK>FSP?Nr!e8v)U-1X-7Zs`p;e$$TMO-A_K#!c4KYGlEYo0`{(Tx7@e3RMFjIWp+X5!N%7?(mjv2U3nJV*J~km z{Lv3{E59u7L)Luv46Wr4^!+{=xbuLo?WMw(n-}RWJ9y z%LOm@_ABNpN6zm2Ci=P{_ldUt`Rp%s=B1%uice0`@0k`WQ*`=XrqZQzcjET(8uzQ( z#mg_VmVX_5F-yt(?E2|vCg0v+wkrE^^M3}>_x2xkrs#(NlMaKYtDnm{r-UW|Kt4ak literal 0 HcmV?d00001