platypush/platypush/backend/http/dist/static/js/chunk-23035330.1df1cd51.js.map

1 line
90 KiB
Plaintext

{"version":3,"sources":["webpack:///./node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack:///./node_modules/@babel/runtime/helpers/esm/createClass.js","webpack:///./src/components/panels/Light/color.js","webpack:///./node_modules/core-js/modules/es.string.trim.js","webpack:///./node_modules/core-js/modules/es.string.replace.js","webpack:///./src/components/panels/ZigbeeMqtt/Index.vue","webpack:///./src/components/panels/ZigbeeMqtt/Device.vue","webpack:///./src/components/panels/ZigbeeMqtt/Device.vue?a3a2","webpack:///./src/components/panels/ZigbeeMqtt/Group.vue","webpack:///./src/components/panels/ZigbeeMqtt/Group.vue?fdfb","webpack:///./src/components/panels/ZigbeeMqtt/Index.vue?a4e4","webpack:///./src/components/panels/ZigbeeMqtt/Group.vue?6dec","webpack:///./src/components/panels/ZigbeeMqtt/Device.vue?8b0d","webpack:///./src/components/panels/ZigbeeMqtt/Index.vue?f717","webpack:///./node_modules/core-js/internals/string-trim-forced.js"],"names":["_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","protoProps","staticProps","prototype","ColorConverter","ranges","this","hue","sat","bri","ct","keys","attr","x","xRange","yRange","h","s","l","normalize","a","Math","min","f","n","k","color","max","round","r","g","b","d","parseInt","y","brightness","z","Y","toFixed","X","Z","red","green","blue","pow","isNaN","map","c","parseFloat","rgbToHsl","rgb","xy","getRGB","getXY","xyToRgb","hslToRgb","console","debug","rgbToXY","$","$trim","trim","forcedStringTrimMethod","proto","forced","fixRegExpWellKnownSymbolLogic","anObject","toObject","toLength","toInteger","requireObjectCoercible","advanceStringIndex","regExpExec","floor","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","maybeToString","it","undefined","String","REPLACE","nativeReplace","maybeCallNative","reason","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","REPLACE_KEEPS_$0","UNSAFE_SUBSTITUTE","searchValue","replaceValue","O","replacer","call","regexp","indexOf","res","done","value","rx","S","functionalReplace","global","fullUnicode","unicode","lastIndex","results","result","push","matchStr","accumulatedResult","nextSourcePosition","matched","position","index","captures","j","namedCaptures","groups","replacerArgs","concat","replacement","apply","getSubstitution","slice","str","tailPos","m","symbols","match","ch","capture","charAt","class","loading","title","ref","status","info","state","permit_join","network","channel","version","config","mqtt","server","serial","port","coordinator","type","meta","maintrel","majorrel","minorrel","revision","selected","view","$event","views","enabled","toUpperCase","replace","disabled","addGroup","icon-class","text","$refs","infoModal","show","permitJoin","factoryReset","refresh","devices","device","id","deviceId","refreshDevices","refreshGroups","group","groupId","manageGroups","checked","associatedGroups","has","friendly_name","ieee_address","$emit","editName","rename","name","network_address","definition","vendor","model","model_id","description","software_build_id","date_code","power_source","displayedValues","property","rgbColor","unit","value_on","setValue","value_min","value_max","with-label","range","readable","values","option","Number","toString","join","groupsModal","otaUpdatesAvailable","installOtaUpdates","checkOtaUpdates","remove","components","Modal","ToggleSwitch","Slider","Loading","mixins","Utils","emits","required","default","Boolean","data","computed","exposes","extractValues","extractValue","root","features","feature","ret","mergeValues","obj","access","entries","filter","v","reduce","converter","saturation","satAttr","Set","members","member","methods","request","newName","force","confirm","event","value_toggle","value_off","split","_","hsl","querySelectorAll","element","add","editGroups","action","Promise","all","update_available","notify","image","iconClass","mounted","$watch","newValue","subscribe","properties","unmounted","unsubscribe","render","__scopeId","toggleDevice","devicesByAddress","entry","prompt","ieeeAddress","method","Dropdown","DropdownItem","Device","Group","modal","visible","refreshInfo","updateProperties","permit","args","seconds","setTimeout","addToGroup","self","created","error","fails","whitespaces","non","module","exports","METHOD_NAME"],"mappings":"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","file":"static/js/chunk-23035330.1df1cd51.js","sourcesContent":["export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","export class ColorConverter {\n constructor(ranges) {\n this.ranges = {\n hue: [0, 360],\n sat: [0, 100],\n bri: [0, 100],\n ct: [154, 500],\n }\n\n if (ranges)\n for (const attr of Object.keys(this.ranges))\n if (ranges[attr])\n this.ranges[attr] = ranges[attr]\n }\n\n normalize(x, xRange, yRange) {\n return yRange[0] + (((x-xRange[0]) * (yRange[1]-yRange[0])) / (xRange[1]-xRange[0]))\n }\n\n hslToRgb(h, s, l) {\n [h, s, l] = [\n this.normalize(h, this.ranges.hue, [0, 360]),\n this.normalize(s, this.ranges.sat, [0, 100]),\n this.normalize(l, this.ranges.bri, [0, 100]),\n ]\n\n l /= 100\n const a = s * Math.min(l, 1 - l) / 100\n const f = n => {\n const k = (n + h / 30) % 12\n const color = l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1)\n return Math.round(255 * color)\n }\n\n return [f(0), f(8), f(4)]\n }\n\n rgbToHsl(r, g, b){\n r /= 255\n g /= 255\n b /= 255;\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if(max === min){\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch(max){\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n h /= 6;\n }\n\n return [\n parseInt(this.normalize(h, [0, 1], this.ranges.hue)),\n parseInt(this.normalize(s, [0, 1], this.ranges.sat)),\n parseInt(this.normalize(l, [0, 1], this.ranges.bri)),\n ]\n }\n\n xyToRgb(x, y, brightness) {\n // Set to maximum brightness if no custom value was given (Not the slick ECMAScript 6 way for compatibility reasons)\n if (brightness == null)\n brightness = this.ranges.bri[1];\n\n const z = 1.0 - x - y;\n const Y = (brightness / (this.ranges.bri[1]-1)).toFixed(2);\n const X = (Y / y) * x;\n const Z = (Y / y) * z;\n\n //Convert to RGB using Wide RGB D65 conversion\n let red \t= X * 1.656492 - Y * 0.354851 - Z * 0.255038;\n let green = -X * 0.707196 + Y * 1.655397 + Z * 0.036152;\n let blue \t= X * 0.051713 - Y * 0.121364 + Z * 1.011530;\n\n //If red, green or blue is larger than 1.0 set it back to the maximum of 1.0\n if (red > blue && red > green && red > 1.0) {\n green = green / red;\n blue = blue / red;\n red = 1.0;\n } else if (green > blue && green > red && green > 1.0) {\n red = red / green;\n blue = blue / green;\n green = 1.0;\n } else if (blue > red && blue > green && blue > 1.0) {\n red = red / blue;\n green = green / blue;\n blue = 1.0;\n }\n\n //Reverse gamma correction\n red \t= red <= 0.0031308 ? 12.92 * red : (1.0 + 0.055) * Math.pow(red, (1.0 / 2.4)) - 0.055;\n green \t= green <= 0.0031308 ? 12.92 * green : (1.0 + 0.055) * Math.pow(green, (1.0 / 2.4)) - 0.055;\n blue \t= blue <= 0.0031308 ? 12.92 * blue : (1.0 + 0.055) * Math.pow(blue, (1.0 / 2.4)) - 0.055;\n\n //Convert normalized decimal to decimal\n red \t= Math.round(red * 255);\n green \t= Math.round(green * 255);\n blue \t= Math.round(blue * 255);\n\n if (isNaN(red))\n red = 0;\n if (isNaN(green))\n green = 0;\n if (isNaN(blue))\n blue = 0;\n\n return [red, green, blue].map((c) => Math.min(Math.max(0, c), 255))\n }\n\n rgbToXY(red, green, blue) {\n if (red > 1) { red /= 255; }\n if (green > 1) { green /= 255; }\n if (blue > 1) { blue /= 255; }\n\n //Apply a gamma correction to the RGB values, which makes the color more vivid and more the like the color displayed on the screen of your device\n red \t= (red > 0.04045) ? Math.pow((red + 0.055) / (1.0 + 0.055), 2.4) : (red / 12.92);\n green \t= (green > 0.04045) ? Math.pow((green + 0.055) / (1.0 + 0.055), 2.4) : (green / 12.92);\n blue \t= (blue > 0.04045) ? Math.pow((blue + 0.055) / (1.0 + 0.055), 2.4) : (blue / 12.92);\n\n //RGB values to XYZ using the Wide RGB D65 conversion formula\n const X \t\t= red * 0.664511 + green * 0.154324 + blue * 0.162028;\n const Y \t\t= red * 0.283881 + green * 0.668433 + blue * 0.047685;\n const Z \t\t= red * 0.000088 + green * 0.072310 + blue * 0.986039;\n\n //Calculate the xy values from the XYZ values\n let x \t\t= parseFloat((X / (X + Y + Z)).toFixed(4));\n let y \t\t= parseFloat((Y / (X + Y + Z)).toFixed(4));\n\n if (isNaN(x))\n x = 0;\n if (isNaN(y))\n y = 0;\n\n return [x, y];\n }\n\n rgbToBri(red, green, blue) {\n return Math.min(2 * this.rgbToHsl(red, green, blue)[2], this.ranges.bri[1])\n }\n\n getRGB(color) {\n if (color.red != null && color.green != null && color.blue != null)\n return [color.red, color.green, color.blue]\n if (color.r != null && color.g != null && color.b != null)\n return [color.r, color.g, color.b]\n if (color.rgb)\n return color.rgb\n }\n\n getXY(color) {\n if (color.x != null && color.y != null)\n return [color.x, color.y]\n if (color.xy)\n return color.xy\n }\n\n toRGB(color) {\n const rgb = this.getRGB(color)\n if (rgb)\n return rgb\n\n const xy = this.getXY(color)\n if (xy && color.bri)\n return this.xyToRgb(...xy, color.bri)\n if (color.hue && color.sat && color.bri)\n return this.hslToRgb(color.hue, color.sat, color.bri)\n\n console.debug('Could not determine color space')\n console.debug(color)\n }\n\n toXY(color) {\n const xy = this.getXY(color)\n if (xy && color.bri)\n return [xy[0], xy[1], color.bri]\n\n const rgb = this.getRGB(color)\n if (rgb)\n return this.rgbToXY(...rgb)\n\n if (color.hue && color.sat && color.bri) {\n const rgb = this.hslToRgb(color.hue, color.sat, color.bri)\n return this.rgbToXY(...rgb)\n }\n\n console.debug('Could not determine color space')\n console.debug(color)\n }\n\n toHSL(color) {\n if (color.hue && color.sat && color.bri)\n return [color.hue, color.sat, color.bri]\n\n const rgb = this.getRGB(color)\n if (rgb)\n return this.rgbToHsl(...rgb)\n\n const xy = this.getXY(color)\n if (xy && color.bri) {\n const rgb = this.xyToRgb(...xy, color.bri)\n return this.rgbToHsl(...rgb)\n }\n\n console.debug('Could not determine color space')\n console.debug(color)\n }\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) {\n var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE;\n var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0;\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];\n return replacer !== undefined\n ? replacer.call(searchValue, O, replaceValue)\n : nativeReplace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n if (\n (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) ||\n (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1)\n ) {\n var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);\n if (res.done) return res.value;\n }\n\n var rx = anObject(regexp);\n var S = String(this);\n\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n\n results.push(result);\n if (!global) break;\n\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return nativeReplace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","<template>\n <div class=\"zigbee-container\">\n <Loading v-if=\"loading\" />\n\n <Modal title=\"Network Info\" ref=\"infoModal\">\n <div class=\"info-body\" v-if=\"status.info\">\n <div class=\"row\">\n <div class=\"param-name\">State</div>\n <div class=\"param-value\" v-text=\"status.state\" />\n </div>\n\n <div class=\"row\">\n <div class=\"param-name\">Permit Join</div>\n <div class=\"param-value\" v-text=\"status.info.permit_join\" />\n </div>\n\n <div class=\"row\" v-if=\"status.info.network\">\n <div class=\"param-name\">Network Channel</div>\n <div class=\"param-value\" v-text=\"status.info.network.channel\" />\n </div>\n\n <div class=\"row\">\n <div class=\"param-name\">Zigbee2MQTT Version</div>\n <div class=\"param-value\" v-text=\"status.info.version\" />\n </div>\n\n <div class=\"row\" v-if=\"status.info.config?.mqtt\">\n <div class=\"param-name\">MQTT Server</div>\n <div class=\"param-value\" v-text=\"status.info.config.mqtt.server\" />\n </div>\n\n <div class=\"row\" v-if=\"status.info.config?.serial\">\n <div class=\"param-name\">Serial Port</div>\n <div class=\"param-value\" v-text=\"status.info.config.serial.port\" />\n </div>\n\n <div class=\"row\" v-if=\"status.info.coordinator?.type\">\n <div class=\"param-name\">Firmware Type</div>\n <div class=\"param-value\" v-text=\"status.info.coordinator.type\" />\n </div>\n\n <div class=\"row\" v-if=\"status.info.coordinator?.meta\">\n <div class=\"param-name\">Firmware Version</div>\n <div class=\"param-value\">\n {{ status.info.coordinator.meta.maintrel }}.{{ status.info.coordinator.meta.majorrel }}.{{ status.info.coordinator.meta.minorrel }}\n </div>\n </div>\n\n <div class=\"row\" v-if=\"status.info.coordinator?.meta\">\n <div class=\"param-name\">Firmware Revision</div>\n <div class=\"param-value\" v-text=\"status.info.coordinator.meta.revision\" />\n </div>\n </div>\n </Modal>\n\n <div class=\"view-options\">\n <div class=\"view-selector col-s-8 col-m-9 col-l-10\">\n <label>\n <select :value=\"selected.view\" @change=\"this.selected.view = $event.target.value\">\n <option v-for=\"(enabled, view) in views\"\n v-text=\"(view[0].toUpperCase() + view.slice(1)).replace('_', ' ')\"\n :key=\"view\" :selected=\"enabled\" :value=\"view\">\n </option>\n </select>\n </label>\n </div>\n\n <div class=\"buttons\">\n <button class=\"btn btn-default\" title=\"Add Group\" v-if=\"selected.view === 'groups'\"\n :disabled=\"loading\" @click=\"addGroup\">\n <i class=\"fa fa-plus\"></i>\n </button>\n\n <Dropdown ref=\"networkCommandsDropdown\" icon-class=\"fa fa-cog\" title=\"Network commands\">\n <DropdownItem text=\"Network Info\" :disabled=\"loading\" @click=\"$refs.infoModal.show()\" />\n <DropdownItem text=\"Permit Join\" :disabled=\"loading\" @click=\"permitJoin(true)\"\n v-if=\"!status.info?.permit_join\" />\n <DropdownItem text=\"Disable Join\" :disabled=\"loading\" @click=\"permitJoin(false)\" v-else/>\n <DropdownItem text=\"Factory Reset\" :disabled=\"loading\" @click=\"factoryReset\" />\n </Dropdown>\n\n <button class=\"btn btn-default\" title=\"Refresh network\" :disabled=\"loading\" @click=\"refresh\">\n <i class=\"fa fa-sync-alt\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"view-container\">\n <div class=\"view devices\" v-if=\"selected.view === 'devices'\">\n <div class=\"no-items\" v-if=\"!Object.keys(devices).length\">\n <div class=\"loading\" v-if=\"loading\">Loading devices...</div>\n <div class=\"empty\" v-else>No devices found on the network</div>\n </div>\n\n <Device v-for=\"(device, id) in devices\" :key=\"id\"\n :device=\"device\" :groups=\"groups\" :selected=\"selected.deviceId === id\"\n @select=\"selected.deviceId = selected.deviceId === id ? null : id\"\n @rename=\"refreshDevices\" @remove=\"refreshDevices\" @groups-edit=\"refreshGroups\" />\n </div>\n\n <div class=\"view groups\" v-else-if=\"selected.view === 'groups'\">\n <div class=\"no-items\" v-if=\"!Object.keys(groups).length\">\n <div class=\"loading\" v-if=\"loading\">Loading groups...</div>\n <div class=\"empty\" v-else>No groups available on the network</div>\n </div>\n\n <Group v-for=\"(group, id) in groups\" :key=\"id\" :group=\"group\" :devices=\"devices\"\n :selected=\"selected.groupId === id\"\n @select=\"selected.groupId = selected.groupId === id ? null : id\"\n @rename=\"refreshGroups\" @remove=\"refreshGroups\" @edit=\"refreshGroups\" />\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport Dropdown from \"../../elements/Dropdown\"\nimport DropdownItem from \"@/components/elements/DropdownItem\"\nimport Loading from \"@/components/Loading\"\nimport Utils from \"@/Utils\"\n\nimport Device from \"@/components/panels/ZigbeeMqtt/Device\";\nimport Group from \"@/components/panels/ZigbeeMqtt/Group\";\nimport Modal from \"@/components/Modal\";\n\nexport default {\n name: \"ZigbeeMqtt\",\n components: {Modal, Dropdown, DropdownItem, Loading, Device, Group},\n mixins: [Utils],\n\n data() {\n return {\n devices: {},\n groups: {},\n status: {},\n loading: false,\n selected: {\n view: 'devices',\n deviceId: undefined,\n groupId: undefined,\n },\n views: {\n devices: true,\n groups: true,\n },\n modal: {\n group: {\n visible: false,\n },\n },\n }\n },\n\n methods: {\n async refreshDevices() {\n this.loading = true\n\n try {\n this.devices = (await this.request('zigbee.mqtt.devices')).reduce((devices, device) => {\n if (device.friendly_name in this.devices) {\n device = {\n values: this.devices[device.friendly_name].values || {},\n ...this.devices[device.friendly_name],\n }\n }\n\n devices[device.friendly_name] = device\n return devices\n }, {})\n } finally {\n this.loading = false\n }\n },\n\n async refreshGroups() {\n this.loading = true\n try {\n this.groups = (await this.request('zigbee.mqtt.groups')).reduce((groups, group) => {\n groups[group.id] = group\n return groups\n }, {})\n } finally {\n this.loading = false\n }\n },\n\n async refreshInfo() {\n this.loading = true\n try {\n this.status = await this.request('zigbee.mqtt.info')\n } finally {\n this.loading = false\n }\n },\n\n refresh() {\n this.refreshDevices()\n this.refreshGroups()\n this.refreshInfo()\n },\n\n updateProperties(device, props) {\n this.devices[device].values = props\n },\n\n async addGroup() {\n const name = prompt('Group name')\n if (!(name && name.length)) {\n return\n }\n\n this.loading = true\n try {\n await this.request('zigbee.mqtt.group_add', {name: name})\n } finally {\n this.loading = false\n }\n\n await this.refreshGroups()\n },\n\n async permitJoin(permit) {\n const args = {permit: !!permit}\n if (permit) {\n let seconds = prompt('Join allow period in seconds (0 or empty for no time limits)', '60')\n args.seconds = seconds.length ? parseInt(seconds) : null\n }\n\n this.loading = true\n try {\n await this.request('zigbee.mqtt.permit_join', args)\n setTimeout(this.refreshInfo, 1000)\n } finally {\n this.loading = false\n }\n },\n\n async factoryReset() {\n if (!confirm('Are you SURE that you want to do a device factory reset?')) {\n if (!confirm('Are you REALLY sure? ALL network information and custom firmware will be lost!!'))\n return\n }\n\n this.loading = true\n try {\n await this.request('zigbee.mqtt.factory_reset')\n } finally {\n this.loading = false\n }\n },\n\n async addToGroup(device, group) {\n this.loading = true\n await this.request('zigbee.mqtt.group_add_device', {\n device: device,\n group: group,\n })\n\n this.loading = false\n const self = this\n\n setTimeout(() => {\n self.refresh()\n self.refreshGroups()\n }, 100)\n },\n },\n\n created() {\n this.subscribe(() => {\n this.notify({\n text: 'WARNING: The controller is offline',\n error: true,\n })\n }, 'on-zigbee-offline', 'platypush.message.event.zigbee.mqtt.ZigbeeMqttOfflineEvent')\n\n this.subscribe(() => {\n this.notify({\n text: 'The controller is now online',\n iconClass: 'fas fa-check',\n })\n }, 'on-zigbee-online', 'platypush.message.event.zigbee.mqtt.ZigbeeMqttOnlineEvent')\n\n this.subscribe(() => {\n this.notify({\n text: 'Failed to remove the device',\n error: true,\n })\n }, 'on-zigbee-device-remove-failed', 'platypush.message.event.zigbee.mqtt.ZigbeeMqttDeviceRemovedFailedEvent')\n\n this.subscribe(() => {\n this.notify({\n text: 'Failed to add the group',\n error: true,\n })\n }, 'on-zigbee-group-add-failed', 'platypush.message.event.zigbee.mqtt.ZigbeeMqttGroupAddedFailedEvent')\n\n this.subscribe(() => {\n this.notify({\n text: 'Failed to remove group',\n error: true,\n })\n }, 'on-zigbee-group-remove-failed', 'platypush.message.event.zigbee.mqtt.ZigbeeMqttGroupRemovedFailedEvent')\n\n this.subscribe(() => {\n this.notify({\n text: 'Failed to remove the devices from group',\n error: true,\n })\n }, 'on-zigbee-remove-all-failed',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttGroupRemoveAllFailedEvent')\n\n this.subscribe((event) => {\n this.notify({\n text: event.error || '[Unknown error]',\n error: true,\n })\n }, 'on-zigbee-error', 'platypush.message.event.zigbee.mqtt.ZigbeeMqttErrorEvent')\n\n this.subscribe(this.refresh, 'on-zigbee-device-update',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttOnlineEvent',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttDevicePairingEvent',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttDeviceConnectedEvent',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttDeviceBannedEvent',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttDeviceRemovedEvent',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttDeviceWhitelistedEvent',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttDeviceRenamedEvent',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttDeviceBindEvent',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttDeviceUnbindEvent',\n )\n\n this.subscribe(this.refreshGroups, 'on-zigbee-group-update',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttGroupAddedEvent',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttGroupRemovedEvent',\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttGroupRemoveAllEvent',\n )\n },\n\n mounted() {\n this.refresh()\n },\n\n unmounted() {\n this.unsubscribe('on-zigbee-error')\n this.unsubscribe('on-zigbee-remove-all-failed')\n this.unsubscribe('on-zigbee-group-remove-failed')\n this.unsubscribe('on-zigbee-group-add-failed')\n this.unsubscribe('on-zigbee-device-remove-failed')\n this.unsubscribe('on-zigbee-online')\n this.unsubscribe('on-zigbee-offline')\n this.unsubscribe('on-zigbee-device-update')\n this.unsubscribe('on-zigbee-group-update')\n },\n}\n</script>\n\n<style lang=\"scss\">\n@import \"common\";\n\n.zigbee-container {\n width: 100%;\n height: 100%;\n padding: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n overflow: auto;\n\n .no-items {\n padding: 2em;\n font-size: 1.5em;\n color: $no-items-color;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .view-options {\n display: flex;\n width: 100%;\n height: $header-height;\n justify-content: space-between;\n align-items: center;\n padding: 0;\n background: $header-bg;\n border-bottom: $default-border-2;\n box-shadow: $border-shadow-bottom;\n\n .view-selector {\n display: inline-flex;\n padding-left: .5em;\n\n label {\n width: 100%;\n }\n }\n\n .buttons {\n display: inline-flex;\n margin: 0;\n\n button {\n background: none;\n border: none;\n padding: 0 .75em;\n\n &:hover {\n color: $default-hover-fg;\n }\n }\n\n .dropdown {\n .item {\n padding: .5em 2em .5em .5em;\n }\n }\n }\n }\n\n .view-container {\n width: 100%;\n height: calc(100% - #{$header-height});\n display: flex;\n justify-content: center;\n overflow: auto;\n }\n\n .view {\n height: max-content;\n background: $view-bg;\n border: $view-border;\n box-shadow: $view-box-shadow;\n }\n\n @media screen and (max-width: $tablet) {\n .view {\n width: 100%;\n }\n }\n\n @media screen and (min-width: $tablet) {\n .view {\n width: 100%;\n }\n }\n\n @media screen and (min-width: $desktop) {\n .view {\n min-width: 400pt;\n max-width: 750pt;\n border-radius: 1.5em;\n }\n\n .view-container {\n padding-top: 2em;\n }\n }\n\n .params {\n background: $params-bg;\n padding-bottom: 1em;\n\n .section {\n display: flex;\n flex-direction: column;\n padding: 0 1em;\n\n &:not(:first-child) {\n padding-top: 1em;\n }\n\n .header {\n display: flex;\n align-items: center;\n font-weight: bold;\n border-bottom: $param-section-header-border;\n }\n }\n\n }\n\n .btn-value-name-edit {\n padding: 0;\n }\n\n .modal {\n .section {\n .header {\n background: none;\n padding: .5em 0;\n }\n\n .body {\n padding: 0;\n }\n }\n\n .network-info {\n min-width: 600pt;\n }\n }\n\n .error {\n color: $error-color;\n }\n\n .device, .group {\n .actions {\n .row {\n cursor: pointer;\n }\n }\n\n form {\n margin-bottom: 0;\n }\n\n .param-value {\n input[type=text] {\n text-align: right;\n }\n }\n }\n\n .info-body {\n margin: -2em;\n padding: 0;\n\n .row {\n padding: 1em .5em;\n\n .param-name {\n font-weight: bold;\n }\n }\n }\n\n @media screen and (max-width: $tablet) {\n .info-body {\n width: 100vw;\n }\n }\n\n @media screen and (min-width: $tablet) {\n .info-body {\n width: 80vw;\n }\n }\n\n @media screen and (min-width: $desktop) {\n .info-body {\n width: 60vw;\n max-width: 30em;\n }\n }\n}\n</style>\n","<template>\n <div class=\"item device\" :class=\"{selected: selected}\">\n <Loading v-if=\"loading\" />\n\n <Modal class=\"groups-modal\" ref=\"groupsModal\" title=\"Device groups\">\n <Loading v-if=\"loading\" />\n\n <form class=\"content\" @submit.prevent=\"manageGroups\">\n <div class=\"groups\">\n <label class=\"row group\" v-for=\"(group, id) in groups\" :key=\"id\">\n <input type=\"checkbox\" :value=\"id\" :checked=\"associatedGroups.has(parseInt(group.id))\">\n <span class=\"name\" v-text=\"group.friendly_name?.length ? group.friendly_name : `[Group #${group.id}]`\" />\n </label>\n </div>\n\n <div class=\"footer buttons\">\n <button type=\"submit\">Save</button>\n </div>\n </form>\n </Modal>\n\n <div class=\"row name header vertical-center\" :class=\"{selected: selected}\"\n v-text=\"device.friendly_name || device.ieee_address\" @click=\"$emit('select')\" />\n\n <div class=\"params\" v-if=\"selected\">\n <div class=\"row\">\n <div class=\"param-name\">Name</div>\n <div class=\"param-value\">\n <div class=\"name-edit\" :class=\"{hidden: !editName}\">\n <form @submit.prevent=\"rename\">\n <label>\n <input type=\"text\" name=\"name\" ref=\"name\" :value=\"device.friendly_name\">\n </label>\n\n <span class=\"buttons\">\n <button type=\"button\" class=\"btn btn-default\" @click=\"editName = false\">\n <i class=\"fas fa-times\"></i>\n </button>\n\n <button type=\"submit\" class=\"btn btn-default\">\n <i class=\"fa fa-check\"></i>\n </button>\n </span>\n </form>\n </div>\n\n <div class=\"name-edit\" :class=\"{hidden: editName}\">\n <span v-text=\"device.friendly_name\"></span>\n <span class=\"buttons\">\n <button type=\"button\" class=\"btn btn-default\" @click=\"editName = true\">\n <i class=\"fa fa-edit\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"param-name\">IEEE Address</div>\n <div class=\"param-value\" v-text=\"device.ieee_address\"></div>\n </div>\n\n <div class=\"row\" v-if=\"device.network_address\">\n <div class=\"param-name\">Network Address</div>\n <div class=\"param-value\" v-text=\"device.network_address\"></div>\n </div>\n\n <div class=\"row\">\n <div class=\"param-name\">Type</div>\n <div class=\"param-value\" v-text=\"device.type\"></div>\n </div>\n\n <div class=\"row\" v-if=\"device.definition?.vendor\">\n <div class=\"param-name\">Vendor</div>\n <div class=\"param-value\">\n {{ device.definition.vendor }}\n </div>\n </div>\n\n <div class=\"row\" v-if=\"device.definition?.model\">\n <div class=\"param-name\">Model</div>\n <div class=\"param-value\">\n {{ device.definition.model }}\n </div>\n </div>\n\n <div class=\"row\" v-if=\"device.model_id\">\n <div class=\"param-name\">Model ID</div>\n <div class=\"param-value\">\n {{ device.model_id }}\n </div>\n </div>\n\n <div class=\"row\" v-if=\"device.definition?.description\">\n <div class=\"param-name\">Description</div>\n <div class=\"param-value\">\n {{ device.definition.description }}\n </div>\n </div>\n\n <div class=\"row\" v-if=\"device.software_build_id\">\n <div class=\"param-name\">Software Build ID</div>\n <div class=\"param-value\">\n {{ device.software_build_id }}\n </div>\n </div>\n\n <div class=\"row\" v-if=\"device.definition?.date_code\">\n <div class=\"param-name\">Date Code</div>\n <div class=\"param-value\">\n {{ device.definition.date_code }}\n </div>\n </div>\n\n <div class=\"row\" v-if=\"device.power_source\">\n <div class=\"param-name\">Power Source</div>\n <div class=\"param-value\">\n {{ device.power_source }}\n </div>\n </div>\n\n <div class=\"section values\" v-if=\"Object.keys(displayedValues).length\">\n <div class=\"header\">\n <div class=\"title\">Values</div>\n </div>\n\n <div class=\"body\">\n <div class=\"row value\" v-for=\"(value, property) in displayedValues\" :key=\"property\">\n <div class=\"param-name\">\n {{ value.description }}\n <span class=\"text\" v-if=\"rgbColor != null && (value.value?.x != null && value.value?.y != null) ||\n (value.value?.hue != null && value.value?.saturation != null)\">Color</span>\n <span class=\"name\" v-text=\"value.property\" v-if=\"value.property\" />\n <span class=\"unit\" v-text=\"value.unit\" v-if=\"value.unit\" />\n </div>\n\n <div class=\"param-value\">\n <ToggleSwitch :value=\"value.value_on != null ? value.value === value.value_on : !!value.value\"\n :disabled=\"!value.writable\" v-if=\"value.type === 'binary'\"\n @input=\"setValue(value, $event)\" />\n\n <Slider :with-label=\"true\" :range=\"[value.value_min, value.value_max]\" :value=\"value.value\"\n :disabled=\"!value.writable\" @change=\"setValue(value, $event)\"\n v-else-if=\"value.type === 'numeric' && value.value_min != null && value.value_max != null\" />\n\n <label v-else-if=\"value.type === 'numeric' && (value.value_min == null || value.value_max == null)\">\n <input type=\"number\" :with-label=\"true\" :value=\"value.value\" :disabled=\"!value.writable\"\n @change=\"setValue(value, $event)\" />\n </label>\n\n <label v-else-if=\"value.type === 'enum'\">\n <select :value=\"value.readable && value.value != null ? value.value : ''\"\n @change=\"setValue(value, $event)\">\n <option v-if=\"!value.readable\" />\n <option v-for=\"option in value.values\" :key=\"option\" :value=\"option\" v-text=\"option\"\n :selected=\"value.readable && value.value === option\" :disabled=\"!value.writable\" />\n </select>\n </label>\n\n <label v-else-if=\"rgbColor != null && (value.value?.x != null && value.value?.y != null) ||\n (value.value?.hue != null && value.value?.saturation != null)\">\n <input type=\"color\" @change.stop=\"setValue(value, $event)\"\n :value=\"'#' + rgbColor.map((i) => { i = Number(i).toString(16); return i.length === 1 ? '0' + i : i }).join('')\" />\n </label>\n\n <label v-else>\n <input type=\"text\" :disabled=\"!value.writable\" :value=\"value.value\" @change=\"setValue(value, $event)\" />\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"section actions\">\n <div class=\"header\">\n <div class=\"title\">Actions</div>\n </div>\n\n <div class=\"body\">\n <div class=\"row\" @click=\"$refs.groupsModal.show()\">\n <div class=\"param-name\">Manage groups</div>\n <div class=\"param-value\">\n <i class=\"fa fa-network-wired\" />\n </div>\n </div>\n\n <div class=\"row\" @click=\"otaUpdatesAvailable ? installOtaUpdates() : checkOtaUpdates()\">\n <div class=\"param-name\" v-if=\"!otaUpdatesAvailable\">Check for updates</div>\n <div class=\"param-name\" v-else>Install updates</div>\n <div class=\"param-value\">\n <i class=\"fa fa-sync-alt\" />\n </div>\n </div>\n\n <div class=\"row\" @click=\"remove(false)\">\n <div class=\"param-name\">Remove Device</div>\n <div class=\"param-value\">\n <i class=\"fa fa-trash\" />\n </div>\n </div>\n\n <div class=\"row error\" @click=\"remove(true)\">\n <div class=\"param-name\">Force Remove Device</div>\n <div class=\"param-value\">\n <i class=\"fa fa-trash\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport Loading from \"@/components/Loading\";\nimport Slider from \"@/components/elements/Slider\";\nimport ToggleSwitch from \"@/components/elements/ToggleSwitch\";\nimport Utils from \"@/Utils\";\nimport {ColorConverter} from \"@/components/panels/Light/color\";\nimport Modal from \"@/components/Modal\";\n\nexport default {\n name: \"Device\",\n components: {Modal, ToggleSwitch, Slider, Loading},\n mixins: [Utils],\n emits: ['select', 'rename', 'remove', 'groups-edit'],\n\n props: {\n device: {\n type: Object,\n required: true,\n },\n\n groups: {\n type: Object,\n default: () => {},\n },\n\n selected: {\n type: Boolean,\n default: false,\n },\n },\n\n data() {\n return {\n editName: false,\n loading: false,\n status: {},\n otaUpdatesAvailable: false,\n }\n },\n\n computed: {\n values() {\n if (!this.device.definition?.exposes)\n return {}\n\n const extractValues = (values) => {\n const extractValue = (value, root) => {\n if (!value.features) {\n if (value.property)\n root[value.property] = value\n\n return\n }\n\n if (value.property) {\n root[value.property] = root[value.property] || {}\n root = root[value.property]\n }\n\n for (const feature of value.features)\n extractValue(feature, root)\n }\n\n const ret = {}\n for (const value of values)\n extractValue(value, ret)\n\n return ret\n }\n\n return extractValues(this.device.definition.exposes)\n },\n\n displayedValues() {\n const ret = {}\n const mergeValues = (obj, [key, value]) => {\n if (key in this.status)\n value = {\n ...value,\n value: this.status[key]\n }\n\n if (value.access != null) {\n value.readable = !!(value.access & 0x1)\n value.writable = !!(value.access & 0x2)\n delete value.access\n }\n\n obj[key] = value\n Object.entries(value).filter((v) => v[1] instanceof Object).reduce(mergeValues, obj[key])\n return obj\n }\n\n Object.entries(this.values).reduce(mergeValues, ret)\n return ret\n },\n\n rgbColor() {\n if (!this.displayedValues.color)\n return\n\n const color = this.displayedValues.color?.value\n if (!color)\n return\n\n if (color.x != null && color.y != null) {\n const converter = new ColorConverter({\n bri: [this.displayedValues.brightness?.value_min || 0, this.displayedValues.brightness?.value_max || 255],\n })\n\n return converter.xyToRgb(color.x, color.y, this.displayedValues.brightness.value)\n } else\n if (color.hue != null && (color.saturation != null || color.sat != null)) {\n const satAttr = color.saturation != null ? 'saturation' : 'sat'\n const converter = new ColorConverter({\n hue: [this.displayedValues.color.hue?.value_min || 0, this.displayedValues.color.hue.value_max || 65535],\n sat: [this.displayedValues.color[satAttr]?.value_min || 0, this.displayedValues.color[satAttr].value_max || 255],\n bri: [this.displayedValues.brightness?.value_min || 0, this.displayedValues.brightness?.value_max || 255],\n })\n\n return converter.hslToRgb(color.hue, color[satAttr], this.displayedValues.brightness.value)\n }\n\n return null\n },\n\n associatedGroups() {\n return new Set(Object.values(this.groups)\n .filter((group) => new Set(\n (group.members || []).map((member) => member.ieee_address)).has(this.device.ieee_address))\n .map((group) => parseInt(group.id)))\n },\n },\n\n methods: {\n async refresh() {\n this.loading = true\n try {\n this.status = await this.request('zigbee.mqtt.device_get',\n {device: this.device.friendly_name || this.device.ieee_address})\n } finally {\n this.loading = false\n }\n },\n\n async rename() {\n const name = (this.$refs.name.value || '').trim()\n if (!name.length || name === this.device.friendly_name)\n return\n\n this.loading = true\n try {\n await this.request('zigbee.mqtt.device_rename', {\n device: this.device.friendly_name?.length ? this.device.friendly_name : this.device.ieee_address,\n name: name,\n })\n\n this.$emit('rename', {name: this.device.friendly_name, newName: name});\n } finally {\n this.editName = false\n this.loading = false\n }\n },\n\n async remove(force) {\n if (!confirm('Are you really sure that you want to remove this device from the network?'))\n return\n\n force = !!force\n this.loading = true\n try {\n await this.request('zigbee.mqtt.device_remove', {\n device: this.device.friendly_name?.length ? this.device.friendly_name : this.device.ieee_address,\n force: force,\n })\n\n this.$emit('remove', {device: this.device.friendly_name || this.device.ieee_address});\n } finally {\n this.loading = false\n }\n },\n\n async setValue(value, event) {\n const request = {\n device: this.device.friendly_name || this.device.ieee_address,\n property: value.property,\n value: null,\n }\n\n switch (value.type) {\n case 'binary':\n if (value.value_toggle) {\n request.value = value.value_toggle\n } else if (value.value_on && value.value_off) {\n request.value = value.value === value.value_on ? value.value_off : value.value_on\n } else {\n request.value = !value.value\n }\n break\n\n case 'numeric':\n request.value = parseFloat(event.target.value)\n break\n\n case 'enum':\n if (event.target.value?.length) {\n request.value = event.target.value\n }\n break\n\n default:\n if ((value.x != null && value.y != null) || (value.hue != null && (value.saturation != null || value.sat != null))) {\n request.property = 'color'\n const rgb = event.target.value.slice(1)\n .split(/([0-9a-fA-F]{2})/)\n .filter((_, i) => i % 2)\n .map((i) => parseInt(i, 16))\n\n if ((value.x != null && value.y != null)) {\n const converter = new ColorConverter({\n bri: [this.displayedValues.brightness?.value_min || 0, this.displayedValues.brightness?.value_max || 255],\n })\n\n const xy = converter.rgbToXY(...rgb)\n request.value = {\n color: {\n x: xy[0],\n y: xy[1],\n }\n }\n } else {\n const satAttr = this.displayedValues.color.saturation != null ? 'saturation' : 'sat'\n const converter = new ColorConverter({\n hue: [this.displayedValues.color.hue?.value_min || 0, this.displayedValues.color.hue.value_max || 65535],\n sat: [this.displayedValues.color[satAttr]?.value_min || 0, this.displayedValues.color[satAttr].value_max || 255],\n bri: [this.displayedValues.brightness?.value_min || 0, this.displayedValues.brightness?.value_max || 255],\n })\n\n const hsl = converter.rgbToHsl(...rgb)\n request.value = {\n brightness: hsl[2],\n color: {\n hue: hsl[0],\n '`${satAttr}': hsl[1],\n }\n }\n }\n }\n break\n }\n\n if (request.value == null)\n return\n\n this.loading = true\n try {\n await this.request('zigbee.mqtt.device_set', request)\n await this.refresh()\n } finally {\n this.loading = false\n }\n },\n\n async manageGroups(event) {\n const groups = [...event.target.querySelectorAll('input[type=checkbox]')].reduce((obj, element) => {\n const groupId = parseInt(element.value)\n if (element.checked && !this.associatedGroups.has(groupId))\n obj.add.add(groupId)\n else if (!element.checked && this.associatedGroups.has(groupId))\n obj.remove.add(groupId)\n\n return obj\n }, {add: new Set(), remove: new Set()})\n\n const editGroups = async (action) => {\n await Promise.all([...groups[action]].map(async (groupId) => {\n await this.request(`zigbee.mqtt.group_${action}_device`, {\n group: this.groups[groupId].friendly_name,\n device: this.device.friendly_name?.length ? this.device.friendly_name : this.device.ieee_address,\n })\n }))\n }\n\n this.loading = true\n try {\n await Promise.all(Object.keys(groups).map(editGroups))\n this.$emit('groups-edit', groups)\n } finally {\n this.loading = false\n }\n },\n\n async checkOtaUpdates() {\n this.loading = true\n try {\n this.otaUpdatesAvailable = (await this.request('zigbee.mqtt.device_check_ota_updates', {\n device: this.device.friendly_name?.length ? this.device.friendly_name : this.device.ieee_address,\n })).update_available\n\n if (this.otaUpdatesAvailable)\n this.notify({\n text: 'A firmware update is available for the device',\n image: {\n iconClass: 'fa fa-sync-alt',\n }\n })\n else\n this.notify({\n text: 'The device is up to date',\n image: {\n iconClass: 'fa fa-check',\n }\n })\n } finally {\n this.loading = false\n }\n },\n\n async installOtaUpdates() {\n this.loading = true\n try {\n await this.request('zigbee.mqtt.device_install_ota_updates', {\n device: this.device.friendly_name?.length ? this.device.friendly_name : this.device.ieee_address,\n })\n } finally {\n this.loading = false\n }\n },\n },\n\n mounted() {\n this.$watch(() => this.selected, (newValue) => {\n if (newValue)\n this.refresh()\n })\n\n this.$watch(() => this.status.update_available, (newValue) => {\n this.otaUpdatesAvailable = newValue\n })\n\n this.subscribe((event) => {\n if (event.device !== this.device.friendly_name && event.device !== this.device.ieee_address)\n return\n\n this.status = {...this.status, ...event.properties}\n }, `on-property-change-${this.device.ieee_address}`,\n 'platypush.message.event.zigbee.mqtt.ZigbeeMqttDevicePropertySetEvent')\n },\n\n unmounted() {\n this.unsubscribe(`on-property-change-${this.device.ieee_address}`)\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"common\";\n\n.groups-modal {\n .content {\n min-width: 20em;\n margin: -2em;\n padding: 0;\n border: none;\n box-shadow: none;\n }\n\n .group {\n width: 100%;\n display: flex;\n align-items: center;\n padding: .5em 1em !important;\n\n input[type=checkbox] {\n margin-right: 1em;\n }\n }\n\n .groups {\n width: 100%;\n height: calc(100% - 3.5em);\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: auto;\n }\n\n .footer {\n width: 100%;\n height: 3.5em;\n display: flex;\n justify-content: right;\n align-items: center;\n padding: 0;\n background: $default-bg-2;\n border-top: $default-border-2;\n }\n}\n\n@media screen and (max-width: $tablet) {\n .section.actions {\n .row {\n flex-direction: row-reverse;\n justify-content: left;\n\n .param-name {\n width: auto;\n }\n\n .param-value {\n width: 1.5em;\n margin-right: .5em;\n }\n }\n }\n}\n</style>\n","import { render } from \"./Device.vue?vue&type=template&id=1cab1d68&scoped=true\"\nimport script from \"./Device.vue?vue&type=script&lang=js\"\nexport * from \"./Device.vue?vue&type=script&lang=js\"\n\nimport \"./Device.vue?vue&type=style&index=0&id=1cab1d68&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1cab1d68\"\n\nexport default script","<template>\n <div class=\"item group\" :class=\"{selected: selected}\">\n <Loading v-if=\"loading\" />\n <div class=\"row name header vertical-center\" :class=\"{selected: selected}\"\n v-text=\"group.friendly_name\" @click=\"$emit('select')\" />\n\n <div class=\"params\" v-if=\"selected\">\n <div class=\"section devices\">\n <div class=\"header\">\n <div class=\"title\">Devices</div>\n </div>\n\n <div class=\"body\">\n <form>\n <label class=\"row\" v-for=\"(device, id) in devices\" :key=\"id\">\n <input type=\"checkbox\" :checked=\"members.has(device.ieee_address)\" :value=\"device.ieee_address\"\n @change=\"toggleDevice(device.ieee_address)\" />\n <span class=\"label\" v-text=\"device.friendly_name?.length ? device.friendly_name : device.ieee_address\" />\n </label>\n </form>\n </div>\n </div>\n\n <div class=\"section actions\">\n <div class=\"header\">\n <div class=\"title\">Actions</div>\n </div>\n\n <div class=\"body\">\n <div class=\"row\" @click=\"rename\">\n <div class=\"col-10\">Rename Group</div>\n <div class=\"buttons col-2 pull-right\">\n <i class=\"fa fa-edit\"></i>\n </div>\n </div>\n\n <div class=\"row\" @click=\"remove\">\n <div class=\"col-10\">Remove Group</div>\n <div class=\"buttons col-2 pull-right\">\n <i class=\"fa fa-trash\"></i>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport Loading from \"@/components/Loading\";\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"Group\",\n emits: ['select', 'remove', 'edit'],\n mixins: [Utils],\n components: {Loading},\n\n props: {\n group: {\n type: Object,\n required: true,\n },\n\n devices: {\n type: Object,\n default: () => { return {} },\n },\n\n selected: {\n type: Boolean,\n default: false,\n },\n },\n\n data() {\n return {\n loading: false,\n values: {},\n }\n },\n\n computed: {\n devicesByAddress() {\n return Object.entries(this.devices).reduce((obj, entry) => {\n const device = entry[1]\n obj[device.ieee_address] = device\n return obj\n }, {})\n },\n\n members() {\n return new Set((this.group.members || []).map((member) => member.ieee_address))\n },\n },\n\n methods: {\n async remove() {\n if (!confirm('Are you sure that you want to remove this group?'))\n return\n\n this.loading = true\n try {\n await this.request('zigbee.mqtt.group_remove', {name: this.group.friendly_name})\n this.$emit('remove', {name: this.group.friendly_name})\n } finally {\n this.loading = false\n }\n },\n\n async rename() {\n let name = prompt('New group name', this.group.friendly_name)\n if (!name?.length)\n return\n\n name = name.trim()\n this.loading = true\n\n try {\n await this.request('zigbee.mqtt.group_rename', {\n group: this.group.friendly_name || this.group.id,\n name: name,\n })\n\n this.$emit('rename', {name: this.group.friendly_name, newName: name})\n } finally {\n this.loading = false\n }\n },\n\n async toggleDevice(ieeeAddress) {\n const device = this.devicesByAddress[ieeeAddress]\n const name = device.friendly_name?.length ? device.friendly_name : ieeeAddress\n const method = this.members.has(ieeeAddress) ? 'remove' : 'add'\n\n this.loading = true\n try {\n await this.request(`zigbee.mqtt.group_${method}_device`, {\n group: this.group.friendly_name,\n device: name,\n })\n\n this.$emit('edit', {device: name, method: method})\n } finally {\n this.loading = false\n }\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"common\";\n\n.section {\n padding-left: 1em !important;\n}\n\nform {\n margin: 0;\n padding: 0;\n border: none;\n box-shadow: none;\n\n .row {\n background: none !important;\n\n &:hover {\n background: $hover-bg !important;\n }\n\n .label {\n margin-left: .75em;\n font-weight: normal;\n }\n }\n}\n</style>\n","import { render } from \"./Group.vue?vue&type=template&id=7667f7ba&scoped=true\"\nimport script from \"./Group.vue?vue&type=script&lang=js\"\nexport * from \"./Group.vue?vue&type=script&lang=js\"\n\nimport \"./Group.vue?vue&type=style&index=0&id=7667f7ba&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7667f7ba\"\n\nexport default script","import { render } from \"./Index.vue?vue&type=template&id=b15233ac\"\nimport script from \"./Index.vue?vue&type=script&lang=js\"\nexport * from \"./Index.vue?vue&type=script&lang=js\"\n\nimport \"./Index.vue?vue&type=style&index=0&id=b15233ac&lang=scss\"\nscript.render = render\n\nexport default script","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Group.vue?vue&type=style&index=0&id=7667f7ba&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Device.vue?vue&type=style&index=0&id=1cab1d68&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Index.vue?vue&type=style&index=0&id=b15233ac&lang=scss\"","var fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n"],"sourceRoot":""}