ESP8266 Relay+Timer

He podido generar un server con el que activo temporalmente un relay, pero el problema que tengo es que al cerrar el navegador el times se congela y no corta cuando es debido.
Ya he intentado poniendo el código que corre el timbre por fuera de la configuración del server pero por lo visto lo he colocado mal porque sigue sin funcionar cuando cierro el navegador.

#include <ESP8266WiFi.h>

const char* ssid = "*****";
const char* password = "*****";
IPAddress ip(192, 168, 0, 111);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
String value = "LOW";
int x = 0;
WiFiServer server(80);
unsigned long DELAY_TIME = 5000; // 10 sec
unsigned long delayStart = 0; // the time the delay started
bool delayRunning = false; // true if still waiting for delay to finish


int ledState = LOW;

int ledPin = 13; //Lo conectamos a D7, que es el gpio13

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

  WiFi.begin(ssid, password);
  WiFi.config(ip, gateway, subnet);

  server.begin(); pinMode(ledPin, OUTPUT);

  digitalWrite(ledPin, ledState);
  delayRunning = true;
}



void loop() {




  WiFiClient client = server.available();
  if (!client) {
    return;
  }


  Serial.println("new client");
  while (!client.available()) {
    delay(1);
  }

  String request = client.readStringUntil('\r');
  client.flush();


  //Variable para cuando se activan los temporizadores

  if (request.indexOf("/LED=ON") != -1  )  {
    value = "HIGH";

    if (delayRunning && ((millis() - delayStart) >= DELAY_TIME)) {
      delayRunning = false; // finished delay -- single shot, once only
      ledState = LOW; // turn led off
      value = "LOW";
    }



  }





  //Pantalla para cuando se activan sin tiempo

  if (request.indexOf("/LED=TOTALON") != -1)  {
    value = "HIGHFULL"; ledState = HIGH;

  }


  //Opcion de apagado
  if (request.indexOf("/LED=OFF") != -1)  {
    value = "LOW"; ledState = LOW;
    delayStart = 0;
  }

  //Opcion de TEmporizador 15 minutos
  if (request.indexOf("/LED=ESPERA15") != -1)  {
    value = "ESPERA15";
    unsigned long DELAY_TIME = 5000;
    delayStart = millis();
    delayRunning = true; ledState = HIGH;



  }

  //Opcion de TEmporizador 30 minutos
  if (request.indexOf("/LED=ESPERA30") != -1)  {
    value = "ESPERA30";
    x = 60;
    DELAY_TIME = 60000;
    delayStart = millis();
    delayRunning = true; ledState = HIGH;
  }




  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println("");
  client.println("<!DOCTYPE HTML>");
  client.println("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"></head><body>");

  client.println("<h3>Control equipos - <a href=\"/\">Refresh</a></h3>");
  client.println("<html>");

  client.print("El led esta ahora: ");
  // Pantalla para apagar Temporizadores
  if (value == "HIGH") {
    x = x - 2;
    client.print("Encendido temporalmente");
    client.println("

");
    client.println(x); client.print(" segundos faltantes");
    client.println("

");
    client.print("<meta http-equiv=\"refresh\" content=\"2\">");
    client.println("

");

    client.println("<a href=\"/LED=OFF\"\"><button>Apagar</button></a>
");
  }
  else
    // Pantalla para encender
    if (value == "LOW") {
      client.print("Apagado");
      client.println("

");
      client.println("<a href=\"/LED=ESPERA15\"\"><button>Encender 15 minutos</button></a>");
      client.println("

");
      client.println("<a href=\"/LED=ESPERA30\"\"><button>Encender 30 minutos</button></a>");
      client.println("

");
      client.println("<a href=\"/LED=TOTALON\"\"><button>Encender Indetermidado</button></a>");
    }


    else
      // Pantalla 15 minutos
      if (value == "ESPERA15") {
        client.print("Espera");
        client.println("

");
        client.println("<a href=\"/LED=ON\"\"><button>Activar Temporizador</button></a>"); client.println("

");
client.print("<meta http-equiv=\"refresh\" content=\"2\">");
        client.println("<a href=\"/LED=OFF\"\"><button>Apagar</button></a>");
      }
      else
        // Pantalla 30 minutos
        if (value == "ESPERA30") {
          client.print("Espera");
          client.println("

");
          client.println("<a href=\"/LED=ON\"\"><button>Activar Temporizador</button></a>"); client.println("

");
          client.println("<a href=\"/LED=OFF\"\"><button>Apagar</button></a>"); client.print("<meta http-equiv=\"refresh\" content=\"2\">");
        }

        else
          // Pantalla para apagar Temporizadores
          if (value == "HIGHFULL") {
        client.print("<meta http-equiv=\"refresh\" content=\"2\">");    client.print("Encendido indetermidamente");
            client.println("

");
            client.println("<a href=\"/LED=OFF\"\"><button>Apagar</button></a>
");
          }








  client.println("</html>");

  delay(1); digitalWrite(ledPin, ledState);
}

RELEETIMERSUBIR.ino (4.5 KB)