Arduino Controlled Indoor Aero/Hydro Garden Feasability

I have an indoor garden I'm starting and I want to control the system using a few solid state relays and an arduino, I have a couple of temp/humid sensors coming from SFE and a few relays.

The setup I'm looking for is something like this:

Initial Setup will be 1 Grow Light, 1 Water Pump, 1 Fan and 2 Temp/Humid Sensors

The Relays will control the Grow Light, Water Pump and Fan
The 2 Temp/Humid sensors will feed data over serial (XBee)to my Server (which will interpret the data and display on a webpage) which I can access anywhere with my phone or tablet making it easy to checkup on my plants anytime.

I plan on expanding after 1-2 successful harvests to 3 Total Grow Lights, 3 Water pumps and 6-8 total Temp/Humid Sensors, I'm thinking at this point I'll probably split the system into 2-3 components breaking off the relays to their own Arduino and the sensors on another multiplexing them together, does that sound feasible?

Here is where it gets tricky, I'm looking for a way to get the current length of time the relay has been off or on to display in my output giving me an idea of when the state will change
From what I have seen my code should do everything I want/need except as I mentioned the current length of time.

Does anyone know if thats possible with the EventFuse Lib?
Does my setup currently sound feasible?
Does my future setup sound feasible?

Comments/Suggestions PLEASE

Here is the Code I have so far... I'm pulling in a couple of libraries EventFuse(timer) and STH1x(sensor)

/**
* GrowControl Application
*
* Current design goals
* 2 SHT-15 Temp and Humidity Sensors
* Control 1 Light
* Control 1 Water Pump
*
*/

//Include Lib for Temp/Humd Sensors
#include <SHT1x.h>

//Include Libs for Event Timers
#include <EventFuse.h>
#include <mstimer2.h>

#define SW_NAME "GrowControl"
#define SW_VERSION ".01 alpha";

//outputs for eventfuse.h
#define OffTime 0
#define OnTime 1
#define OutputPin 2

//Number of Seconds in 24hr 86400 , 12hr 43200 , 6hr 21600
//                                off / on / pin
  byte outputs[OutputCount][2] = {{  21600,  43200,  7},           //Light 1 Schedule - 18hrs on 6hrs off
                                {     3600,     60,  8},           //Water 1 Schedule - 1 min on 60 off (needs to be tweaked)
                                {    21600,  43200,  9},};         //Fan 1 Schedule - Current Schedule matches lights (needs to be tweaked and moved to temp control)


//OutputHandler for Relay Controls Via EventFuse Library
void OutputHandler(FuseID fuseID, int outputID){
  //which pin to use
  byte pin = outputs[outputID][OutputPin];
  
  //get and invert current pin state and write it back
  int state = 1&~digitalRead(pin);
  digitalWrite( pin,state );
  
  //reset fuse length with new interval
  eventFuse[fuseID].fuseLen = outputs[OutputID][state];  
} 

void timerTick(){
  eventFuse.burn(1);
}


// Specify data and clock connections and instantiate an SHT1x object
// Canopy Sensor
#define sensor1Data 10
#define sensor1Clock 11
SHT1x sensor1(sensor1Data, sensor1Clock);

// Specify data and clock connections and instantiate an SHT1x object
// Base Sensor
#define sensor2Data 12
#define sensor2Clock 13
SHT1x sensor1(sensor1Data, sensor1Clock);

//Specify Light Relay pin
#define light1pin 2;

//Specify Water Relay pin
#define water1pin 4;



void setup()
{
   Serial.begin(38400); // Open serial connection to report values to host
   Serial.println( SW_NAME + SW_VERSION );
   Serial.println( "Starting Up Please Wait..." );
   
   //Setup and set all Relay outputs to off
   for (byte i = 0; i <OutputCount; i++){
     pinMode( outputs[i][OutputPin], OUTPUT );
     digitalWrite( outputs[i][OutputPin], LOW);
     
     //Setup EventFuse for Output
     eventFuse.newFuse( i, outputs[i][OffTime], INF_REPEAT, OutputHandler );
   }
   
   MsTimer2::set(1000, timerTick);
   MsTimer2::start();
   
}

void loop()
{

  Serial.print("Sensor1 Data: ");
  getSensorData(sensor1);
  
  Serial.print("Sensor2 Data: ");
  getSensorData(sensor2);
  
  //Light Status
  Serial.print("Light1: ");
  getStatus(light1pin);
  
  //Water Status
  Serial.print("Water1: ");
  getStatus(water1pin);
  
  delay(2000);
}

void getStatus(int pin){
  
  //get the status of the pin sent to this funtion
  int state = digitalRead(pin);

  if (state == 0){
    //The pin is low indicating the relay is off
    Serial.print(" Off ");
  } else if (state == 1){
    //The pin is high indicating the relay is on
    Serial.print(" On ");
    
    

}

void getSensorData(SHT1x sensor){

  float temp_c;
  float temp_f;
  float humidity;
  
  
  // Read values from the sensor1
  temp_c = sensor.readTemperatureC();
  temp_f = sensor.readTemperatureF();
  humidity = sensor.readHumidity();
  
  // Print the values to the serial port
  Serial.print("Temperature: ");
  Serial.print(temp_c, DEC);
  Serial.print("C / ");
  Serial.print(temp_f, DEC);
  Serial.print("F. Humidity: ");
  Serial.print(humidity);
  Serial.println("%");
  
}

I'm looking for a way to get the current length of time the relay has been off or on to display in my output giving me an idea of when the state will change

If you call millis(), and record the return value, when the relay is turned off, you can call millis() again at any time, and determine the delta between the two events.

Knowing how long the relay has been off will not tell you anything about when the relay will turn on again, though.