UNPKG

aladdin-connect

Version:

Client module for opening + closing garage doors via the Genie Aladdin Connect

68 lines (63 loc) 1.82 kB
const session = require('./util/session') const statuses = require('./util/door-status') const tiny = require('tiny-json-http') /** * Open / close a garage door * - If lock isn't specified, gets status for the first lock returned by the API */ module.exports = function status(action='close', params, callback) { if (!callback && typeof params === 'function') { callback = params params = undefined } params = params || {} let {deviceNumber=0, doorNumber=1} = params let promise if (!callback) { promise = new Promise((res, rej) => { callback = (err, result) => { err ? rej(err) : res(result) } }) } session({deviceNumber, doorNumber}, function _status(err, result) { if (err) callback(err) else { // FIXME throw if multiple portals or doors were found let {headers, body} = result let url = 'https://genie.m2.exosite.com/onep:v1/rpc/process' let user = process.env.ALADDIN_USER // For whatever reason, close / open are 0 / 1, unlike their status codes of 4 / 1 let status = action === 'close' ? 0 : 1 body.calls = [ { arguments: [ { alias: `dps${doorNumber}.desired_status` }, status ], id: 1, procedure: 'write' }, { arguments: [ { alias: `dps${doorNumber}.desired_status_user` }, user ], id: 1, procedure: 'write' }, ] tiny.post({ url, headers, data: body }, function done(err) { if (err) callback(err) else { let statusCode = action === 'close' ? 5 : 2 // lol let status = statuses(statusCode) callback(null, {status, statusCode}) } }) } }) return promise }