As I prefer the old time input widget over automations and I need quite a lot automations as well, I tested the code beneath for using time inputs with Blynk. I found this code on the internet and it works well (even while I skipped a part).
However, I need some more timers, so I changed the code a bit. This worked well till 10 timers, but from timer no. 11 and above this does not work anymore, and I do not understand why. When setting up the timers this seems to work, but when the time as set up arrives nothing happens. And it does for the first 10 timers.
Am I missing something?
My code is below,
// Fill-in information from your Blynk Template here
#define BLYNK_TEMPLATE_ID "..."
#define BLYNK_TEMPLATE_NAME "...."
#define BLYNK_AUTH_TOKEN "..."
#define BLYNK_FIRMWARE_VERSION "0.1.0"
#define BLYNK_PRINT Serial
//#define BLYNK_DEBUG
#define APP_DEBUG
// Uncomment your board, or configure a custom board in Settings.h
//#define USE_SPARKFUN_BLYNK_BOARD
//#define USE_NODE_MCU_BOARD
//#define USE_WITTY_CLOUD_BOARD
#define USE_WEMOS_D1_MINI
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <TimeLib.h>
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "...";
char pass[] = "....";
char auth[] = BLYNK_AUTH_TOKEN;
BlynkTimer timer;
// Aantal timers: pas ook onderstaande arrays aan en voeg Blynk_wrtie procedures toe bij wijzigingen!
bool led_set[11];
long timer_start_set[11] = {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF};
long timer_stop_set[11] = {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF};
unsigned char weekday_set[11];
bool led_status[11];
bool update_blynk_status[11];
bool led_timer_on_set[11];
long rtc_sec;
unsigned char day_of_week;
// #########################################################################################################
// ----- I SKIPPED THIS PART AS IT OCCURRED ALSO TO WORK WITHOUT ---------------------------------
/*
//----------------------------------------------------------------------------------------------
void UpdateSwitch (int i, int val)
{
if ( led_timer_on_set[i] == 0 )
led_set[i] = val;
else
update_blynk_status[i] = 1;
Serial.println("");
Serial.print("UpdateSwitch "); Serial.print(i); Serial.println(" uitgevoerd...");
}
//=====================================
BLYNK_WRITE(V0) // KNOP 0
{
int val = param.asInt();
UpdateSwitch(0,val);
// if ( led_timer_on_set[0] == 0 )
// led_set[0] = val;
// else
// update_blynk_status[0] = 1;
}
//--------------------------------------
BLYNK_WRITE(V1) // KNOP 1
{
int val = param.asInt();
UpdateSwitch(1,val);
}
//--------------------------------------
BLYNK_WRITE(V2) // KNOP 2
{
int val = param.asInt();
UpdateSwitch(2,val);
}
//--------------------------------------
BLYNK_WRITE(V3) // KNOP 3
{
int val = param.asInt();
UpdateSwitch(3,val);
}
//--------------------------------------
BLYNK_WRITE(V4) // KNOP 4
{
int val = param.asInt();
UpdateSwitch(4,val);
}
//--------------------------------------
BLYNK_WRITE(V5) // KNOP 5
{
int val = param.asInt();
UpdateSwitch(5,val);
}
//--------------------------------------
BLYNK_WRITE(V6) // KNOP 6
{
int val = param.asInt();
UpdateSwitch(6,val);
}
//--------------------------------------
BLYNK_WRITE(V7) // KNOP 7
{
int val = param.asInt();
UpdateSwitch(7,val);
}
//--------------------------------------
BLYNK_WRITE(V8) // KNOP 8
{
int val = param.asInt();
UpdateSwitch(8,val);
}
//--------------------------------------
BLYNK_WRITE(V9) // KNOP 9
{
int val = param.asInt();
UpdateSwitch(9,val);
}
//--------------------------------------
*/
// #########################################################################################################
void UpdateTimer(int i, BlynkParam param) // Instellen en weergeven nieuwe timerinstellingen
{
unsigned char week_day;
TimeInputParam t(param);
//TimeInputParam t(TimeInput);
Serial.println("");
Serial.print("Nieuwe waarden voor timer no."); Serial.print(i); Serial.println(":");
if (t.hasStartTime() && t.hasStopTime() )
{
timer_start_set[i] = (t.getStartHour() * 60 * 60) + (t.getStartMinute() * 60) + t.getStartSecond();
timer_stop_set[i] = (t.getStopHour() * 60 * 60) + (t.getStopMinute() * 60) + t.getStopSecond();
Serial.println(String("Start Time: ") +
t.getStartHour() + ":" +
t.getStartMinute() + ":" +
t.getStartSecond());
Serial.println(String("Stop Time: ") +
t.getStopHour() + ":" +
t.getStopMinute() + ":" +
t.getStopSecond());
for (int i = 1; i <= 7; i++)
{
if (t.isWeekdaySelected(i))
{
week_day |= (0x01 << (i-1));
Serial.println(String("Day ") + i + " is selected");
}
else
{
week_day &= (~(0x01 << (i-1)));
}
}
weekday_set[i] = week_day;
}
else
{
timer_start_set[i] = 0xFFFF;
timer_stop_set[i] = 0xFFFF;
}
}
//=====================================
BLYNK_WRITE(V1) // TIMER 0
{
UpdateTimer(0, param );
}
// ------------------------------------------
BLYNK_WRITE(V2) // TIMER 1
{
UpdateTimer(1, param );
}
// ------------------------------------------
BLYNK_WRITE(V3) // TIMER 2
{
UpdateTimer(2, param );
}
// ------------------------------------------
BLYNK_WRITE(V4) // TIMER 3
{
UpdateTimer(3, param );
}
// ------------------------------------------
BLYNK_WRITE(V5) // TIMER 4
{
UpdateTimer(4, param );
}
// ------------------------------------------
BLYNK_WRITE(V6) // TIMER 5
{
UpdateTimer(5, param );
}
// ------------------------------------------
BLYNK_WRITE(V7) // TIMER 6
{
UpdateTimer(6, param );
}
// ------------------------------------------
BLYNK_WRITE(V8) // TIMER 7
{
UpdateTimer(7, param );
}
// ------------------------------------------
BLYNK_WRITE(V9) // TIMER 8
{
UpdateTimer(8, param );
}
// ------------------------------------------
BLYNK_WRITE(V10) // TIMER 9
{
UpdateTimer(9, param );
}
// ------------------------------------------
BLYNK_WRITE(V11) // TIMER 10 - THIS ONE DOES NOT WORK
{
UpdateTimer(10, param );
}
// #########################################################################################################
BLYNK_WRITE(InternalPinRTC)
{
const unsigned long DEFAULT_TIME = 1357041600; // Jan 1 2013
unsigned long blynkTime = param.asLong();
if (blynkTime >= DEFAULT_TIME)
{
setTime(blynkTime);
day_of_week = weekday();
if ( day_of_week == 1 )
day_of_week = 7;
else
day_of_week -= 1;
rtc_sec = (hour()*60*60) + (minute()*60) + second();
Serial.print(String("RTC Server: ") + hour() + ":" + minute() + ":" + second());
Serial.print(" - ");
Serial.print(String("Day of Week: ") + weekday());
Serial.print(" - ");
Serial.println(blynkTime);
}
}
// #########################################################################################################
BLYNK_CONNECTED()
{
Blynk.sendInternal("rtc", "sync");
}
// #########################################################################################################
void checkTime()
{
Blynk.sendInternal("rtc", "sync");
}
// #########################################################################################################
void led_mng()
{
bool time_set_overflow;
bool led_status_buf[10];
for (int i=0; i<10; i++)
{
led_status_buf[i] = led_status[i];
time_set_overflow = 0;
if ( timer_start_set[i] != 0xFFFF && timer_stop_set[i] != 0xFFFF)
{
if ( timer_stop_set[i] < timer_start_set[i] ) time_set_overflow = 1;
if ((((time_set_overflow == 0 && (rtc_sec >= timer_start_set[i]) && (rtc_sec < timer_stop_set[i])) ||
(time_set_overflow && ((rtc_sec >= timer_start_set[i]) || (rtc_sec < timer_stop_set[i])))) &&
(weekday_set[i] == 0x00 || (weekday_set[i] & (0x01 << (day_of_week - 1) )))) )
{
led_timer_on_set[i] = 1;
}
else
led_timer_on_set[i] = 0;
}
else
led_timer_on_set[i] = 0;
if ( led_timer_on_set[i] )
{
led_status[i] = 1;
led_set[i] = 0;
}
else
{
led_status[i] = led_set[i];
}
if ( led_status_buf[i] != led_status[i] )
update_blynk_status[i] = 1;
}
}
// #########################################################################################################
void blynk_update() // Knopstatus updaten
{
if ( update_blynk_status[0] )
{
update_blynk_status[0] = 0;
//Blynk.virtualWrite(V0, led_status[0]);
Serial.println("Timer 0 gewijzigd");
}
if ( update_blynk_status[1] )
{
update_blynk_status[1] = 0;
//Blynk.virtualWrite(V1, led_status[1]);
Serial.println("Timer 1 gewijzigd");
}
if ( update_blynk_status[2] )
{
update_blynk_status[2] = 0;
// Blynk.virtualWrite(V2, led_status[2]);
}
if ( update_blynk_status[3] )
{
update_blynk_status[3] = 0;
//Blynk.virtualWrite(V3, led_status[3]);
}
if ( update_blynk_status[4] )
{
update_blynk_status[4] = 0;
// Blynk.virtualWrite(V4, led_status[4]);
}
if ( update_blynk_status[5] )
{
update_blynk_status[5] = 0;
//Blynk.virtualWrite(V5, led_status[5]);
}
if ( update_blynk_status[6] )
{
update_blynk_status[6] = 0;
//Blynk.virtualWrite(V6, led_status[6]);
}
if ( update_blynk_status[7] )
{
update_blynk_status[7] = 0;
// Blynk.virtualWrite(V7, led_status[7]);
Serial.println("Timer 7 gewijzigd");
}
if ( update_blynk_status[8] )
{
update_blynk_status[8] = 0;
//Blynk.virtualWrite(V8, led_status[8]);
Serial.println("Timer 8 gewijzigd");
}
if ( update_blynk_status[9] )
{
update_blynk_status[9] = 0;
//Blynk.virtualWrite(V9, led_status[9]);
Serial.println("Timer 9 gewijzigd");
}
if ( update_blynk_status[10] )
{
update_blynk_status[10] = 0;
//Blynk.virtualWrite(V10, led_status[10]);
Serial.println("Timer 10 gewijzigd");
}
}
// #########################################################################################################
void setup()
{
Serial.begin(115200);
delay(100);
Blynk.begin(auth, ssid, pass);
timer.setInterval(1000L, checkTime);
Serial.println("Setup uitgevoerd...");
}
// #########################################################################################################
void loop()
{ Blynk.run();
timer.run();
led_mng();
blynk_update();
}