public PumpController( IEventAggregator eventAggregator, Hardware hardware, PumpStrategy pumpStrategy, PumpStrategyParams pumpStrategyParams ) { _eventAggregator = eventAggregator; _eventAggregator.Subscribe(this); _hardware = hardware; _pumpStrategy = pumpStrategy; _pumpStrategyParams = pumpStrategyParams; }
// should we be switching on the pump (using electricity) at this point? // a big assumption with putting this logic here is that both the pump and element are // allowed to be on at the same time. My thinking is that this should be possible in the // case of a frost condition or even when 'boosting' and solar is hot and ready to go. public bool ShouldPumpBeOn(PumpStrategyParams @params) { var shouldStartFrostPumping = @params.RoofDegC < _settings.FrostDegC; var shouldContinueFrostPumping = @params.IsPumpCurrentlyOn && (@params.RoofDegC < _settings.FrostDegC + _settings.HysteresisFactorDegC); var isTankBelowSolarTarget = (@params.InletDegC <= _settings.SolarTargetDegC); var isWorthStartingPump = (@params.RoofDegC > @params.InletDegC + _settings.PumpOnTemperatureDifference); var shouldStartPumpingHotterRoofWater = [email protected] && isTankBelowSolarTarget && isWorthStartingPump; var isWorthContinuingPump = (@params.RoofDegC > @params.InletDegC + _settings.PumpOffTemperatureDifference); var shouldContinuePumpingHotterRoofWater = @params.IsPumpCurrentlyOn && isWorthContinuingPump && isTankBelowSolarTarget; return(shouldStartFrostPumping || shouldContinueFrostPumping || shouldStartPumpingHotterRoofWater || shouldContinuePumpingHotterRoofWater); }
// should we be switching on the pump (using electricity) at this point? // a big assumption with putting this logic here is that both the pump and element are // allowed to be on at the same time. My thinking is that this should be possible in the // case of a frost condition or even when 'boosting' and solar is hot and ready to go. public bool ShouldPumpBeOn(PumpStrategyParams @params) { var shouldStartFrostPumping = @params.RoofDegC < _settings.FrostDegC; var shouldContinueFrostPumping = @params.IsPumpCurrentlyOn && (@params.RoofDegC < _settings.FrostDegC + _settings.HysteresisFactorDegC); var isTankBelowSolarTarget = (@params.InletDegC <= _settings.SolarTargetDegC); var isWorthStartingPump = (@params.RoofDegC > @params.InletDegC + _settings.PumpOnTemperatureDifference); var shouldStartPumpingHotterRoofWater = [email protected] && isTankBelowSolarTarget && isWorthStartingPump; var isWorthContinuingPump = (@params.RoofDegC > @params.InletDegC + _settings.PumpOffTemperatureDifference); var shouldContinuePumpingHotterRoofWater = @params.IsPumpCurrentlyOn && isWorthContinuingPump && isTankBelowSolarTarget; return (shouldStartFrostPumping || shouldContinueFrostPumping || shouldStartPumpingHotterRoofWater || shouldContinuePumpingHotterRoofWater); }