UNPKG

node-red-nd-zigbee2mqtt

Version:

Zigbee2mqtt connectivity nodes for node-red

126 lines (109 loc) 5.4 kB
<script type="text/x-red" data-template-name="zigbee2mqtt-get"> <link rel="stylesheet" href="zigbee2mqtt/static/css/multiple-select.css" type="text/css" /> <link rel="stylesheet" href="zigbee2mqtt/static/css/common.css" type="text/css" /> <div class="form-row"> <label for="node-input-name" class="l-width"><i class="fa fa-bookmark"></i> <span data-i18n="label.name"></span></label> <input type="text" id="node-input-name" data-i18n="[placeholder]placeholder.name"> </div> <div class="form-row" style="display:none;"> <label for="node-input-friendly_name" class="l-width"><i class="fa fa-bookmark"></i> <span data-i18n="label.friendly_name"></span></label> <input type="text" id="node-input-friendly_name" data-i18n="[placeholder]placeholder.friendly_name"> </div> <div class="form-row"> <label for="node-input-server" class="l-width"><i class="fa fa-globe"></i> <span data-i18n="label.server"></span></label> <input type="text" id="node-input-server"> </div> <div class="form-row"> <label for="node-input-device_id" class="l-width"><i class="fa fa-crosshairs"></i> <span data-i18n="label.topic"></span></label> <select id="node-input-device_id" class="s-width" data-single="true"></select> </div> <div class="form-row"> <label for="force-refresh" class="l-width"><i class="fa fa-refresh"></i> <span data-i18n="label.refresh"></span></label> <a class="red-ui-button s-width" id="force-refresh" name="force-refresh"><span data-i18n="label.refresh_devices_list"></span></a> </div> <div class="form-row"> <label for="node-input-state" class="l-width"><i class="fa fa-tag"></i> <span data-i18n="label.state"></span></label> <select id="node-input-state" class="s-width" data-i18n="[placeholder]multiselect.complete_payload"></select> </div> </script> <script type='text/javascript'> RED.nodes.registerType('zigbee2mqtt-get', { category: 'Zigbee2mqtt', color: '#FDBF48', defaults: { name: { value: "" }, server: { type: "zigbee2mqtt-server", required: true }, friendly_name: { value: "", required: false }, device_id: { value: null, required: true }, state: { value: "" }, }, inputs: 1, outputs: 1, outputLabels: ["value"], paletteLabel: 'get', icon: "icon.png", label: function () { var label = 'z2m-get'; if (this.name) { label = this.name; } else if (typeof(this.friendly_name) == 'string' && this.friendly_name.length) { label = this.friendly_name; } else if (typeof(this.device_id) == 'string') { label = this.device_id; } if (!this.name && this.state) { let suffix = this.state == 0 ? 'complete state' : this.state.replace('homekit_', '') label = `${label} (${suffix})`; } return label; }, oneditprepare: function () { var node = this; var updateOutput = function () { var selectedState = $('#node-input-state option:selected').val(); var selectedDevice = $('#node-input-device_id option:selected').val(); // if ( (selectedState != 0 && selectedState != null && selectedDevice.match(/^\d/)) || (node.state != 0 && node.state != null)) { // $outputSelect.closest('.form-row').show(); // } else { // $outputSelect.closest('.form-row').hide(); // } // $outputSelect.multipleSelect('refresh'); } $('#node-input-state').on("change", function() { var state = $('#node-input-state option:selected').val(); if (state) { node.state = state; } // if (parseInt(state) === 0) {$outputSelect.val('always').multipleSelect('refresh');} updateOutput(); }); setTimeout(function(){ z2m_getItemList(node.device_id, '#node-input-device_id', {allowEmpty:false}); var $deviceInput = $('#node-input-device_id'); $deviceInput.on("change", function(){ z2m_getItemStateList(0, '#node-input-state'); // var device = $('#node-input-device_id option:selected').val(); updateOutput(); $('#node-input-friendly_name').val($('#node-input-device_id option:selected').attr('data-friendly_name')); }); setTimeout(function () { z2m_getItemStateList(node.state, '#node-input-state'); },100); // if (!node.output) { $outputSelect.val('always').multipleSelect('refresh'); } }, 100); //we need small timeout, too fire change event for server select }, oneditsave: function () { } }); </script>