Timer Blynk

Hola, intento configurar una placa Nodemcu Lolin con Blink para crear un sistema de riego.
El sistema consiste en principio en una placa Nodemcu Lolin, una electroválvula con solenoide de 12v DC, un relay octoacoplado y una fuente de 12v con un reductor de tensión a 5v DC para alimentar la placa Nodemcu.

En principio he configurado en la aplicación del teléfono un botón para activar manualmente una electroválvula, hasta ahí sin problema, o sea que se activa el solenoide con ese botón.

Pero donde no me aclaro es en la activación programada del solenoide, es decir, en la app del teléfono programo un widget con la hora de inicio y la de finalización, pero no funciona.

Por el puerto serie aparece el mensaje de conexión correcta a la red, pero ahí se detiene.

Pongo el sketch, entiendo que falta en algún sitio la asignación de una salida física del pin virtual del Blynk, pero no me aclaro:

[code]
/*************************************************************
  Download latest Blynk library here:
    https://github.com/blynkkk/blynk-library/releases/latest

  Blynk is a platform with iOS and Android apps to control
  Arduino, Raspberry Pi and the likes over the Internet.
  You can easily build graphic interfaces for all your
  projects by simply dragging and dropping widgets.

    Downloads, docs, tutorials: http://www.blynk.cc
    Sketch generator:           http://examples.blynk.cc
    Blynk community:            http://community.blynk.cc
    Follow us:                  http://www.fb.com/blynkapp
                                http://twitter.com/blynk_app

  Blynk library is licensed under MIT license
  This example code is in public domain.

 *************************************************************

  This example shows how LOW/HIGH event may be triggered from
  Blynk Server to Arduino at specific time.

  Timer widget works for ANALOG and DIGITAL pins also.
  In this case you don't need to write code.
  Blynk handles that for you.

  App project setup:
    Timer widget attached to V1 and running project.
 *************************************************************/

/* Comment this out to disable prints and save space */
#define BLYNK_PRINT Serial


#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "7d1d9c4ptp0643b0a4f74832f62f1a01";
// Datos de WiFi. En redes abiertas en pass colocar ""
char ssid[] = "MiRouter";
char pass[] = "MiPassword";

BLYNK_WRITE(V1)
{
  // You'll get HIGH/1 at startTime and LOW/0 at stopTime.
  // this method will be triggered every day
  // until you remove widget or stop project or
  // clean stop/start fields of widget
  Serial.print("Got a value: ");
  Serial.println(param.asStr());
}

void setup()
{
  // Debug console
  Serial.begin(9600);

  Blynk.begin(auth, ssid, pass);
}

void loop()
{
  Blynk.run();
}

[/code]

Hola que tal, tal vez te ayude utilizando este ejemplo nada mas adaptalo para el ESP8266

#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

#include <WidgetRTC.h>
BlynkTimer timer;
char auth[] = "xxxxxxxxxx";
char ssid[] = "xxxxxxxxxx";
char pass[] = "xxxxxxxxxx";
char currentTime[9];
char startTime[9];
char stopTime[9];
int SThour;
int STmin;
int STsec;
int SPhour;
int SPmin;
int SPsec;

WidgetRTC rtc;  //Configunra el RTC Widget

void setup() {
  Serial.begin(115200);
  rtc.begin();
  Blynk.begin(auth, ssid, pass);
  pinMode(2, OUTPUT);  //Led de la Placa
  setSyncInterval(360);
  timer.setInterval(30000L, TimeCheck);  //Act el reloj cada 30Seg
}

BLYNK_CONNECTED() {
  Blynk.syncVirtual(V1); //Sincroniza el TimeInput cuando se conecta
  TimeCheck(); //Inicia TimeCheck
}

void loop() {
  Blynk.run();
  timer.run();
}

BLYNK_WRITE(V1) {  //Configura el Widget TimeInput en Blynk Movil
  TimeInputParam t(param);
  SThour = t.getStartHour();
  STmin = t.getStartMinute();
  STsec = t.getStartSecond();
  SPhour = t.getStopHour();
  SPmin = t.getStopMinute();
  SPsec = t.getStopSecond();
}

void TimeCheck() {  //Funcion llamada cada 30Seg
  // Get RTC time
  sprintf(currentTime, "%02d:%02d:%02d", hour(), minute(), second());
  Serial.print("Current Time: ");
  Serial.println(currentTime);

  //Obtiene tiempo de Inicio del TimeInput
  sprintf(startTime, "%02d:%02d:%02d", SThour, STmin, STsec);
  Serial.print("Start Time: ");
  Serial.println(startTime);

  //Obtiene tiempo de Final del TimeInput
  sprintf(startTime, "%02d:%02d:%02d", SPhour, SPmin, SPsec);
  Serial.print("Stop Time: ");
  Serial.println(startTime);

  if (hour() == SThour) {
    if (minute() == STmin) {
      Serial.println("Haciendo algo ahora");
      digitalWrite(2, HIGH); // Turn ON built-in LED
    } else if (minute() < STmin) {
      Serial.println("Hará algo");
    } else if (minute() > STmin) {
      Serial.println("Hizo algo");
    } else {
      Serial.println("Despistado");
    }
  }

  if (hour() == SPhour) {
    if (minute() == SPmin) {
      Serial.println("Deteniendo algo ahora");
      digitalWrite(2, LOW); // Turn OFF built-in LED
    } else if (minute() < SPmin) {
      Serial.println("Detendrá algo");
    } else if (minute() > SPmin) {
      Serial.println("Detuve algo");
    } else {
      Serial.println("Despistado");
    }
  }
  Serial.println("----------");
}