Ground truth for Shelly Duo GU10 RGBW smart bulb (Gen1): LAN HTTP REST contract, mDNS discovery (with the non-loopback-IPv4-bind gotcha), color/temp endpoints, off semantics, latency expectations. Language-agnostic facts; Kotlin/Ktor reference example.
88
86%
Does it follow best practices?
Impact
100%
1.28xAverage score across 3 eval scenarios
Passed
No known issues
When working with Shelly Duo GU10 RGBW smart bulbs (Gen1 / shellycolorbulb- family) over LAN HTTP:
0.2 s for any debounce controller, not the 1.2 s you'd use for cloud APIs._http._tcp.local. with service name pattern shellycolorbulb-<MAC> (last 6 hex digits of the MAC, lowercase). For Duo GU10 specifically the prefix may also be shellybulbduo-<MAC>.JmDNS.create() with no argument binds to the JVM's default InetAddress, which on macOS is localhost (127.0.0.1) by default. Discovery returns nothing. You must bind to the primary non-loopback IPv4 interface explicitly.GET /color/0?turn=on&red=R&green=G&blue=B&gain=N where R/G/B are 0..255 and gain is 0..100.GET /color/0?turn=off. The bulb retains last R/G/B for the next turn=on.GET /white/0?turn=on&temp=K&brightness=N where temp is 3000..6500. Mode is sticky — if you set white mode, the next /color/0?turn=on may not pick the previous color cleanly. Reset color explicitly.GET /status returns JSON with lights[0].ison, wifi_sta.ip, rssi, etc. Use for liveness probe.See the full skill at skills/shelly-duo-gu10-control/SKILL.md for the Kotlin/Ktor reference client and JmDNS discovery example.