Problema con controllore serra

l'errore sta nel fatto che se la luce è accesa, tu controlli solo il tempo

case STATE_ON:
      if(nowHourMinute > END_TIME) {
        Serial.print(now.hour(), DEC);
        Serial.print(':');
        Serial.print(now.minute(), DEC);       
        digitalWrite(lightRelay, LOW);
        digitalWrite(fanRelay, LOW);
        lcd.setCursor(0,3);
        FanState = STATE_OFF;
        lcd.print("        ");
        lightState = STATE_OFF;

per cui se durante l'accensione della lampada, il loop legge l'umidità e compie l'operazione che vuoi tu

 if (h1<45){
  digitalWrite(fanRelay, LOW);
  Serial.println("");
  Serial.println("Fan Off");
  FanState = STATE_OFF;
  lcd.setCursor(10,3);
  lcd.print("      ");

una soluzione potrebbe essere fare una procedura AttivaUscite(luce, ventilatore) i cui parametri li cambi nel loop, poi la richiami solo alla fine... oppure mettere il controllo che spegne la ventola all'interno del case "STATE_OFF", che è ancora più semplice