hb-nb-tools
Version:
Homebridge NB Tools
69 lines (63 loc) • 1.68 kB
JavaScript
// hb-nb-tools/lib/NbDiscovery.js
// Copyright © 2020-2026 Erik Baauw. All rights reserved.
//
// Homebridge NB Tools.
import { HttpClient } from 'hb-lib-tools/HttpClient'
import { OptionParser } from 'hb-lib-tools/OptionParser'
/** Nuki bridge discovery.
* <br>See {@link NbDiscovery}.
* @name NbDiscovery
* @type {Class}
* @memberof module:hb-nb-tools
*/
/** Class for discovery of Nuki bridges.
*
* See the [Nuki bridge HTTP API](https://developer.nuki.io/page/nuki-bridge-http-api-1-13/4)
* documentation for a better understanding of the API.
* @extends HttpClient
*/
class NbDiscovery extends HttpClient {
constructor (params = {}) {
const config = {
timeout: 5
}
const optionParser = new OptionParser(config)
optionParser
.instanceKey('logger')
.intKey('timeout', 1, 60)
.parse(params)
super({
https: true,
host: 'api.nuki.io',
json: true,
keepAlive: false,
logger: params.logger,
name: 'nuki server',
path: '/discover',
timeout: config.timeout
})
this.config = config
}
async discover () {
const bridges = []
const response = await super.get('/bridges')
if (response == null) {
return bridges
}
for (const bridge of response.body.bridges) {
const client = new HttpClient({
host: bridge.ip + ':' + bridge.port,
logger: this.config.logger,
path: '',
timeout: this.config.timeout,
validStatusCodes: [200, 401]
})
try {
await client.get('/info')
bridges.push(bridge)
} catch (error) {}
}
return bridges
}
}
export { NbDiscovery }