Detectar estado de la luz con optocoplador y Blynk [NodeMCU 3.0]

surbyte:
Olvida a Blynk. Conecta todo en un simple código con una entrada digital y que te diga ON OFF

Como si fuera un pulsador.
Cuando funcione me dices si funciona como supongo con estados estables para 220 o nada o si da pulsos.

#define BLYNK_PRINT Serial
#include <Blynk.h> 
#include <ESP8266WiFi.h> 
#include <BlynkSimpleEsp8266.h> 
#include <SPI.h> 
#include <SimpleTimer.h> 
char auth[] = "xxxxx";
char ssid[] = "xxxxx";
char pass[] = "xxxxx";
SimpleTimer timer;
int BotonRele = 0;
int opto;

BLYNK_WRITE(V5) { 
  BotonRele = param.asInt(); 
  } 
  void setup() { 
    pinMode(2, OUTPUT); 
    pinMode(5, INPUT); 
    Serial.begin(9600); 
     Blynk.begin(auth, ssid, pass); 
    timer.setInterval(2000L, activacion); 
  } 
    
  void loop() { 
    opto = digitalRead (5);
    Blynk.run(); 
    timer.run(); 
  } 
      
  void activacion() { 
    if(BotonRele==1){ 
      digitalWrite(2, HIGH);
      if (opto==1){
       Blynk.setProperty(V5,"onLabel", "ON"); 
      }
    else if (BotonRele==0){ 
      digitalWrite(2, LOW); 
      if (opto==0){
       Blynk.setProperty(V5,"offLabel", "OFF"); 
    } 
 }

}
  }

Tengo esto, pero ya digo, soy un manco con el código y necesito ayuda con el mismo.
Con esto no leo el opto ni cambia el botón, sin el código para leer el opto el programa funciona bien para apagar y encender la luz desde la aplicación.