Node.JS implementation of the Hue Entertainment API but it works
I wrote this library because the existing Node.JS Hue Entertainment API implementations were simply painful to use.
yarn add phea.js
For a real example, take a look at spotihue
import HueStream, { LoopEffect, Color } from "phea.js";
// Equivalent, for the plebeians:
const { HueStream, LoopEffect, Color } = require("phea.js");
async function run() {
const ipAddresses = await HueStream.discover();
// Determine what IP you'll use here
const ipAddress = ipAddresses[0];
// Push the button!
console.log("Hey, you should click that button");
await new Promise(resolve => setTimeout(resolve, 10000));
const credentials = await HueStream.register(ipAddress);
const lightIDs = await HueStream.lightIDs(credentials);
const entertainmentGroupID = await HueStream.createGroup(credentials, lightIDs);
// Yay! We're ready to use HueStream.
const stream = await HueStream.make({
group: entertainmentGroupID,
auth: credentials
});
const effect = new LoopEffect({
colors: [
Color.RED,
Color.GREEN,
Color.BLUE
],
// 50 is the default refresh rate
framesPerColor: 50
});
stream.effects.push(effect);
await stream.start();
}
run();
Subclass the Effect class, then push it to stream.effects
.
There's a few example effects to get you started.
phea.js has two Color structs – Color
and EffectColor
, which extends Color
.
Color
is simply an RGB object, while EffectColor
adds opacity and brightness.
red
,green
,blue
, andbrightness
are all values from 0.0 – 255.0.Color
andEffectColor
offer a variety of utility functions for mixing and matching colors. Read about them on their respective doc pages.
Don't want to use my wrapper? :( That's fine. There's a DTLS
export that lets you interact with the API directly. Pass it an instance of the Hue API per node-hue-api
, the groupID, and the credentials.
interface DTLSConnectionOptions {
host: string;
username: string;
psk: string;
}
class DTLS {
constructor(public readonly hue: Api, public lights: number[], gamuts: (ColorGamut | null)[], public group: string, public options: DTLSConnectionOptions);
}
Have an issue? Made something cool? Let me know!
Open an issue or email me at ericjrabil@gmail.com. I'd love to hear from you!