1
0
Fork 0
mirror of https://github.com/shouptech/tempgopher.git synced 2026-02-03 16:49:42 +00:00

Don't use GetPinState to get state

This commit is contained in:
Emma 2018-09-30 07:37:42 -06:00
parent 62a0e67ce8
commit 5d72e9d036

34
run.go
View file

@ -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. // 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 var s State
s.Changed = time.Now() s.Changed = time.Now()
@ -93,34 +82,35 @@ func RunThermostat(sensor Sensor, sig chan os.Signal, wg *sync.WaitGroup) {
switch { switch {
case t > sensor.HighTemp && t < sensor.HighTemp: case t > sensor.HighTemp && t < sensor.HighTemp:
log.Panic("Invalid state! Temperature is too high AND too low!") 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) SetPinState(hpin, false, sensor.HeatInvert)
log.Printf("%s Turned off heat", sensor.Alias) log.Printf("%s Turned off heat", sensor.Alias)
s.Heating = false
s.Changed = time.Now() s.Changed = time.Now()
case t > sensor.HighTemp && s.Cooling:
break
case t > sensor.HighTemp && min > sensor.CoolMinutes: case t > sensor.HighTemp && min > sensor.CoolMinutes:
SetPinState(cpin, true, sensor.CoolInvert) SetPinState(cpin, true, sensor.CoolInvert)
log.Printf("%s Turned on cool", sensor.Alias) log.Printf("%s Turned on cool", sensor.Alias)
s.Cooling = true
s.Changed = time.Now() s.Changed = time.Now()
case t > sensor.HighTemp: case t < sensor.LowTemp && s.Cooling:
break
case t < sensor.LowTemp && GetPinState(cpin, sensor.CoolInvert):
SetPinState(cpin, false, sensor.CoolInvert) SetPinState(cpin, false, sensor.CoolInvert)
log.Printf("%s Turned off cool", sensor.Alias) log.Printf("%s Turned off cool", sensor.Alias)
s.Cooling = false
s.Changed = time.Now() s.Changed = time.Now()
case t < sensor.LowTemp && s.Heating:
break
case t < sensor.LowTemp && min > sensor.HeatMinutes: case t < sensor.LowTemp && min > sensor.HeatMinutes:
SetPinState(hpin, true, sensor.HeatInvert) SetPinState(hpin, true, sensor.HeatInvert)
log.Printf("%s Turned on heat", sensor.Alias) log.Printf("%s Turned on heat", sensor.Alias)
s.Heating = true
s.Changed = time.Now() s.Changed = time.Now()
case t < sensor.LowTemp: default:
break break
default: // Turn off both switches
SetPinState(cpin, false, sensor.CoolInvert)
SetPinState(hpin, false, sensor.HeatInvert)
} }
s.Temp = t 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) log.Printf("%s Temp: %.2f, Cooling: %t, Heating: %t, Duration: %.1f", sensor.Alias, s.Temp, s.Cooling, s.Heating, min)
} }