homebridge-nest-cam2
Advanced tools
Comparing version 1.1.0 to 1.1.1
11
index.js
@@ -7,2 +7,4 @@ 'use strict'; | ||
const UPDATE_INTERVAL = 10000; | ||
Promise.delay = function(time_ms) { | ||
@@ -105,3 +107,3 @@ return new Promise(resolve => setTimeout(resolve, time_ms)); | ||
camera.checkMotion(accessory); | ||
}, 10000); | ||
}, UPDATE_INTERVAL); | ||
} | ||
@@ -117,2 +119,9 @@ //Add enabled/disabled service | ||
}); | ||
//Check enabled/disabled state | ||
setInterval(async function() { | ||
await camera.updateInfo(); | ||
let service = accessory.getService(Service.Switch); | ||
service.updateCharacteristic(Characteristic.On, camera.enabled); | ||
}, UPDATE_INTERVAL); | ||
accessory.configureCameraSource(camera); | ||
@@ -119,0 +128,0 @@ configuredAccessories.push(accessory); |
'use strict'; | ||
const https = require('https'); | ||
const axios = require('axios'); | ||
@@ -67,2 +68,51 @@ const EventEmitter = require('events'); | ||
} | ||
/** | ||
* Send a generic api request using promises | ||
* @param hostname The base uri to send the request | ||
* @param endpoint The endpoint to send the request | ||
* @param method Usually "GET" or "POST" | ||
* @param body The body of the request or null if a "GET" | ||
*/ | ||
sendPromiseRequest(hostname, endpoint, method, body) { | ||
let self = this; | ||
return new Promise((resolve, reject) => { | ||
let headers = { | ||
'User-Agent': 'iPhone iPhone OS 11.0 Dropcam/5.14.0 com.nestlabs.jasper.release Darwin', | ||
'Referer': 'https://home.nest.com/' | ||
}; | ||
if (method === 'POST') { | ||
headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'; | ||
} | ||
if (self.accessToken !== undefined) { | ||
headers['Cookie'] = 'user_token=' + self.accessToken; | ||
} | ||
let options = { | ||
hostname: hostname, | ||
path: endpoint, | ||
method: method, | ||
headers: headers | ||
}; | ||
let req = https.request(options, (res) => { | ||
if (res.statusCode < 200 || res.statusCode >= 300) { | ||
let error = new Error('Unexpected API Error - ' + res.statusCode); | ||
error.code = res.statusCode; | ||
reject(error); | ||
} | ||
const resBody = []; | ||
res.on('data', (chunk) => resBody.push(chunk)); | ||
res.on('end', () => resolve(Buffer.concat(resBody))); | ||
}); | ||
req.on('error', (err) => reject(err)); | ||
if (body !== undefined) { | ||
req.write(body); | ||
} | ||
req.end(); | ||
}); | ||
} | ||
} | ||
@@ -69,0 +119,0 @@ |
@@ -29,2 +29,27 @@ 'use strict'; | ||
async updateInfo() { | ||
let self = this; | ||
let query = querystring.stringify({ | ||
'uuid': self.uuid | ||
}); | ||
try { | ||
self.log.debug("Updating info for %s", self.name); | ||
let response = await self.api.sendRequest(NestAPIHostname, '/api/cameras.get_with_properties?' + query, 'GET'); | ||
response.items.forEach((info) => { | ||
self.name = info.name; | ||
self.uuid = info.uuid; | ||
self.enabled = info.is_streaming_enabled; | ||
self.serialNumber = info.serial_number; | ||
self.softwareVersion = info.combined_software_version; | ||
self.detectors = info.detectors; | ||
self.type = info.type; | ||
self.nexusTalkHost = info.direct_nexustalk_host; | ||
self.apiHost = info.nexus_api_http_server; | ||
}); | ||
} catch(error) { | ||
error.status = error.response && error.response.status; | ||
self.log.error('Error fetching cameras - ' + error.status); | ||
} | ||
} | ||
async toggleActive(enabled) { | ||
@@ -155,3 +180,3 @@ let self = this; | ||
async handleSnapshotRequest(request, callback) { | ||
handleSnapshotRequest(request, callback) { | ||
let self = this; | ||
@@ -162,11 +187,9 @@ let query = querystring.stringify({ | ||
}); | ||
try { | ||
let response = await self.api.sendRequest(self.apiHost, '/get_image?' + query, 'GET'); | ||
callback(undefined, response); | ||
} catch(error) { | ||
error.status = error.response && error.response.status; | ||
if (error.status != 404) { | ||
self.log.error('Error getting image - ' + error.status); | ||
} | ||
} | ||
self.api.sendPromiseRequest(self.apiHost, '/get_image?' + query, 'GET') | ||
.then((response) => { | ||
callback(undefined, response); | ||
}) | ||
.catch((err) => { | ||
callback(err); | ||
}); | ||
} | ||
@@ -173,0 +196,0 @@ |
{ | ||
"name": "homebridge-nest-cam2", | ||
"version": "1.1.0", | ||
"version": "1.1.1", | ||
"description": "Nest cam plugin for homebridge: https://homebridge.io/", | ||
@@ -5,0 +5,0 @@ "license": "ISC", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
60283
1207
4