Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Internet-enabled children's nightlight

Powered by Node.JS and a variety of types of internet-controllable lights, such as:

Why Does This Exist?

I wanted my kids to have a nightlight in their room that:

  • Had programmable color & brightness
  • Had an adjustable timer (turns off X minutes after being turned on)
  • Had an interface to show history of button pushes (so I can see when they were awake)
  • Schedule the light to change color on a schedule (so at 7am it turns to blue to indicate "Ok, it's morning time!"). This is great for sleep training!

Other Great Uses

  • Our kitchen lightstrips now turn on at 9pm, and off at 7am, to provide a great evening ambience.

Live Demos

Demo of button turning light on
light turn on
Demo of button turning light off
light turn off

What Does This Do?

There is a Node.js web server that runs on the network, connects to the Philips Hue bridge, and listens on the network for some button to get pushed.

Each button gets associated with a light on the network. If the button is pushed and the light is off - the light is turned on (and a timer is started to automatically turn the light off after X minutes). If the button is pushed and the light is on - the light is turned off.

There is also a web application that sets the default color and colors during specific time periods. The web interface - in addition to showing times of button pushes - permits turning the light on with & without the timer, and turning the light off.


Getting The App Running

For the most part, it is a straight-forward Node.js application. After downloading this repo and extracting it to a directory of your choice, run:

  • npm install
  • npm start

You can now access http://localhost:3000/ and view the complete interface. (On my home network, I put this on a Rapsberry Pi and set the in-house DNS to know it as "nightlight". So now babysitters and family just go to http://nightlight/ to use it.)

Environment Configurables

There are some variables that much be defined in the environment before starting the application. For your convenience, you can also stored these in a .env file.

Variable Purpose Default
SITE_NAME Shown in page header and logged with Hue bridge Nightlight System
NODE_ENV Determines if application should cache & catch uncaught errors (if set to production), or exit blank
PORT Port app listens on 3000
SESSION_SECRET How cookie data is encrypted secret

Keeping The App Running

You'll find plenty of other great tutorials on the web about running a Node.js app as a daemon, but here are a couple:


Desktop interface for monitor and control
Mobile interface for monitor and control
mobile view



My in-network Node app for controlling my kids' nightlights (like Hue or FastLED) via website or IoT buttons



Code of conduct





No packages published