platypush/platypush/backend/http/webapp/dist/static/js/4848.a874ab73.js.map

1 line
90 KiB
Plaintext

{"version":3,"file":"static/js/4848.a874ab73.js","mappings":"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","sources":["webpack://platypush/./src/components/panels/Light/color.js","webpack://platypush/./src/components/elements/Slider.vue","webpack://platypush/./src/components/elements/Slider.vue?787f","webpack://platypush/./src/components/elements/ToggleSwitch.vue","webpack://platypush/./src/components/elements/ToggleSwitch.vue?94aa","webpack://platypush/./src/components/panels/ZigbeeMqtt/Index.vue","webpack://platypush/./src/components/panels/ZigbeeMqtt/Device.vue","webpack://platypush/./src/components/panels/ZigbeeMqtt/Device.vue?8b6d","webpack://platypush/./src/components/panels/ZigbeeMqtt/Group.vue","webpack://platypush/./src/components/panels/ZigbeeMqtt/Group.vue?46cd","webpack://platypush/./src/components/panels/ZigbeeMqtt/Index.vue?dac0"],"sourcesContent":["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(\n (c) => Math.min(Math.max(0, c), 255)) // lgtm [js/automatic-semicolon-insertion]\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 hexToRgb(hex) {\n return [\n hex.slice(1, 3),\n hex.slice(3, 5),\n hex.slice(5, 7),\n ].map(_ => parseInt(_, 16))\n }\n\n rgbToHex(rgb) {\n return '#' + rgb.map((x) => {\n let hex = x.toString(16)\n if (hex.length < 2)\n hex = '0' + hex\n return hex\n }).join('')\n }\n}\n","<template>\n <label class=\"slider-wrapper\">\n <span class=\"range-labels\" :class=\"{'with-label': withLabel}\" v-if=\"withRange\">\n <span class=\"label left\" v-if=\"withRange\" v-text=\"range[0]\" />\n <span class=\"label right\" v-if=\"withRange\" v-text=\"range[1]\" />\n </span>\n\n <span class=\"slider-container\">\n <input class=\"slider\"\n type=\"range\"\n :class=\"{'with-label': withLabel}\"\n :min=\"range[0]\"\n :max=\"range[1]\"\n :step=\"step\"\n :disabled=\"disabled\"\n :value=\"value\"\n ref=\"range\"\n @input.stop=\"onUpdate\"\n @change.stop=\"onUpdate\">\n\n <div class=\"track\" :class=\"{'with-label': withLabel}\">\n <div class=\"track-inner\" ref=\"track\"></div>\n </div>\n <div class=\"thumb\" ref=\"thumb\"></div>\n <span class=\"label\" v-if=\"withLabel\" v-text=\"value\" ref=\"label\"></span>\n </span>\n </label>\n</template>\n\n<script>\nexport default {\n name: \"Slider\",\n emits: ['input', 'change', 'mouseup', 'mousedown', 'touchstart', 'touchend', 'keyup', 'keydown'],\n props: {\n value: {\n type: Number,\n },\n\n disabled: {\n type: Boolean,\n default: false,\n },\n\n range: {\n type: Array,\n default: () => [0, 100],\n },\n\n step: {\n type: Number,\n default: 1,\n },\n\n withLabel: {\n type: Boolean,\n default: false,\n },\n\n withRange: {\n type: Boolean,\n default: false,\n }\n },\n\n methods: {\n onUpdate(event) {\n this.update(event.target.value)\n this.$emit(event.type, {\n ...event,\n target: {\n ...event.target,\n value: this.$refs.range.value,\n }\n })\n },\n\n update(value) {\n const sliderWidth = this.$refs.range.clientWidth\n const percent = (value - this.range[0]) / (this.range[1] - this.range[0])\n const innerWidth = percent * sliderWidth\n const thumb = this.$refs.thumb\n\n thumb.style.left = `${innerWidth - thumb.clientWidth / 2}px`\n this.$refs.thumb.style.transform = `translate(-${percent}%, -50%)`\n this.$refs.track.style.width = `${innerWidth}px`\n },\n },\n\n mounted() {\n if (this.value != null)\n this.update(this.value)\n this.$watch(() => this.value, (newValue) => this.update(newValue))\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$label-width: 3em;\n\n.slider-wrapper {\n width: 100%;\n display: flex;\n position: relative;\n flex-direction: column;\n\n .slider-container {\n width: 100%;\n display: flex;\n position: relative;\n }\n\n .slider {\n width: 100%;\n cursor: pointer;\n opacity: 0;\n\n &::-ms-tooltip {\n display: none;\n }\n }\n\n .range-labels {\n width: 100%;\n\n &.with-label {\n width: calc(100% - $label-width);\n }\n\n .right {\n @extend .pull-right;\n }\n }\n\n .track {\n width: 100%;\n height: 0.75em;\n background: $slider-bg;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n border-radius: 0.5em;\n box-shadow: inset 1px 0px 3px 0 $slider-track-shadow;\n pointer-events: none;\n\n .track-inner {\n width: 0;\n height: 100%;\n background: $slider-progress-bg;\n border-radius: 0.5em 0 0 0.5em;\n }\n\n &.with-label {\n width: calc(100% - $label-width);\n }\n }\n\n .thumb {\n width: 1.25em;\n height: 1.25em;\n background: $slider-thumb-bg;\n position: absolute;\n top: 50%;\n left: 0;\n transform: translate(0%, -50%);\n border-radius: 50%;\n box-shadow: 1px 0px 2px 0 $slider-thumb-shadow;\n pointer-events: none;\n }\n\n .label {\n width: $label-width;\n position: relative;\n font-weight: normal;\n text-align: center;\n }\n}\n</style>\n","import { render } from \"./Slider.vue?vue&type=template&id=28d31846&scoped=true\"\nimport script from \"./Slider.vue?vue&type=script&lang=js\"\nexport * from \"./Slider.vue?vue&type=script&lang=js\"\n\nimport \"./Slider.vue?vue&type=style&index=0&id=28d31846&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-28d31846\"]])\n\nexport default __exports__","<template>\n <div class=\"power-switch\" :class=\"{disabled: disabled}\" @click.stop=\"onInput\">\n <!--suppress HtmlFormInputWithoutLabel -->\n <input type=\"checkbox\" :checked=\"value\">\n <label>\n <!--suppress HtmlUnknownTag -->\n <div class=\"switch\">\n <div class=\"dot\" />\n </div>\n <span class=\"label\">\n <slot />\n </span>\n </label>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"ToggleSwitch\",\n emits: ['input'],\n props: {\n value: {\n type: Boolean,\n default: false,\n },\n\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n\n methods: {\n onInput(event) {\n if (this.disabled)\n return false\n\n this.$emit('input', event)\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.power-switch {\n position: relative;\n transition: transform .3s;\n transform: scale(var(--scale, 1)) translateZ(0);\n\n &:active {\n --scale: .96;\n }\n\n &.disabled {\n opacity: 0.6;\n }\n\n input {\n display: none;\n & + label {\n border-radius: 1em;\n display: inline-flex;\n cursor: pointer;\n position: relative;\n transition: box-shadow .4s;\n\n &:before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n border-radius: inherit;\n background: none;\n opacity: var(--gradient, 0);\n transition: opacity .4s;\n }\n\n .switch {\n position: relative;\n display: inline-block;\n vertical-align: top;\n height: 1.4em;\n width: 2.5em;\n border-radius: 1em;\n background: $slider-bg;\n box-shadow: inset 1px 0px 3px 0 $slider-track-shadow;\n\n &:before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n border-radius: inherit;\n background: $slider-progress-bg;\n opacity: var(--gradient, 0);\n transition: opacity .4s;\n }\n\n .dot {\n background: $toggle-dot-bg;\n position: absolute;\n width: 1.5em;\n height: 1.5em;\n border-radius: 50%;\n box-shadow: 1px 0px 3.5px 0 $slider-thumb-shadow;\n left: -0.25em;\n top: -0.05em;\n transform: translateX(var(--offset, 0));\n transition: transform .4s, box-shadow .4s;\n\n &:before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n border-radius: inherit;\n background: $toggle-selected-dot-bg;\n opacity: var(--gradient, 0);\n transition: opacity .4s;\n }\n }\n }\n\n span {\n line-height: 2em;\n font-size: 1.2em;\n color: var(--text, #646B8C);\n font-weight: 500;\n display: inline-block;\n vertical-align: top;\n position: relative;\n margin-left: 0.5em;\n transition: color .4s;\n }\n\n & + span {\n text-align: center;\n display: block;\n position: absolute;\n left: 0;\n right: 0;\n top: 100%;\n opacity: 0;\n font-size: 1em;\n font-weight: 500;\n color: $slider-bg;\n transform: translateY(0.2em);\n transition: opacity .4s, transform .4s;\n }\n }\n\n &:not(:checked) {\n & + label {\n pointer-events: none;\n & + span {\n opacity: 1;\n transform: translateY(0.6em);\n }\n }\n }\n\n &:checked {\n & + label {\n --offset: 1.5em;\n --text: $slider-progress-bg;\n --gradient: 1;\n --shadow: rgba(0, 39, 6, .1);\n }\n }\n }\n}\n</style>\n","import { render } from \"./ToggleSwitch.vue?vue&type=template&id=a6396ae8&scoped=true\"\nimport script from \"./ToggleSwitch.vue?vue&type=script&lang=js\"\nexport * from \"./ToggleSwitch.vue?vue&type=script&lang=js\"\n\nimport \"./ToggleSwitch.vue?vue&type=style&index=0&id=a6396ae8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-a6396ae8\"]])\n\nexport default __exports__","<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 x: xy[0],\n y: xy[1],\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 hue: hsl[0],\n }\n\n request.value[satAttr] = hsl[1]\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=6437b841&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=6437b841&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6437b841\"]])\n\nexport default __exports__","<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\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7667f7ba\"]])\n\nexport default __exports__","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\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__"],"names":["ColorConverter","constructor","ranges","this","hue","sat","bri","ct","attr","Object","keys","normalize","x","xRange","yRange","hslToRgb","h","s","l","a","Math","min","f","n","k","color","max","round","rgbToHsl","r","g","b","d","parseInt","xyToRgb","y","brightness","z","Y","toFixed","X","Z","red","green","blue","pow","isNaN","map","c","rgbToXY","parseFloat","rgbToBri","getRGB","rgb","getXY","xy","toRGB","console","debug","toXY","toHSL","hexToRgb","hex","slice","_","rgbToHex","toString","length","join","class","ref","withRange","withLabel","type","range","step","disabled","value","onUpdate","name","emits","props","Number","Boolean","default","Array","methods","event","update","target","$emit","$refs","sliderWidth","clientWidth","percent","innerWidth","thumb","style","left","transform","track","width","mounted","$watch","newValue","__exports__","render","onInput","checked","loading","title","status","info","state","permit_join","network","channel","version","config","mqtt","server","serial","port","coordinator","meta","maintrel","majorrel","minorrel","revision","selected","view","$event","views","enabled","toUpperCase","replace","key","addGroup","text","infoModal","show","permitJoin","factoryReset","refresh","devices","device","id","groups","deviceId","refreshDevices","refreshGroups","group","groupId","manageGroups","associatedGroups","has","friendly_name","ieee_address","editName","rename","network_address","definition","vendor","model","model_id","description","software_build_id","date_code","power_source","displayedValues","property","rgbColor","unit","value_on","writable","setValue","value_min","value_max","readable","values","option","i","groupsModal","otaUpdatesAvailable","installOtaUpdates","checkOtaUpdates","remove","components","Modal","ToggleSwitch","Slider","Loading","mixins","Utils","required","data","computed","exposes","extractValues","extractValue","root","features","feature","ret","mergeValues","obj","access","entries","filter","v","reduce","converter","saturation","satAttr","Set","members","member","async","request","trim","newName","force","confirm","value_toggle","value_off","split","hsl","querySelectorAll","element","add","editGroups","Promise","all","action","update_available","notify","image","iconClass","subscribe","properties","unmounted","unsubscribe","toggleDevice","devicesByAddress","entry","prompt","ieeeAddress","method","Dropdown","DropdownItem","Device","Group","undefined","modal","visible","refreshInfo","updateProperties","permit","args","seconds","setTimeout","self","created","error"],"sourceRoot":""}