UNPKG

node-red-contrib-fibaro-devices

Version:
153 lines (139 loc) 5.96 kB
<script type="text/javascript"> RED.nodes.registerType('fibaroXActor', { category: 'FIBARO', color: "GoldenRod", defaults: { name: { value: "" }, deviceID: { value: "0", required: true }, server: { type: "fibaro-server", required: true }, events: { value: false }, payload: { value: "{}", validate: function (v) { if (!v) return true; try { JSON.parse(v); return true; } catch (err) { return false; } } }, properties: { value: "{}", validate: function (v) { if (!v) return true; try { JSON.parse(v); return true; } catch (err) { return false; } } }, outputs: { value: 0 } // Standard field that will be used by Node-Red to draw N output ports in the flow editor }, inputs: 1, outputs: 0, paletteLabel: 'hc: actor-ext', icon: "fibaro-hc2.png", label: function () { return this.name || "fibaroXActor"; }, oneditprepare: function () { var node = this; $("#node-input-payload").typedInput({ default: 'json', typeField: 'json', types: ['json'] }); $("#node-input-payload").typedInput('type', 'json'); $("#node-input-properties").typedInput({ default: 'json', typeField: 'json', types: ['json'] }); $("#node-input-properties").typedInput('type', 'json'); try { $("#node-input-name").autocomplete("destroy"); } catch (err) { } $("#node-input-controlled").change(function () { if ($("#node-input-controlled").prop("checked")) { $("#command-topic-row").show(); } else { $("#command-topic-row").hide(); } }); $("#node-lookup-name").click(function () { $("#node-lookup-name-icon").removeClass('fa-search'); $("#node-lookup-name-icon").addClass('spinner'); $("#node-lookup-name").addClass('disabled'); var endPoint = $("#node-input-server :selected").text(); $.getJSON(endPoint + "/devices", function (data) { var search = []; $.each(data, function (i, item) { search.push(item); }); $("#node-input-name").autocomplete({ source: search, minLength: 0, select: function (event, ui) { $(this).val(ui.item.label); $("#node-input-deviceID").val(ui.item.roomName+"/"+ui.item.name); return false; }, change: function (event, ui) { }, close: function (event, ui) { $("#node-input-name").autocomplete("destroy"); } }).autocomplete("search", $("#node-input-name").val()); }) .fail(function () { console.log("error"); }) .always(function () { $("#node-lookup-name-icon").addClass('fa-search'); $("#node-lookup-name-icon").removeClass('spinner'); $("#node-lookup-name").removeClass('disabled'); }); }); }, oneditsave: function () { var node = this; if ($("#node-input-events").is(':checked')) { node.outputs = 2; } else { node.outputs = 0; } } }); </script> <script type="text/x-red" data-template-name="fibaroXActor"> <div class="form-row"> <label for="node-input-server"><i class="icon-tag"></i> HC2 Server</label> <input type="text" id="node-input-server" placeholder=""> </div> <div class="form-row"> <label for="node-input-name"><i class="icon-bookmark"></i> Name</label> <input type="text" id="node-input-name" style="width:60%;" placeholder="garage light sensor"/> <a id="node-lookup-name" class="btn"><i id="node-lookup-name-icon" class="fa fa-search"></i></a> </div> <div class="form-row"> <label for="node-input-deviceID"><i class="icon-tag"></i> Device ID</label> <input type="text" id="node-input-deviceID"> </div> <div class="form-row"> <input type="checkbox" id="node-input-events" style="display:inline-block; width: auto; vertical-align:baseline;"> <label for="node-input-events" style="width: 70%;">Events passthrough</label> </div> <div class="form-row"> <label for="node-input-properties"><i class="fa fa-envelope"></i> Properties</label> <input type="text" id="node-input-properties" style="width:70%"> </div> <div class="form-row"> <label for="node-input-payload"><i class="fa fa-envelope"></i> Actions</label> <input type="text" id="node-input-payload" style="width:70%"> </div> </script> <script type="text/x-red" data-help-name="fibaroXActor"> <p>A simple fibaroXActor node </p> </script>