Compare commits
No commits in common. "7ef6d66564fba8dd5bd9af2ef83f31e8864616ee" and "079b1a469d8f68c0668f9d2fbd5ef5b83627c5ea" have entirely different histories.
7ef6d66564
...
079b1a469d
@ -20,7 +20,7 @@ type (
|
|||||||
}
|
}
|
||||||
|
|
||||||
Result struct {
|
Result struct {
|
||||||
Id string `json:"id"`
|
ID string `json:"id"`
|
||||||
Label string `json:"label"`
|
Label string `json:"label"`
|
||||||
Status Status `json:"status"`
|
Status Status `json:"status"`
|
||||||
}
|
}
|
||||||
|
@ -2,14 +2,13 @@ package lumecmd
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"git.kill0.net/chill9/go-lifx"
|
"git.kill0.net/chill9/go-lifx"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CmdArgs struct {
|
type CmdArgs struct {
|
||||||
Flags Flags
|
Flags *Flags
|
||||||
Client *lifx.Client
|
Client *lifx.Client
|
||||||
Selector string
|
Selector string
|
||||||
}
|
}
|
||||||
@ -18,13 +17,6 @@ type Flags struct {
|
|||||||
*flag.FlagSet
|
*flag.FlagSet
|
||||||
}
|
}
|
||||||
|
|
||||||
type Command struct {
|
|
||||||
Func func(CmdArgs) int
|
|
||||||
Flags *flag.FlagSet
|
|
||||||
}
|
|
||||||
|
|
||||||
var commandRegistry = make(map[string]Command)
|
|
||||||
|
|
||||||
func (f Flags) String(name string) string {
|
func (f Flags) String(name string) string {
|
||||||
return f.FlagSet.Lookup(name).Value.String()
|
return f.FlagSet.Lookup(name).Value.String()
|
||||||
}
|
}
|
||||||
@ -38,16 +30,3 @@ func (f Flags) Bool(name string) bool {
|
|||||||
val, _ := strconv.ParseBool(f.String(name))
|
val, _ := strconv.ParseBool(f.String(name))
|
||||||
return val
|
return val
|
||||||
}
|
}
|
||||||
|
|
||||||
func RegisterCommand(name string, cmd Command) error {
|
|
||||||
if _, ok := commandRegistry[name]; ok {
|
|
||||||
return fmt.Errorf("%s command is already registered")
|
|
||||||
}
|
|
||||||
commandRegistry[name] = cmd
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetCommand(name string) (Command, bool) {
|
|
||||||
cmd, ok := commandRegistry[name]
|
|
||||||
return cmd, ok
|
|
||||||
}
|
|
||||||
|
14
cmd/ls.go
14
cmd/ls.go
@ -1,7 +1,6 @@
|
|||||||
package lumecmd
|
package lumecmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"flag"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -17,20 +16,9 @@ var (
|
|||||||
powerWidth int = 0
|
powerWidth int = 0
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
|
||||||
fs := flag.NewFlagSet("toggle", flag.ExitOnError)
|
|
||||||
fs.String("selector", "all", "Set the selector")
|
|
||||||
|
|
||||||
RegisterCommand("ls", Command{
|
|
||||||
Func: LsCmd,
|
|
||||||
Flags: fs,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func LsCmd(args CmdArgs) int {
|
func LsCmd(args CmdArgs) int {
|
||||||
c := args.Client
|
c := args.Client
|
||||||
selector := args.Flags.String("selector")
|
lights, err := c.ListLights(args.Selector)
|
||||||
lights, err := c.ListLights(selector)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return 1
|
return 1
|
||||||
|
140
cmd/lume/main.go
140
cmd/lume/main.go
@ -4,55 +4,135 @@ import (
|
|||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"strconv"
|
||||||
|
|
||||||
"git.kill0.net/chill9/go-lifx"
|
|
||||||
lumecmd "git.kill0.net/chill9/go-lifx/cmd"
|
|
||||||
"github.com/BurntSushi/toml"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const lumercFile = ".lumerc"
|
import (
|
||||||
|
"git.kill0.net/chill9/go-lifx"
|
||||||
type Config struct {
|
lumecmd "git.kill0.net/chill9/go-lifx/cmd"
|
||||||
AccessToken string
|
)
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var (
|
var (
|
||||||
|
command string
|
||||||
selector string
|
selector string
|
||||||
|
//r *lifx.Response
|
||||||
|
err error
|
||||||
|
color lifx.HSBKColor
|
||||||
)
|
)
|
||||||
|
|
||||||
var config Config
|
accessToken := os.Getenv("LIFX_ACCESS_TOKEN")
|
||||||
homeDir, err := os.UserHomeDir()
|
if accessToken == "" {
|
||||||
_, err = toml.DecodeFile(path.Join(homeDir, lumercFile), &config)
|
fmt.Println("LIFX_ACCESS_TOKEN is undefined")
|
||||||
if os.IsNotExist(err) {
|
|
||||||
config.AccessToken = os.Getenv("LIFX_ACCESS_TOKEN")
|
|
||||||
}
|
|
||||||
|
|
||||||
if config.AccessToken == "" {
|
|
||||||
fmt.Println("access token is not set")
|
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flag.StringVar(&selector, "selector", "all", "LIFX selector")
|
||||||
|
|
||||||
|
setStateCommand := flag.NewFlagSet("set-state", flag.ExitOnError)
|
||||||
|
setStateCommand.String("power", "", "Set the power state (on/off)")
|
||||||
|
setStateCommand.String("color", "", "Set the color (HSBK)")
|
||||||
|
setStateCommand.String("brightness", "", "Set the brightness")
|
||||||
|
setStateCommand.String("duration", "", "Set the duration")
|
||||||
|
setStateCommand.String("infrared", "", "Set the infrared brightness")
|
||||||
|
setStateCommand.Bool("fast", false, "Execute fast (no response)")
|
||||||
|
|
||||||
|
setWhiteCommand := flag.NewFlagSet("set-white", flag.ExitOnError)
|
||||||
|
setWhiteCommand.String("name", "", "Set the kelvin by name")
|
||||||
|
setWhiteCommand.String("kelvin", "", "Set the kelvin by value")
|
||||||
|
setWhiteCommand.String("brightness", "", "Set the brightness")
|
||||||
|
setWhiteCommand.String("duration", "", "Set the duration")
|
||||||
|
setWhiteCommand.Bool("fast", false, "Execute fast (no response)")
|
||||||
|
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
command := flag.Arg(0)
|
command = flag.Arg(0)
|
||||||
|
|
||||||
c := lifx.NewClient(config.AccessToken)
|
c := lifx.NewClient(accessToken)
|
||||||
|
|
||||||
cmdArgs := lumecmd.CmdArgs{
|
cmdArgs := lumecmd.CmdArgs{
|
||||||
Client: c,
|
Client: c,
|
||||||
Selector: selector,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd, ok := lumecmd.GetCommand(command)
|
switch command {
|
||||||
if !ok {
|
case "toggle":
|
||||||
fmt.Println("ERROR")
|
_, err = c.Toggle(selector, 1)
|
||||||
|
case "ls":
|
||||||
|
lumecmd.LsCmd(cmdArgs)
|
||||||
|
case "set-state":
|
||||||
|
setStateCommand.Parse(os.Args[4:])
|
||||||
|
|
||||||
|
fs := lumecmd.Flags{setStateCommand}
|
||||||
|
|
||||||
|
power := fs.String("power")
|
||||||
|
color := fs.String("color")
|
||||||
|
brightness := fs.String("brightness")
|
||||||
|
duration := fs.String("duration")
|
||||||
|
infrared := fs.String("infrared")
|
||||||
|
fast := fs.String("fast")
|
||||||
|
|
||||||
|
state := lifx.State{}
|
||||||
|
|
||||||
|
if power != "" {
|
||||||
|
state.Power = power
|
||||||
|
}
|
||||||
|
if color != "" {
|
||||||
|
state.Color = lifx.NamedColor(color)
|
||||||
|
}
|
||||||
|
if brightness != "" {
|
||||||
|
state.Brightness, err = strconv.ParseFloat(brightness, 64)
|
||||||
|
}
|
||||||
|
if duration != "" {
|
||||||
|
state.Duration, err = strconv.ParseFloat(duration, 64)
|
||||||
|
}
|
||||||
|
if infrared != "" {
|
||||||
|
state.Infrared, err = strconv.ParseFloat(infrared, 64)
|
||||||
|
}
|
||||||
|
if fast != "" {
|
||||||
|
state.Fast, err = strconv.ParseBool(fast)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = c.SetState(selector, state)
|
||||||
|
case "set-white":
|
||||||
|
setWhiteCommand.Parse(os.Args[4:])
|
||||||
|
|
||||||
|
fs := lumecmd.Flags{setWhiteCommand}
|
||||||
|
|
||||||
|
name := fs.String("name")
|
||||||
|
kelvin := fs.String("kelvin")
|
||||||
|
brightness := fs.String("brightness")
|
||||||
|
duration := fs.String("duration")
|
||||||
|
fast := fs.String("fast")
|
||||||
|
|
||||||
|
state := lifx.State{}
|
||||||
|
|
||||||
|
if name != "" {
|
||||||
|
color, err := lifx.NewWhiteString(name)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
fs := cmd.Flags
|
state.Color = color
|
||||||
fs.Parse(os.Args[2:])
|
}
|
||||||
|
if kelvin != "" {
|
||||||
cmdArgs.Flags = lumecmd.Flags{fs}
|
k, _ := strconv.ParseInt(kelvin, 10, 16)
|
||||||
os.Exit(cmd.Func(cmdArgs))
|
color, err = lifx.NewWhite(int16(k))
|
||||||
|
state.Color = color
|
||||||
|
}
|
||||||
|
if brightness != "" {
|
||||||
|
state.Brightness, err = strconv.ParseFloat(brightness, 64)
|
||||||
|
}
|
||||||
|
if duration != "" {
|
||||||
|
state.Duration, err = strconv.ParseFloat(duration, 64)
|
||||||
|
}
|
||||||
|
if fast != "" {
|
||||||
|
state.Fast, err = strconv.ParseBool(fast)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = c.SetState(selector, state)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,69 +0,0 @@
|
|||||||
package lumecmd
|
|
||||||
|
|
||||||
import (
|
|
||||||
"flag"
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"git.kill0.net/chill9/go-lifx"
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
fs := flag.NewFlagSet("toggle", flag.ExitOnError)
|
|
||||||
fs.Float64("duration", 1.0, "Set the duration")
|
|
||||||
fs.String("selector", "all", "Set the selector")
|
|
||||||
|
|
||||||
RegisterCommand("toggle", Command{
|
|
||||||
Func: ToggleCmd,
|
|
||||||
Flags: fs,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func ToggleCmd(args CmdArgs) int {
|
|
||||||
c := args.Client
|
|
||||||
duration := args.Flags.Float64("duration")
|
|
||||||
selector := args.Flags.String("selector")
|
|
||||||
r, err := c.Toggle(selector, duration)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
PrintResults(r)
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func PrintResults(resp *lifx.Response) {
|
|
||||||
var length, idWidth, labelWidth, statusWidth int
|
|
||||||
|
|
||||||
for _, r := range resp.Results {
|
|
||||||
length = len(r.Id)
|
|
||||||
if idWidth < length {
|
|
||||||
idWidth = length
|
|
||||||
}
|
|
||||||
|
|
||||||
length = len(r.Label)
|
|
||||||
if labelWidth < length {
|
|
||||||
labelWidth = length
|
|
||||||
}
|
|
||||||
|
|
||||||
length = len(r.Status)
|
|
||||||
if statusWidth < length {
|
|
||||||
statusWidth = length
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, r := range resp.Results {
|
|
||||||
fmt.Printf("%*s %*s %*s\n",
|
|
||||||
idWidth, r.Id,
|
|
||||||
labelWidth, r.Label,
|
|
||||||
statusWidth, statusColor(r.Status))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func statusColor(s lifx.Status) string {
|
|
||||||
fs := "\033[1;31m%s\033[0m"
|
|
||||||
if s == "ok" {
|
|
||||||
fs = "\033[1;32m%s\033[0m"
|
|
||||||
}
|
|
||||||
|
|
||||||
return fmt.Sprintf(fs, s)
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user