diff --git a/cmd/daemon/main.go b/cmd/daemon/main.go index 74ce6f5..c46c1c3 100644 --- a/cmd/daemon/main.go +++ b/cmd/daemon/main.go @@ -35,7 +35,7 @@ func main() { flag.DurationVar(&pollInterval, "pollInterval", time.Minute, "Poll interval, example: 60s") flag.Parse() - if gatewayEndpoint == "" { + if gatewayEndpoint == "" || inverterAddr == "" { flag.Usage() os.Exit(1) } diff --git a/cmd/status/main.go b/cmd/status/main.go new file mode 100644 index 0000000..0e4aa05 --- /dev/null +++ b/cmd/status/main.go @@ -0,0 +1,45 @@ +package main + +import ( + "context" + "encoding/json" + "flag" + "fmt" + "log" + "net" + "os" + + "git.netflux.io/rob/solar-toolkit/inverter" +) + +func main() { + var inverterAddr string + + flag.StringVar(&inverterAddr, "inverter-addr", "", "IP+port of solar inverter") + flag.Parse() + + if inverterAddr == "" { + flag.Usage() + os.Exit(1) + } + + conn, err := net.Dial("udp", inverterAddr) + if err != nil { + log.Fatalf("error dialing: %s", err) + } + defer conn.Close() + + var inv inverter.ET + + runtimeData, err := inv.RuntimeData(context.Background(), conn) + if err != nil { + log.Fatalf("error fetching runtime data: %s", err) + } + + json, err := json.Marshal(runtimeData) + if err != nil { + log.Fatalf("error encoding runtime data: %s", err) + } + + fmt.Fprint(os.Stdout, string(json)) +}