28 min read

Install Kelvin for Philips Hue and Access It Remotely

Install Kelvin with Docker, connect your Hue bridge, configure lighting schedules, verify the web interface, and enable HTTP access with Localtonet.

Home Automation ยท Kelvin ยท Philips Hue ยท Localtonet ยท 2026

Run adaptive Hue lighting at home and reach its management interface securely when you are away

Kelvin is a self-hosted automation service that adjusts supported Philips Hue lights according to sunrise, sunset, and room-specific schedules. This guide installs Kelvin with persistent Docker storage from the first startup, pairs it with a configured Hue bridge, verifies local operation, and prepares it to restart after a host reboot. It then shows two deliberate network layouts and the documented Localtonet HTTP tunnel workflow for remote browser access without inbound router port forwarding or a public IP address.

๐Ÿ”’ Persistent configuration before pairing ๐ŸŒ Loopback or restricted LAN port binding โšก Local verification before public access
Kelvin running in Docker connects a Hue Bridge to local and remote browsers.
Kelvin manages the Hue Bridge locally, while a Localtonet HTTP tunnel provides remote browser access.

What Kelvin does for Philips Hue lighting

Kelvin is an open-source Hue automation project that adjusts light color temperature and brightness according to local sunrise and sunset times and custom intervals. It is intended to run continuously on a computer that can communicate with a configured Philips Hue bridge.

A schedule can use a cooler setting in the morning, move toward a daylight-oriented temperature around sunrise, become warmer after sunset, and reduce brightness at night. These are examples of the pattern Kelvin supports, not required values. You decide which rooms Kelvin manages and how their schedules should behave.

Kelvin supports fine-grained daily schedules for individual rooms, default startup color and brightness, gradual transitions, smart and conventional switches, activation through a Hue scene, and automatic behavior when a managed light is switched on. It also respects a manual light adjustment until the affected light is switched off and on again. That lets a temporary adjustment take precedence without permanently replacing the schedule.

๐ŸŒ… Sunrise and sunset awareness Kelvin can coordinate brightness and color-temperature changes with local sunrise, sunset, and custom schedule intervals.
๐Ÿ  Room-specific schedules Different rooms can follow different daily patterns rather than using one setting for every light.
๐Ÿ’ก Gradual transitions Lighting changes are designed to take effect gradually instead of creating unnecessarily abrupt shifts.
๐Ÿ–๏ธ Manual overrides A manual light adjustment remains in effect until that light is switched off and on again.
๐ŸŽฌ Flexible activation Kelvin can activate through a Hue scene or automatically when a managed light is switched on.
๐Ÿ–ฅ๏ธ Browser management The Docker deployment provides a password-protected web interface on container port 8080.

The computer running Kelvin must remain available whenever you want the automation to operate. Docker is the primary installation path in this tutorial because Kelvin documents its container image, configuration directory, web port, and restart behavior. Standalone binaries are also available through the project's release history.

Review the project before making it a household dependency

The available release information identifies Kelvin v1.3.9 and mentions a health endpoint for container monitoring and support for HEAD requests on the root path. Review the current release history, compatibility, open issues, and behavior in your own Hue environment before relying on Kelvin for long-term automation.

Prerequisites and preparation

Complete the local Hue setup before installing Kelvin. A remote tunnel cannot repair bridge discovery, container storage, or schedule problems, so each layer should be tested separately.

  • A configured Philips Hue bridge reachable from the Docker host.
  • Supported Philips Hue or compatible lights associated with that bridge.
  • Physical access to the bridge for its blue-button registration step.
  • A computer that can remain running while Kelvin automation is required.
  • Docker installed and able to start Linux containers.
  • A browser for opening the Kelvin interface.
  • A persistent host directory for Kelvin configuration and protected backups.
  • A Localtonet account and client only after the local deployment has been verified.

Confirm that Docker is available

Verify that the Docker client can communicate with the Docker engine:

docker version

If that command fails, resolve the Docker installation, service, or user-permission problem before diagnosing Kelvin. The official Docker Engine installation documentation provides platform-specific installation choices.

Select the correct timezone

Kelvin's Docker example passes the local timezone through the TZ environment variable. The commands below use Europe/Berlin only as a placeholder from the project example. Replace it with the timezone for the home where the Hue bridge is installed.

Correct local time matters because Kelvin uses time-dependent schedules and local sunrise and sunset behavior. Do not keep the example timezone merely because the container starts successfully.

Create persistent storage before first startup

Kelvin stores its configuration under /etc/opt/kelvin/ inside the container. That configuration can include the generated web-interface password, Hue bridge registration, and schedules. If it exists only in the container's writable layer, removing that container can discard the information and force a new setup.

Create a dedicated directory on the Docker host before Kelvin starts for the first time. The exact path depends on your operating system and backup policy. On a Linux host, an administrator might choose a location such as /srv/kelvin/config. Create the selected directory and make sure the account or Docker service running the container can use it.

sudo mkdir -p /srv/kelvin/config

If you choose another path, substitute it in every later command. Docker's bind-mount documentation explains host-path behavior, including the strong dependency a bind-mounted container has on the selected host directory.

Treat the configuration directory as credential-bearing data

Kelvin generates its web-interface password during first startup and exposes it in the startup log and the password field of config.json. Restrict access to the mapped directory, Docker logs, backups, and administrative shell accounts. The available Kelvin documentation does not provide a verified password-change procedure, so this guide does not claim that the generated password can be rotated through a particular control.

Docker or a standalone binary

Kelvin's alternative installation path is to download an archive from the Kelvin releases page, extract it, and start kelvin.exe on Windows or ./kelvin on macOS, Linux, and other Unix-like systems. On first start, Kelvin generates default configuration, discovers a bridge, and begins registration.

This tutorial uses Docker because the project explicitly documents the Docker web interface at http://{DOCKER_HOST_IP}:8080/. The supplied project evidence does not establish the listener address and port for every standalone binary deployment, so do not assume that every binary installation is automatically an appropriate target for the Docker-specific tunnel instructions.

Installation path Documented startup Use in this tutorial
Docker image Run stefanwichmann/kelvin and publish container port 8080 Recommended because the web port and configuration directory are documented
Windows binary Extract the archive and start kelvin.exe Suitable for local evaluation, but verify its actual listener before creating a tunnel
macOS, Linux, or Unix binary Extract the archive and run ./kelvin Suitable for local evaluation, but do not infer Docker's port mapping

Choose the safest Docker port binding

Docker's short publication form, -p 8080:8080, publishes the port on all host addresses by default. That commonly means the service can be reached through every applicable host network interface, not only through 127.0.0.1. The Docker port-publishing documentation warns that published ports are externally accessible unless their host address is restricted.

The correct binding depends on where the Localtonet client runs. Decide this before starting Kelvin because the bind address is part of the container's port-publication configuration.

Layout Recommended host binding Localtonet target
Localtonet client on the Docker host 127.0.0.1:8080 127.0.0.1, port 8080
Localtonet client on another LAN device The Docker host's specific LAN address on port 8080 That same Docker-host LAN address and port 8080
Unrestricted Docker publication 0.0.0.0:8080 or an omitted host address Not recommended when a narrower binding is practical

Preferred layout: Localtonet on the Docker host

When both applications run on the same host, bind Kelvin to loopback with 127.0.0.1:8080:8080. Other LAN devices cannot connect directly through the Docker host's LAN address. The Localtonet client can still forward requests because it reaches Kelvin locally.

This is the safest default for this tutorial. It reduces local exposure and does not require a LAN firewall allowance for Kelvin.

Alternative layout: Localtonet on another LAN device

If the Localtonet client runs on a different device, loopback will not work because 127.0.0.1 always refers to the device making the connection. Bind Docker to the Docker host's specific LAN address instead. For example, if the Docker host is deliberately assigned 192.168.1.50, publish 192.168.1.50:8080:8080.

Give the host a stable LAN address through an appropriate network configuration or DHCP reservation. Configure the Docker host's firewall to allow TCP port 8080 only from the Localtonet client device, or from the smallest trusted local scope your environment supports. Firewall syntax differs across operating systems, so verify the effective rule rather than copying an unrelated firewall command.

Do not confuse LAN publication with internet publication

The separate-client layout requires Kelvin to be reachable across the local network, but it does not require an inbound router forwarding rule. Do not forward TCP port 8080 from your router to the Docker host. Also avoid binding to every host interface when a specific loopback or LAN address meets the requirement.

Install Kelvin with Docker and persistent storage

The initial deployment should include the bind mount, deliberate host address, a stable container name, and a restart policy. Pairing occurs only after this durable container is running, so its generated password and Hue registration are written to host-backed storage from the beginning.

1

Pull the Kelvin image

Download the official image identified by the Kelvin project. Pulling the image does not start a container.

docker pull stefanwichmann/kelvin
2

Start Kelvin with the appropriate network layout

Choose exactly one of the following commands. Replace the timezone and host storage path before running it.

Command A: Localtonet will run on the Docker host

docker run -d \
  --name kelvin \
  --restart unless-stopped \
  -e TZ=Europe/Berlin \
  -p 127.0.0.1:8080:8080 \
  --mount type=bind,src=/srv/kelvin/config,dst=/etc/opt/kelvin \
  stefanwichmann/kelvin

This publishes Kelvin only on the Docker host's loopback interface. Use this version unless another LAN device must connect directly to port 8080.

Command B: Localtonet will run on another LAN device

docker run -d \
  --name kelvin \
  --restart unless-stopped \
  -e TZ=Europe/Berlin \
  -p 192.168.1.50:8080:8080 \
  --mount type=bind,src=/srv/kelvin/config,dst=/etc/opt/kelvin \
  stefanwichmann/kelvin

Replace 192.168.1.50 with the actual stable LAN address assigned to the Docker host. Do not copy that example address unless it is genuinely the correct address in your network. Apply the host-firewall restriction described above.

3

Confirm the container and restart policy

Verify that the named container is running and that Docker recorded the intended unless-stopped policy.

docker ps
docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' kelvin
4

Inspect startup output

Watch for configuration creation, bridge discovery, registration instructions, detected devices, location handling, and the generated web-interface password.

docker logs kelvin
5

Confirm that host-backed configuration was created

Inspect the selected host directory without publishing its contents. It should no longer be empty after Kelvin creates its configuration. Do not paste config.json or its password into public support messages.

The --restart unless-stopped policy tells Docker to restart Kelvin after Docker itself restarts, unless an administrator deliberately stopped the container. Docker documents restart-policy behavior in its guide to starting containers automatically.

Do not launch both network examples

Both commands create a container named kelvin and publish host port 8080. Select the command matching your deployment. Starting both would cause a name conflict, a port conflict, or both.

Pair Kelvin with the Hue bridge

A hand presses the Hue Bridge link button while Kelvin is open nearby.
Pressing the Hue Bridge link button authorizes Kelvin to pair on the local network.

Initial pairing requires local bridge discovery and physical authorization. Because persistent storage is already mounted, the resulting bridge registration and generated configuration can survive routine container replacement.

1

Follow bridge discovery in the log

Run docker logs -f kelvin. Kelvin should report that it is generating default configuration, looking for a bridge, and beginning user registration.

docker logs -f kelvin
2

Press the physical blue button

When Kelvin asks for authorization, press the blue button on top of the Hue bridge. Kelvin waits one minute for this action.

3

Retry if the registration window expires

If the button was not pressed in time, restart Kelvin and repeat registration. Do not create a public tunnel as a workaround for failed local discovery.

docker restart kelvin
docker logs -f kelvin
4

Confirm detected devices

Successful output lists devices discovered through the bridge and their relevant capabilities. Devices that do not support functionality Kelvin uses may be excluded from unnecessary polling.

5

Review location detection and cyclic updates

If no location is configured, Kelvin can detect one by IP. Confirm that the detected location is suitable for the installation and that the log reports cyclic updates starting.

Bridge pairing is a local authorization event

Press the Hue bridge button only when you intentionally started Kelvin registration. If an unexpected application asks for bridge authorization, stop and identify it before pressing the button.

Open the web interface and obtain the password

If you used the loopback binding, open http://127.0.0.1:8080/ from a browser on the Docker host. If you used the separate-client layout, open http://{DOCKER_HOST_LAN_IP}:8080/ from an allowed local device.

The interface accepts any username and requests Kelvin's generated password. Retrieve the password from the protected startup log:

docker logs kelvin

It is also stored in the password field of config.json within the mapped configuration directory. Do not copy the complete configuration file into an issue, chat, or screenshot.

Configure room schedules

Kelvin web interface showing a time-based Hue lighting schedule.
Kelvin's web interface defines how Hue lighting changes over time.

Use the interface to identify managed rooms, set daily brightness and color-temperature behavior, choose startup behavior, and coordinate changes with sunrise and sunset. Start with a small set of lights and observe normal operation before applying broad household changes.

  • Confirm that the expected rooms and supported lights appear.
  • Decide how lighting should change through morning, daytime, evening, and night.
  • Choose scene-based or automatic activation according to the available Kelvin controls.
  • Check the timezone and detected location before evaluating solar-time behavior.
  • Account for manual overrides while testing.
  • Make a backup before substantial schedule changes.

Current labels may vary by Kelvin release. The available evidence confirms the capabilities but does not establish a complete field-by-field specification for every web-interface version, so this guide does not invent menu labels, schedule syntax, ranges, or save controls.

Kelvin requires a restart after configuration changes. Use the web-interface restart option when available or run:

docker restart kelvin

Reopen the interface and inspect the logs after restarting. A successful Docker restart confirms that the container started, but you should still verify that Kelvin accepted the configuration and resumed bridge communication.

Verify the complete local deployment

Do not create a public tunnel until container storage, bridge registration, authentication, and real lighting behavior all work locally. This keeps application faults separate from tunnel faults.

1

Check container status

Run docker ps and verify that the named Kelvin container remains running.

2

Review application startup

Confirm bridge registration, relevant device discovery, location handling, and cyclic updates in docker logs kelvin.

3

Open the interface through the intended local path

Use http://127.0.0.1:8080/ for a co-located client or the restricted Docker-host LAN address for a separate client.

4

Authenticate with Kelvin

Enter any username and the generated Kelvin password. Confirm that configuration data is not displayed before the password is accepted.

5

Observe real Hue behavior

Test a managed light and confirm that Kelvin communicates with the bridge. Remember that a manual change remains active until the light is switched off and on again.

6

Verify restart behavior

Restart the container, then confirm that the prior password, bridge registration, and schedule remain available from the bind-mounted directory.

docker restart kelvin
docker logs kelvin
7

Verify behavior after a planned host reboot

During an appropriate maintenance window, reboot the Docker host. After it returns, run docker ps, inspect the Kelvin log, open the interface, and confirm that automation resumes. This validates the restart policy rather than merely confirming that it was configured.

Kelvin v1.3.9 release information mentions a health endpoint, but the supplied evidence does not establish its path or response contract. Do not guess a monitoring URL. Use container status, the documented root interface, logs, persistent configuration, and observed Hue behavior unless you independently verify the health endpoint for the installed release.

Create a Localtonet HTTP tunnel to Kelvin

Remote browsers reach the local Kelvin web interface through a Localtonet HTTP tunnel.
The Localtonet client forwards remote HTTP requests to the verified Kelvin interface.

Our client establishes an outbound connection to a Localtonet relay server. This provides a public HTTPS address for the local Kelvin service without an inbound router port-forwarding rule, VPN setup, or a public IP address. The selected Localtonet device must remain connected, and the tunnel must be running.

Install the Localtonet client

Install Localtonet on the Docker host whenever practical. That lets Kelvin stay bound to 127.0.0.1. The Localtonet getting-started documentation provides current downloads for Windows, Linux, macOS, Docker, Android, and other documented platforms.

On supported Debian or Ubuntu x64 systems, the current package workflow is:

  1. Download the current x64 DEB package from our documentation.
  2. Open a terminal in the directory containing the package and install it.
  3. Place the device-specific AuthToken in /etc/localtonet/auth-token as a single protected line.
  4. Check the configuration before starting the system service.
  5. Enable and start the service, then inspect its journal.
sudo apt install ./localtonet-linux-x64.deb
sudo chmod 600 /etc/localtonet/auth-token
sudo localtonet --headless --authtoken-file /etc/localtonet/auth-token --check-config
sudo systemctl enable --now localtonet.service
sudo journalctl -u localtonet.service

Edit the token file locally before running the check. Never paste the real AuthToken into an article, shell history example, screenshot, or support post. If your host uses another operating system or architecture, select the matching current installation path instead of changing package names by guesswork.

Test from the Localtonet client device

Before creating the tunnel, open Kelvin from the exact device running Localtonet. A co-located client should reach http://127.0.0.1:8080/. A separate LAN client should reach the Docker host's restricted LAN address on port 8080.

Follow the documented HTTP tunnel sequence

Use the Localtonet HTTP tunnel documentation alongside the current dashboard. Available relay servers and some process-type choices can vary, so select current values shown in your account rather than copying a server code from an old tutorial.

1

Open the HTTP Tunnel page

Sign in to the Localtonet dashboard and open the HTTP Tunnel configuration page.

2

Select the Process Type

Choose Random Sub Domain, Custom Sub Domain, or Custom Domain according to the options available to your account and your intended URL. All three process types serve the local content at a public HTTPS address.

3

Select the AuthToken

Choose the device-specific token belonging to the connected client that can reach Kelvin. A token identifies the device that will run the tunnel.

4

Select an available server

Choose a currently available Localtonet relay server or region from the dashboard. Do not hardcode a server code from this article.

5

Enter Kelvin's local IP address and port

For a client on the Docker host, enter 127.0.0.1 and port 8080. For a client on another LAN device, enter the verified Docker-host LAN address and port 8080.

6

Start the tunnel

Creating the configuration does not make it active. Press Start, confirm that the selected client is connected, and use the assigned public HTTPS address.

Kelvin's login page becomes publicly reachable

Anyone who knows or discovers the public URL can reach Kelvin's login endpoint. The public HTTPS address protects the remote transport to the Localtonet edge, but it does not replace Kelvin's application authentication. Kelvin still accepts any username and relies on its generated password. Keep that password, the startup log, and config.json confidential, and stop the tunnel when remote administration is not needed.

Verify from a genuinely external network

Disconnect the test device from the home Wi-Fi network or use another external connection. Open the assigned public HTTPS address and confirm that Kelvin requests credentials before displaying its management interface.

Authenticate with the Kelvin password and perform a low-impact action, such as reviewing the schedule. Avoid disruptive lighting changes during the first remote test. Connectivity, application authentication, and automation behavior should be verified separately.

If the public address fails, return to the local-first sequence. Test Kelvin from the Localtonet client device, confirm the client connection, confirm the selected token and relay, verify that the tunnel is started, and then retry the public URL.

Routine operation, backup, replacement, and updates

Understand the independent service layers

Layer Required components Typical failure
Hue automation Kelvin container and reachable Hue bridge Schedules stop affecting lights
Local management Kelvin and the intended Docker port binding The local web interface does not load
Remote management Kelvin, Localtonet client, and a started HTTP tunnel Local access works but the public URL fails
Configuration persistence Correct bind mount for /etc/opt/kelvin/ Settings, password, or registration change after replacement

Check status and restart Kelvin

docker ps
docker logs kelvin
docker restart kelvin

After a restart, verify bridge communication, configuration loading, and cyclic updates. For remote access, also verify the Localtonet client and tunnel because they have a separate lifecycle.

Create a protected backup

Stop Kelvin before taking a file-level backup if you want to avoid capturing configuration while the application may be writing it. Archive the mapped host directory to protected storage:

docker stop kelvin
sudo tar -C /srv/kelvin -czf /protected/backup/location/kelvin-config-backup.tar.gz config
docker start kelvin

Replace the paths with the directories actually used on your host. The backup contains credential-bearing configuration, so restrict access to it. Verify that the archive exists and can be read before treating it as a successful backup.

Test restoration during a planned maintenance window or on a noncritical instance. A backup process is incomplete until you know which host directory must be restored and have confirmed that Kelvin can read it.

Replace the container without losing configuration

Container replacement is safe only when the configuration is already outside the container and has been backed up. Do not delete the mapped host directory. Use this sequence:

  1. Confirm the current interface, password, schedules, and bridge communication.
  2. Stop Kelvin and back up the mapped configuration directory.
  3. Record the current container configuration and image details.
  4. Pull the intended image after reviewing the Kelvin release history.
  5. Remove only the stopped container, not the host configuration directory.
  6. Recreate the container with the same bind mount, timezone, port binding, name, and restart policy.
  7. Verify the previous password, schedules, bridge registration, and Localtonet target.
docker inspect kelvin
docker pull stefanwichmann/kelvin
docker stop kelvin
docker rm kelvin

After removal, rerun the appropriate Docker command from the installation section. The bind-mounted host directory should preserve the existing state. If Kelvin generates a new default configuration, stop immediately and check the source path, mount destination, permissions, and backup before making new changes.

Do not improvise a migration from an unmounted container

If an older Kelvin container was started without persistent storage, do not remove it before preserving its configuration. This tutorial intentionally mounts storage before first pairing. A reliable migration from an existing unmounted container requires validating the files copied from that specific container and release, so keep the original container intact until its data has been independently backed up and tested.

Approach updates deliberately

Review the Kelvin release notes before replacing an image. This guide does not claim that every future release will preserve every previous configuration without change. Keep a backup and a record of the last working image before updating.

After an update, test container startup, the existing password, Hue registration, room schedules, local access, actual light behavior, reboot recovery, and the Localtonet tunnel. Do not treat a successful image pull as proof that the application update is complete.

Troubleshooting Kelvin and remote access

The image does not download

Run docker version and confirm that the engine is available. Then retry docker pull stefanwichmann/kelvin. Failures here concern Docker connectivity, permissions, image retrieval, or platform compatibility rather than Hue pairing or Localtonet.

The container is missing from docker ps

Inspect all containers and read the named container's log:

docker ps -a
docker logs kelvin

Do not repeatedly create replacement containers without understanding the first failure. Confirm the mount source, timezone, host address, port availability, and Docker error message.

Docker says port 8080 is already allocated

Another process or container is using the selected host address and port. Identify it before changing Kelvin's mapping. If you deliberately select another host port, verify the resulting local URL and use that verified host port in the Localtonet tunnel.

Docker cannot bind to the chosen LAN address

Confirm that the address is actually assigned to the Docker host. An address copied from an example or belonging to another device cannot be used as the host side of the publication. If DHCP changed the host address, correct the network assignment or reservation before recreating Kelvin.

Kelvin does not find the Hue bridge

Verify that the bridge is configured, powered, and reachable from the Docker host. Review the Kelvin log for its discovery state. The available evidence does not document alternative bridge-address flags or special Docker network modes, so this guide does not prescribe unverified options.

The blue-button registration expires

Kelvin waits one minute. Restart the container, follow the log, and press the button when registration is requested. Pressing it long before or after the prompt may not authorize the intended request.

The Kelvin password is unknown

Inspect docker logs kelvin or the password field in the mapped config.json. If neither location contains the expected state, verify that the correct host directory is mounted at /etc/opt/kelvin/. An unexpected new password can indicate that Kelvin started with an empty or incorrect mount.

The interface does not open on the Docker host

Confirm that the container is running and that its published-port configuration matches the intended layout. For a loopback deployment, test http://127.0.0.1:8080/ on the Docker host itself. A different device cannot use its own 127.0.0.1 to reach the Docker host.

The interface works locally but not from the separate Localtonet device

Confirm that Docker is bound to the Docker host's correct LAN address rather than loopback. Verify the host firewall, local routing, and client address. Allow only the required Localtonet client device where practical. Do not solve a LAN reachability problem by adding an internet-facing router rule.

A schedule appears not to affect a light

Check the light's capabilities, room assignment, current power state, timezone, location, schedule interval, and application log. Determine whether the light was manually changed. Kelvin respects manual changes until the light is switched off and on again.

The public URL fails while local access works

Confirm that the Localtonet client is connected, the correct AuthToken is selected, the chosen relay is available, and the tunnel was started. Test the local target from the client device. If Localtonet runs on another computer, 127.0.0.1 refers to that other computer, not the Docker host.

The public page opens but login fails

Use Kelvin's generated password from the protected log or persistent config.json. The project says the interface accepts any username, so focus on the password and configuration continuity. If credentials changed unexpectedly, investigate the bind mount before recreating anything.

Remote access stops after a reboot

Check each dependency in order: Docker service, Kelvin container, local Kelvin URL, Localtonet service, selected device connection, and tunnel status. Kelvin's restart policy does not start an inactive Localtonet tunnel, and a running tunnel cannot forward to a stopped Kelvin container.

Use a local-first diagnostic order

Start with the Kelvin container and Hue behavior. Next test the local interface from the Localtonet client device. Then check the Localtonet client connection and tunnel status. Test the public address last. This order isolates the failing layer without changing a correct tunnel to compensate for a broken local service.

Frequently asked questions

What is Kelvin for Philips Hue?

Kelvin is a self-hosted automation service that adjusts supported Hue lighting according to local sunrise and sunset times and custom daily intervals. It supports room schedules, gradual transitions, startup settings, scene or automatic activation, and temporary manual overrides.

Why must persistent storage be configured before pairing?

Kelvin stores configuration under /etc/opt/kelvin/. Mounting that directory before first startup preserves the generated password, schedules, and bridge-related configuration outside the container's disposable writable layer.

Should Docker publish Kelvin on every network interface?

No, not when a narrower binding is practical. Bind to 127.0.0.1:8080 when Localtonet runs on the Docker host. If Localtonet runs elsewhere on the LAN, bind to the Docker host's specific LAN address and restrict access with the host firewall.

Where is the Kelvin web-interface password?

Kelvin generates it on first startup. Find it in docker logs kelvin or in the password field of config.json within the persistent configuration directory. Protect both locations.

Will Kelvin start after the Docker host reboots?

The deployment in this guide uses Docker's unless-stopped restart policy. Verify it with docker inspect and perform a planned reboot test because configured policy and proven recovery are not the same thing.

Does Localtonet replace Kelvin's password?

No. Localtonet provides the remote transport and public HTTPS address. Kelvin remains responsible for application login, and its login endpoint is publicly reachable while the tunnel is running.

Does Localtonet require router port forwarding?

No. Our client creates an outbound connection to a Localtonet relay. A separate-client layout may require a narrowly scoped LAN firewall allowance on the Docker host, but it does not require forwarding port 8080 from the internet through the router.

Does creating a tunnel make it active immediately?

No. The selected client device must be connected and the tunnel must be started with the Start button. You can later stop or delete it when remote Kelvin access is not required.

Can Kelvin be installed without Docker?

Yes. Kelvin provides release archives for standalone use. Start kelvin.exe on Windows or ./kelvin on macOS, Linux, and other Unix-like systems. Verify the binary's actual listener before adapting the Docker-specific remote-access steps.

Access your verified Kelvin interface with Localtonet

Once Kelvin is persistent, locally verified, and recovering correctly after restarts, create a Localtonet HTTP tunnel to the appropriate loopback or restricted LAN target. Test the public login from an external network and stop the tunnel whenever remote administration is not needed.

Get Started Free โ†’

Corrections & updates

Substantive changes approved by the Localtonet editorial team are listed transparently below.

Remove the outer article wrapper and place the hero first; make persistent storage part of the initial Docker deployment rather than an afterthought; provide separate secure port-binding examples for a co-located Localtonet client and a client on another LAN device; explain Docker's default all-interface port publication; add a deliberate container restart policy and reboot verification; clarify safe container replacement, backup, and update procedures; replace the generic Localtonet setup summary with the current documented HTTP tunn

Localtonet is a secure multi-protocol tunneling and proxy platform designed to expose localhost, devices, private services, and AI agents to the public internet supporting HTTP/HTTPS tunnels, TCP/UDP forwarding, mobile proxy infrastructure, file server publishing, latency-optimized game connectivity, and developer-ready AI agent endpoint exposure from a single unified control plane.

support