From bea3f66d811c17d9f5bf25d6c7bd4fe453e6be50 Mon Sep 17 00:00:00 2001 From: Mike Shoup Date: Fri, 28 Sep 2018 13:28:18 -0600 Subject: [PATCH] Skeleton for thermostat --- main.go | 31 +++++++++++++++++++++---------- run.go | 2 +- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/main.go b/main.go index 3e69a6f..705f06a 100644 --- a/main.go +++ b/main.go @@ -1,23 +1,34 @@ package main import ( - "fmt" + "log" + "sync" - "github.com/yryz/ds18b20" + arg "github.com/alexflint/go-arg" ) func main() { - sensors, err := ds18b20.Sensors() + var args struct { + Action string `arg:"required,positional" help:"run"` + ConfigFile string `arg:"-c,required" help:"path to config file"` + } + + p := arg.MustParse(&args) + if args.Action != "run" { + p.Fail("ACTION must be run") + } + + config, err := LoadConfig(args.ConfigFile) if err != nil { - panic(err) + log.Fatal(err) } - fmt.Printf("Sensors: %v\n", sensors) + var wg sync.WaitGroup - for _, sensor := range sensors { - t, err := ds18b20.Temperature(sensor) - if err == nil { - fmt.Printf("Sensor: %s, Temperature %.2f°C\n", sensor, t) - } + for _, sensor := range config.Sensors { + wg.Add(1) + go RunThermostat(sensor) } + + wg.Wait() } diff --git a/run.go b/run.go index 7b7a809..274452c 100644 --- a/run.go +++ b/run.go @@ -25,7 +25,7 @@ func ReadTemperature(id string) (float64, error) { } // RunThermostat monitors the temperature of the supplied sensor and does its best to keep it at the desired state. -func RunThermostat(sensor *Sensor) { +func RunThermostat(sensor Sensor) { for { t, err := ReadTemperature(sensor.ID)