/// <summary> /// Set the manual values received from the API /// </summary> /// <param name="packet"></param> public void SetManualValues(ManualControlPacket packet) { if (packet.Fans != StateMachineContainer.Instance.Temperature.ManualCool) { StateMachineContainer.Instance.Temperature.ManualCool = packet.Fans; } if (packet.Shades != StateMachineContainer.Instance.Shading.ManualShade) { StateMachineContainer.Instance.Shading.ManualShade = packet.Shades; } foreach (LightingStateMachine stateMachine in StateMachineContainer.Instance.LightStateMachines) { if (packet.Lights != stateMachine.ManualLight) { stateMachine.ManualLight = packet.Lights; } } foreach (WateringStateMachine stateMachine in StateMachineContainer.Instance.WateringStateMachines) { if (packet.Water != stateMachine.ManualWater) { stateMachine.ManualWater = packet.Water; } } }
/// <summary> /// Execute the actions required for proper greenhouse functioning, based on the input data from API calls /// </summary> /// <param name="sensorData"></param> /// <param name="manualControls"></param> /// <param name="automationData"></param> public void ExecuteActions(SensorPacket[] sensorData, ManualControlPacket manualControls, AutomationPacket automationData) { // Make sure the Arduino stays awake ArduinoControlSender.Instance.CheckArduinoStatus(); // Process limit changes LimitsAnalyzer limitAnalyzer = new LimitsAnalyzer(); limitAnalyzer.ChangeGreenhouseLimits(automationData); // Make sure the Arduino stays awake ArduinoControlSender.Instance.CheckArduinoStatus(); // Process manual data ManualPacketAnalyzer manualAnalyzer = new ManualPacketAnalyzer(); manualAnalyzer.SetManualValues(manualControls); // Make sure the Arduino stays awake ArduinoControlSender.Instance.CheckArduinoStatus(); // Process sensor data AnalyzeData(sensorData); }