Go library to control YEELIGHT devices for dinosaurs with scary faces
- Library is not in stable state and not finished (few missing features)
- User interface may be slightly changed before 1.0 release
- Device auto-discovery are not implemented yet, You'll need to connect to them directly with IP address.
- Tested only on one type of bulb (Yeelight Smart LED Bulb (Color)), I can't guarantee that everything will work correctly on other devices
make sure LAN control is enabled in your device:
Device initialization:
yl.NewBulb("192.168.0.123")
Device functions:
// commands for standard and background light:
func Temperature(temp, duration int) error {}
func RGB(rgb, duration int) error {}
func HSV(hue, saturation, duration int) error {}
func Brightness(brightness, duration int) error {}
func StartColorFlow(count int, action CfAction, flowExpression FlowExpression) error {}
func StopColorFlow() error {}
func SetDefault() error {}
func PowerOn(duration int) error {}
func PowerOnWithMode(duration int, mode Mode) error {}
func PowerOff(duration int) error {}
func Toggle() error {}
// for background only:
func DevToggle() error {}
// for standard only:
func CronAdd(jobType CronType, minutes int) error {}
func CronDel(jobType CronType) error {}
func SetAdjust(action Action, prop AdjustProp) error {}
func AdjustBright(percentage, duration int) error {}
func AdjustTemperature(percentage, duration int) error {}
func AdjustColor(percentage, duration int) error {}
func SetName(name string) error {}
func StartMusic(ifaceName string) (error, musicSupportedCommands) {}
// commands available in music mode
func Temperature(temp, duration int) {}
func RGB(rgb, duration int) {}
func HSV(hue, saturation, duration int) {}
func Brightness(brightness, duration int) {}
func StartColorFlow(count int, action CfAction, flowExpression FlowExpression) {}
func StopColorFlow() {}
package main
import (
"fmt"
"sync"
"time"
yl "github.com/gethiox/yeelight-go"
)
func main() {
var bulbs []*yl.Bulb
var ipTemplate = "192.168.10.%d"
var octets = []int{220, 221, 222, 223}
// Connecting to many bulbs at the same time
for _, octet := range octets {
ip := fmt.Sprintf(ipTemplate, octet)
bulb := yl.NewBulb(ip)
err := bulb.Connect()
if err != nil {
panic(err)
}
bulbs = append(bulbs, bulb)
}
jobs := sync.WaitGroup{}
for _, bulb := range bulbs {
jobs.Add(1)
// running goroutine for every bulb separately
go func(bulb *yl.Bulb) {
var err error
err = bulb.PowerOn(0)
if err != nil {
panic(err)
}
// trying to start music server on "enp0s25" interface
// empty name ("") may be passed for starting music server on first found interface
music, err := bulb.StartMusic("enp0s25")
if err != nil {
panic(err)
}
// go through hue range ten times
for iterations := 0; iterations < 10; iterations++ {
for i := 0; i < 360; i++ {
music.HSV(i, 100, 50)
time.Sleep(time.Millisecond * 50)
}
}
jobs.Done()
}(bulb)
}
jobs.Wait()
}