UNPKG

node-red-contrib-melview

Version:

Set of node red nodes to communicate with the melview API

127 lines (109 loc) 4.55 kB
<script type="text/javascript"> function getBuilding (buildings, buildingId) { return $.grep(buildings, function (n, i) { return (n.buildingid === buildingId); }) } function getRoom (rooms, roomId) { return $.grep(rooms, function (n, i) { return (n.unitid === roomId); }) } RED.nodes.registerType('unit-query',{ category: 'melview', defaults: { melviewConnection: {value:"", type:"melview-connection"}, buildingId: {value:""}, unitId: {value:""} }, inputs:1, outputs:1, icon: "file.png", label: function() { const buildingId = this.buildingId; const unitId = this.unitId; const name = this.name; let lable = "unit-query"; $.ajax({ headers: { Accept: 'application/json' }, async: false, cache: !1, url: 'melview/' + this.melviewConnection + '/rooms', success: function (buildings) { const b = getBuilding(buildings, buildingId); const r = getRoom(b[0].units, unitId); lable = name || `${b.building} - ${r.room} - unit-query`; } }); return lable; }, oneditprepare: function () { const nodeBuildingId = this.buildingId; const nodeUnitId = this.unitId; $('#node-input-power').change(function() { const powerState = this.checked; $('.power-dependant').each(function() { $(this).prop('disabled', !powerState ); }); }); $.ajax({ headers: { Accept: 'application/json' }, cache: !1, url: 'melview/' + this.melviewConnection + '/rooms', success: function (buildings) { let buildingSelectList = $('#node-input-buildingId').empty(); let unitSelectList = $('#node-input-unitId').empty(); const populateUnitSelectList = function(buildingId) { const building = getBuilding(buildings, buildingId); building[0].units.forEach(function(r) { const roomOption = $(`<option value=\'${r.unitid}\'> ${r.room} </option>`) if(r.unitid === nodeUnitId) { roomOption.attr('selected', 'selected'); } unitSelectList.append(roomOption); }); }; buildings.forEach(function(b) { const buildingOption = $(`<option value=\'${b.buildingid}\'> ${b.building} </option>`); buildingSelectList.append(buildingOption); if(b.buildingid === nodeBuildingId) { buildingOption.attr('selected', 'selected'); populateUnitSelectList(nodeBuildingId); } }); buildingSelectList.change(function () { populateUnitSelectList($(this).val()); }); } }); } }); </script> <script type="text/html" data-template-name="unit-query"> <div class="form-row"> <label for="node-input-melviewConnection"><i class="icon-tag"></i> Name</label> <input type="text" id="node-input-melviewConnection" placeholder="Melview Connection"> </div> <div class="form-row"> <label for="node-input-buildingId"><i class="icon-tag"></i> Building</label> <select id="node-input-buildingId"> <option>Select Building</option> </select> </div> <div class="form-row"> <label for="node-input-unitId"><i class="icon-tag"></i> Unit</label> <select id="node-input-unitId" > <option>Select Unit</option> </select> </div> </script> <script type="text/html" data-help-name="unit-command"> <p>Sends a command to an heat pump</p> </script>