UNPKG

node-red-contrib-smartnora

Version:

Google Smart Home integration via Smart Nora https://smart-nora.eu/

238 lines (228 loc) 9.37 kB
<script type="text/javascript"> RED.nodes.registerType('noraf-security', { category: 'nora', color: 'rgb(235, 227, 141)', icon: 'assistant.png', defaults: { devicename: { value: 'Security System', required: true, }, roomhint: { value: '' }, name: { value: '' }, passthru: { value: false, }, nora: { type: 'noraf-config', required: true }, topic: { value: '' }, twofactor: { value: 'off', }, twofactorpin: { value: '' }, filter: { value: false, }, language: { value: 'en', }, armLevels: { value: [{ v: 'L1', n: 'home and guarding,SL1' }, { v: 'L2', n: 'away and guarding,SL2' }, ] }, asyncCmd: { value: false, }, outputs: { value: 1, }, errorifstateunchaged: { value: false, } }, inputs: 1, outputs: 1, outputLabels: ["state", "async command"], paletteLabel: 'security', label: function () { return this.name || this.devicename || 'security'; }, oneditprepare: function () { $('#node-input-twofactor').change(function () { if ($(this).val() === 'pin') { $('#node-twofactor-pin').show(); } else { $('#node-twofactor-pin').hide(); } }); $('#node-input-levels-container').css('min-height', '120px').css('min-width', '450px') .editableList({ addItem: function (container, i, opt) { var prop = opt; if (!prop.hasOwnProperty('v')) { prop = { v: '', n: '' }; } container.css({ overflow: 'hidden', whiteSpace: 'nowrap' }); var row = $('<div/>').appendTo(container); $('<input/>', { class: "node-input-levels-level-value", type: "text", placeholder: 'Value', required: true, }) .css("width", "30%") .val(prop.v) .appendTo(row); $('<div/>', { style: 'display:inline-block; padding:0px 6px;' }) .text('=>') .appendTo(row); $('<input/>', { class: "node-input-levels-level-name", type: "text", placeholder: 'Name in language', required: true, }) .css("width", "calc(70% - 30px)") .val(prop.n) .appendTo(row); }, removable: true, sortable: true }); if (!this.armLevels) { this.armLevels = []; } for (var i = 0; i < this.armLevels.length; i++) { var armLevel = this.armLevels[i]; var newLevel = { v: armLevel.v, n: armLevel.n }; $("#node-input-levels-container").editableList('addItem', newLevel); } $('#node-input-asyncCmd').change(function () { $('.hide-when-async')[$(this).is(':checked') ? 'hide' : 'show'](); }); }, oneditsave: function () { var armLevels = $("#node-input-levels-container").editableList('items'); var node = this; node.armLevels = []; armLevels.each(function (i) { var armLevel = $(this); var p = { n: armLevel.find(".node-input-levels-level-name").val().trim(), v: armLevel.find(".node-input-levels-level-value").val().trim(), }; if (p.n && p.v) { node.armLevels.push(p); } }); node.outputs = $('#node-input-asyncCmd').is(':checked') ? 2 : 1; }, }); </script> <script type="text/x-red" data-template-name="noraf-security"> <div class="form-row"> <label for="node-input-nora"><i class="fa fa-table"></i> Config</label> <input type="text" id="node-input-nora"> </div> <div class="form-row"> <label for="node-input-devicename"><i class="fa fa-i-cursor"></i> Device Name</label> <input type="text" id="node-input-devicename"> </div> <div class="form-row"> <label style="width:auto" for="node-input-passthru"><i class="fa fa-arrow-right"></i> If <code>msg</code> arrives on input, pass through to output: </label> <input type="checkbox" id="node-input-passthru" style="display:inline-block; width:auto; vertical-align:top;"> </div> <div class="form-row"> <label style="width:auto" for="node-input-filter"><i class="fa fa-filter"></i> Ignore input messages that don't match the <code>topic</code> value: </label> <input type="checkbox" id="node-input-filter" style="display:inline-block; width:auto; vertical-align:top;"> </div> <div class="form-row"> <label style="width:auto" for="node-input-asyncCmd"><i class="fa fa-refresh"></i> Async command execution: </label> <input type="checkbox" id="node-input-asyncCmd" style="display:inline-block; width:auto; vertical-align:top;"> </div> <div class="form-row hide-when-async"> <label style="width:auto" for="node-input-errorifstateunchaged"><i class="fa fa-exclamation-triangle"></i> If arm/disarm state doesn't change via voice, warn user: </label> <input type="checkbox" id="node-input-errorifstateunchaged" style="display:inline-block; width:auto; vertical-align:top;"> </div> <div class="form-row"> <label for="node-input-language"><i class="fa fa-i-cursor"></i> Language</label> <select id="node-input-language"> <option value="da">da</option> <option value="nl">nl</option> <option value="en">en</option> <option value="fr">fr</option> <option value="de">de</option> <option value="hi">hi</option> <option value="id">id</option> <option value="it">it</option> <option value="ja">ja</option> <option value="ko">ko</option> <option value="no">no</option> <option value="pt-BR">pt</option> <option value="es">es</option> <option value="sv">sv</option> <option value="th">th</option> </select> </div> <label><i class="fa fa-tag"></i> <span>Arm Levels (empty if none):</span></label> <div class="form-row node-input-levels-container-row node-input-levels"> <ol id="node-input-levels-container"></ol> </div> <div class="form-row"> <label for="node-input-roomhint"><i class="fa fa-i-cursor"></i> Room Hint</label> <input type="text" id="node-input-roomhint"> </div> <div class="form-row"> <label for="node-input-twofactor"><i class="fa fa-question-sign"></i> Two Factor</label> <select id="node-input-twofactor"> <option value="off">None</option> <option value="ack">Acknowledge</option> <option value="pin">Pin</option> </select> </div> <div id="node-twofactor-pin" class="form-row"> <label for="node-input-twofactorpin"><i class="fa fa-code"></i> Pin</label> <input type="text" id="node-input-twofactorpin"> </div> <div class="form-row"> <label for="node-input-topic" style="padding-left:25px; margin-right:-25px">Topic</label> <input type="text" id="node-input-topic"> </div> <div class="form-row"> <label for="node-input-name"><i class="fa fa-tag"></i> Name</label> <input type="text" id="node-input-name"> </div> </script> <script type="text/x-red" data-help-name="noraf-security"> <p> <a href="https://github.com/andrei-tatar/node-red-contrib-smartnora/blob/master/doc/nodes/security/README.md">https://github.com/andrei-tatar/node-red-contrib-smartnora/blob/master/doc/nodes/security/README.md</a> </p> </script>