UNPKG

zwave-js-ui

Version:

Z-Wave Control Panel and MQTT Gateway

3 lines (2 loc) 16 kB
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./StatisticsArrows-CoH_4pnA.js","./index-CtTdmJsx.js","./index-2j-kvxFz.css","./BgRssiChart-CU04IR6K.js","./BgRssiChart-D1GxaB_c.css","./DialogHealthCheck-b06vnMVm.js","./DialogHealthCheck-BQ_HIZzk.css","./DialogLinkReliability-Bpp2rHyX.js"])))=>i.map(i=>d[i]); import{I as _,_ as c,P as p,ag as d,m as f,u as h,c as R,a as g,h as b,al as m,aj as C,ak as k,af as y,R as S,n as w}from"./index-CtTdmJsx.js";import{d as x}from"./vuedraggable.umd-VX2Gn67H.js";const P={mixins:[_],components:{StatisticsArrows:()=>c(()=>import("./StatisticsArrows-CoH_4pnA.js"),__vite__mapDeps([0,1,2]),import.meta.url),BgRssiChart:()=>c(()=>import("./BgRssiChart-CU04IR6K.js"),__vite__mapDeps([3,1,2,4]),import.meta.url),DialogHealthCheck:()=>c(()=>import("./DialogHealthCheck-b06vnMVm.js"),__vite__mapDeps([5,1,2,6]),import.meta.url),DialogLinkReliability:()=>c(()=>import("./DialogLinkReliability-Bpp2rHyX.js"),__vite__mapDeps([7,1,2,6]),import.meta.url),draggable:x},props:{value:{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:p,dataRateItems:[{text:"100 Kbps",value:d.ZWave_100k},{text:"40 Kbps",value:d.ZWave_40k},{text:"9.6 Kbps",value:d.ZWave_9k6}],required:o=>!!o||"This field is required"}),computed:{...f(h,["nodes"]),nodeReturnRoutes(){if(!this.node)return null;const o=[...this.node.customSUCReturnRoutes||[]];return this.node.prioritySUCReturnRoute&&o.unshift({...this.node.prioritySUCReturnRoute,isPriority:!0}),o},_value:{get(){return this.value},set(o){this.$emit("input",o)}},lwr(){if(!this.node)return null;const o=this.node.statistics;return!o||!o.lwr?null:this.parseRouteStats(o.lwr)},nlwr(){if(!this.node)return null;const o=this.node.statistics;return!o||!o.nlwr?null:this.parseRouteStats(o.nlwr)},appRoute(){var t;return(t=this.node)!=null&&t.applicationRoute?this.parseRouteStats(this.node.applicationRoute):null},isLongRange(){return this.node?this.node.protocol===p.ZWaveLongRange:!1}},watch:{nodeReturnRoutes:{handler(o){this.returnRoutes=R(o),this.routesChanged=!1},immediate:!0}},methods:{...g(h,["showSnackbar"]),getProtocol:b,zwaveDataRateToString:m,checkMove(o){const{futureIndex:t}=o.draggedContext;return!(this.returnRoutes.some(s=>s.isPriority)&&t===0)},parseRouteStats(o){var l,u;const t=o.repeaterRSSI||[],e=((l=o.repeaters)==null?void 0:l.length)>0?o.repeaters.map((i,v)=>`${i}${t[v]&&!C(t[v])?` (${k(t[v])})`:""}`).join(", "):"None, direct connection",s=((u=o.routeFailedBetween)==null?void 0:u.filter(i=>!!i[0]&&!!i[1]))||[],n=s.length>0?s.map(i=>`${i[0]} --> ${i[1]}`).join(", "):"",r=o.protocolDataRate?y(o.protocolDataRate):"",a=o.routeSpeed?m(o.routeSpeed):"";return[r?{title:"Data Rate",text:r}:null,a?{title:"Route Speed",text:a}:null,{title:"Repeaters",text:e},n?{title:"Route failed between",text:n}:null].filter(i=>!!i)},newWindow(){const o=window.open("#"+S.controllerChart+"/#no-topbar","BG-RSSI-Chart","height=800,width=1200,status=no,toolbar:no,scrollbars:no,menubar:no");window.focus&&o.focus()},async deleteRoute(o){if(!this.node)return;let t="";switch(o){case"appRoute":t="removePriorityRoute";break;case"prioritySUCReturnRoute":case"customSUCReturnRoutes":t="deleteSUCReturnRoutes";break;default:t="";break}if(t&&await this.app.confirm("Delete","Are you sure you want to delete this route?","alert")){const e=await this.app.apiRequest(t,[this.node.id]);e.success&&(e.result?this.showSnackbar("Route deleted","success"):this.showSnackbar(`Failed delete route for node "${this.node._name}"`,"error"))}},async discoverNeighbors(){this.discoverLoading=!0;const o=await this.app.apiRequest("discoverNodeNeighbors",[this.node.id]);this.discoverLoading=!1,o.success&&(o.result?this.showSnackbar("Neighbors updated","success"):this.showSnackbar(`Failed to discover neighbors of node "${this.node._name}"`,"error"))},async getRoute(o){if(!this.node)return;let t="";switch(o){case"appRoute":t="getPriorityRoute";break;case"prioritySUCReturnRoute":t="getPrioritySUCReturnRoute";break;case"customSUCReturnRoutes":t="getCustomSUCReturnRoute";break;default:t="";break}if(!t)return;(await this.app.apiRequest(t,[this.node.id])).success&&this.showSnackbar("Route updated","success")},async promptRoute(o,t,e=!1){const s=[{type:"array",inputType:"autocomplete",list:!0,multiple:!0,prefix:o,suffix:t,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:[r=>r.length<=4||"Max 4 repeaters"],items:this.nodes.filter(r=>!r.isControllerNode&&r.isListening&&r.id!==this.node.id)},{type:"list",autocomplete:!0,key:"routeSpeed",label:"Route speed",default:d.ZWave_100k,rules:[this.required],items:this.dataRateItems}];e&&s.push({type:"boolean",key:"isPriority",label:"Priority route",hint:"If enabled, this route will always be used first",default:!1});const n=await this.app.confirm("Set route","","info",{width:500,inputs:s,confirmText:"Set"});return Object.keys(n).length===0?null:n},async getRouteReturnRoutes(){await this.getRoute("prioritySUCReturnRoute"),await this.getRoute("customSUCReturnRoutes")},deleteReturnRoute(o){this.returnRoutes.splice(this.returnRoutes.indexOf(o),1),this.routesChanged=!0},async addReturnRoute(){if(!this.node)return;const o=await this.promptRoute(`Node "${this.node._name}"`,"Controller",!0);if(!o)return;this.routesChanged=!0;const{repeaters:t,routeSpeed:e,isPriority:s}=o;if(s){const n=this.returnRoutes.find(a=>a.isPriority),r={repeaters:t,routeSpeed:e,isPriority:s};if(n){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(n),1,r)}else r.isPriority?this.returnRoutes.unshift(r):this.returnRoutes.push(r);return}this.returnRoutes.push({repeaters:t,routeSpeed:e,isPriority:s})},resetReturnRoutes(){this.returnRoutes=R(this.nodeReturnRoutes),this.routesChanged=!1},async setReturnRoutes(){if(!this.node)return;if(this.returnRoutes.length===0){await this.deleteRoute("customSUCReturnRoutes");return}const o=this.returnRoutes.filter(s=>!s.isPriority),t=this.returnRoutes.find(s=>s.isPriority),e=[this.node.id,o.map(s=>({repeaters:s.repeaters,routeSpeed:s.routeSpeed}))];t&&e.push({repeaters:t.repeaters,routeSpeed:t.routeSpeed}),await this.setRoute("customSUCReturnRoutes",e)},async setRoute(o,t){if(!this.node)return;let e="",s="",n="";switch(o){case"appRoute":s="Controller",n=`Node "${this.node._name}"`,e="setPriorityRoute";break;case"prioritySUCReturnRoute":s=`Node "${this.node._name}"`,n="Controller",e="assignPrioritySUCReturnRoute";break;case"customSUCReturnRoutes":s=`Node "${this.node._name}"`,n="Controller",e="assignCustomSUCReturnRoutes";break;default:e="";break}if(!e)return;if(!t){const a=await this.promptRoute(s,n),{repeaters:l,routeSpeed:u}=a;switch(t=[],o){case"appRoute":case"prioritySUCReturnRoute":t=[this.node.id,l,u];break;case"customSUCReturnRoutes":{const i=this.node.customSUCReturnRoutes||[];t=[this.node.id,i]}break}}const r=await this.app.apiRequest(e,t);r.success&&(r.result?this.showSnackbar(`New route set for node "${this.node._name}"`,"success"):this.showSnackbar(`Failed to set route for node "${this.node._name}"`))}}};var $=function(){var t=this,e=t._self._c;return e("v-container",{directives:[{name:"show",rawName:"v-show",value:t._value,expression:"_value"}],staticClass:"pt-0"},[t._value&&t.node?e("v-col",{staticClass:"pa-0 pb-2"},[e("v-subheader",{staticClass:"font-weight-bold",staticStyle:{position:"sticky",top:"0","z-index":"10"}},[t._v("Node properties "),e("v-icon",{staticClass:"close-btn",on:{click:function(s){t._value=!1}}},[t._v("clear")])],1),e("v-list",{staticStyle:{"min-width":"300px",background:"transparent"},attrs:{dense:""}},[e("v-list-item",{attrs:{dense:""}},[e("v-list-item-content",[t._v("ID")]),e("v-list-item-content",{staticClass:"align-end"},[t._v(t._s(t.node.id))])],1),e("v-list-item",{attrs:{dense:""}},[e("v-list-item-content",[t._v("Status")]),e("v-list-item-content",{staticClass:"align-end"},[t._v(t._s(t.node.status))])],1),e("v-list-item",{attrs:{dense:""}},[e("v-list-item-content",[t._v("Protocol")]),e("v-list-item-content",{staticClass:"align-end"},[t._v(t._s(t.getProtocol(t.node)))])],1),e("v-list-item",{attrs:{dense:""}},[e("v-list-item-content",[t._v("Code")]),e("v-list-item-content",{staticClass:"align-end"},[t._v(t._s(t.node.productLabel))])],1),e("v-list-item",{attrs:{dense:""}},[e("v-list-item-content",[t._v("Product")]),e("v-list-item-content",{staticClass:"align-end"},[t._v(t._s(t.node.productDescription))])],1),e("v-list-item",{attrs:{dense:""}},[e("v-list-item-content",[t._v("Manufacturer")]),e("v-list-item-content",{staticClass:"align-end"},[t._v(t._s(t.node.manufacturer))])],1),t.node.name?e("v-list-item",[e("v-list-item-content",[t._v("Name")]),e("v-list-item-content",{staticClass:"align-end"},[t._v(t._s(t.node.name))])],1):t._e(),t.node.loc?e("v-list-item",[e("v-list-item-content",[t._v("Location")]),e("v-list-item-content",{staticClass:"align-end"},[t._v(t._s(t.node.loc))])],1):t._e(),t.node.neighbors&&!t.isLongRange?e("v-list-item",[e("v-list-item-content",[t._v("Neighbors")]),e("v-list-item-content",{staticClass:"align-end"},[t._v(t._s(t.node.neighbors.length>0?t.node.neighbors.join(", "):"None")+" ")]),t.node.isControllerNode?t._e():e("v-list-item-action",[e("v-btn",{staticClass:"ml-2",attrs:{color:"primary","x-small":"",loading:t.discoverLoading,dark:""},on:{click:function(s){return t.discoverNeighbors()}}},[t._v("Discover "),e("v-icon",{attrs:{"x-small":""}},[t._v("search")])],1)],1)],1):t._e(),e("v-list-item",{attrs:{dense:""}},[e("v-list-item-content",[t._v("Statistics")]),e("v-list-item-content",{staticClass:"align-end"},[e("statistics-arrows",{attrs:{"inactive-color":"black",node:t.node}})],1)],1),!t.node.isControllerNode&&!t.isLongRange?e("div",[e("v-subheader",[t._v("Priority route "),t.appRoute?e("v-btn",{staticClass:"ml-2",attrs:{color:"error","x-small":""},on:{click:function(s){return t.deleteRoute("appRoute")}}},[t._v("Delete "),e("v-icon",{attrs:{"x-small":""}},[t._v("delete")])],1):t._e(),e("v-btn",{staticClass:"ml-2",attrs:{color:"success","x-small":"",dark:""},on:{click:function(s){return t.getRoute("appRoute")}}},[t._v("Get "),e("v-icon",{attrs:{"x-small":""}},[t._v("refresh")])],1),e("v-btn",{staticClass:"ml-2",attrs:{color:"purple","x-small":"",dark:""},on:{click:function(s){return t.setRoute("appRoute")}}},[t._v("Set "),e("v-icon",{attrs:{"x-small":""}},[t._v("route")])],1)],1),t.appRoute&&!t.isLongRange?e("div",{staticClass:"text-caption"},t._l(t.appRoute,function(s,n){return e("v-list-item",{key:n,attrs:{dense:""}},[e("v-list-item-content",[t._v(t._s(s.title))]),e("v-list-item-content",{staticClass:"align-end"},[t._v(t._s(s.text))])],1)}),1):e("p",{staticClass:"text-center"},[t._v("None")])],1):t._e(),!t.node.isControllerNode&&!t.isLongRange?e("div",[e("v-subheader",[t._v("Return routes "),t.routesChanged?t._e():e("v-btn",{staticClass:"ml-2",attrs:{color:"success","x-small":"",dark:""},on:{click:function(s){return t.getRouteReturnRoutes()}}},[t._v("Get "),e("v-icon",{attrs:{"x-small":""}},[t._v("refresh")])],1),e("v-btn",{staticClass:"ml-2",attrs:{disabled:t.returnRoutes.length===4,color:"purple","x-small":"",dark:""},on:{click:function(s){return t.addReturnRoute()}}},[t._v("Add "),e("v-icon",{attrs:{"x-small":""}},[t._v("route")])],1)],1),e("div",[t.returnRoutes.length>0?e("div",[e("table",{staticClass:"fill-width"},[e("thead",{staticClass:"text-caption text-center font-weight-bold"},[e("tr",[e("th"),e("th",[t._v("Repeaters")]),e("th",[t._v("Speed")]),e("th",[t._v("Priority")]),e("th")])]),e("draggable",{attrs:{handle:".handle",move:t.checkMove,tag:"tbody"},on:{change:function(s){t.routesChanged=!0}},model:{value:t.returnRoutes,callback:function(s){t.returnRoutes=s},expression:"returnRoutes"}},t._l(t.returnRoutes,function(s,n){return e("tr",{key:`returnRoute_${n}`,staticClass:"text-caption text-center",attrs:{dense:""}},[e("td",[s.isPriority?t._e():e("v-icon",{staticClass:"handle",staticStyle:{cursor:"move"},attrs:{color:"primary lighten-2"}},[t._v("drag_indicator")])],1),e("td",[t._v(" "+t._s(s.repeaters.length>0?s.repeaters.join(", "):"Direct connection")+" ")]),e("td",[t._v(" "+t._s(t.zwaveDataRateToString(s.routeSpeed))+" ")]),e("td",[s.isPriority?e("v-icon",{attrs:{color:"success",small:""}},[t._v("check")]):t._e()],1),e("td",[e("v-icon",{attrs:{color:"error",small:""},on:{click:function(r){return t.deleteReturnRoute(s)}}},[t._v("delete")])],1),e("td")])}),0)],1)]):e("div",[e("p",{staticClass:"text-center"},[t._v("None")])]),e("v-row",{attrs:{dense:""}},[t.routesChanged?e("v-btn",{staticClass:"ma-2",attrs:{color:"success","x-small":"",dark:""},on:{click:function(s){return t.setReturnRoutes()}}},[t._v("Save "),e("v-icon",{attrs:{"x-small":""}},[t._v("save")])],1):t._e(),t.routesChanged?e("v-btn",{staticClass:"ma-2",attrs:{color:"error","x-small":"",dark:""},on:{click:function(s){return t.resetReturnRoutes()}}},[t._v("Reset "),e("v-icon",{attrs:{"x-small":""}},[t._v("clear")])],1):t._e()],1)],1)],1):t._e()],1),t.node.isControllerNode?e("v-row",{staticClass:"mt-1",attrs:{justify:"center"}},[e("v-btn",{attrs:{color:"primary",small:"",rounded:""},on:{click:function(s){t.showFullscreen=!0}}},[t._v("Full Screen "),e("v-icon",{attrs:{small:""}},[t._v("fullscreen")])],1),e("v-btn",{staticClass:"ml-2",attrs:{small:"",color:"warning",rounded:""},on:{click:function(s){return t.newWindow()}}},[t._v("Open "),e("v-icon",{attrs:{small:""}},[t._v("open_in_new")])],1),e("bg-rssi-chart",{staticClass:"mt-2",attrs:{node:t.node}})],1):e("v-row",{staticClass:"mt-1 pa-0 text-center",attrs:{justify:"center"}},[e("v-col",{staticClass:"pa-1"},[e("v-btn",{attrs:{color:"primary",small:"",rounded:""},on:{click:function(s){t.dialogHealth=!0}}},[t._v("Diagnose "),e("v-icon",[t._v("monitor_heart")])],1)],1),e("v-col",{staticClass:"pa-1"},[e("v-btn",{attrs:{color:"purple",small:"",rounded:""},on:{click:function(s){t.dialogLinkReliability=!0}}},[t._v("Link Statistics "),e("v-icon",[t._v("leak_add")])],1)],1),t.isLongRange?t._e():e("v-col",{staticClass:"pa-1"},[e("v-btn",{attrs:{color:"error",small:"",rounded:""},on:{click:function(s){return t.rebuildNodeRoutes(t.node)}}},[t._v("Rebuild Routes "),e("v-icon",[t._v("heart_broken")])],1)],1),e("v-col",{staticClass:"pa-1"},[e("v-btn",{attrs:{color:"success",small:"",rounded:""},on:{click:function(s){return t.pingNode(t.node)}}},[t._v("Ping "),e("v-icon",[t._v("settings_ethernet")])],1)],1)],1)],1):t._e(),t.node&&!t.node.isControllerNode?e("dialog-health-check",{attrs:{socket:t.socket,node:t.node},on:{close:function(s){t.dialogHealth=!1}},model:{value:t.dialogHealth,callback:function(s){t.dialogHealth=s},expression:"dialogHealth"}}):t._e(),t.node&&!t.node.isControllerNode?e("dialog-link-reliability",{attrs:{socket:t.socket,node:t.node},on:{close:function(s){t.dialogLinkReliability=!1}},model:{value:t.dialogLinkReliability,callback:function(s){t.dialogLinkReliability=s},expression:"dialogLinkReliability"}}):t._e(),e("v-dialog",{attrs:{fullscreen:"",persistent:"","z-index":"9999"},on:{keydown:function(s){if(!s.type.indexOf("key")&&t._k(s.keyCode,"esc",27,s.key,["Esc","Escape"]))return null;t.showFullscreen=!1}},model:{value:t.showFullscreen,callback:function(s){t.showFullscreen=s},expression:"showFullscreen"}},[t.node&&t.node.isControllerNode?e("v-card",[e("v-card-text",{staticClass:"pt-4"},[e("v-btn",{staticStyle:{position:"absolute",top:"10px",right:"10px"},attrs:{icon:""},on:{click:function(s){t.showFullscreen=!1}}},[e("v-icon",[t._v("close")])],1),e("bg-rssi-chart",{attrs:{node:t.node,"fill-size":""}})],1)],1):t._e()],1)],1)},N=[],L=w(P,$,N,!1,null,"1ce6b729");const F=L.exports;export{F as default};