Authentification web et GET

Sur une requête http://192.168.0.200:9623/?lum=on le serveur renvoie une réponse, en l'occurrence une page WEB.
Un serveur ne retourne pas une URL comme réponse.

Dans ton code il y a divers problèmes :

char linebuf[100];
Si tu espères recevoir une requête dans 100 caractères, c'est perdu d'avance.
Teste ceci pour t'en convaincre :

        if (charcount < sizeof(linebuf) - 2) {   // moins 2 sinon le '\0' disparaît
          charcount++;
        }
        else {
          Serial.println(F("BUFFER OVERFLOW !!!"));
        }

Si tu fais des traitements ici ils seront répétés pour chaque '\n' rencontré dans la requête. Et il n'y en a pas qu'un ! ! !

strstr() est la manière du pauvre de tester si une URL matche.
Or, dans le header il y a en particulier Referer, qui contient l'URL d'où tu viens.
GET /?lum=on HTTP/1.1
...
Referer: http://192.168.1.210:9623/?lum=on
ou
Referer: http://192.168.1.210:9623/?lum=off
Donc si tu cherches une occurrence de /?lum=on ou /?lum=off à chaque fois que tu rencontres '\n', tu trouves plusieurs occurrences.

Pour analyser correctement une requête tu dois la parser, récupérer l'URL, les arguments, leur valeur. Cela ne se fait pas simplement à l'aide d'une recherche avec strstr().