Código persiana y millis

Sugiero que mires este hilo en como se resolvió esa parte

Codigo Persiana y millis()

Esta es la versión donde mezclo tu código y el que te indiqué.

Finalmente era como te dije. No puedes esperar a que las cosas se hagan dentro de las peticiones http
Usa eso para dar órdenes a tu sistema y luego que éste procese lo que deba

Esta es la versión mezclada

/*
 *  This sketch demonstrates how to set up a simple HTTP-like server.
 *  The server will set a GPIO pin depending on the request
 *    http://server_ip/gpio/0 will set the GPIO2 low,
 *    http://server_ip/gpio/1 will set the GPIO2 high
 *  server_ip is the IP address of the ESP8266 module, will be 
 *  printed to Serial when the module is connected.
 */

#include <ESP8266WiFi.h>
#include <ArduinoOTA.h>


const char* ssid     = "Surbyte";
const char* password = "ricardohns493";

IPAddress ip(192,168,1,227);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);

const int rele1 = 13;
const int rele2 = 12; 
int val, val1 = 0, val2 = 0; 
int periodo = 40000;  
byte temp = 0; 
unsigned long tiempoAnterior = 0;  
int periodo2 = 40000;  
byte temp2 = 0; 
unsigned long tiempoAnterior2, start;
String req;
byte persiana = 0;
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(1088);

void setup() {
  Serial.begin(115200);
  delay(10);

  // prepare GPIO2
  pinMode(2, OUTPUT);
  digitalWrite(2, 0);
  pinMode(rele1, OUTPUT);
  pinMode(rele2, OUTPUT);
  digitalWrite(rele1, HIGH);
  digitalWrite(rele2, HIGH);
  pinMode(4,INPUT);
  
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  WiFi.config(ip, gateway, subnet);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  ArduinoOTA.setPassword((const char *)"1234");
  Serial.println();
  Serial.println();
  Serial.print("Conectado a ");
  Serial.println(ssid);
  Serial.print("IP:");
  Serial.println(ip);
  Serial.printf("MAC Address = %s\n", WiFi.softAPmacAddress().c_str());
  Serial.print("Puerto: 1088");
  Serial.println();
  Serial.print("Ordenes: arriba/abajo");
  Serial.println();
  Serial.print("Ordenes: arribatodo/abajotodo");
  Serial.println();
 
  ArduinoOTA.begin();
  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.println(WiFi.localIP());
}

void loop() {
  
  WiFiClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();

        //read char by char HTTP request
        if (req.length() < 100) {

          //store characters to string
          req += c;
          Serial.print(c);
        }

        //if HTTP request has ended
        if (c == '\n') {
            //now output HTML data header
            if (req.indexOf('?') >=0) { //don't send new page
                client.println("HTTP/1.1 204 192.168.1.127");
                client.println();
                client.println(); 
            }
            else {
              String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n";
              s += "<html><p>GPIO is now :";
              s += (val)?"high":"low";
              s += "</p>";
              s += "<p>Rele 1      :"; 
              s += digitalRead(rele1)?"OFF":"ON";
              s += "</p>";
              s += "<p>Rele 2      :"; 
              s += digitalRead(rele2)?"OFF":"ON";
              s += "</p></html>";

              // Send the response to the client
              client.print(s);
              
              //stopping client
              client.stop();
              Serial.println("Client disonnected");
  
              // Match the request
              if (req.indexOf("/arribaon") != -1) 
                  persiana = 1;
            
              if (req.indexOf("/arribaoff") != -1)
                  persiana = 2;
              
              if (req.indexOf("/abajoon") != -1)  
                  persiana = 3;

              if (req.indexOf("/abajooff") != -1)  
                  persiana = 4;

              if (req.indexOf("/abajotodo") != -1)  
                  persiana = 5;
  
              if (req.indexOf("/tiempo") != -1)  
                  persiana = 6;

              if (req.indexOf("/arribatodo") != -1) 
                  persiana = 7;
              req = "";

            }
        } // if (c == '\n') {
      } // if (client.available()) {
    } // while
  } // The client will actually be disconnected 
  
  // Match the request
  int val1 = digitalRead(rele1);
  int val2 = digitalRead(rele2);
  switch(persiana) {
      case 1: // arribaon
              digitalWrite(rele1, LOW);
              digitalWrite(rele2,HIGH);
              Presentar("Subiendo");
              temp = 0;
              temp2 = 0;
              break;
      case 2: // arribaoff
              digitalWrite(rele1, HIGH);
              Presentar("Arriba Stop");
              break;
      case 3: // abajoon
              digitalWrite(rele2, LOW);
              digitalWrite(rele1,HIGH);
              Presentar("Bajando");
              temp = 0;
              temp2 = 0;
              break;
      case 4: // abajooff
              digitalWrite(rele2, HIGH);
              Presentar("Abajo Stop");
              break;
      case 5: // abajotodo    
              tiempoAnterior = millis();  
              temp = 1;
              digitalWrite(rele2,LOW);  
              digitalWrite(rele1,HIGH);
              Presentar("Bajando persiana");
              break;
      case 6: // tiempo
              if (millis()-start > 500UL) {
                  Serial.println(millis());
                  Serial.println(tiempoAnterior);
                  start = millis();
              }
              break;
      case 7: // arribatodo
              tiempoAnterior2 = millis();  
              temp2 = 1;
              digitalWrite(rele1,LOW); 
              digitalWrite(rele2,HIGH);
              Presentar("Subiendo persiana");
              break;
  }

  if ((millis()>tiempoAnterior+periodo)   && temp==1){  
      digitalWrite(rele2,HIGH); 
      temp = 0; 
      Presentar("Persiana completamente bajada");
  }
  if ((millis()>tiempoAnterior2+periodo2) && temp2==1) {  
      digitalWrite(rele1,HIGH);  
      temp2 = 0;  
      Presentar("Persiana completamente subida");
  }

  // Set GPIO2 according to the request
  //val = val1;
  //digitalWrite(2, val1);
}

void Presentar(const char* str) {
     static byte persianaAnt;
     if (persiana != persianaAnt)  {
         Serial.println(str);
         persianaAnt = persiana;
     }
}

Puede necesitar ajustes pero menores.