experiments
This commit is contained in:
commit
c62aa93ae0
3 changed files with 410 additions and 0 deletions
154
main.go
Normal file
154
main.go
Normal file
|
|
@ -0,0 +1,154 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"git.barakmich.com/barak/hue/discovery"
|
||||
"github.com/amimof/huego"
|
||||
"github.com/lucasb-eyer/go-colorful"
|
||||
)
|
||||
|
||||
func setLightToHex(l *huego.Light, hex string, tTenths int) error {
|
||||
return setLightToHexBright(l, hex, -1, tTenths)
|
||||
}
|
||||
|
||||
func setLightToHexBright(l *huego.Light, hex string, bright int, tTenths int) error {
|
||||
c, _ := colorful.Hex(hex)
|
||||
xc, yc, yz := c.Xyy()
|
||||
var bout uint8
|
||||
if bright < 0 {
|
||||
bout = uint8(255 * yz)
|
||||
} else {
|
||||
bout = uint8(bright)
|
||||
}
|
||||
return l.SetState(huego.State{
|
||||
On: true,
|
||||
TransitionTime: uint16(tTenths),
|
||||
ColorMode: "xy",
|
||||
Xy: []float32{float32(xc), float32(yc)},
|
||||
Bri: bout,
|
||||
})
|
||||
}
|
||||
|
||||
func runTransition(l *huego.Light, ret chan *huego.Light) {
|
||||
setLightToHex(l, "#aaaaaa", 7)
|
||||
time.Sleep(800 * time.Millisecond)
|
||||
setLightToHex(l, "#5555ff", 7)
|
||||
time.Sleep(700 * time.Millisecond)
|
||||
ret <- l
|
||||
}
|
||||
|
||||
func runSnowAmbiance(lights []*huego.Light) {
|
||||
for _, x := range lights {
|
||||
setLightToHex(x, "#5555ff", 0)
|
||||
}
|
||||
var ready []*huego.Light
|
||||
ret := make(chan *huego.Light, 100)
|
||||
ready = lights
|
||||
for {
|
||||
select {
|
||||
case l := <-ret:
|
||||
ready = append(ready, l)
|
||||
case <-time.Tick(100 * time.Millisecond):
|
||||
if rand.Float32() < 0.03 {
|
||||
if len(ready) == 0 {
|
||||
continue
|
||||
}
|
||||
i := rand.Intn(len(ready))
|
||||
l := ready[i]
|
||||
ready = append(ready[:i], ready[i+1:]...)
|
||||
go runTransition(l, ret)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func runRedTransition(l *huego.Light, c chan *huego.Light) {
|
||||
setLightToHex(l, "#ff0000", 0)
|
||||
c <- l
|
||||
}
|
||||
|
||||
func runGreenTransition(l *huego.Light, c chan *huego.Light) {
|
||||
setLightToHex(l, "#009900", 0)
|
||||
c <- l
|
||||
}
|
||||
|
||||
func runChristmas(lights []*huego.Light) {
|
||||
var red []*huego.Light
|
||||
var green []*huego.Light
|
||||
redc := make(chan *huego.Light, 100)
|
||||
greenc := make(chan *huego.Light, 100)
|
||||
for _, x := range lights {
|
||||
if rand.Float32() < 0.5 {
|
||||
setLightToHex(x, "#ff0000", 0)
|
||||
red = append(red, x)
|
||||
} else {
|
||||
setLightToHex(x, "#009900", 0)
|
||||
green = append(green, x)
|
||||
}
|
||||
}
|
||||
for {
|
||||
select {
|
||||
case x := <-redc:
|
||||
red = append(red, x)
|
||||
case x := <-greenc:
|
||||
green = append(green, x)
|
||||
case <-time.Tick(1000 * time.Millisecond):
|
||||
if len(red)+len(green) == 0 {
|
||||
continue
|
||||
}
|
||||
var selector = red
|
||||
toRed := false
|
||||
i := rand.Intn(len(red) + len(green))
|
||||
if i >= len(red) {
|
||||
i = i - len(red)
|
||||
selector = green
|
||||
toRed = true
|
||||
}
|
||||
l := selector[i]
|
||||
selector = append(selector[:i], selector[i+1:]...)
|
||||
if toRed {
|
||||
go runRedTransition(l, redc)
|
||||
} else {
|
||||
go runGreenTransition(l, greenc)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
bridge, err := discovery.DiscoverAndConnectFromConfig("barak-hue-test")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
groups, err := bridge.GetGroups()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
var all huego.Group
|
||||
found := false
|
||||
for _, x := range groups {
|
||||
if x.Name == "All Colors" {
|
||||
found = true
|
||||
all = x
|
||||
break
|
||||
}
|
||||
}
|
||||
fmt.Println(all)
|
||||
|
||||
if !found {
|
||||
panic("couldn't find it")
|
||||
}
|
||||
lightaddr := make([]*huego.Light, len(all.Lights))
|
||||
for i, x := range all.Lights {
|
||||
n, _ := strconv.Atoi(x)
|
||||
lightaddr[i], err = bridge.GetLight(n)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
runChristmas(lightaddr)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue