prog( out.1 = !out.1, out.2 = !out.1 )
prog( push1 = !latch1 && in.1, latch1 = in.1, out.1 = iif(push1, !out.1, out.1) )
prog( usr.MaxTime := 300, push1 = !latchi1 && in.1, latchi1 = in.1, out.1 = iif(push1, !out.1, out.1), on1 = !latcho1 && out.1, latcho1 = out.1, stamp1 = iif(on1, sys.time, stamp1), age1 = sys.time - stamp1, out.1 = iif(out.1 && (age1 < usr.MaxTime), out.1, 0), usr.On = out.1 )
prog( usr.TargetTemp := 21, HeatingCapability = tm.Input.Temp - tm.Inside.Temp, TempDiff = usr.TargetTemp - tm.Inside.Temp, CanHeat = HeatingCapability > 5, ShouldHeat = TempDiff > 0.5, out.1 = CanHeat && ShouldHeat, out.2 = out.1 && (TempDiff > 2), usr.Heating = out.1 + out.2 )