Skip to content

Sawtaytoes/LIFX-Halloween

Repository files navigation

LIFX Halloween

Flash a random light in a Group of LIFX bulbs during Halloween.

Configuration

There are two options for configuration your project to work with lifx-halloween. The first option is a local config file, the other is environment variables.

Passing Config Vars

Local Config File

Create a localConfig.js file in your project's root directory with these contents:

module.exports = {
	apiToken: 'c180e4553d9b3d61a0536055555a7d96dba3cea4154b171b5522b915a572b86f',
	lifxSelector: 'group:Front Porch',

	// Optional
	halloweenStartTime: '10-31 16:00',
	halloweenEndTime: '10-31 22:30',
}

Required

  • apiToken
  • lifxSelector

Optional

  • halloweenStartTime
  • halloweenEndTime

Environment Variables

Instead of creating a local config file, you might be hosting this project online. If you do that, you'll want to use environment variables instead.

Required

  • API_TOKEN
  • LIFX_SELECTOR

Optional

  • HALLOWEEN_START_TIME
  • HALLOWEEN_END_TIME

Config Vars

API Token

  • Local Config File: apiToken
  • Environment Variable: API_TOKEN

Your LIFX API token from https://cloud.lifx.com/settings. It should look something like this:

c180e4553d9b3d61a0536055555a7d96dba3cea4154b171b5522b915a572b86f

LIFX Selector

  • Local Config File: lifxSelector
  • Environment Variable: LIFX_SELECTOR

Whatever you change this to will be the light or group of lights to randomly flash.

The value is a LIFX HTTP API selector.

For simplicity, you can simply follow these guidelines:

  • For group, use group:Group Name.
  • For light, use label:Light Name.
  • For all lights, use all.

Start and End Times

  • Local Config File: halloweenStartTime
  • Local Config File: halloweenEndTime
  • Environment Variable: HALLOWEEN_START_TIME
  • Environment Variable: HALLOWEEN_END_TIME

The format is MM-DD hh:mm such as 10-31 16:00. The month, date, then the time in 24h military format.

These values include the start and end times for when random light flickering occurs. Currently, this package does not support executing daily during a set time period. You can always create a PR or write your own code to handle this use case in your own project.

Example Usage

Simple Version

This example checks every 10 seconds to see if it's currently Halloween night between 4:00p and 10:30p on October 31st. If it is, it randomly flashes a light in those 10 second intervals.

const { filter, map, startWith } = require('rxjs/operators')
const { interval } = require('rxjs')

const { config, flashRandomLight, isDuringHalloweenNight } = require('./')

interval(10000)
.pipe(
	startWith(0),
	map(isDuringHalloweenNight),
	filter(Boolean),
	flashRandomLight(
		config
		.getLifxSelector()
	),
)
.subscribe(
	console.log,
	console.error,
)

Advanced Version

See app.js for what I'm using on my home.

This version is set to run indefinitely. It will set a timeout from now until Halloween at 4:00p, then it will run, flashing a random light at a random time interval until 10:30p. Afterward, it sets a new timer to wait until next Halloween.

API

Functions

flashRandomLight

Flashes a random light in the provided LIFX selector.

getTimeUntilHalloweenEnds

Get the time remaining in milliseconds until Halloweens ends from the optionally given date.

getTimeUntilHalloweenStarts

Get the time remaining in milliseconds until Halloweens starts from the optionally given date.

isDuringHalloweenNight

Returns a boolean if it's Halloween night.

This Project

When developing this package locally, use:

yarn start

For testing, use:

yarn test:watch

About

Random flashing of LIFX lights for Halloween. Meant to be used on porch lights.

Resources

License

Stars

Watchers

Forks

Packages

No packages published