在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:peter-murray/node-hue-api开源软件地址:https://github.com/peter-murray/node-hue-api开源编程语言:TypeScript 59.0%开源软件介绍:node-hue-apiAn API library for Node.js that interacts with the Philips Hue Bridge to control Lights, schedules, sensors and the various other features of the Hue Bridge. This library abstracts away the actual Philips Hue Bridge REST API and provides all of the features of the Philips API and a number of useful functions to control/configure its various features. The library fully supports Contents
Change LogFor a list of changes, and details of the fixes/improvements, bugs resolved, please refer to the change log; Change Log InstallationNode.js using npm:
Node.js using yarn:
v3 APIThe V3 API is written to support JavaScript native Promises, as such you can use standard Promise chaining with As of release Connections to the BridgeBy default all connections to the Hue Bridge are done over TLS, after the negotiation of the Bridge certificate being verified to the expected format and subject contents. The Bridge certificate is self-signed, so this will cause issues when validating it normally. The library will process the certificate, validate the issuer and the subject and if happy will then allow the connection over TLS with the Hue Bridge. When using the remote API functionality of the library, the certificate is validated normally as the https://api.meethue.com site has an externally valid certificate and CA chain. Note: There is an option to connect over Rate LimitingAs of version 4.0+ of the library there are Rate limiters being used in three places:
These defaults are not currently configurable, but have been implemented to conform to the best practices defined in the Hue API documentation. If you are facing issues with this, then raise a support ticket via an Issue. Note: these do NOT (and cannot) take into account all access to the Hue Bridge, so if you have other softare that also accesses the bridge, it is still possible to overload it with requests. Debug Bridge CommunicationsYou can put the library in to debug mode which will print out the placeholder and request details that it is using to talk to the Hue Bridge. To do this, you need to define an environment variable of Once the debug mode is active you will see output like the following on the console:
Note: You should be careful as to who can gain access to this output as it will contain sensative data including the MAC Address of the bridge, IP Address and username values. The above warning applies here with respect to schedule when not in debug mode, as the schedule endpoints will contain the
username value (that can be used to authenticate against the bridge) in the payloads of the v2 API CompatibilityIn the version 4.x releases of this library all backwards compatibility to the much older Q promise and callback functionality was removed (as was indicated in the 3.x documentation). What was provided in the 3.x versions of this library to provide some backward comaptibility has now been moved into another library node-hue-api-v2-shim. The API Documentation
ExamplesThe v3 APIs are documented using example code and links to more complex/complete examples for each API calls, consult the documentation links above. Alternatively take a look at the examples directory in this repository for complete self contained runnable example code. Discover and connect to the Hue Bridge for the first timeFor getting started interacting with the Hue Bridge, you will need to discover and then connect to the Hue Bridge as an authorized user. To do this you need to either know the IP Address of the Hue Bridge in advance, or use the discovery features to locate it. Once you know the IP Address of the Bridge, you need to create a user that is authorized to interact with the Hue Bridge,
this is typically done by pressing the Below is example code that can be used to achieve this (using async/await to avoid nested Promises): const v3 = require('node-hue-api').v3
, discovery = v3.discovery
, hueApi = v3.api
;
const appName = 'node-hue-api';
const deviceName = 'example-code';
async function discoverBridge() {
const discoveryResults = await discovery.nupnpSearch();
if (discoveryResults.length === 0) {
console.error('Failed to resolve any Hue Bridges');
return null;
} else {
// Ignoring that you could have more than one Hue Bridge on a network as this is unlikely in 99.9% of users situations
return discoveryResults[0].ipaddress;
}
}
async function discoverAndCreateUser() {
const ipAddress = await discoverBridge();
// Create an unauthenticated instance of the Hue API so that we can create a new user
const unauthenticatedApi = await hueApi.createLocal(ipAddress).connect();
let createdUser;
try {
createdUser = await unauthenticatedApi.users.createUser(appName, deviceName);
console.log('*******************************************************************************\n');
console.log('User has been created on the Hue Bridge. The following username can be used to\n' +
'authenticate with the Bridge and provide full local access to the Hue Bridge.\n' +
'YOU SHOULD TREAT THIS LIKE A PASSWORD\n');
console.log(`Hue Bridge User: ${createdUser.username}`);
console.log(`Hue Bridge User Client Key: ${createdUser.clientkey}`);
console.log('*******************************************************************************\n');
// Create a new API instance that is authenticated with the new user we created
const authenticatedApi = await hueApi.createLocal(ipAddress).connect(createdUser.username);
// Do something with the authenticated user/api
const bridgeConfig = await authenticatedApi.configuration.getConfiguration();
console.log(`Connected to Hue Bridge: ${bridgeConfig.name} :: ${bridgeConfig.ipaddress}`);
} catch(err) {
if (err.getHueErrorType() === 101) {
console.error('The Link button on the bridge was not pressed. Please press the Link button and try again.');
} else {
console.error(`Unexpected Error: ${err.message}`);
}
}
}
// Invoke the discovery and create user code
discoverAndCreateUser(); The complete code sample above is available from here. For more details on discovery of Hue Bridges, check out the discovery API and referenced examples along with the users API. Set a Light State on a LightOnce you have created your user account and know the IP Address of the Hue Bridge you can interact with things on it. To interact with light on the Hue Bridge you can use the following: const v3 = require('node-hue-api').v3;
const LightState = v3.lightStates.LightState;
const USERNAME = 'your username to authenticating with the bridge'
// The name of the light we wish to retrieve by name
, LIGHT_ID = 1
;
v3.discovery.nupnpSearch()
.then(searchResults => {
const host = searchResults[0].ipaddress;
return v3.api.createLocal(host).connect(USERNAME);
})
.then(api => {
// Using a LightState object to build the desired state
const state = new LightState()
.on()
.ct(200)
.brightness(100)
;
return api.lights.setLightState(LIGHT_ID, state);
})
.then(result => {
console.log(`Light state change was successful? ${result}`);
})
; For more details on interacting with lights, see the lights API and LightState documentation and examples referenced within. Using Hue Remote APIThis library has support for interacting with the It can be rather involved to set up a remote connection, but not too onerous if you desire such a thing. The complete documentation for doing this is detailed in the Remote API and associated links.
Philips Hue ResourcesThere are a number of resources where users have detailed documentation on the Philips Hue Bridge;
LicenseCopyright 2013-2019. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this library except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论