UNPKG

alexa-app-savant

Version:

alexa-app app for Savant automation systems

108 lines (98 loc) 3.32 kB
"use strict"; const plist = require('simple-plist'), fs = require('fs'), _ = require('lodash'), q = require('q'); function getZones(plistFile, callback) { return q.nfcall(plist.readFile, plistFile) .then(function(obj) { obj = obj.ServiceOrderPerZone; var ret = [] for (var key in obj){ ret.push(key); } return ret; }) } function getZoneServices(plistFile, callback) { return q.nfcall(plist.readFile, plistFile) .then(function(obj) { obj = obj.ServiceOrderPerZone; var ret = {} for (var key in obj){ var dic = [] var serviceObj = {}; var i = 0 for (var key2 in obj[key]){ let value = obj[key][key2]; // map references is time consuming so let’s do it only once let type = _.get(value, 'Service Type'); let disabledTypes = ["SVC_GEN_GENERIC","SVC_ENV_LIGHTING","SVC_ENV_HVAC","SVC_ENV_FAN", "SVC_ENV_SHADE","SVC_SETTINGS_STEREO","SVC_SETTINGS_SURROUNDSOUND", "SVC_ENV_GENERALRELAYCONTROLLEDDEVICE","nonService","SVC_ENV_SECURITYCAMERA" ]; if (value.Enabled === 1 && (!type || !_.includes(disabledTypes, type))) { serviceObj[i] = {}; serviceObj[i]["Zone"] = key; serviceObj[i]["Source Component"] = obj[key][key2]["Source Component"]; serviceObj[i]["Source Logical Component"] = obj[key][key2]["Source Logical Component"]; serviceObj[i]["Service Variant ID"] = obj[key][key2]["Service Variant ID"]; serviceObj[i]["Service Type"] = obj[key][key2]["Service Type"]; serviceObj[i]["Alias"] = obj[key][key2]["Alias"]; i++; } } ret[key] = serviceObj; } return ret }) } function getServiceNames(plistFile) { return q.nfcall(plist.readFile, plistFile) .then(function(obj) { obj = obj.ServiceOrderPerZone; var ret = [] for (var key in obj){ for (var key2 in obj[key]){ let value = obj[key][key2]; // map references is time consuming so let’s do it only once let type = _.get(value, 'Service Type'); let disabledTypes = ["SVC_GEN_GENERIC","SVC_ENV_LIGHTING","SVC_ENV_HVAC", "SVC_ENV_SHADE","SVC_SETTINGS_STEREO","SVC_SETTINGS_SURROUNDSOUND", "SVC_ENV_GENERALRELAYCONTROLLEDDEVICE","nonService","SVC_ENV_SECURITYCAMERA" ]; if (value.Enabled === 1 && (!type || !_.includes(disabledTypes, type))) { ret.push(value["Source Component"]); ret.push(value["Alias"]); } } } ret= _.uniq(ret, 'id'); return ret; }) } function getZoneOrganization(plistFile, callback) { return q.nfcall(plist.readFile, plistFile) .then(function(obj) { obj = obj.RPMZoneOrderList; var retObj = {}; var retArray = []; for (var key in obj){ var zoneGroupName = obj[key]["RPMGroupName"]; retArray.push(zoneGroupName); var zoneGroupsObj = obj[key]["Children"]; var dic = {}; for (var key2 in zoneGroupsObj){ let value = zoneGroupsObj[key2]; dic[key2] = value["Identifier"]; } retObj[zoneGroupName] = dic; } return [retObj,retArray] }); } module.exports = { getZones: getZones, getZoneServices: getZoneServices, getServiceNames: getServiceNames, getZoneOrganization: getZoneOrganization }