Skip to content

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

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages