Updated code as I was having problems with the simpletimer library for some reason… this new way works better anyway.
#include <Arduino.h>
// #define CAYENNE_DEBUG Serial
// #define CAYENNE_PRINT Serial
#include "CayenneDefines.h"
#include "BlynkSimpleEsp8266.h"
#include "CayenneWiFiClient.h"
char token[] = "zadg3a574d";
char ssid[] = "devices";
char password[] = "open4meplease";
#define relayPin 5
bool online = false;
byte eightHrTimer;
byte fourHrTimer;
unsigned long expireTime;
int disco = 0;
byte relay;
unsigned long time1;
unsigned long onlineTime;
unsigned long prevTime;
void setup()
{
// Serial.begin(9600);
Cayenne.begin(token, ssid, password);
pinMode(BUILTIN_LED, OUTPUT);
pinMode(relayPin, OUTPUT);
}
void loop()
{
time1 = millis();
Cayenne.run();
if (relay == LOW)
{
digitalWrite(relayPin, LOW);
}
else
{
digitalWrite(relayPin, HIGH);
}
if (fourHrTimer == 1 || eightHrTimer == 1)
{
if (expireTime < millis())
{
timerDone();
}
}
}
void timerDone()
{
relay = LOW;
Cayenne.virtualWrite(V0, LOW);
Cayenne.virtualWrite(V1, LOW);
Cayenne.virtualWrite(V2, LOW);
fourHrTimer = 0;
eightHrTimer = 0;
expireTime = 0;
}
CAYENNE_CONNECTED()
{
online = true;
digitalWrite(BUILTIN_LED, LOW);
}
CAYENNE_DISCONNECTED()
{
online = false;
digitalWrite(BUILTIN_LED, HIGH);
prevTime = millis();
disco++;
}
CAYENNE_IN(V0)
{
relay = getValue.asInt();
}
CAYENNE_IN(V1)
{
fourHrTimer = getValue.asInt();
if (fourHrTimer == 1)
{
expireTime = (millis() + 14400000L);
}
else
{
expireTime = 0;
}
}
CAYENNE_IN(V2)
{
eightHrTimer = getValue.asInt();
if (eightHrTimer == 1)
{
expireTime = (millis() + 28800000L);
}
else
{
expireTime = 0;
}
}
CAYENNE_OUT(V10)
{
if (fourHrTimer == 1 || eightHrTimer == 1)
{
Cayenne.virtualWrite(V10, ((expireTime - time1) / 1000) / 60);
}
else
{
Cayenne.virtualWrite(V10, 0);
}
}
CAYENNE_OUT(V23)
{
Cayenne.virtualWrite(V23, disco);
}
CAYENNE_OUT(V24)
{
float time2 = (time1 / 1000) / 60;
Cayenne.virtualWrite(V24, time2);
}
CAYENNE_OUT(V25)
{
onlineTime = ((time1 - prevTime) / 1000) / 60;
Cayenne.virtualWrite(V25, onlineTime);
}