From df8dbc6146d8a01492b40f0ecf6d3d5d02bb26dd Mon Sep 17 00:00:00 2001 From: Mike Shoup Date: Mon, 1 Oct 2018 21:42:42 -0600 Subject: [PATCH] More logic work on the thermostat --- thermostat.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/thermostat.go b/thermostat.go index a71c42c..b9f92c4 100644 --- a/thermostat.go +++ b/thermostat.go @@ -79,10 +79,15 @@ func ProcessSensor(sensor Sensor, state State) (State, error) { case temp > sensor.LowTemp && state.Heating: PinSwitch(hpin, false, sensor.HeatInvert) state.Heating = false - state.Changed = time.Now() + state.Changed = time.Unix(1<<63-62135596801, 999999999) // Temperature is too high and the cooling switch is still on, do nothing case temp > sensor.HighTemp && state.Cooling: break + // Temperature is too high, but duration hasn't been met + case temp > sensor.HighTemp: + if state.Changed.After(time.Now()) { + state.Changed = time.Now() + } // Temperature is too high and the duration has been long enough, start cooling case temp > sensor.HighTemp && duration > sensor.CoolMinutes: PinSwitch(cpin, true, sensor.CoolInvert) @@ -92,10 +97,15 @@ func ProcessSensor(sensor Sensor, state State) (State, error) { case temp < sensor.HighTemp && state.Cooling: PinSwitch(cpin, false, sensor.CoolInvert) state.Cooling = false - state.Changed = time.Now() + state.Changed = time.Unix(1<<63-62135596801, 999999999) // Temperature is too low and the heating switch is on, do nothing case temp < sensor.LowTemp && state.Heating: break + // Temperature is too low, but duration hasn't been met + case temp < sensor.LowTemp: + if state.Changed.After(time.Now()) { + state.Changed = time.Now() + } // Temperature is too low and the duration has been long enough, start heating case temp < sensor.LowTemp && duration > sensor.HeatMinutes: PinSwitch(hpin, true, sensor.HeatInvert)