Last active
December 6, 2018 18:46
-
-
Save chiensiTB/d82e5a5dd9e0085ac19deb8ed6d92ef5 to your computer and use it in GitHub Desktop.
weMoConnector to and from EM.core
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//support | |
//constants | |
// const timeslices = [ | |
// "12:00am", | |
// "12:15am", | |
// "12:30am", | |
// "12:45am", | |
// "1:00am", | |
// "1:15am", | |
// "1:30am", | |
// "1:45am", | |
// "2:00am", | |
// "2:15am", | |
// "2:30am", | |
// "2:45am", | |
// "3:00am", | |
// "3:15am", | |
// "3:30am", | |
// "3:45am", | |
// "4:00am", | |
// "4:15am", | |
// "4:30am", | |
// "4:45am", | |
// "5:00am", | |
// "5:15am", | |
// "5:30am", | |
// "5:45am", | |
// "6:00am", | |
// "6:15am", | |
// "6:30am", | |
// "6:45am", | |
// "7:00am", | |
// "7:15am", | |
// "7:30am", | |
// "7:45am", | |
// "8:00am", | |
// "8:15am", | |
// "8:30am", | |
// "8:45am", | |
// "9:00am", | |
// "9:15am", | |
// "9:30am", | |
// "9:45am", | |
// "10:00am", | |
// "10:15am", | |
// "10:30am", | |
// "10:45am", | |
// "11:00am", | |
// "11:15am", | |
// "11:30am", | |
// "11:45am", | |
// "12:00pm", | |
// "12:15am", | |
// "12:30pm", | |
// "12:45am", | |
// "1:00pm", | |
// "1:15pm", | |
// "1:30pm", | |
// "1:45pm", | |
// "2:00pm", | |
// "2:15pm", | |
// "2:30pm", | |
// "2:45pm", | |
// "3:00pm", | |
// "3:15pm", | |
// "3:30pm", | |
// "3:45pm", | |
// "4:00pm", | |
// "4:15pm", | |
// "4:30pm", | |
// "4:45pm", | |
// "5:00pm", | |
// "5:15pm", | |
// "5:30pm", | |
// "5:45pm", | |
// "6:00pm", | |
// "6:15pm", | |
// "6:30pm", | |
// "6:45pm", | |
// "7:00pm", | |
// "7:15pm", | |
// "7:30pm", | |
// "7:45pm", | |
// "8:00pm", | |
// "8:15pm", | |
// "8:30pm", | |
// "8:45pm", | |
// "9:00pm", | |
// "9:15pm", | |
// "9:30pm", | |
// "9:45pm", | |
// "10:00pm", | |
// "10:15pm", | |
// "10:30pm", | |
// "10:45pm", | |
// "11:00pm", | |
// "11:15pm", | |
// "11:30pm", | |
// "11:45pm" | |
// ]; | |
const days = { | |
"mon": 0, | |
"tue": 1, | |
"wed": 2, | |
"thu": 3, | |
"fri": 4, | |
"sat": 5, | |
"sun": 6 | |
}; | |
var excludeUnoccupied = true | |
//from UI to EMCore************************** | |
exports.wemoEMConvert = function(original, ui) | |
{ | |
let finalObject = original; | |
finalObject.Device.Schedule = convertSchedulesEmCore(ui.schedules, original.Device.Schedule) | |
finalObject.Device.OverrideTime = ui.overrideTimeLimit; | |
return finalObject; | |
} | |
function convertSchedulesEmCore(uischedules, originalschedules) | |
{ | |
let finalObject = {} | |
for(let day of Object.keys(days)) | |
{ | |
finalObject[day] = []; | |
for(let t = 0; t < uischedules[day].length; t++) | |
{ | |
let startstop = []; | |
let t1 = "01-01-1969"+"T"+convertToEMTimestamp(uischedules[day][t].start); | |
let t2 = "01-01-1969"+"T"+convertToEMTimestamp(uischedules[day][t].end); | |
startstop.push(t1); | |
startstop.push(t2); | |
finalObject[day].push(startstop); | |
} | |
} | |
// for(let day in uischedules) | |
// { | |
// //console.log(day) | |
// let originalday = originalschedules[day]; | |
// if() | |
// if(originalday.length > 0) | |
// { | |
// finalObject[day] = [] | |
// let date1 = originalday[0][0].split("T")[0]; | |
// let date2 = originalday[0][1].split("T")[0]; | |
// //console.log(date1, date2); | |
// for(let t = 0; t < uischedules[day].length; t++) | |
// { | |
// //implies that all days will have the same date | |
// let startstop = []; | |
// let t1 = date1+"T"+convertToEMTimestamp(uischedules[day][t].start); | |
// let t2 = date2+"T"+convertToEMTimestamp(uischedules[day][t].end); | |
// startstop.push(t1); | |
// startstop.push(t2); | |
// finalObject[day].push(startstop); | |
// } | |
// } | |
// else | |
// { | |
// finalObject[day] = []; | |
// } | |
// } | |
return finalObject; | |
} | |
function convertToEMTimestamp(uidaytimestamp) | |
{ | |
let origlength = uidaytimestamp.length - 2; | |
let timeperiod = uidaytimestamp.slice(origlength) | |
let time = uidaytimestamp.slice(0,origlength); | |
if(timeperiod == "am") | |
{ | |
var t = time.split(":"); | |
var hr = parseInt(t[0]); | |
var min = t[1]; | |
if(hr < 10) | |
{ | |
let emtime = "0"+hr.toString()+":"+min+":00Z"; | |
return emtime; | |
} | |
else | |
{ | |
let emtime = hr.toString() + ":" + min + ":00Z" | |
return emtime; | |
} | |
} | |
else | |
{ | |
var t = time.split(":"); | |
var hr = parseInt(t[0]); | |
var min = t[1]; | |
var hr = hr == 12 ? hr : hr + 12; | |
let emtime = hr.toString() + ":" + min + ":00Z" | |
return emtime; | |
} | |
} | |
//end from UI to EMCore ************************** | |
//from EMCore to UI ************************** | |
exports.wemoUIConvert = function(emcore) | |
{ | |
let uiObject = {}; | |
uiObject.customEvents = [] | |
uiObject.schedules = convertSchedulesUI(emcore.Device.Schedules); | |
uiObject.thermostatSettings = emcore.Device.ThermostatSettings; | |
uiObject.thermostatSettings["unit"] = "C" //It is assumed that the device settings are always stored on EM.core in Celsius | |
return uiObject | |
} | |
exports.convertWemoSchedulesUI = function(emcore) | |
{ | |
//console.log("starting wemo em to ui conversion"); | |
let uiObject = {} | |
uiObject.schedules = convertSchedulesUI(emcore.Device.Schedule); | |
uiObject.overrideTimeLimit = emcore.Device.OverrideTime | |
return uiObject; | |
} | |
function convertSchedulesUI(schedules) | |
{ | |
let weeklySchedules = getOccupiedPeriods(schedules) | |
return weeklySchedules; | |
} | |
function getOccupiedPeriods(schedules) { | |
let weeklySchedule = { | |
mon: [], | |
tue: [], | |
wed: [], | |
thu: [], | |
fri: [], | |
sat: [], | |
sun: [] | |
}; | |
for(let v in schedules) | |
{ | |
let emsched = schedules[v]; | |
let uiArray = [] | |
for(let i = 0; i < schedules[v].length; i++) | |
{ | |
let period = {} | |
period.start = cleanTime(schedules[v][i][0]); | |
period.end = cleanTime(schedules[v][i][1]); | |
uiArray.push(period); | |
} | |
weeklySchedule[v] = uiArray; | |
} | |
return weeklySchedule; | |
} | |
function cleanTime(emcorestring) | |
{ | |
let uistring = emcorestring.split("T"); | |
uistring = uistring[1]; | |
let hr = parseInt(uistring.slice(0,2)); | |
if(hr>=12) | |
{ | |
let min = uistring.slice(3,5); | |
let pmhr = hr == 12 ? 12 : hr - 12; | |
uistring = pmhr.toString()+":"+min+"pm" | |
} | |
else | |
{ | |
if(hr<10) | |
{ | |
uistring = uistring.slice(1,5)+"am" | |
} | |
else | |
{ | |
uistring = uistring.slice(0,5)+"am" | |
} | |
} | |
return uistring | |
} | |
//placeholder when this functionality becomes available | |
function convertVacationsUI(vacations) | |
{ | |
} | |
function byProp(prop,name) | |
{ | |
return function(el) | |
{ | |
return el[prop] == name; | |
} | |
} | |
// end convert to UI *********************** | |
//modal transformations | |
//end modal transformations | |
//modal test objects | |
//EM core test object | |
exports.sampleEMcoreWeMo = { | |
"Device": { | |
"Name": "Lightswitch-1_0-221624K13006E3", | |
"Path": "/downstream/DSA-Markham-6003-MarkhamRd&EdwardJeffreysAve/downstream/WeMo_LightSwitch/Lightswitch-1_0-221624K13006E3", | |
"ParentBroker": "DSA-Markham-6003-MarkhamRd&EdwardJeffreysAve", | |
"Brokers": {}, | |
"Devices": {}, | |
"Links": {}, | |
"Points": [ | |
{ | |
"Label": "stateValue", | |
"Name": "stateValue", | |
"Value": 1 | |
}, | |
{ | |
"Label": "firmwareVersion", | |
"Name": "firmwareVersion", | |
"Value": 20010062 | |
}, | |
{ | |
"Label": "signalStrength", | |
"Name": "signalStrength", | |
"Value": 76 | |
}, | |
{ | |
"Label": "deviceConnectionStatus", | |
"Name": "deviceConnectionStatus", | |
"Value": 1 | |
} | |
], | |
"Schedule": "{\"mon\":[[\"2017-04-14T08:30:00Z\",\"2017-04-14T18:00:00Z\"]],\"tue\":[[\"2017-04-14T08:30:00Z\",\"2017-04-14T18:00:00Z\"]],\"wed\":[[\"2017-04-14T08:30:00Z\",\"2017-04-14T21:00:00Z\"]],\"thu\":[[\"2017-04-14T08:30:00Z\",\"2017-04-14T21:00:00Z\"]],\"fri\":[[\"2017-04-14T08:30:00Z\",\"2017-04-14T19:00:00Z\"]],\"sat\":[[\"2017-04-14T08:00:00Z\",\"2017-04-14T17:00:00Z\"]],\"sun\":[]}", | |
"OverrideTime": "60" | |
}, | |
"Label": "6003-LightSwitch-Lobby-3", | |
"DeviceAssetId": "92088dd7-7d26-4de6-af5a-f9c46e8ed744", | |
"ParentAssetId": "16ca64f3-72b5-4aad-b1e0-1e0fd6b99255", | |
"SelectedPoints": [ | |
"signalStrength", | |
"stateValue", | |
"deviceConnectionStatus" | |
], | |
"ClientId": "7094899a-0791-4ae4-8c24-937a659970b1", | |
"ConfigurationId": "a4a1662c-a07a-488c-9557-7de1d62e5f05" | |
} | |
exports.sampleEMcoreWeMo_clean = { | |
"Device": { | |
"Name": "Lightswitch-1_0-221624K13006E3", | |
"Path": "/downstream/DSA-Markham-6003-MarkhamRd&EdwardJeffreysAve/downstream/WeMo_LightSwitch/Lightswitch-1_0-221624K13006E3", | |
"ParentBroker": "DSA-Markham-6003-MarkhamRd&EdwardJeffreysAve", | |
"Brokers": {}, | |
"Devices": {}, | |
"Links": {}, | |
"Points": [ | |
{ | |
"Label": "stateValue", | |
"Name": "stateValue", | |
"Value": 1 | |
}, | |
{ | |
"Label": "firmwareVersion", | |
"Name": "firmwareVersion", | |
"Value": 20010062 | |
}, | |
{ | |
"Label": "signalStrength", | |
"Name": "signalStrength", | |
"Value": 76 | |
}, | |
{ | |
"Label": "deviceConnectionStatus", | |
"Name": "deviceConnectionStatus", | |
"Value": 1 | |
} | |
], | |
"Schedule": {"mon":[["2017-04-10T08:30:00Z","2017-04-10T18:00:00Z"]],"tue":[["2017-04-11T08:30:00Z","2017-04-11T18:00:00Z"]],"wed":[["2017-04-12T08:30:00Z","2017-04-12T21:00:00Z"]],"thu":[["2017-04-13T08:30:00Z","2017-04-13T21:00:00Z"]],"fri":[["2017-04-14T08:30:00Z","2017-04-14T19:00:00Z"]],"sat":[["2017-04-15T08:00:00Z","2017-04-15T17:00:00Z"]],"sun":[]}, | |
"OverrideTime": "60" | |
}, | |
"Label": "6003-LightSwitch-Lobby-3", | |
"DeviceAssetId": "92088dd7-7d26-4de6-af5a-f9c46e8ed744", | |
"ParentAssetId": "16ca64f3-72b5-4aad-b1e0-1e0fd6b99255", | |
"SelectedPoints": [ | |
"signalStrength", | |
"stateValue", | |
"deviceConnectionStatus" | |
], | |
"ClientId": "7094899a-0791-4ae4-8c24-937a659970b1", | |
"ConfigurationId": "a4a1662c-a07a-488c-9557-7de1d62e5f05" | |
} | |
exports.sampleEMcoreWeMo_clean2 = { | |
"Device": { | |
"Name": "Lightswitch-1_0-221624K13006E3", | |
"Path": "/downstream/DSA-Markham-6003-MarkhamRd&EdwardJeffreysAve/downstream/WeMo_LightSwitch/Lightswitch-1_0-221624K13006E3", | |
"ParentBroker": "DSA-Markham-6003-MarkhamRd&EdwardJeffreysAve", | |
"Brokers": {}, | |
"Devices": {}, | |
"Links": {}, | |
"Points": [ | |
{ | |
"Label": "stateValue", | |
"Name": "stateValue", | |
"Value": 1 | |
}, | |
{ | |
"Label": "firmwareVersion", | |
"Name": "firmwareVersion", | |
"Value": 20010062 | |
}, | |
{ | |
"Label": "signalStrength", | |
"Name": "signalStrength", | |
"Value": 76 | |
}, | |
{ | |
"Label": "deviceConnectionStatus", | |
"Name": "deviceConnectionStatus", | |
"Value": 1 | |
} | |
], | |
"Schedule": {"mon":[["2017-04-10T08:45:00Z","2017-04-10T18:15:00Z"]],"tue":[["2017-04-11T08:30:00Z","2017-04-12T00:00:00Z"]],"wed":[["2017-04-12T08:30:00Z","2017-04-12T21:45:00Z"]],"thu":[["2017-04-13T08:30:00Z","2017-04-13T21:30:00Z"]],"fri":[["2017-04-14T08:30:00Z","2017-04-14T19:00:00Z"]],"sat":[["2017-04-15T08:00:00Z","2017-04-15T17:00:00Z"]],"sun":[]}, | |
"OverrideTime": "60" | |
}, | |
"Label": "6003-LightSwitch-Lobby-3", | |
"DeviceAssetId": "92088dd7-7d26-4de6-af5a-f9c46e8ed744", | |
"ParentAssetId": "16ca64f3-72b5-4aad-b1e0-1e0fd6b99255", | |
"SelectedPoints": [ | |
"signalStrength", | |
"stateValue", | |
"deviceConnectionStatus" | |
], | |
"ClientId": "7094899a-0791-4ae4-8c24-937a659970b1", | |
"ConfigurationId": "a4a1662c-a07a-488c-9557-7de1d62e5f05" | |
} | |
exports.sampleUIChange_clean3 = { | |
"schedules":{ | |
"mon":[{"start":"10:00am","end":"1:30pm"},{"start":"2:00pm","end":"4:30pm"}], | |
"tue":[{"start":"10:00am","end":"9:30pm"}], | |
"wed":[{"start":"10:00am","end":"12:30pm"},{"start":"2:00pm","end":"4:30pm"}], | |
"thu":[{"start":"10:00am","end":"12:30pm"},{"start":"2:00pm","end":"4:30pm"}], | |
"fri":[{"start":"10:00am","end":"12:30pm"},{"start":"2:00pm","end":"4:30pm"}],"sat":[],"sun":[]}, | |
"overrideTimeLimit":"5" | |
} | |
exports.sampleEMcoreWeMo_clean3 = { | |
"Device": { | |
"Name": "Lightswitch-1_0-221624K130154D", | |
"Path": "/downstream/DSA-NYC-0000-EMOffice/downstream/WeMo_LightSwitch/Lightswitch-1_0-221624K130154D", | |
"ParentBroker": "DSA-NYC-0000-EMOffice", | |
"Brokers": {}, | |
"Devices": {}, | |
"Links": {}, | |
"Points": [ | |
{ | |
"Label": "stateValue", | |
"Name": "stateValue", | |
"Value": 1 | |
}, | |
{ | |
"Label": "firmwareVersion", | |
"Name": "firmwareVersion", | |
"Value": 20010062 | |
}, | |
{ | |
"Label": "signalStrength", | |
"Name": "signalStrength", | |
"Value": 73 | |
}, | |
{ | |
"Label": "deviceConnectionStatus", | |
"Name": "deviceConnectionStatus", | |
"Value": 1 | |
} | |
], | |
"Schedule": { | |
"mon": [ | |
[ | |
"2017-06-05T10:00:00Z", | |
"2017-06-05T12:30:00Z" | |
], | |
[ | |
"2017-06-05T14:00:00Z", | |
"2017-06-05T16:30:00Z" | |
] | |
], | |
"tue": [ | |
[ | |
"2017-06-05T10:00:00Z", | |
"2017-06-05T12:30:00Z" | |
], | |
[ | |
"2017-06-05T14:00:00Z", | |
"2017-06-05T16:30:00Z" | |
] | |
], | |
"wed": [ | |
[ | |
"2017-06-05T10:00:00Z", | |
"2017-06-05T12:30:00Z" | |
], | |
[ | |
"2017-06-05T14:00:00Z", | |
"2017-06-05T16:30:00Z" | |
] | |
], | |
"thu": [ | |
[ | |
"2017-06-05T10:00:00Z", | |
"2017-06-05T12:30:00Z" | |
], | |
[ | |
"2017-06-05T14:00:00Z", | |
"2017-06-05T16:30:00Z" | |
] | |
], | |
"fri": [], | |
"sat": [], | |
"sun": [] | |
}, | |
"OverrideTime": "5" | |
}, | |
"Label": "0000-LightswitchEM-Office", | |
"DeviceAssetId": "6418ad13-20d4-4262-979d-0e70e70ddd38", | |
"ParentAssetId": "f784fbaa-82af-499e-bb9d-1a5997501a61", | |
"SelectedPoints": [ | |
"deviceConnectionStatus", | |
"signalStrength", | |
"stateValue" | |
], | |
"ClientId": "7094899a-0791-4ae4-8c24-937a659970b1", | |
"ConfigurationId": "ae0ae57e-83fc-4294-b405-a2ff23c625a4" | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment