Skip to content

Commit c928835

Browse files
committed
Added home assistant to the CLI
1 parent 60be969 commit c928835

File tree

6 files changed

+116
-10
lines changed

6 files changed

+116
-10
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
GO := $(shell which go)
33

44
# Build flags
5-
BUILD_MODULE := $(shell go list -m)
5+
BUILD_MODULE := $(shell cat go.mod | head -1 | cut -d ' ' -f 2)
66
BUILD_LD_FLAGS += -X $(BUILD_MODULE)/pkg/version.GitSource=${BUILD_MODULE}
77
BUILD_LD_FLAGS += -X $(BUILD_MODULE)/pkg/version.GitTag=$(shell git describe --tags --always)
88
BUILD_LD_FLAGS += -X $(BUILD_MODULE)/pkg/version.GitBranch=$(shell git name-rev HEAD --name-only --always)

cmd/cli/homeassistant.go

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package main
2+
3+
import (
4+
// Packages
5+
"github.com/mutablelogic/go-client/pkg/client"
6+
"github.com/mutablelogic/go-client/pkg/homeassistant"
7+
)
8+
9+
/////////////////////////////////////////////////////////////////////
10+
// REGISTER FUNCTIONS
11+
12+
func HomeAssistantFlags(flags *Flags) {
13+
flags.String("ha-token", "${HA_TOKEN}", "Home Assistant API key")
14+
flags.String("ha-endpoint", "${HA_ENDPOINT}", "Home Assistant Endpoint")
15+
}
16+
17+
func HomeAssistantRegister(cmd []Client, opts []client.ClientOpt, flags *Flags) ([]Client, error) {
18+
// Get API key
19+
key, err := flags.GetString("ha-token")
20+
if err != nil {
21+
return nil, err
22+
}
23+
24+
// Get endpoint
25+
endPoint, err := flags.GetString("ha-endpoint")
26+
if err != nil {
27+
return nil, err
28+
}
29+
30+
// Create ipify client
31+
ha, err := homeassistant.New(endPoint, key, opts...)
32+
if err != nil {
33+
return nil, err
34+
}
35+
36+
// Register commands for router
37+
cmd = append(cmd, Client{
38+
ns: "ha",
39+
cmd: []Command{
40+
{Name: "status", Description: "Return status string", MinArgs: 2, MaxArgs: 2, Fn: haStatus(ha, flags)},
41+
{Name: "events", Description: "Enumerate event objects. Each event object contains event name and listener count.", MinArgs: 2, MaxArgs: 2, Fn: haEvents(ha, flags)},
42+
{Name: "states", Description: "Enumerate entity states", MinArgs: 2, MaxArgs: 2, Fn: haStates(ha, flags)},
43+
},
44+
})
45+
46+
// Return success
47+
return cmd, nil
48+
}
49+
50+
/////////////////////////////////////////////////////////////////////
51+
// API CALLS
52+
53+
func haStatus(client *homeassistant.Client, flags *Flags) CommandFn {
54+
return func() error {
55+
if message, err := client.Health(); err != nil {
56+
return err
57+
} else if err := flags.Write(struct{ Status string }{message}); err != nil {
58+
return err
59+
}
60+
return nil
61+
}
62+
}
63+
64+
func haEvents(client *homeassistant.Client, flags *Flags) CommandFn {
65+
return func() error {
66+
if events, err := client.Events(); err != nil {
67+
return err
68+
} else if err := flags.Write(events); err != nil {
69+
return err
70+
}
71+
return nil
72+
}
73+
}
74+
75+
func haStates(client *homeassistant.Client, flags *Flags) CommandFn {
76+
return func() error {
77+
if states, err := client.States(); err != nil {
78+
return err
79+
} else if err := flags.Write(states); err != nil {
80+
return err
81+
}
82+
return nil
83+
}
84+
}

cmd/cli/ipify.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package main
22

33
import (
4-
54
// Packages
65
"github.com/mutablelogic/go-client/pkg/client"
76
"github.com/mutablelogic/go-client/pkg/ipify"
87
)
98

9+
/////////////////////////////////////////////////////////////////////
10+
// REGISTER FUNCTIONS
11+
1012
func IpifyRegister(cmd []Client, opts []client.ClientOpt, flags *Flags) ([]Client, error) {
1113
// Create ipify client
1214
ipify, err := ipify.New(opts...)
@@ -26,6 +28,9 @@ func IpifyRegister(cmd []Client, opts []client.ClientOpt, flags *Flags) ([]Clien
2628
return cmd, nil
2729
}
2830

31+
/////////////////////////////////////////////////////////////////////
32+
// API CALLS
33+
2934
func IpifyGet(ipify *ipify.Client, flags *Flags) CommandFn {
3035
return func() error {
3136
addr, err := ipify.Get()

cmd/cli/main.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212

1313
func main() {
1414
name := path.Base(os.Args[0])
15-
flags, err := NewFlags(name, os.Args[1:], OpenAIFlags)
15+
flags, err := NewFlags(name, os.Args[1:], OpenAIFlags, HomeAssistantFlags)
1616
if err != nil {
1717
if err != flag.ErrHelp {
1818
fmt.Fprintln(os.Stderr, err)
@@ -48,6 +48,11 @@ func main() {
4848
fmt.Fprintln(os.Stderr, err)
4949
os.Exit(1)
5050
}
51+
cmd, err = HomeAssistantRegister(cmd, opts, flags)
52+
if err != nil {
53+
fmt.Fprintln(os.Stderr, err)
54+
os.Exit(1)
55+
}
5156

5257
// Run command
5358
if err := Run(cmd, flags); err != nil {

cmd/cli/openai.go

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package main
22

33
import (
4-
"fmt"
5-
64
"github.com/mutablelogic/go-client/pkg/client"
75
"github.com/mutablelogic/go-client/pkg/openai"
86
)
@@ -29,14 +27,28 @@ func OpenAIRegister(cmd []Client, opts []client.ClientOpt, flags *Flags) ([]Clie
2927
return nil, err
3028
}
3129

32-
fmt.Println(openai)
33-
3430
// Register commands
3531
cmd = append(cmd, Client{
36-
ns: "openai",
37-
cmd: []Command{},
32+
ns: "openai",
33+
cmd: []Command{
34+
{Name: "models", Description: "Return registered models", MinArgs: 2, MaxArgs: 2, Fn: openaiModels(openai, flags)},
35+
},
3836
})
3937

4038
// Return success
4139
return cmd, nil
4240
}
41+
42+
/////////////////////////////////////////////////////////////////////
43+
// API CALLS
44+
45+
func openaiModels(client *openai.Client, flags *Flags) CommandFn {
46+
return func() error {
47+
if models, err := client.ListModels(); err != nil {
48+
return err
49+
} else if err := flags.Write(models); err != nil {
50+
return err
51+
}
52+
return nil
53+
}
54+
}

pkg/homeassistant/client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ type Client struct {
2121

2222
func New(endPoint, apiKey string, opts ...client.ClientOpt) (*Client, error) {
2323
// Add a final slash to the endpoint
24-
if endPoint[len(endPoint)-1] != '/' {
24+
if len(endPoint) > 0 && endPoint[len(endPoint)-1] != '/' {
2525
endPoint += "/"
2626
}
2727

0 commit comments

Comments
 (0)