/// <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);
        }