From 5d72e9d0368cfec67abb44ba30805b44c586be4e Mon Sep 17 00:00:00 2001 From: Mike Shoup Date: Sun, 30 Sep 2018 07:37:42 -0600 Subject: [PATCH] Don't use GetPinState to get state --- run.go | 34 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/run.go b/run.go index dea49f3..dd028cd 100644 --- a/run.go +++ b/run.go @@ -51,19 +51,8 @@ func SetPinState(pin rpio.Pin, on bool, invert bool) { } } -// GetPinState will return true if the pin is on. -// If invert is false, the pin will be on when high. -func GetPinState(pin rpio.Pin, invert bool) bool { - switch pin.Read() { - case rpio.High: - return !invert - default: - return invert - } -} - // RunThermostat monitors the temperature of the supplied sensor and does its best to keep it at the desired state. -func RunThermostat(sensor Sensor, sig chan os.Signal, wg *sync.WaitGroup) { +func RunThermostat(sensor Sensor, sig <-chan os.Signal, wg *sync.WaitGroup) { var s State s.Changed = time.Now() @@ -93,34 +82,35 @@ func RunThermostat(sensor Sensor, sig chan os.Signal, wg *sync.WaitGroup) { switch { case t > sensor.HighTemp && t < sensor.HighTemp: log.Panic("Invalid state! Temperature is too high AND too low!") - case t > sensor.HighTemp && GetPinState(hpin, sensor.HeatInvert): + case t > sensor.HighTemp && s.Heating: SetPinState(hpin, false, sensor.HeatInvert) log.Printf("%s Turned off heat", sensor.Alias) + s.Heating = false s.Changed = time.Now() + case t > sensor.HighTemp && s.Cooling: + break case t > sensor.HighTemp && min > sensor.CoolMinutes: SetPinState(cpin, true, sensor.CoolInvert) log.Printf("%s Turned on cool", sensor.Alias) + s.Cooling = true s.Changed = time.Now() - case t > sensor.HighTemp: - break - case t < sensor.LowTemp && GetPinState(cpin, sensor.CoolInvert): + case t < sensor.LowTemp && s.Cooling: SetPinState(cpin, false, sensor.CoolInvert) log.Printf("%s Turned off cool", sensor.Alias) + s.Cooling = false s.Changed = time.Now() + case t < sensor.LowTemp && s.Heating: + break case t < sensor.LowTemp && min > sensor.HeatMinutes: SetPinState(hpin, true, sensor.HeatInvert) log.Printf("%s Turned on heat", sensor.Alias) + s.Heating = true s.Changed = time.Now() - case t < sensor.LowTemp: + default: break - default: // Turn off both switches - SetPinState(cpin, false, sensor.CoolInvert) - SetPinState(hpin, false, sensor.HeatInvert) } s.Temp = t - //s.Cooling = GetPinState(cpin, sensor.CoolInvert) - //s.Heating = GetPinState(hpin, sensor.HeatInvert) log.Printf("%s Temp: %.2f, Cooling: %t, Heating: %t, Duration: %.1f", sensor.Alias, s.Temp, s.Cooling, s.Heating, min) }