node-red-contrib-hubitat
Version:
Node Red module for Hubitat API
59 lines (53 loc) • 1.84 kB
JavaScript
/* eslint-disable no-unused-vars */
/* eslint-disable no-param-reassign */
function cleanHubitatSelectMenu(menuId, defaultText) {
const selectMenu = $(`#${menuId}`);
selectMenu.find('option').remove().end();
const option = $('<option>', { value: '', text: defaultText });
selectMenu.append(option);
selectMenu.val('').trigger('change');
}
function resetHubitatSelectMenu(menuId, defaultText) {
const selectMenu = $(`#${menuId}`);
selectMenu.find('option').remove().end();
const defaultOption = $('<option>', { value: '', text: defaultText });
selectMenu.append(defaultOption);
return selectMenu;
}
function paramsFromServer(server) {
return {
usetls: server.usetls,
host: server.host,
port: server.port,
appId: server.appId,
token: server.credentials.token,
};
}
function cleanHubitatDevices() {
cleanHubitatSelectMenu('node-input-deviceId', 'Choose device...');
}
function listHubitatDevices(server, deviceId) {
const selectMenu = resetHubitatSelectMenu('node-input-deviceId', 'Choose device...');
$.getJSON('hubitat/devices', paramsFromServer(server), (res) => {
res.forEach((item) => {
const selected = deviceId === item.id;
const option = $('<option>', { value: item.id, text: item.label });
selectMenu.append(option);
if (selected) { selectMenu.val(item.id).trigger('change'); }
});
if (!deviceId) { selectMenu.val('').trigger('change'); }
}).fail(() => cleanHubitatDevices());
}
function loadCredentials(server) {
return new Promise((resolve, reject) => {
if (server.credentials) {
resolve();
} else {
$.getJSON(`credentials/hubitat-config/${server.id}`, (data) => {
server.credentials = data;
server.credentials._ = $.extend(true, {}, data);
resolve();
}).fail(() => reject());
}
});
}