UNPKG

zwave-js-ui

Version:

Z-Wave Control Panel and MQTT Gateway

3 lines (2 loc) 17.5 kB
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./StatisticsArrows-CWMNYH2M.js","./index-B9yS4Bcc.js","./index-Bm7DxUwf.css","./StatisticsArrows-d3MYDRGU.css","./BgRssiChart-BVme1uGk.js","./BgRssiChart-D1GxaB_c.css","./DialogHealthCheck-lVPaZ6bh.js","./VDataTable-CKSj76XP.js","./sort-CSOGXH9I.js","./VTable-BXtGlLLl.js","./VTable-CQyv0wyO.css","./VDataTable-DNwLG7iF.css","./DialogLinkReliability-BmI29B1H.js","./DialogLinkReliability-Bz_3GH2z.css"])))=>i.map(i=>d[i]); import{_ as F,I as O,d as P,z as N,av as L,bJ as z,m as E,u as U,G as D,a as B,aw as j,bO as I,bM as q,bN as A,bI as W,aq as H,r as V,v as M,x as Z,o as a,l as f,w as s,f as b,b as l,T as x,k as i,i as R,ae as K,Z as c,U as u,t as k,q as p,h as m,c as _,an as G,am as J,e as T,a7 as Y,ag as Q,N as X,O as $,V as ee}from"./index-B9yS4Bcc.js";import{d as te}from"./vuedraggable.umd-f8uV7t38.js";const se={mixins:[O],components:{StatisticsArrows:P(()=>N(()=>import("./StatisticsArrows-CWMNYH2M.js"),__vite__mapDeps([0,1,2,3]),import.meta.url)),BgRssiChart:P(()=>N(()=>import("./BgRssiChart-BVme1uGk.js"),__vite__mapDeps([4,1,2,5]),import.meta.url)),DialogHealthCheck:P(()=>N(()=>import("./DialogHealthCheck-lVPaZ6bh.js"),__vite__mapDeps([6,1,2,7,8,9,10,11]),import.meta.url)),DialogLinkReliability:P(()=>N(()=>import("./DialogLinkReliability-BmI29B1H.js"),__vite__mapDeps([12,1,2,9,10,13]),import.meta.url)),draggable:te},props:{modelValue:{type:Boolean,default:!1},node:{type:Object,default:()=>null},socket:{type:Object}},data:()=>({showFullscreen:!1,dialogHealth:!1,dialogLinkReliability:!1,discoverLoading:!1,routesChanged:!1,returnRoutes:[],Protocols:L,dataRateItems:[{title:"100 Kbps",value:z.ZWave_100k},{title:"40 Kbps",value:z.ZWave_40k},{title:"9.6 Kbps",value:z.ZWave_9k6}],required:t=>!!t||"This field is required"}),computed:{...E(U,["nodes"]),nodeReturnRoutes(){if(!this.node)return null;const t=[...this.node.customSUCReturnRoutes||[]];return this.node.prioritySUCReturnRoute&&t.unshift({...this.node.prioritySUCReturnRoute,isPriority:!0}),t},_value:{get(){return this.modelValue},set(t){this.$emit("update:modelValue",t)}},lwr(){if(!this.node)return null;const t=this.node.statistics;return!t||!t.lwr?null:this.parseRouteStats(t.lwr)},nlwr(){if(!this.node)return null;const t=this.node.statistics;return!t||!t.nlwr?null:this.parseRouteStats(t.nlwr)},appRoute(){var e;return(e=this.node)!=null&&e.applicationRoute?this.parseRouteStats(this.node.applicationRoute):null},isLongRange(){return this.node?this.node.protocol===L.ZWaveLongRange:!1}},watch:{nodeReturnRoutes:{handler(t){this.returnRoutes=D(t),this.routesChanged=!1},immediate:!0,deep:!0}},methods:{...B(U,["showSnackbar"]),getProtocol:j,zwaveDataRateToString:I,checkMove(t){const{futureIndex:e}=t.draggedContext;return!(this.returnRoutes.some(d=>d.isPriority)&&e===0)},parseRouteStats(t){var C,v;const e=t.repeaterRSSI||[],o=((C=t.repeaters)==null?void 0:C.length)>0?t.repeaters.map((y,w)=>`${y}${e[w]&&!q(e[w])?` (${A(e[w])})`:""}`).join(", "):"None, direct connection",d=((v=t.routeFailedBetween)==null?void 0:v.filter(y=>!!y[0]&&!!y[1]))||[],g=d.length>0?d.map(y=>`${y[0]} --> ${y[1]}`).join(", "):"",n=t.protocolDataRate?W(t.protocolDataRate):"",h=t.routeSpeed?I(t.routeSpeed):"";return[n?{title:"Data Rate",text:n}:null,h?{title:"Route Speed",text:h}:null,{title:"Repeaters",text:o},g?{title:"Route failed between",text:g}:null].filter(y=>!!y)},newWindow(){const t=window.open("#"+H.controllerChart+"/#no-topbar","BG-RSSI-Chart","height=800,width=1200,status=no,toolbar:no,scrollbars:no,menubar:no");window.focus&&t.focus()},async deleteRoute(t){if(!this.node)return;let e="";switch(t){case"appRoute":e="removePriorityRoute";break;case"prioritySUCReturnRoute":case"customSUCReturnRoutes":e="deleteSUCReturnRoutes";break;default:e="";break}if(e&&await this.app.confirm("Delete","Are you sure you want to delete this route?","alert")){const o=await this.app.apiRequest(e,[this.node.id]);o.success&&(o.result?this.showSnackbar("Route deleted","success"):this.showSnackbar(`Failed delete route for node "${this.node._name}"`,"error"))}},async discoverNeighbors(){this.discoverLoading=!0;const t=await this.app.apiRequest("discoverNodeNeighbors",[this.node.id]);this.discoverLoading=!1,t.success&&(t.result?this.showSnackbar("Neighbors updated","success"):this.showSnackbar(`Failed to discover neighbors of node "${this.node._name}"`,"error"))},async getRoute(t){if(!this.node)return;let e="";switch(t){case"appRoute":e="getPriorityRoute";break;case"prioritySUCReturnRoute":e="getPrioritySUCReturnRoute";break;case"customSUCReturnRoutes":e="getCustomSUCReturnRoute";break;default:e="";break}if(!e)return;(await this.app.apiRequest(e,[this.node.id])).success&&this.showSnackbar("Route updated","success")},async promptRoute(t,e,o=!1){const d=[{type:"array",inputType:"autocomplete",list:!0,multiple:!0,prefix:t,suffix:e,key:"repeaters",label:"Repeaters",hint:"Select the nodes that should be used as repeaters starting from the closest to the controller. Empty list means direct route to controller",itemValue:"id",itemText:"_name",default:[],rules:[n=>n.length<=4||"Max 4 repeaters"],items:this.nodes.filter(n=>!n.isControllerNode&&n.isListening&&n.id!==this.node.id)},{type:"list",autocomplete:!0,key:"routeSpeed",label:"Route speed",default:z.ZWave_100k,rules:[this.required],items:this.dataRateItems}];o&&d.push({type:"boolean",key:"isPriority",label:"Priority route",hint:"If enabled, this route will always be used first",default:!1});const g=await this.app.confirm("Set route","","info",{width:500,inputs:d,confirmText:"Set"});return Object.keys(g).length===0?null:g},async getRouteReturnRoutes(){await this.getRoute("prioritySUCReturnRoute"),await this.getRoute("customSUCReturnRoutes")},deleteReturnRoute(t){this.returnRoutes.splice(this.returnRoutes.indexOf(t),1),this.routesChanged=!0},async addReturnRoute(){if(!this.node)return;const t=await this.promptRoute(`Node "${this.node._name}"`,"Controller",!0);if(!t)return;this.routesChanged=!0;const{repeaters:e,routeSpeed:o,isPriority:d}=t;if(d){const g=this.returnRoutes.find(h=>h.isPriority),n={repeaters:e,routeSpeed:o,isPriority:d};if(g){if(!await this.app.confirm("Priority route","You already have a priority route set. Do you want to replace it?","info"))return;this.returnRoutes.splice(this.returnRoutes.indexOf(g),1,n)}else n.isPriority?this.returnRoutes.unshift(n):this.returnRoutes.push(n);return}this.returnRoutes.push({repeaters:e,routeSpeed:o,isPriority:d})},resetReturnRoutes(){this.returnRoutes=D(this.nodeReturnRoutes),this.routesChanged=!1},async setReturnRoutes(){if(!this.node)return;if(this.returnRoutes.length===0){await this.deleteRoute("customSUCReturnRoutes");return}const t=this.returnRoutes.filter(d=>!d.isPriority),e=this.returnRoutes.find(d=>d.isPriority),o=[this.node.id,t.map(d=>({repeaters:d.repeaters,routeSpeed:d.routeSpeed}))];e&&o.push({repeaters:e.repeaters,routeSpeed:e.routeSpeed}),await this.setRoute("customSUCReturnRoutes",o)},async setRoute(t,e){if(!this.node)return;let o="",d="",g="";switch(t){case"appRoute":d="Controller",g=`Node "${this.node._name}"`,o="setPriorityRoute";break;case"prioritySUCReturnRoute":d=`Node "${this.node._name}"`,g="Controller",o="assignPrioritySUCReturnRoute";break;case"customSUCReturnRoutes":d=`Node "${this.node._name}"`,g="Controller",o="assignCustomSUCReturnRoutes";break;default:o="";break}if(!o)return;if(!e){const h=await this.promptRoute(d,g),{repeaters:C,routeSpeed:v}=h;switch(e=[],t){case"appRoute":case"prioritySUCReturnRoute":e=[this.node.id,C,v];break;case"customSUCReturnRoutes":{const y=this.node.customSUCReturnRoutes||[];e=[this.node.id,y]}break}}const n=await this.app.apiRequest(o,e);n.success&&(n.result?this.showSnackbar(`New route set for node "${this.node._name}"`,"success"):this.showSnackbar(`Failed to set route for node "${this.node._name}"`))}}},oe={class:"align-end"},le={class:"align-end"},ne={class:"align-end"},re={class:"align-end"},ie={class:"align-end"},ae={class:"align-end"},ue={class:"align-end"},de={class:"align-end"},fe={class:"align-end"},Re={key:3},pe={key:0,class:"text-caption"},me={class:"align-end"},ge={key:1,class:"text-center"},ye={key:4},ke={key:0},ce={class:"fill-width"},he={key:1};function _e(t,e,o,d,g,n){const h=V("statistics-arrows"),C=V("draggable"),v=V("bg-rssi-chart"),y=V("dialog-health-check"),w=V("dialog-link-reliability");return M((a(),f(ee,{class:"pt-0"},{default:s(()=>[n._value&&o.node?(a(),f(b,{key:0,class:"pa-0 pb-2"},{default:s(()=>[l(x,{class:"font-weight-bold",style:{position:"sticky",top:"0","z-index":"10"}},{default:s(()=>[e[25]||(e[25]=i("Node properties ")),l(R,{onClick:e[0]||(e[0]=r=>n._value=!1),class:"close-btn"},{default:s(()=>e[24]||(e[24]=[i("clear")])),_:1,__:[24]})]),_:1,__:[25]}),l(K,{density:"compact",class:"text-start",style:{"min-width":"300px",background:"transparent"}},{default:s(()=>[l(c,{title:"ID",density:"compact"},{append:s(()=>[u("span",oe,k(o.node.id),1)]),_:1}),l(c,{title:"Status",density:"compact"},{append:s(()=>[u("span",le,k(o.node.status),1)]),_:1}),l(c,{title:"Protocol",density:"compact"},{append:s(()=>[u("span",ne,k(n.getProtocol(o.node)),1)]),_:1}),l(c,{title:"Code",density:"compact"},{append:s(()=>[u("span",re,k(o.node.productLabel),1)]),_:1}),l(c,{title:"Product",density:"compact"},{append:s(()=>[u("span",ie,k(o.node.productDescription),1)]),_:1}),l(c,{title:"Manufacturer",density:"compact"},{append:s(()=>[u("span",ae,k(o.node.manufacturer),1)]),_:1}),o.node.name?(a(),f(c,{key:0,title:"Name"},{append:s(()=>[u("span",ue,k(o.node.name),1)]),_:1})):p("",!0),o.node.loc?(a(),f(c,{key:1,title:"Location"},{append:s(()=>[u("span",de,k(o.node.loc),1)]),_:1})):p("",!0),o.node.neighbors&&!n.isLongRange?(a(),f(c,{key:2,title:"Neighbors"},{append:s(()=>[u("span",fe,k(o.node.neighbors.length>0?o.node.neighbors.join(", "):"None"),1),o.node.isControllerNode?p("",!0):(a(),f(m,{key:0,class:"ml-2",variant:"flat",color:"primary",size:"x-small",loading:t.discoverLoading,onClick:e[1]||(e[1]=r=>n.discoverNeighbors())},{default:s(()=>[e[27]||(e[27]=i(" Discover ")),l(R,{class:"ml-1",size:"small"},{default:s(()=>e[26]||(e[26]=[i("search")])),_:1,__:[26]})]),_:1,__:[27]},8,["loading"]))]),_:1})):p("",!0),l(c,{title:"Statistics",density:"compact"},{append:s(()=>[l(h,{"inactive-color":"black",node:o.node},null,8,["node"])]),_:1}),!o.node.isControllerNode&&!n.isLongRange?(a(),_("div",Re,[l(x,null,{default:s(()=>[e[34]||(e[34]=i("Priority route ")),n.appRoute?(a(),f(m,{key:0,variant:"flat",class:"ml-2",color:"error",size:"x-small",onClick:e[2]||(e[2]=r=>n.deleteRoute("appRoute"))},{default:s(()=>[e[29]||(e[29]=i("Delete ")),l(R,{size:"x-small"},{default:s(()=>e[28]||(e[28]=[i("delete")])),_:1,__:[28]})]),_:1,__:[29]})):p("",!0),l(m,{variant:"flat",class:"ml-2",color:"success",size:"x-small",onClick:e[3]||(e[3]=r=>n.getRoute("appRoute"))},{default:s(()=>[e[31]||(e[31]=i("Get ")),l(R,{size:"x-small"},{default:s(()=>e[30]||(e[30]=[i("refresh")])),_:1,__:[30]})]),_:1,__:[31]}),l(m,{variant:"flat",class:"ml-2",color:"purple",size:"x-small",onClick:e[4]||(e[4]=r=>n.setRoute("appRoute"))},{default:s(()=>[e[33]||(e[33]=i("Set ")),l(R,{size:"x-small"},{default:s(()=>e[32]||(e[32]=[i("route")])),_:1,__:[32]})]),_:1,__:[33]})]),_:1,__:[34]}),n.appRoute&&!n.isLongRange?(a(),_("div",pe,[(a(!0),_(G,null,J(n.appRoute,(r,S)=>(a(),f(c,{density:"compact",key:S},{append:s(()=>[u("span",me,k(r.text),1)]),default:s(()=>[i(k(r.title)+" ",1)]),_:2},1024))),128))])):(a(),_("p",ge,"None"))])):p("",!0),!o.node.isControllerNode&&!n.isLongRange?(a(),_("div",ye,[l(x,null,{default:s(()=>[e[43]||(e[43]=i("Return routes ")),t.routesChanged?p("",!0):(a(),f(m,{key:0,variant:"flat",class:"ml-2",color:"success",size:"x-small",onClick:e[5]||(e[5]=r=>n.getRouteReturnRoutes())},{default:s(()=>[e[36]||(e[36]=i("Get ")),l(R,{size:"x-small"},{default:s(()=>e[35]||(e[35]=[i("refresh")])),_:1,__:[35]})]),_:1,__:[36]})),l(m,{disabled:t.returnRoutes.length===4,variant:"flat",class:"ml-2",color:"purple",size:"x-small",onClick:e[6]||(e[6]=r=>n.addReturnRoute())},{default:s(()=>[e[38]||(e[38]=i("Add ")),l(R,{size:"x-small"},{default:s(()=>e[37]||(e[37]=[i("route")])),_:1,__:[37]})]),_:1,__:[38]},8,["disabled"]),t.routesChanged?(a(),f(m,{key:1,variant:"flat",class:"ml-2",color:"success",size:"x-small",onClick:e[7]||(e[7]=r=>n.setReturnRoutes())},{default:s(()=>[e[40]||(e[40]=i("Save ")),l(R,{size:"x-small"},{default:s(()=>e[39]||(e[39]=[i("save")])),_:1,__:[39]})]),_:1,__:[40]})):p("",!0),t.routesChanged?(a(),f(m,{key:2,variant:"flat",class:"ml-2",color:"error",size:"x-small",onClick:e[8]||(e[8]=r=>n.resetReturnRoutes())},{default:s(()=>[e[42]||(e[42]=i("Reset ")),l(R,{size:"x-small"},{default:s(()=>e[41]||(e[41]=[i("clear")])),_:1,__:[41]})]),_:1,__:[42]})):p("",!0)]),_:1,__:[43]}),u("div",null,[t.returnRoutes.length>0?(a(),_("div",ke,[u("table",ce,[e[48]||(e[48]=u("thead",{class:"text-caption text-center font-weight-bold"},[u("tr",null,[u("th"),u("th",null,"Repeaters"),u("th",null,"Speed"),u("th",null,"Priority"),u("th")])],-1)),l(C,{modelValue:t.returnRoutes,"onUpdate:modelValue":e[9]||(e[9]=r=>t.returnRoutes=r),onChange:e[10]||(e[10]=r=>t.routesChanged=!0),handle:".handle",move:n.checkMove,tag:"tbody","item-key":(r,S)=>`returnRoute_${S}`},{item:s(({element:r,index:S})=>[(a(),_("tr",{key:`returnRoute_${S}`,dense:"",class:"text-caption text-center"},[u("td",null,[r.isPriority?p("",!0):(a(),f(R,{key:0,class:"handle",style:{cursor:"move"},color:"primary-lighten-2"},{default:s(()=>e[44]||(e[44]=[i("drag_indicator")])),_:1,__:[44]}))]),u("td",null,k(r.repeaters.length>0?r.repeaters.join(", "):"Direct connection"),1),u("td",null,k(n.zwaveDataRateToString(r.routeSpeed)),1),u("td",null,[r.isPriority?(a(),f(R,{key:0,color:"success",size:"small"},{default:s(()=>e[45]||(e[45]=[i("check")])),_:1,__:[45]})):p("",!0)]),u("td",null,[l(R,{color:"error",size:"small",onClick:ve=>n.deleteReturnRoute(r)},{default:s(()=>e[46]||(e[46]=[i("delete")])),_:2,__:[46]},1032,["onClick"])]),e[47]||(e[47]=u("td",null,null,-1))]))]),_:1},8,["modelValue","move","item-key"])])])):(a(),_("div",he,e[49]||(e[49]=[u("p",{class:"text-center"},"None",-1)])))])])):p("",!0)]),_:1}),o.node.isControllerNode?(a(),f(T,{key:1,class:"mt-1",justify:"center"},{default:s(()=>[l(b,{cols:12,align:"center",class:"pa-0"},{default:s(()=>[l(m,{variant:"flat",color:"primary",size:"small",rounded:"",onClick:e[15]||(e[15]=r=>t.showFullscreen=!0)},{default:s(()=>[e[59]||(e[59]=i("Full Screen ")),l(R,{size:"small"},{default:s(()=>e[58]||(e[58]=[i("fullscreen")])),_:1,__:[58]})]),_:1,__:[59]}),l(m,{variant:"flat",size:"small",class:"ml-2",color:"warning",rounded:"",onClick:e[16]||(e[16]=r=>n.newWindow())},{default:s(()=>[e[61]||(e[61]=i("Open ")),l(R,{size:"small"},{default:s(()=>e[60]||(e[60]=[i("open_in_new")])),_:1,__:[60]})]),_:1,__:[61]})]),_:1}),l(b,{cols:12,class:"pa-2"},{default:s(()=>[l(v,{class:"mt-2",node:o.node},null,8,["node"])]),_:1})]),_:1})):(a(),f(T,{key:0,class:"mt-1 pa-0 text-center",justify:"center"},{default:s(()=>[l(b,{class:"pa-1"},{default:s(()=>[l(m,{variant:"flat",color:"primary",class:"fill",size:"small",rounded:"",onClick:e[11]||(e[11]=r=>t.dialogHealth=!0)},{default:s(()=>[e[51]||(e[51]=i("Diagnose ")),l(R,null,{default:s(()=>e[50]||(e[50]=[i("monitor_heart")])),_:1,__:[50]})]),_:1,__:[51]})]),_:1}),l(b,{class:"pa-1"},{default:s(()=>[l(m,{variant:"flat",color:"purple",class:"fill",size:"small",rounded:"",onClick:e[12]||(e[12]=r=>t.dialogLinkReliability=!0)},{default:s(()=>[e[53]||(e[53]=i("Link Statistics ")),l(R,null,{default:s(()=>e[52]||(e[52]=[i("leak_add")])),_:1,__:[52]})]),_:1,__:[53]})]),_:1}),n.isLongRange?p("",!0):(a(),f(b,{key:0,class:"pa-1"},{default:s(()=>[l(m,{variant:"flat",color:"error",class:"fill",size:"small",rounded:"",onClick:e[13]||(e[13]=r=>t.rebuildNodeRoutes(o.node))},{default:s(()=>[e[55]||(e[55]=i("Rebuild Routes ")),l(R,null,{default:s(()=>e[54]||(e[54]=[i("heart_broken")])),_:1,__:[54]})]),_:1,__:[55]})]),_:1})),l(b,{class:"pa-1"},{default:s(()=>[l(m,{variant:"flat",color:"success",class:"fill",size:"small",rounded:"",onClick:e[14]||(e[14]=r=>t.pingNode(o.node))},{default:s(()=>[e[57]||(e[57]=i("Ping ")),l(R,null,{default:s(()=>e[56]||(e[56]=[i("settings_ethernet")])),_:1,__:[56]})]),_:1,__:[57]})]),_:1})]),_:1}))]),_:1})):p("",!0),o.node&&!o.node.isControllerNode?(a(),f(y,{key:1,modelValue:t.dialogHealth,"onUpdate:modelValue":e[17]||(e[17]=r=>t.dialogHealth=r),onClose:e[18]||(e[18]=r=>t.dialogHealth=!1),socket:o.socket,node:o.node},null,8,["modelValue","socket","node"])):p("",!0),o.node&&!o.node.isControllerNode?(a(),f(w,{key:2,modelValue:t.dialogLinkReliability,"onUpdate:modelValue":e[19]||(e[19]=r=>t.dialogLinkReliability=r),onClose:e[20]||(e[20]=r=>t.dialogLinkReliability=!1),socket:o.socket,node:o.node},null,8,["modelValue","socket","node"])):p("",!0),l(Y,{fullscreen:"",persistent:"",onKeydown:e[22]||(e[22]=Q(r=>t.showFullscreen=!1,["esc"])),"z-index":"9999",modelValue:t.showFullscreen,"onUpdate:modelValue":e[23]||(e[23]=r=>t.showFullscreen=r)},{default:s(()=>[o.node&&o.node.isControllerNode?(a(),f(X,{key:0},{default:s(()=>[l($,{class:"pt-4 fill"},{default:s(()=>[l(m,{variant:"flat",style:{position:"absolute",top:"10px",right:"10px"},icon:"close",onClick:e[21]||(e[21]=r=>t.showFullscreen=!1)}),l(v,{class:"mt-3",node:o.node,"fill-size":""},null,8,["node"])]),_:1})]),_:1})):p("",!0)]),_:1},8,["modelValue"])]),_:1},512)),[[Z,n._value]])}const we=F(se,[["render",_e],["__scopeId","data-v-9baf9069"]]);export{we as default};