Functioning shell for controlling lights :^)
This commit is contained in:
parent
e6874ed3b8
commit
cd0c68e8a2
@ -5,7 +5,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
cli "git.tcp.direct/Mirrors/go-prompt"
|
cli "git.tcp.direct/Mirrors/go-prompt"
|
||||||
@ -132,7 +131,7 @@ func cmdScan(br *lights.Bridge, args []string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
for resp, _ := range r.Success {
|
for resp := range r.Success {
|
||||||
log.Info().Msg(resp)
|
log.Info().Msg(resp)
|
||||||
}
|
}
|
||||||
var count = 0
|
var count = 0
|
||||||
@ -171,20 +170,20 @@ func StartCLI() {
|
|||||||
var hist []string
|
var hist []string
|
||||||
processBridges(lights.Lucifer.Bridges)
|
processBridges(lights.Lucifer.Bridges)
|
||||||
|
|
||||||
comphead := 0
|
/* comphead := 0
|
||||||
compmu := &sync.Mutex{}
|
compmu := &sync.Mutex{}
|
||||||
cleanSlate := func(b *cli.Buffer) {
|
cleanSlate := func(b *cli.Buffer) {
|
||||||
compmu.Lock()
|
compmu.Lock()
|
||||||
defer compmu.Lock()
|
defer compmu.Lock()
|
||||||
sugs := completer(*b.Document())
|
sugs := completer(*b.Document())
|
||||||
if comphead > len(sugs)-2 {
|
if comphead > len(sugs)-2 {
|
||||||
comphead = 0
|
comphead = 0
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
comphead++
|
comphead++
|
||||||
b.CursorLeft(len(b.Document().TextBeforeCursor()))
|
b.CursorLeft(len(b.Document().TextBeforeCursor()))
|
||||||
b.InsertText(sugs[comphead].Text, true, true)
|
b.InsertText(sugs[comphead].Text, true, true)
|
||||||
}
|
}*/
|
||||||
|
|
||||||
p := cli.New(
|
p := cli.New(
|
||||||
executor,
|
executor,
|
||||||
@ -205,16 +204,16 @@ func StartCLI() {
|
|||||||
return fmt.Sprintf("ziggs[%s] %s ", sel, bulb), true
|
return fmt.Sprintf("ziggs[%s] %s ", sel, bulb), true
|
||||||
}),
|
}),
|
||||||
cli.OptionTitle("ziggs"),
|
cli.OptionTitle("ziggs"),
|
||||||
cli.OptionAddKeyBind(cli.KeyBind{
|
/* cli.OptionAddKeyBind(cli.KeyBind{
|
||||||
Key: cli.Tab,
|
Key: cli.Tab,
|
||||||
Fn: cleanSlate,
|
Fn: cleanSlate,
|
||||||
}),
|
}),
|
||||||
cli.OptionCompletionOnDown(),
|
*/cli.OptionCompletionOnDown(),
|
||||||
cli.OptionAddKeyBind(cli.KeyBind{
|
/* cli.OptionAddKeyBind(cli.KeyBind{
|
||||||
Key: cli.Down,
|
Key: cli.Down,
|
||||||
Fn: cleanSlate,
|
Fn: cleanSlate,
|
||||||
}),
|
}),
|
||||||
)
|
*/)
|
||||||
|
|
||||||
p.Run()
|
p.Run()
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,59 @@
|
|||||||
package interactive
|
package interactive
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
cli "git.tcp.direct/Mirrors/go-prompt"
|
cli "git.tcp.direct/Mirrors/go-prompt"
|
||||||
|
"github.com/amimof/huego"
|
||||||
|
|
||||||
"git.tcp.direct/kayos/ziggs/lights"
|
"git.tcp.direct/kayos/ziggs/lights"
|
||||||
)
|
)
|
||||||
|
|
||||||
func cmdLights(br *lights.Bridge, args []string) error {
|
func cmdLights(br *lights.Bridge, args []string) error {
|
||||||
|
if len(br.HueLights) <= 0 {
|
||||||
|
return errors.New("no lights found")
|
||||||
|
}
|
||||||
|
for _, l := range br.HueLights {
|
||||||
|
log.Info().Str("caller", l.Name).
|
||||||
|
Int("ID", l.ID).Str("type", l.ProductName).
|
||||||
|
Str("model", l.ModelID).Bool("on", l.IsOn()).Msgf("%v", l.State)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func cmdGroups(br *lights.Bridge, args []string) error {
|
||||||
|
var groupmap = make(map[string]*huego.Group)
|
||||||
|
gs, err := br.Bridge.GetGroups()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, g := range gs {
|
||||||
|
groupmap[g.Name] = &g
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(args) > 0 {
|
||||||
|
switch {
|
||||||
|
case args[1] == "+":
|
||||||
|
return groupmap[args[0]].Bri(groupmap[args[0]].State.Bri + 25)
|
||||||
|
case args[1] == "-":
|
||||||
|
return groupmap[args[0]].Bri(groupmap[args[0]].State.Bri - 25)
|
||||||
|
default:
|
||||||
|
newBrightness, numErr := strconv.Atoi(args[1])
|
||||||
|
if numErr != nil {
|
||||||
|
return numErr
|
||||||
|
}
|
||||||
|
return groupmap[args[0]].Bri(uint8(newBrightness))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(gs) == 0 {
|
||||||
|
return errors.New("no lights found")
|
||||||
|
}
|
||||||
|
for _, g := range gs {
|
||||||
|
log.Info().Str("caller", g.Name).Str("type", g.Type).Int("ID", g.ID).
|
||||||
|
Str("class", g.Class).Bool("on", g.IsOn()).Msgf("%v", g.GroupState)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -15,6 +62,7 @@ type reactor func(bridge *lights.Bridge, args []string) error
|
|||||||
var bridgeCMD = map[string]reactor{
|
var bridgeCMD = map[string]reactor{
|
||||||
"scan": cmdScan,
|
"scan": cmdScan,
|
||||||
"lights": cmdLights,
|
"lights": cmdLights,
|
||||||
|
"groups": cmdGroups,
|
||||||
}
|
}
|
||||||
|
|
||||||
const use = "use"
|
const use = "use"
|
||||||
|
@ -13,16 +13,16 @@ import (
|
|||||||
var (
|
var (
|
||||||
saveTermios unix.Termios
|
saveTermios unix.Termios
|
||||||
saveTermiosFD int
|
saveTermiosFD int
|
||||||
saveTermiosOnce sync.Once
|
saveTermiosOnce = &sync.Once{}
|
||||||
)
|
)
|
||||||
|
|
||||||
func getOriginalTermios(fd int) (unix.Termios, error) {
|
func getOriginalTermios(fd int) (unix.Termios, error) {
|
||||||
var err error
|
var err error
|
||||||
saveTermiosOnce.Do(func() {
|
saveTermiosOnce.Do(func() {
|
||||||
saveTermiosFD = fd
|
saveTermiosFD = fd
|
||||||
var saveTermiosPtr *unix.Termios
|
var saveTermiosPtr unix.Termios
|
||||||
termios.Tcgetattr(uintptr(fd), saveTermiosPtr)
|
err = termios.Tcgetattr(uintptr(fd), &saveTermiosPtr)
|
||||||
saveTermios = *saveTermiosPtr
|
saveTermios = saveTermiosPtr
|
||||||
})
|
})
|
||||||
return saveTermios, err
|
return saveTermios, err
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user