platypush/platypush/backend/http/webapp/dist/static/js/1259.2b85fdd0.js.map

1 line
96 KiB
Plaintext

{"version":3,"file":"static/js/1259.2b85fdd0.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=\"$emit('input', $event)\"\n @change.stop=\"$emit('change', $event)\">\n\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 emits: ['input', 'change'],\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</script>\n\n<style lang=\"scss\" scoped>\n$label-width: 3em;\n$thumb-height: 1em;\n$slider-height: 0.5em;\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 input.slider {\n width: 100%;\n background: none;\n height: 1.5em;\n position: relative;\n border-radius: 0.5em;\n cursor: pointer;\n outline: none;\n overflow: hidden;\n transition: all ease 100ms;\n @include appearance(none);\n\n &:active {\n filter: brightness(80%);\n cursor: grabbing;\n }\n\n &:hover {\n filter: saturate(130%);\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n filter: grayscale(1);\n }\n\n /* Chrome and friends */\n &::-webkit-slider-runnable-track {\n position: relative;\n border-radius: $slider-height;\n background: linear-gradient($slider-bg 0 0) scroll no-repeat center /\n 100% calc(#{$slider-height} + 1px);\n }\n\n &::-webkit-slider-runnable-track,\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n transition: all ease 100ms;\n height: $thumb-height;\n }\n\n &::-webkit-slider-thumb {\n --clip-top: calc((#{$thumb-height} - #{$slider-height}) * 0.5);\n --clip-bottom: calc(#{$thumb-height} - var(--clip-top));\n --clip-further: calc(100% + 1px);\n\n width: $thumb-height;\n background: $slider-progress-bg;\n box-shadow: calc(-100vmax - #{$thumb-height} + 2.5px) #{$slider-height} #{$slider-height} 100vmax #{$slider-progress-bg};\n border-radius: $thumb-height;\n cursor: grab;\n\n &:hover {\n filter: brightness(130%) blur(1px);\n cursor: grab;\n }\n\n clip-path: polygon(\n 100% -1px,\n #{$slider-height} -1px,\n 0 var(--clip-top),\n -100vmax var(--clip-top),\n -100vmax var(--clip-bottom),\n 0 var(--clip-bottom),\n #{$slider-height} 100%,\n var(--clip-further) var(--clip-further)\n );\n }\n\n /* Firefox */\n &::-moz-range-track {\n background: $slider-bg;\n position: relative;\n height: $slider-height;\n border-radius: 0.5em;\n box-shadow: inset 1px 0px 3px 0 $slider-track-shadow;\n }\n\n &::-moz-range-thumb {\n $thumb-height: 1.125em;\n width: $thumb-height;\n height: $thumb-height;\n position: relative;\n background: $slider-thumb-bg;\n border-radius: 50%;\n border: none;\n cursor: grabbing;\n transition: all ease 100ms;\n @include appearance(none);\n\n &:hover {\n filter: brightness(130%) blur(1px);\n cursor: grab;\n }\n\n &:disabled {\n background: $slider-thumb-disabled-bg;\n cursor: not-allowed;\n }\n }\n\n &::-moz-range-progress {\n width: 100%;\n height: $slider-height;\n cursor: pointer;\n background: $slider-progress-bg;\n border-radius: 0.5em 0 0 0.5em;\n }\n }\n\n .range-labels {\n width: 100%;\n display: flex;\n\n .left {\n text-align: left;\n }\n\n .right {\n @extend .pull-right;\n flex-grow: 1;\n }\n }\n\n .label {\n width: $label-width;\n position: relative;\n font-weight: normal;\n text-align: center;\n }\n\n .with-label {\n width: calc(100% - $label-width);\n }\n}\n</style>\n","import { render } from \"./Slider.vue?vue&type=template&id=d90e850c&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=d90e850c&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-d90e850c\"]])\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\" :id=\"id\">\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 id: {\n type: String,\n },\n\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=eff375b6&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=eff375b6&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-eff375b6\"]])\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 \"../../../../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 \"../../../../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 \"../../../../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","_createElementBlock","_hoisted_1","$props","withRange","_normalizeClass","withLabel","_toDisplayString","range","_createElementVNode","_hoisted_4","type","step","disabled","value","ref","onInput","_cache","_withModifiers","$event","_ctx","$emit","onChange","emits","props","Number","Boolean","default","Array","__exports__","render","onClick","args","$options","checked","id","_hoisted_2","_hoisted_3","_renderSlot","$slots","undefined","name","String","methods","event","_hoisted_36","_hoisted_39","$data","loading","_createBlock","_component_Loading","key","_createVNode","_component_Modal","title","status","info","state","_hoisted_6","_hoisted_7","permit_join","network","_hoisted_9","_hoisted_10","channel","_hoisted_12","_hoisted_13","version","config","mqtt","_hoisted_15","_hoisted_16","server","serial","_hoisted_18","_hoisted_19","port","coordinator","_hoisted_21","_hoisted_22","meta","_hoisted_24","_hoisted_25","_hoisted_26","maintrel","majorrel","minorrel","_hoisted_27","_hoisted_28","revision","_hoisted_30","_hoisted_31","selected","view","target","_Fragment","_renderList","views","enabled","toUpperCase","replace","_hoisted_34","addGroup","_component_Dropdown","_component_DropdownItem","text","$refs","infoModal","show","permitJoin","factoryReset","refresh","_hoisted_41","_hoisted_42","devices","_hoisted_43","_hoisted_44","_hoisted_45","device","_component_Device","groups","deviceId","onSelect","onRename","refreshDevices","onRemove","onGroupsEdit","refreshGroups","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","group","_component_Group","groupId","onEdit","_hoisted_17","_hoisted_70","_hoisted_71","_hoisted_76","_hoisted_77","_hoisted_79","_hoisted_80","onSubmit","manageGroups","associatedGroups","has","friendly_name","ieee_address","_hoisted_8","hidden","editName","rename","_hoisted_11","_hoisted_14","_hoisted_20","network_address","_hoisted_23","definition","vendor","_hoisted_29","model","_hoisted_32","_hoisted_33","model_id","_hoisted_35","description","_hoisted_37","_hoisted_38","software_build_id","_hoisted_40","date_code","power_source","displayedValues","_hoisted_50","_hoisted_51","property","_hoisted_52","rgbColor","saturation","_hoisted_53","unit","_hoisted_56","_component_ToggleSwitch","value_on","writable","setValue","value_min","value_max","_component_Slider","_hoisted_59","readable","_hoisted_61","values","option","_hoisted_63","i","_hoisted_65","_hoisted_57","_hoisted_67","_hoisted_68","_hoisted_69","groupsModal","otaUpdatesAvailable","installOtaUpdates","checkOtaUpdates","_hoisted_74","_hoisted_73","_hoisted_75","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","satAttr","Set","members","member","request","trim","newName","force","confirm","value_toggle","value_off","split","hsl","querySelectorAll","element","add","editGroups","async","Promise","all","action","update_available","notify","image","iconClass","mounted","$watch","newValue","subscribe","properties","unmounted","unsubscribe","_hoisted_5","toggleDevice","devicesByAddress","entry","prompt","ieeeAddress","method","Dropdown","DropdownItem","Device","Group","modal","visible","refreshInfo","updateProperties","permit","seconds","setTimeout","addToGroup","self","created","error"],"sourceRoot":""}