node-red-contrib-melview
Version:
Set of node red nodes to communicate with the melview API
127 lines (109 loc) • 4.55 kB
HTML
<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>