๐Ÿ’ก

LAN Lights

Your lights. Your network. Nobody else's business.
A local-only Android controller for Govee Wi-Fi lights โ€” no cloud, no account, no nonsense.

0 runtime permission prompts
0 cloud connections
0 trackers & analytics
100% LAN traffic

Why this exists

The official app wants always-on precise location, ships analytics SDKs, and routes your light switch through someone else's server. Your lights are on your Wi-Fi โ€” they'll take commands directly. So that's all this app does.

AccessOfficial Govee appLAN Lights
Precise location ("all the time")RequiredNever asked
Cloud account / loginRequiredNone
Analytics & crash trackersBundledNone
Bluetooth / camera / NFCRequestedNot declared
Works with internet downPartiallyFully
Traffic leaves your LANYesNever

What it does

Everything a wall of RGB deserves, driven entirely over UDP on your own subnet.

๐Ÿ“ก

Zero-config discovery

Multicast scan finds every LAN-enabled Govee device in about a second. Multicast blocked by your mesh? Add by IP instead.

๐ŸŽจ

Full color control

RGB sliders, 12 presets, white temperature 2000โ€“9000 K, and a whiteness blend for pale pastel shades.

โฐ

Real timers

Day-of-week timers and sleep countdowns fire via exact system alarms โ€” app closed, screen off, doesn't matter. They survive reboots.

๐Ÿ“…

Whole-home schedule

Separate weekday and weekend on/off lists, as many switch times per day as you like. New lights join automatically.

โœจ

Temporary effects

Color Fade, Sparkle, Breathe and Candle, streamed from your phone with a live speed slider. Honest label: they stop when the app closes.

๐Ÿ”ฎ

Future-proof

Model-agnostic protocol: any Govee device with the LAN Control toggle works โ€” including ones you buy later.

How it works

Govee's documented LAN API is plain JSON over UDP. Three ports, no auth, no cloud broker. If you can read this, you could script it yourself with netcat โ€” this app just makes it comfortable.

:4001 device listens โ€” scan & probe
:4002 your phone listens โ€” replies land here
:4003 device listens โ€” control commands
// discovery โ€” multicast to 239.255.255.250:4001
{"msg":{"cmd":"scan","data":{"account_topic":"reserve"}}}

// set color โ€” unicast to the light on :4003
{"msg":{"cmd":"colorwc","data":{"color":{"r":255,"g":80,"b":40},"colorTemInKelvin":0}}}

One-time setup per light: flip the LAN Control toggle in the official Govee app (device โ†’ settings gear). After that, you can sign out of โ€” or uninstall โ€” the official app entirely. Full protocol docs: Govee LAN API guide.

Requirements & supported gear

You need

Android 8.0+ (sideload the APK) ยท lights and phone on the same router (lights use 2.4 GHz; your phone can be on 5 GHz) ยท a Govee model on the LAN API list โ€” tested with the H607C Floor Lamp 2 and H6168 TV Backlight.

Pro tips

Give each light a DHCP reservation so timers always reach it ยท mesh routers sometimes filter multicast โ€” "Add by IP" sidesteps that ยท leave lights on a static color in the Govee app to avoid firmware scene conflicts.

Honest FAQ

Why do effects stop when I close the app?

Govee's built-in DIY scenes aren't exposed by the LAN protocol โ€” they're cloud/BLE only. So this app generates effects by streaming rapid local color commands from your phone. Close the app and the stream stops; the light simply holds its last color. Trade-off accepted in exchange for zero cloud.

Does it work with the AI Sync Box (H6603)?

No โ€” the sync box isn't on Govee's LAN list; its local path is Matter. The good news: its HDMI sync effects run on the box itself and keep working without any app at all.

My light flashes and fights color changes. What gives?

It was left running a firmware scene (or music mode) by the official app, and the scene engine is wrestling your color command. Unplug the light for 10 seconds and it reboots into its saved mode. Prevention: leave lights on a plain static color when you finish with the Govee app.

Why does an offline app declare the INTERNET permission?

Android requires it for any socket use, including LAN-only UDP. Every permission the app declares is an install-time "normal" one โ€” you will never see a runtime permission prompt. Verify it yourself in Android's App info โ†’ Permissions.

Can I audit the traffic?

Please do. Put a packet capture on your network: you'll see UDP to 239.255.255.250:4001 and to your lights' IPs on 4001/4003, replies on 4002 โ€” and nothing else, ever.