add nanoleaf service
This commit is contained in:
+39
-70
@@ -1,16 +1,14 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
lucifer3 "git.aiterp.net/lucifer3/server"
|
||||
"git.aiterp.net/lucifer3/server/commands"
|
||||
"git.aiterp.net/lucifer3/server/device"
|
||||
"git.aiterp.net/lucifer3/server/effects"
|
||||
"git.aiterp.net/lucifer3/server/events"
|
||||
"git.aiterp.net/lucifer3/server/internal/color"
|
||||
"git.aiterp.net/lucifer3/server/internal/gentools"
|
||||
"git.aiterp.net/lucifer3/server/services"
|
||||
"log"
|
||||
"git.aiterp.net/lucifer3/server/services/nanoleaf"
|
||||
"time"
|
||||
)
|
||||
|
||||
@@ -23,76 +21,47 @@ func main() {
|
||||
bus.JoinPrivileged(resolver)
|
||||
bus.JoinPrivileged(sceneMap)
|
||||
bus.Join(services.NewEffectEnforcer(resolver, sceneMap))
|
||||
bus.Join(nanoleaf.NewService())
|
||||
|
||||
bus.RunEvent(events.Connected{Prefix: "nanoleaf:10.80.1.11"})
|
||||
|
||||
numbers := []int{5, 2, 3, 1, 4}
|
||||
for i, id := range []string{"e28c", "67db", "f744", "d057", "73c1"} {
|
||||
bus.RunEvent(events.HardwareState{
|
||||
ID: "nanoleaf:10.80.1.11:" + id,
|
||||
InternalName: fmt.Sprintf("Hexagon %d", numbers[i]),
|
||||
SupportFlags: device.SFlagPower | device.SFlagColor | device.SFlagIntensity,
|
||||
ColorFlags: device.CFlagRGB,
|
||||
State: device.State{},
|
||||
})
|
||||
}
|
||||
|
||||
bus.RunCommand(commands.ReplaceScene{
|
||||
Match: "lucifer:name:Hex*",
|
||||
SceneName: "Evening",
|
||||
})
|
||||
|
||||
bus.RunCommand(commands.AddAlias{
|
||||
Match: "nanoleaf:10.80.1.{11,7,16,5}:*",
|
||||
Alias: "lucifer:tag:Magic Lamps",
|
||||
})
|
||||
|
||||
for i, id := range []string{"40e5", "dead", "beef", "cafe", "1337"} {
|
||||
bus.RunEvent(events.HardwareState{
|
||||
ID: "nanoleaf:10.80.1.11:" + id,
|
||||
InternalName: fmt.Sprintf("Hexagon %d", 6+i),
|
||||
SupportFlags: device.SFlagPower | device.SFlagColor | device.SFlagIntensity,
|
||||
ColorFlags: device.CFlagRGB,
|
||||
State: device.State{},
|
||||
})
|
||||
}
|
||||
|
||||
bus.RunEvent(events.ExternalEvent{
|
||||
Kind: "weather",
|
||||
Values: map[string]string{
|
||||
"location": "Brekstad",
|
||||
"temperature_celsius": "21.00",
|
||||
"precipitation_mm": "3.21",
|
||||
},
|
||||
})
|
||||
|
||||
c1 := gentools.Ptr(color.MustParse("rgb:#ff0000"))
|
||||
c2 := gentools.Ptr(color.MustParse("rgb:#00ff00"))
|
||||
bus.RunCommand(commands.Assign{
|
||||
Match: "**:Hexagon *",
|
||||
Effect: effects.Gradient{
|
||||
States: []device.State{
|
||||
{
|
||||
Power: gentools.Ptr(true),
|
||||
Color: c1,
|
||||
Intensity: gentools.Ptr(1.0),
|
||||
bus.JoinCallback(func(event lucifer3.Event) bool {
|
||||
switch event.(type) {
|
||||
case events.DevicesReady:
|
||||
bus.RunCommand(commands.AddAlias{Match: "nanoleaf:10.80.1.14:2d0c", Alias: "lucifer:name:Hex 5"})
|
||||
bus.RunCommand(commands.AddAlias{Match: "nanoleaf:10.80.1.14:542f", Alias: "lucifer:name:Hex 4"})
|
||||
bus.RunCommand(commands.AddAlias{Match: "nanoleaf:10.80.1.14:e760", Alias: "lucifer:name:Hex 3"})
|
||||
bus.RunCommand(commands.AddAlias{Match: "nanoleaf:10.80.1.14:207a", Alias: "lucifer:name:Hex 2"})
|
||||
bus.RunCommand(commands.AddAlias{Match: "nanoleaf:10.80.1.14:df9a", Alias: "lucifer:name:Hex 1"})
|
||||
bus.RunCommand(commands.AddAlias{Match: "nanoleaf:10.80.1.14:cdd5", Alias: "lucifer:name:Hex 6"})
|
||||
bus.RunCommand(commands.AddAlias{Match: "nanoleaf:10.80.1.14:4597", Alias: "lucifer:name:Hex 7"})
|
||||
bus.RunCommand(commands.AddAlias{Match: "nanoleaf:10.80.1.14:82cb", Alias: "lucifer:name:Hex 8"})
|
||||
bus.RunCommand(commands.AddAlias{Match: "nanoleaf:10.80.1.14:09fd", Alias: "lucifer:name:Hex 9"})
|
||||
bus.RunCommand(commands.Assign{
|
||||
Match: "nanoleaf:10.80.1.14:*",
|
||||
Effect: effects.Gradient{
|
||||
States: []device.State{
|
||||
{Power: p(true), Intensity: p(0.3), Color: p(color.MustParse("xy:0.22,0.18"))},
|
||||
{Power: p(true), Intensity: p(0.5), Color: p(color.MustParse("xy:0.22,0.18"))},
|
||||
},
|
||||
Interpolate: true,
|
||||
AnimationMS: 1000,
|
||||
Reverse: false,
|
||||
},
|
||||
{
|
||||
Power: gentools.Ptr(true),
|
||||
Color: c2,
|
||||
Intensity: gentools.Ptr(0.7),
|
||||
},
|
||||
},
|
||||
AnimationMS: 1000,
|
||||
Interpolate: true,
|
||||
},
|
||||
})
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
})
|
||||
|
||||
log.Println("Search \"**:Hexagon {1,5,6}\"")
|
||||
for _, dev := range resolver.Resolve("lucifer:name:Hexagon {1,5,6}") {
|
||||
log.Println("- ID:", dev.ID)
|
||||
log.Println(" Aliases:", dev.Aliases)
|
||||
}
|
||||
bus.RunCommand(commands.ConnectDevice{
|
||||
ID: "nanoleaf:10.80.1.14",
|
||||
APIKey: "",
|
||||
})
|
||||
|
||||
time.Sleep(time.Second * 15)
|
||||
time.Sleep(time.Hour)
|
||||
}
|
||||
|
||||
func p[T any](v T) *T {
|
||||
return &v
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user