UNPKG

node-red-contrib-lifesmart

Version:

A Node-RED node for Lifesmart smart home gateway integration with local device control and management

243 lines (231 loc) 11 kB
<!-- Copyright JS Foundation and other contributors, http://js.foundation Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <!-- The Input Node --> <script type="text/html" data-template-name="lifesmart in"> <div class="form-row"> <label for="node-input-port"><i class="fa fa-sign-in"></i> <span data-i18n="udp.label.listen"></span></label> <select id="node-input-multicast" style='width:70%'> <option value="false" data-i18n="udp.udpmsgs"></option> <option value="true" data-i18n="udp.mcmsgs"></option> </select> </div> <div class="form-row node-input-group"> <label for="node-input-group"><i class="fa fa-list"></i> <span data-i18n="udp.label.group"></span></label> <input type="text" id="node-input-group" placeholder="225.0.18.83"> </div> <div class="form-row node-input-iface"> <label for="node-input-iface"><i class="fa fa-random"></i> <span data-i18n="udp.label.interface"></span></label> <input type="text" id="node-input-iface" data-i18n="[placeholder]udp.placeholder.interfaceprompt"> </div> <div class="form-row"> <label for="node-input-port"><i class="fa fa-sign-in"></i> <span data-i18n="udp.label.onport"></span></label> <input type="text" id="node-input-port" style="width:80px"> &nbsp;&nbsp;<span data-i18n="udp.label.using"></span> <select id="node-input-ipv" style="width:80px"> <option value="udp4">ipv4</option> <option value="udp6">ipv6</option> </select> </div> <div class="form-row"> <label for="node-input-datatype"><i class="fa fa-sign-out"></i> <span data-i18n="udp.label.output"></span></label> <select id="node-input-datatype" style="width:70%;"> <option value="buffer" data-i18n="udp.output.buffer"></option> <option value="utf8" data-i18n="udp.output.string"></option> <option value="base64" data-i18n="udp.output.base64"></option> </select> </div> <div class="form-row"> <label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="common.label.name"></span></label> <input type="text" id="node-input-name" data-i18n="[placeholder]common.label.name"> </div> <div class="form-tips"><span data-i18n="udp.tip.in"></span></div> <div class="form-tips" id="udpporttip"><span data-i18n="[html]udp.tip.port"></span></div> </script> <script type="text/javascript"> RED.nodes.registerType('lifesmart in',{ category: 'Geeqee', color:"Orange", defaults: { name: {value:""}, iface: {value:""}, port: { value:"", required:true, label:RED._("node-red:udp.label.port"), validate:RED.validators.number(false) }, ipv: {value:"udp4"}, multicast: {value:"false"}, group: { value:"", validate:function(v,opt) { if ((this.multicast !== "true")||v.length > 0) { return true; } return RED._("node-red:udp.errors.invalid-group"); } }, datatype: {value:"buffer",required:true} }, inputs:0, outputs:1, icon: "bridge-dash.svg", label: function() { if (this.multicast=="false") { return this.name||"lifesmart in "+this.port; } else { return this.name||"lifesmart in "+(this.group+":"+this.port); } }, labelStyle: function() { return this.name?"node_label_italic":""; }, oneditprepare: function() { $("#node-input-multicast").on("change", function() { var id = $("#node-input-multicast").val(); if (id == "false") { $(".node-input-group").hide(); $(".node-input-iface").hide(); } else { $(".node-input-group").show(); $(".node-input-iface").show(); } }); $("#node-input-multicast").change(); var porttip = this._("udp.tip.port"); var alreadyused = this._("udp.errors.alreadyused"); var portsInUse = {}; $.getJSON('udp-ports/'+this.id,function(data) { portsInUse = data || {}; $('#udpporttip').html(porttip + data); }); $("#node-input-port").on("change", function() { var portnew = $("#node-input-port").val(); if (portsInUse.hasOwnProperty($("#node-input-port").val())) { RED.notify(alreadyused+" "+$("#node-input-port").val(),"warn"); } }); } }); </script> <!-- The Output Node --> <script type="text/html" data-template-name="lifesmart out"> <div class="form-row"> <label for="node-input-port"><i class="fa fa-envelope"></i> <span data-i18n="udp.label.send"></span></label> <select id="node-input-multicast" style="width:40%"> <option value="false" data-i18n="udp.udpmsg"></option> <option value="broad" data-i18n="udp.bcmsg"></option> <option value="multi" data-i18n="udp.mcmsg"></option> </select> <span data-i18n="udp.label.toport"></span> <input type="text" id="node-input-port" style="width:70px"> </div> <div class="form-row node-input-addr"> <label for="node-input-addr" id="node-input-addr-label"><i class="fa fa-list"></i> <span data-i18n="udp.label.address"></span></label> <input type="text" id="node-input-addr" data-i18n="[placeholder]udp.placeholder.address" style="width:50%;"> <select id="node-input-ipv" style="width:70px"> <option value="udp4">ipv4</option> <option value="udp6">ipv6</option> </select> </div> <div class="form-row node-input-iface"> <label for="node-input-iface"><i class="fa fa-random"></i> <span data-i18n="udp.label.interface"></span></label> <input type="text" id="node-input-iface" data-i18n="[placeholder]udp.placeholder.interface"> </div> <div class="form-row"> <label for="node-input-outport-type">&nbsp;</label> <select id="node-input-outport-type"> <option id="node-input-outport-type-random" value="random" data-i18n="udp.bind.random"></option> <option value="fixed" data-i18n="udp.bind.local"></option> </select> <input type="text" id="node-input-outport" style="width:70px;"> </div> <div class="form-row"> <label>&nbsp;</label> <input type="checkbox" id="node-input-base64" style="display:inline-block; width:auto; vertical-align:top;"> <label for="node-input-base64" style="width:70%;"><span data-i18n="udp.label.decode-base64"></span></label> </div> <div class="form-row"> <label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="common.label.name"></span></label> <input type="text" id="node-input-name" data-i18n="[placeholder]common.label.name"> </div> <div class="form-tips"><span data-i18n="[html]udp.tip.out"></span></div> </script> <script type="text/javascript"> RED.nodes.registerType('lifesmart out',{ category: 'Geeqee', color:"Orange", defaults: { name: {value:""}, addr: {value:""}, iface: {value:""}, port: {value:""}, ipv: {value:"udp4"}, outport: {value:""}, base64: {value:false,required:true}, multicast: {value:"false"} }, inputs:1, outputs:0, icon: "bridge-dash.svg", align: "right", label: function() { return this.name||"lifesmart out "+(this.addr+":"+this.port); }, labelStyle: function() { return this.name?"node_label_italic":""; }, oneditprepare: function() { var addresslabel = this._("udp.label.address"); var addressph = this._("udp.placeholder.address"); var grouplabel = this._("udp.label.group"); var bindrandom = this._("udp.bind.random"); var bindtarget = this._("udp.bind.target"); var type = this.outport===""?"random":"fixed"; $("#node-input-outport-type").val(type); $("#node-input-outport-type").on("change", function() { var type = $(this).val(); if (type == "random") { $("#node-input-outport").val("").hide(); } else { $("#node-input-outport").show(); } }); $("#node-input-outport-type").change(); $("#node-input-multicast").on("change", function() { var id = $("#node-input-multicast").val(); if (id === "multi") { $(".node-input-iface").show(); $("#node-input-addr-label").html('<i class="fa fa-list"></i> ' + grouplabel); $("#node-input-addr")[0].placeholder = '225.0.18.83'; } else if (id === "broad") { $(".node-input-iface").hide(); $("#node-input-addr-label").html('<i class="fa fa-list"></i> ' + addresslabel); $("#node-input-addr")[0].placeholder = '255.255.255.255'; } else { $(".node-input-iface").hide(); $("#node-input-addr-label").html('<i class="fa fa-list"></i> ' + addresslabel); $("#node-input-addr")[0].placeholder = addressph; } var type = $(this).val(); if (type == "false") { $("#node-input-outport-type-random").html(bindrandom); } else { $("#node-input-outport-type-random").html(bindtarget); } }); $("#node-input-multicast").change(); } }); </script>