Skip to content

Node.JS implementation of the Hue Entertainment API but it works

License

Notifications You must be signed in to change notification settings

EricRabil/phea.js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

phea.js

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.

Installation

yarn add phea.js

Example

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();

Writing your own effects

Subclass the Effect class, then push it to stream.effects.

There's a few example effects to get you started.

Colors

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, and brightness are all values from 0.0 – 255.0.
  • Color and EffectColor offer a variety of utility functions for mixing and matching colors. Read about them on their respective doc pages.

Using the DTLS client directly

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);
}

Documentation

Docs live here.

Feedback

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!

About

Node.JS implementation of the Hue Entertainment API but it works

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages