full code
//#define BLYNK_PRINT Serial
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
//#define EspSerial Serial1
//#define ESP8266_BAUD 115200
ESP8266 wifi(&Serial);
#include <WidgetRTC.h>
#include <BlynkConfig.h>
#ifndef BLYNK_HEARTBEAT
#define BLYNK_HEARTBEAT 60
#endif
WidgetRTC rtc;
BlynkTimer timer;
const char auth[] = "xxxxxx";
const char ssid[] = "xxxxx";
const char pass[] = "xxxxx";
int pinsn = 8;
int pinso = 9;
int pinan = 11;
int pinao = 10;
int st_a = 0; //0 is hoog 1 is laag
int st_s = 0;
int ti_s = 0; // timer is 1, knop 0
int ti_a = 0;
long DAN = 50200;
long DAO = 39500;
long DSN = 1100;
long DSO = 920;
long DSNP = 2000;
long DSOP = 2000;
int ANA = LOW;
int ANP = HIGH;
int AOA = LOW;
int AOP = HIGH;
int SNA = LOW;
int SNP = HIGH;
int SOA = LOW;
int SOP = HIGH;
char s[48];
void setup() {
pinMode(pinsn, OUTPUT);
digitalWrite(pinsn, HIGH);
pinMode(pinso, OUTPUT);
digitalWrite(pinso, HIGH);
pinMode(pinan, OUTPUT);
digitalWrite(pinan, HIGH);
pinMode(pinao, OUTPUT);
digitalWrite(pinao, HIGH);
Serial.begin(115200);
Blynk.begin(auth, wifi, ssid, pass);
timer.setInterval(120000L, activetoday); // check every 60s if ON / OFF trigger time has been reached
}
BLYNK_CONNECTED() {rtc.begin();}
void checkled(){
if (st_s==0){Blynk.virtualWrite(V5, 0);}
else if (st_s == 1){Blynk.virtualWrite(V5, 255);}
if (st_a==0){Blynk.virtualWrite(V6, 0);}
else if (st_a == 1){Blynk.virtualWrite(V6, 255);}
}
void activetoday(){ // check if schedule #1 should run today
checkled();
if(year() != 1970){
Blynk.syncVirtual(V3); // sync scheduler #1
Blynk.syncVirtual(V4);
}
}
void slaapneer(){
Blynk.virtualWrite(V7, 255);
if (st_s == 1){ // is al laag
snprintf_P(s, sizeof(s), PSTR("%i-%i %i:%i Nee slaap is al laag (%i)"), day(), month(), hour(), minute(), ti_s);
Blynk.virtualWrite(V0, s);
}
else {
st_s = 1;
digitalWrite(pinsn, SNA); //1
delay(DSN);
digitalWrite(pinsn, SNP);
delay(DSNP);
digitalWrite(pinsn, SNA); //2
delay(DSN);
digitalWrite(pinsn, SNP);
delay(DSNP);
digitalWrite(pinsn, SNA); //3
delay(DSN);
digitalWrite(pinsn, SNP);
delay(DSNP);
digitalWrite(pinsn, SNA); //4
delay(DSN);
digitalWrite(pinsn, SNP);
delay(DSNP);
digitalWrite(pinsn, SNA); //5
delay(DSN);
digitalWrite(pinsn, SNP);
delay(DSNP);
digitalWrite(pinsn, SNA); //6
delay(DSN);
digitalWrite(pinsn, SNP);
delay(DSNP);
digitalWrite(pinsn, SNA); //7
delay(DSN);
digitalWrite(pinsn, SNP);
delay(DSNP);
digitalWrite(pinsn, SNA); //8
delay(DSN);
digitalWrite(pinsn, SNP);
delay(DSNP);
digitalWrite(pinsn, SNA); //9
delay(DSN);
digitalWrite(pinsn, SNP);
delay(DSNP);
digitalWrite(pinsn, SNA); //10
delay(DSN);
digitalWrite(pinsn, SNP);
snprintf_P(s, sizeof(s), PSTR("%i-%i %i:%i slaap laag (%i)"), day(), month(), hour(), minute(), ti_s);
Blynk.virtualWrite(V0, s);
}
Blynk.virtualWrite(V1, 1);
Blynk.virtualWrite(V5, 255);
Blynk.virtualWrite(V7, 0);
ti_s = 0;
}
void slaapop(){
Blynk.virtualWrite(V7, 255);
if (st_s == 0){ // is al hoog
snprintf_P(s, sizeof(s), PSTR("%i-%i %i:%i Nee slaap is al hoog (%i)"), day(), month(), hour(), minute(), ti_s);
Blynk.virtualWrite(V0, s);
}
else {
st_s = 0;
digitalWrite(pinso, SOA); //1
delay(DSO);
digitalWrite(pinso, SOP);
delay(DSOP);
digitalWrite(pinso, SOA); //2
delay(DSO);
digitalWrite(pinso, SOP);
delay(DSOP);
digitalWrite(pinso, SOA); //3
delay(DSO);
digitalWrite(pinso, SOP);
delay(DSOP);
digitalWrite(pinso, SOA); //4
delay(DSO);
digitalWrite(pinso, SOP);
delay(DSOP);
digitalWrite(pinso, SOA); //5
delay(DSO);
digitalWrite(pinso, SOP);
delay(DSOP);
digitalWrite(pinso, SOA); //6
delay(DSO);
digitalWrite(pinso, SOP);
delay(DSOP);
digitalWrite(pinso, SOA); //7
delay(DSO);
digitalWrite(pinso, SOP);
delay(DSOP);
digitalWrite(pinso, SOA); //8
delay(DSO);
digitalWrite(pinso, SOP);
delay(DSOP);
digitalWrite(pinso, SOA); //9
delay(DSO);
digitalWrite(pinso, SOP);
delay(DSOP);
digitalWrite(pinso, SOA); //10
delay(DSO);
digitalWrite(pinso, SOP);
snprintf_P(s, sizeof(s), PSTR("%i-%i %i:%i slaap hoog (%i)"), day(), month(), hour(), minute(), ti_s);
Blynk.virtualWrite(V0, s);
}
Blynk.virtualWrite(V1, 0);
Blynk.virtualWrite(V5, 0);
Blynk.virtualWrite(V7, 0);
ti_s = 0;
}
void achterneer(){
Blynk.virtualWrite(V8, 255);
if (st_a == 1){ // is al laag
snprintf_P(s, sizeof(s), PSTR("%i-%i %i:%i Nee achter is al laag (%i)"), day(), month(), hour(), minute(), ti_a);
Blynk.virtualWrite(V0, s);
}
else {
st_a = 1;
digitalWrite(pinan, ANA);
delay(DAN);
digitalWrite(pinan, ANP);
snprintf_P(s, sizeof(s), PSTR("%i-%i %i:%i achter laag (%i)"), day(), month(), hour(), minute(), ti_a);
Blynk.virtualWrite(V0, s);
}
Blynk.virtualWrite(V2, 1);
Blynk.virtualWrite(V6, 255);
Blynk.virtualWrite(V8, 0);
ti_a = 0;
}
void achterop(){
Blynk.virtualWrite(V8, 255);
if (st_a == 0){ // is al hoog
snprintf_P(s, sizeof(s), PSTR("%i-%i %i:%i Nee achter is al hoog (%i)"), day(), month(), hour(), minute(), ti_a);
Blynk.virtualWrite(V0, s);
}
else {
st_a = 0;
digitalWrite(pinao, AOA);
delay(DAO);
digitalWrite(pinao, AOP);
snprintf_P(s, sizeof(s), PSTR("%i-%i %i:%i achter hoog (%i)"), day(), month(), hour(), minute(), ti_a);
Blynk.virtualWrite(V0, s);
}
Blynk.virtualWrite(V2, 0);
Blynk.virtualWrite(V6, 0);
Blynk.virtualWrite(V8, 0);
ti_a = 0;
}
BLYNK_WRITE(V0){
if (String("zet achter laag") == param.asStr()) {
st_a = 1;
Blynk.virtualWrite(V2, 1);
Blynk.virtualWrite(V6, 255);
Blynk.virtualWrite(V8, 0);
}
else if (String("zet achter hoog") == param.asStr()) {
st_a = 0;
Blynk.virtualWrite(V2, 0);
Blynk.virtualWrite(V6, 0);
Blynk.virtualWrite(V8, 0);
}
else if (String("zet slaap laag") == param.asStr()) {
st_s = 1;
Blynk.virtualWrite(V1, 1);
Blynk.virtualWrite(V5, 255);
Blynk.virtualWrite(V7, 0);
}
else if (String("zet slaap hoog") == param.asStr()) {
st_s = 0;
Blynk.virtualWrite(V1, 0);
Blynk.virtualWrite(V5, 0);
Blynk.virtualWrite(V7, 0);
}
else if (String("achter") == param.asStr()) {
snprintf_P(s, sizeof(s), PSTR("%i-%i %i:%i slaap %i, achter %i (0 is hoog)"), day(), month(), hour(), minute(), st_s, st_a);
Blynk.virtualWrite(V0, s);
Blynk.virtualWrite(V7, 0);
Blynk.virtualWrite(V8, 0);
}
else if (String("tijd") == param.asStr()) {
snprintf_P(s, sizeof(s), PSTR("%i-%i %i:%i is huidige tijd"), day(), month(), hour(), minute());
Blynk.virtualWrite(V0, s);
}
}
BLYNK_WRITE(V1)
{
int knopslaap = param.asInt();
if (knopslaap == 0) {slaapop();}
else if (knopslaap == 1) {slaapneer();}
}
BLYNK_WRITE(V2)
{
int knopachter = param.asInt();
if (knopachter == 0) {achterop();}
else if (knopachter == 1) {achterneer();}
}
BLYNK_WRITE(V3) {TimeInputParam t(param);
unsigned int nowseconds = ((hour() * 3600) + (minute() * 60) + second());
unsigned int startseconds = (t.getStartHour() * 3600) + (t.getStartMinute() * 60);
unsigned int stopseconds = (t.getStopHour() * 3600) + (t.getStopMinute() * 60);
if(nowseconds >= startseconds - 61 && nowseconds <= startseconds + 61 ){ti_s = 1; slaapneer();} // 62s on 60s timer ensures 1 trigger command is sent
if(nowseconds >= stopseconds - 61 && nowseconds <= stopseconds + 61 ){ti_s = 1; slaapop();}
}
BLYNK_WRITE(V4) {TimeInputParam t(param);
unsigned int nowseconds = ((hour() * 3600) + (minute() * 60) + second());
unsigned int startseconds = (t.getStartHour() * 3600) + (t.getStartMinute() * 60);
unsigned int stopseconds = (t.getStopHour() * 3600) + (t.getStopMinute() * 60);
if(nowseconds >= startseconds - 61 && nowseconds <= startseconds + 61 ){ti_a = 1; achterneer();} // 62s on 60s timer ensures 1 trigger command is sent
if(nowseconds >= stopseconds - 61 && nowseconds <= stopseconds + 61 ){ti_a = 1; achterop();}
}
void loop() {
if (Blynk.connected()){Blynk.run();}
else {Blynk.begin(auth, wifi, ssid, pass);
snprintf_P(s, sizeof(s), PSTR("%i-%i %i:%i herstart"), day(), month(), hour(), minute());
Blynk.virtualWrite(V0, s);
Blynk.run();}
timer.run();
}