https://github.com/ericrabil/phea.js
Node.JS implementation of the Hue Entertainment API but it works
https://github.com/ericrabil/phea.js
Last synced: about 1 year ago
JSON representation
Node.JS implementation of the Hue Entertainment API but it works
- Host: GitHub
- URL: https://github.com/ericrabil/phea.js
- Owner: EricRabil
- License: mit
- Created: 2020-11-30T07:00:54.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2021-10-30T22:11:20.000Z (over 4 years ago)
- Last Synced: 2024-10-13T07:54:33.665Z (over 1 year ago)
- Language: TypeScript
- Size: 78.1 KB
- Stars: 6
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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](https://github.com/EricRabil/spotihue)
```js
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](https://github.com/EricRabil/phea.js/blob/main/src/effect/Effect.ts) class, then push it to `stream.effects`.
There's [a few example effects](https://github.com/EricRabil/phea.js/blob/main/src/effect/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`](https://github.com/peter-murray/node-hue-api), the groupID, and the credentials.
```ts
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.](docs/README.md)
## Feedback
Have an issue? Made something cool? Let me know!
Open an issue or email me at [ericjrabil@gmail.com](mailto:ericjrabil@gmail.com). I'd love to hear from you!