Si7021 Displaying Wrong Values

Thanks for clarifying.

I'm making use of the ESP32.

3.3V - 3.3V
GND - GND
SDA - 21
SCL - 22

It seems like the jumper pin of the 3V connector did not make contact.

I even switched to using millis() as I still want to see my readings even when the device is offline:

Main File:

 /**********************************************************************************
TITLE: GROWSPACE

AUTHOR: SHAWN TAYLOR

VERSION: 1.0.1

NOTE: CONTROL LIGHT SCHEDULE
    : CONTROL INLET FANS AND OUTLET FANS
    : MONITOR TEMPERATURE AND HUMIDITY
    : MONITOR VPD
 **********************************************************************************/

// Fill-in information from your Blynk Template here
#define BLYNK_TEMPLATE_ID "xxxxxxxxxx"
#define BLYNK_DEVICE_NAME "xxxxxxxxxx"

#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_WROVER_BOARD

// On time Defines
#define ON_TIME 1080 //Minutes
#define ON_TIME_START 420 // 07:00

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

//#include <WiFi.h>
//#include <WiFiClient.h>
//#include <WiFiUdp.h>
//#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include "SparkFun_Si7021_Breakout_Library.h"
#include <NTPClient.h>

//Si7021
float humidity = 0;
float tempC = 0;

//NTP DATE/TIME
//Week Days
String weekDays[7]={"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
 
//Month names
String months[12]={"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
  
// Define Switch Pins
#define s1 34 // LIGHTS
#define s2 35 // INLET
#define s3 32 // OUTLET
#define s4 33 // HUMIDIFIER
#define s5 25 // UNDEFINED

// Define Relay Pins
#define r1 25 // LIGHT 1
#define r2 27 // LIGHT 2
#define r3 14 // INLET
#define r4 12 // OUTLET
#define r5 13 // HUMIDIFIER

// Define Hysteresis
#define tempDeadBand 3

uint8_t currentMin = 0;
int currentHour = 0;
int currentMinCalc = 0;
//uint16_t onTimeDuration = 1080;
//uint8_t onTimeDurationFans = 20;
//const int onTime = 420;
uint8_t currentCalcMin = 0;
uint8_t lightsON = 0;
uint16_t waitMin = 0;
uint16_t waitMinFans = 0;
uint8_t hourScheduler = 02;
uint16_t r1Time = 0;
uint16_t r2Time = 0;
uint16_t r3Time = 0;
uint16_t r4Time = 0;

struct SCHEDULER
{
  uint8_t Month;
  uint8_t Day;
  uint8_t Hour;
  uint8_t Minute;
  uint16_t OnTime;
};

struct SCHEDULER Scheduler[4][8];

//Millis related variables
const uint16_t readInterval = 6000;
unsigned long previousTime = 0;
unsigned long currentTime = 0;

//char auth[] = BLYNK_AUTH_TOKEN;

#define VPIN_BUTTON_1    V1 
#define VPIN_BUTTON_2    V2
#define VPIN_BUTTON_3    V3 
#define VPIN_BUTTON_4    V4
#define VPIN_BUTTON_5    V5 

#define VPIN_TEMPERATURE V9
#define VPIN_HUMIDITY    V10

// Relay State
bool toggleState_1 = HIGH; //Define integer to remember the toggle state for relay 1
bool toggleState_2 = HIGH; //Define integer to remember the toggle state for relay 2
bool toggleState_3 = HIGH; //Define integer to remember the toggle state for relay 3
bool toggleState_4 = HIGH; //Define integer to remember the toggle state for relay 4
bool toggleState_5 = HIGH; //Define integer to remember the toggle state for relay 5

// Switch State
bool SwitchState_1 = LOW;
bool SwitchState_2 = LOW;
bool SwitchState_3 = LOW;
bool SwitchState_4 = LOW;
bool SwitchState_5 = LOW;

#include "BlynkEdgent.h"

//Instances
BlynkTimer timer;
//Create Instance of HTU21D or SI7021 temp and humidity sensor and MPL3115A2 barrometric sensor
Weather sensor;
//NTP
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org");


/*void sendSensor()
{
  getHumTemp();
  // You can send any value at any time.
  // Please don't send more that 10 values per second.
  Blynk.virtualWrite(VPIN_HUMIDITY, humidity1);
  Blynk.virtualWrite(VPIN_TEMPERATURE, temperature1);
}*/

//BLYNK_CONNECTED() {
//  // Request the latest state from the server
//  Blynk.syncVirtual(VPIN_BUTTON_1);
//  Blynk.syncVirtual(VPIN_BUTTON_2);
//  Blynk.syncVirtual(VPIN_BUTTON_3);
//  Blynk.syncVirtual(VPIN_BUTTON_4);
//  Blynk.syncVirtual(VPIN_BUTTON_5);
//  Blynk.syncVirtual(VPIN_BUTTON_6);
//  Blynk.syncVirtual(VPIN_BUTTON_7);
//  Blynk.syncVirtual(VPIN_BUTTON_8);
//  Blynk.syncVirtual(VPIN_TEMPERATURE);
//  Blynk.syncVirtual(VPIN_HUMIDITY);
//  Blynk.syncVirtual(VPIN_LDR);
//}

// When App button is pushed - switch the state

BLYNK_WRITE(VPIN_BUTTON_1) 
{
  toggleState_1 = param.asInt();
  if(toggleState_1 == 1)
  {
    //digitalWrite(r1, LOW);
    //digitalWrite(r2, LOW);
  }
  else 
  { 
    digitalWrite(r1, HIGH);
    digitalWrite(r1, HIGH);
  }
}

BLYNK_WRITE(VPIN_BUTTON_2) 
{
  toggleState_2 = param.asInt();
  if(toggleState_2 == 1)
  {
    //digitalWrite(r3, LOW);
  }
  else 
  { 
    digitalWrite(r3, HIGH);
  }
}

BLYNK_WRITE(VPIN_BUTTON_3) 
{
  toggleState_3 = param.asInt();
  if(toggleState_3 == 1)
  {
    //digitalWrite(r4, LOW);
  }
  else 
  { 
    digitalWrite(r4, HIGH);
  }
}

BLYNK_WRITE(VPIN_BUTTON_4) 
{
  toggleState_4 = param.asInt();
  if(toggleState_4 == 1)
  {
    //digitalWrite(r5, LOW);
  }
  else 
  { 
    digitalWrite(r5, HIGH);
  }
}


BLYNK_WRITE(VPIN_BUTTON_5) 
{
  all_SwitchOff();
}

//Current minute calc func
/*void lightSchedule()
{ 
  waitMin = (currentMin + 1);
  currentCalcMin = ((currentHour * 60) + currentMin);
  
  if(currentCalcMin == onTime) // 7 * 60 = 420
  { 
    //Switch Lights On

    //Switch Inlet and Outlet On
    digitalWrite(r3, LOW);
    digitalWrite(r4, LOW); 
    
    lightsON = 1;

  } 
    if(waitMin == currentMin)
    {
      onTimeDuration--;
    }
  
    if(onTimeDuration == 0)
    {
      //Switch Lights Off
      lightsON = 0;
      onTimeDuration = 1080;
    }
}

void fanSchedule()
{

  waitMinFans = (currentMin + 1);
  
  if(lightsON == 1)
  {
    digitalWrite(r3, LOW);
    digitalWrite(r4, LOW);  
  }

  if(lightsON == 0) //Lights Off
  {
    //Wait 20 minutes after lights off to switch off Inlet & Outlet
    if(waitMinFans == currentMin)
    {
      onTimeDurationFans--;
    }

    if(onTimeDurationFans == 0)
    {
      digitalWrite(r3, HIGH);
      digitalWrite(r4, HIGH); 
    }
  }
}*/

void all_SwitchOff()
{
  toggleState_1 = 0; digitalWrite(r1, HIGH); Blynk.virtualWrite(VPIN_BUTTON_1, toggleState_1); delay(100);
                     digitalWrite(r2, HIGH);
  toggleState_2 = 0; digitalWrite(r3, HIGH); Blynk.virtualWrite(VPIN_BUTTON_2, toggleState_2); delay(100);
  toggleState_3 = 0; digitalWrite(r4, HIGH); Blynk.virtualWrite(VPIN_BUTTON_3, toggleState_3); delay(100);
  toggleState_4 = 0; digitalWrite(r5, HIGH); Blynk.virtualWrite(VPIN_BUTTON_4, toggleState_4); delay(100);
  toggleState_5 = 0;                         Blynk.virtualWrite(VPIN_BUTTON_5, toggleState_5); delay(100);

  Blynk.virtualWrite(VPIN_HUMIDITY, humidity);
  Blynk.virtualWrite(VPIN_TEMPERATURE, tempC);

}

// Get Date && Time Function
void getDateTime()
{
    unsigned long epochTime = timeClient.getEpochTime();
  Serial.print("Epoch Time: ");
  Serial.println(epochTime);
   
  String formattedTime = timeClient.getFormattedTime();
  Serial.print("Formatted Time: ");
  Serial.println(formattedTime);  
 
  currentHour = timeClient.getHours();
  Serial.print("Hour: ");
  Serial.println(currentHour);  
 
  currentMin = timeClient.getMinutes();
  Serial.print("Minutes: ");
  Serial.println(currentMin); 
    
  int currentSecond = timeClient.getSeconds();
  Serial.print("Seconds: ");
  Serial.println(currentSecond);  
 
  String weekDay = weekDays[timeClient.getDay()];
  Serial.print("Week Day: ");
  Serial.println(weekDay); 
}

// This function sends Arduino's uptime every second to Virtual Pin 2.
void myTimerEvent()
{
  // You can send any value at any time.
  // Please don't send more that 10 values per second.
  Blynk.virtualWrite(V9, tempC);
  Blynk.virtualWrite(V10, humidity);
  //getDateTime();
}

void getHumTemp()
{
   //Measure Relative Humidity from the HTU21D or Si7021
  humidity = sensor.getRH();

  //Measure Temperature from the HTU21D or Si7021
  tempC = sensor.getTemp();

  Serial.print("Temp:");
  Serial.print(tempC);
  Serial.print(" °C, ");

  Serial.print("Humidity:");
  Serial.print(humidity);
  Serial.println(" %");  
}
void setup()
{
  Serial.begin(115200);

  pinMode(r1, OUTPUT);
  pinMode(r2, OUTPUT);
  pinMode(r3, OUTPUT);
  pinMode(r4, OUTPUT);
  pinMode(r5, OUTPUT);


  //pinMode(wifiLed, OUTPUT);

  pinMode(s1, INPUT_PULLUP);
  pinMode(s2, INPUT_PULLUP);
  pinMode(s3, INPUT_PULLUP);
  pinMode(s4, INPUT_PULLUP);
  pinMode(s5, INPUT_PULLUP);

  
  //During Starting all Relays should TURN OFF
  digitalWrite(r1, HIGH);
  digitalWrite(r2, HIGH);
  digitalWrite(r3, HIGH);
  digitalWrite(r4, HIGH);
  digitalWrite(r5, HIGH);

  //irrecv.enableIRIn(); // Enabling IR sensor
  BlynkEdgent.begin();

  //Initialize the I2C sensors and ping them
  sensor.begin();
  
  // Set up a function to be called every x-amount of seconds //
  //timer.setInterval(3000L, getHumTemp);
  timer.setInterval(12000L, myTimerEvent);

  // Initialize NTP Client 
  timeClient.begin();
  timeClient.setTimeOffset(7200);

  waitMin = currentMin;

  //Initialize Scheduler Struct to 0xFF
  for (int i = 0; i < 4; i++)
  {
    for (int z = 0; z < 8; z++)
    {
      Scheduler[i][z].Month = 0xFF;
      Scheduler[i][z].Day = 0xFF;
      Scheduler[i][z].Hour = 0xFF;
      Scheduler[i][z].Minute = 0xFF;
      Scheduler[i][z].OnTime = 0xFFFF;
    }
  }

  // LIGHT RELAY 1 :: 07:00 - 01:00
  Scheduler[0][0].Hour = 07;      // [0] - RELAY 1 :: [0] - TIME SCHEDULE 1
  Scheduler[0][0].Minute = 00;    // [0] - RELAY 1 :: [0] - TIME SCHEDULE 1
  Scheduler[0][0].OnTime = 1080;  // [0] - RELAY 1 :: [0] - TIME SCHEDULE 1

  // LIGHT RELAY 2 :: 07:00 - 01:00
  Scheduler[1][0].Hour = 07;      // [1] - RELAY 2 :: [0] - TIME SCHEDULE 1
  Scheduler[1][0].Minute = 00;    // [1] - RELAY 2 :: [0] - TIME SCHEDULE 1
  Scheduler[1][0].OnTime = 1080;  // [1] - RELAY 2 :: [0] - TIME SCHEDULE 1

  // INLET FAN :: 07:00 - 01:20
  Scheduler[2][0].Hour = 07;      // [2] - RELAY 3 :: [0] - TIME SCHEDULE 1
  Scheduler[2][0].Minute = 00;    // [2] - RELAY 3 :: [0] - TIME SCHEDULE 1
  Scheduler[2][0].OnTime = 1110;  // [2] - RELAY 3 :: [0] - TIME SCHEDULE 1
  
  for (int i = 1; i < 6; i++)
  {
    Scheduler[2][i].Hour = hourScheduler;  // [2] - RELAY 3 :: [1] - TIME SCHEDULE 2
    Scheduler[2][i].Minute = 15;           // [2] - RELAY 3 :: [1] - TIME SCHEDULE 2
    Scheduler[2][i].OnTime = 15;           // [2] - RELAY 3 :: [1] - TIME SCHEDULE 2
    hourScheduler++;
  }

  hourScheduler = 02;

  // OUTLET FAN
  Scheduler[3][0].Hour = 07;      // [3] - RELAY 4 :: [0] - TIME SCHEDULE 1
  Scheduler[3][0].Minute = 00;    // [3] - RELAY 4 :: [0] - TIME SCHEDULE 1
  Scheduler[3][0].OnTime = 1110;  // [3] - RELAY 4 :: [0] - TIME SCHEDULE 1

    for (int i = 1; i < 6; i++)
  {
    Scheduler[3][i].Hour = hourScheduler; // [3] - RELAY 4 :: [i] - TIME SCHEDULE 2
    Scheduler[3][i].Minute = 15;          // [3] - RELAY 4 :: [i] - TIME SCHEDULE 2
    Scheduler[3][i].OnTime = 15;          // [3] - RELAY 4 :: [i] - TIME SCHEDULE 2
    hourScheduler++;
  }
  
}
void loop() 
{
    currentTime = millis();
    BlynkEdgent.run();
    manual_control(); //Manual Switch Control
    //ir_remote(); //IR remote Control
    timer.run();
    //NTP Update
    timeClient.update();
    if(currentTime - previousTime >= readInterval)
    {
      getHumTemp();
      getDateTime();
      controlHumidity();
      previousTime = currentTime;
    }
    startScheduler();
}

BlynkEdgent.h:


extern "C" {
  void app_loop();
  void eraseMcuConfig();
  void restartMCU();
}

#include "Settings.h"
#include <BlynkSimpleEsp32_SSL.h>

#ifndef BLYNK_NEW_LIBRARY
#error "Old version of Blynk library is in use. Please replace it with the new one."
#endif

#if !defined(BLYNK_TEMPLATE_ID) || !defined(BLYNK_DEVICE_NAME)
#error "Please specify your BLYNK_TEMPLATE_ID and BLYNK_DEVICE_NAME"
#endif

#include "BlynkState.h"
#include "ConfigStore.h"
#include "ResetButton.h"
#include "ConfigMode.h"
#include "Indicator.h"
#include "OTA.h"
void manual_control();
void ir_remote();
void startScheduler();
void relay1Task();
void relay2Task();
void relay3Task();
void relay4Task();
void controlHumidity();
inline
void BlynkState::set(State m) {
  if (state != m && m < MODE_MAX_VALUE) {
    DEBUG_PRINT(String(StateStr[state]) + " => " + StateStr[m]);
    state = m;

    // You can put your state handling here,
    // i.e. implement custom indication
  }
}

void printDeviceBanner()
{
  Blynk.printBanner();
  DEBUG_PRINT("--------------------------");
  DEBUG_PRINT(String("Product:  ") + BLYNK_DEVICE_NAME);
  DEBUG_PRINT(String("Hardware: ") + BOARD_HARDWARE_VERSION);
  DEBUG_PRINT(String("Firmware: ") + BLYNK_FIRMWARE_VERSION " (build " __DATE__ " " __TIME__ ")");
  if (configStore.getFlag(CONFIG_FLAG_VALID)) {
    DEBUG_PRINT(String("Token:    ...") + (configStore.cloudToken+28));
  }
  DEBUG_PRINT(String("Device:   ") + BLYNK_INFO_DEVICE + " @ " + ESP.getCpuFreqMHz() + "MHz");
  DEBUG_PRINT(String("MAC:      ") + WiFi.macAddress());
  DEBUG_PRINT(String("Flash:    ") + ESP.getFlashChipSize() / 1024 + "K");
  DEBUG_PRINT(String("ESP sdk:  ") + ESP.getSdkVersion());
  DEBUG_PRINT(String("Chip rev: ") + ESP.getChipRevision());
  DEBUG_PRINT(String("Free mem: ") + ESP.getFreeHeap());
  DEBUG_PRINT("--------------------------");
}

void runBlynkWithChecks() {
  Blynk.run();
  if (BlynkState::get() == MODE_RUNNING) {
    if (!Blynk.connected()) {
      if (WiFi.status() == WL_CONNECTED) {
        BlynkState::set(MODE_CONNECTING_CLOUD);
      } else {
        BlynkState::set(MODE_CONNECTING_NET);
      }
    }
  }
}

class Edgent 
{

public:
  void begin()
  {
    indicator_init();
    button_init();
    config_init();

    WiFi.persistent(false);
    WiFi.enableSTA(true);   // Needed to get MAC

    printDeviceBanner();

    if (configStore.getFlag(CONFIG_FLAG_VALID)) {
      BlynkState::set(MODE_CONNECTING_NET);
    } else if (config_load_blnkopt()) {
      DEBUG_PRINT("Firmware is preprovisioned");
      BlynkState::set(MODE_CONNECTING_NET);
    } else {
      BlynkState::set(MODE_WAIT_CONFIG);
    }
  }

  void run() {
    app_loop();
    switch (BlynkState::get()) {
    case MODE_WAIT_CONFIG:       
    case MODE_CONFIGURING:       enterConfigMode();    break;
    case MODE_CONNECTING_NET:    enterConnectNet();    break;
    case MODE_CONNECTING_CLOUD:  enterConnectCloud();  break;
    case MODE_RUNNING:           runBlynkWithChecks(); break;
    case MODE_OTA_UPGRADE:       enterOTA();           break;
    case MODE_SWITCH_TO_STA:     enterSwitchToSTA();   break;
    case MODE_RESET_CONFIG:      enterResetConfig();   break;
    default:                     enterError();         break;
    }
  }

};

Edgent BlynkEdgent;
BlynkTimer timer3;

void app_loop() {
    timer3.run();
    manual_control();
    startScheduler();
   // ir_remote();
}

void manual_control()
{
  if (digitalRead(s1) == LOW && SwitchState_1 == LOW) 
  {
    //digitalWrite(r1, LOW);
    //digitalWrite(r2, LOW);
    Blynk.virtualWrite(VPIN_BUTTON_1, HIGH);
    toggleState_1 = HIGH;
    SwitchState_1 = HIGH;
    Serial.println("LIGHTS AUTOMATION ON");
  }
  
  if (digitalRead(s1) == HIGH && SwitchState_1 == HIGH) 
  {
    digitalWrite(r1, HIGH);
    digitalWrite(r2, HIGH);
    Blynk.virtualWrite(VPIN_BUTTON_1, LOW);
    toggleState_1 = LOW;
    SwitchState_1 = 0;
    Serial.println("LIGHTS AUTOMATION OFF");
  }
  
  if (digitalRead(s2) == LOW && SwitchState_2 == LOW) 
  {
    //digitalWrite(r3, LOW);
    Blynk.virtualWrite(VPIN_BUTTON_2, HIGH);
    toggleState_2 = HIGH;
    SwitchState_2 = HIGH;
    Serial.println("INLET ON");
  }
  
  if (digitalRead(s2) == HIGH && SwitchState_2 == HIGH) 
  {
    digitalWrite(r3, HIGH);
    Blynk.virtualWrite(VPIN_BUTTON_2, LOW);
    toggleState_2 = LOW;
    SwitchState_2 = LOW;
    Serial.println("INLET OFF");
  }
  
  if (digitalRead(s3) == LOW && SwitchState_3 == LOW) 
  {
    //digitalWrite(r4, LOW);
    Blynk.virtualWrite(VPIN_BUTTON_3, HIGH);
    toggleState_3 = HIGH;
    SwitchState_3 = HIGH;
    Serial.println("OUTLET ON");
  }
  
  if (digitalRead(s3) == HIGH && SwitchState_3 == HIGH) 
  {
    digitalWrite(r4, HIGH);
    Blynk.virtualWrite(VPIN_BUTTON_3, LOW);
    toggleState_3 = LOW;
    SwitchState_3 = LOW;
    Serial.println("OUTLET OFF");
  }
  
  if (digitalRead(s4) == LOW && SwitchState_4 == LOW) 
  {
    //digitalWrite(r5, LOW);
    Blynk.virtualWrite(VPIN_BUTTON_4, HIGH);
    toggleState_4 = HIGH;
    SwitchState_4 = HIGH;
    Serial.println("HUMIDIFIER ON");
  }
  
  if (digitalRead(s4) == HIGH && SwitchState_4 == HIGH) 
  {
    digitalWrite(r5, HIGH);
    Blynk.virtualWrite(VPIN_BUTTON_4, LOW);
    toggleState_4 = LOW;
    SwitchState_4 = LOW;
    Serial.println("HUMIDIFIER OFF");
  }
  
  /*if (digitalRead(s5) == LOW && SwitchState_5 == LOW) 
  {
    //digitalWrite(RelayPin5, LOW);
    Blynk.virtualWrite(VPIN_BUTTON_5, HIGH);
    toggleState_5 = HIGH;
    SwitchState_5 = HIGH;
    Serial.println("Switch-5 on");
  }
  
  if (digitalRead(s5) == HIGH && SwitchState_5 == HIGH) 
  {
   digitalWrite(RelayPin5, HIGH);
    Blynk.virtualWrite(VPIN_BUTTON_5, LOW);
    toggleState_5 = LOW;
    SwitchState_5 = LOW;
    Serial.println("Switch-5 off");
  }*/
  
  /*if (digitalRead(SwitchPin6) == LOW && SwitchState_6 == LOW) {
    digitalWrite(RelayPin6, LOW);
    Blynk.virtualWrite(VPIN_BUTTON_6, HIGH);
    toggleState_6 = HIGH;
    SwitchState_6 = HIGH;
    Serial.println("Switch-6 on");
  }
  if (digitalRead(SwitchPin6) == HIGH && SwitchState_6 == HIGH) {
    digitalWrite(RelayPin6, HIGH);
    Blynk.virtualWrite(VPIN_BUTTON_6, LOW);
    toggleState_6 = LOW;
    SwitchState_6 = LOW;
    Serial.println("Switch-6 off");
  }
  if (digitalRead(SwitchPin7) == LOW && SwitchState_7 == LOW) {
    digitalWrite(RelayPin7, LOW);
    Blynk.virtualWrite(VPIN_BUTTON_7, HIGH);
    toggleState_7 = HIGH;
    SwitchState_7 = HIGH;
    Serial.println("Switch-7 on");
  }
  if (digitalRead(SwitchPin7) == HIGH && SwitchState_7 == HIGH) {
    digitalWrite(RelayPin7, HIGH);
    Blynk.virtualWrite(VPIN_BUTTON_7, LOW);
    toggleState_7 = LOW;
    SwitchState_7 = LOW;
    Serial.println("Switch-7 off");
  }
  if (digitalRead(SwitchPin8) == LOW && SwitchState_8 == LOW) {
    digitalWrite(RelayPin8, LOW);
    Blynk.virtualWrite(VPIN_BUTTON_8, HIGH);
    toggleState_8 = HIGH;
    SwitchState_8 = HIGH;
    Serial.println("Switch-8 on");
  }
  if (digitalRead(SwitchPin8) == HIGH && SwitchState_8 == HIGH) {
    digitalWrite(RelayPin8, HIGH);
    Blynk.virtualWrite(VPIN_BUTTON_8, LOW);
    toggleState_8 = LOW;
    SwitchState_8 = LOW;
    Serial.println("Switch-8 off");
  }*/
}

void startScheduler(void)
{
  if(waitMin == currentMin)
  {
    waitMin = (currentMin + 1);
    if(waitMin > 59)
    {
      waitMin -=60;
    }

    // LIGHTS 1 :: 07:00 - 01:00
    if(Scheduler[0][0].Hour == currentHour)
    {
      if(Scheduler[0][0].Minute == currentMin)
      {
        r1Time = Scheduler[0][0].OnTime;
      }
    }

    // LIGHTS 2 :: 07:00 - 01:00
    if(Scheduler[1][0].Hour == currentHour)
    {
      if(Scheduler[1][0].Minute == currentMin)
      {
        r2Time = Scheduler[1][0].OnTime;
      }
    }

    // INLET :: 07:00 - 01:00
    if(Scheduler[2][0].Hour == currentHour)
    {
      if(Scheduler[2][0].Minute == currentMin)
      {
        r3Time = Scheduler[2][0].OnTime;
      }
    }
    // INLET :: 
    if(Scheduler[2][1].Hour == currentHour)
    {
      if(Scheduler[2][1].Minute == currentMin)
      {
        r3Time = Scheduler[2][1].OnTime;
      }
    }
    // INLET
    if(Scheduler[2][2].Hour == currentHour)
    {
      if(Scheduler[2][2].Minute == currentMin)
      {
        r3Time = Scheduler[2][2].OnTime;
      }
    }
    // INLET
    if(Scheduler[2][3].Hour == currentHour)
    {
      if(Scheduler[2][3].Minute == currentMin)
      {
        r3Time = Scheduler[2][3].OnTime;
      }
    }
    // INLET
    if(Scheduler[2][4].Hour == currentHour)
    {
      if(Scheduler[2][4].Minute == currentMin)
      {
        r3Time = Scheduler[2][4].OnTime;
      }
    }
    // INLET
    if(Scheduler[2][5].Hour == currentHour)
    {
      if(Scheduler[2][5].Minute == currentMin)
      {
        r3Time = Scheduler[2][5].OnTime;
      }
    }

    // INLET
    /*if(Scheduler[0][0].Month == currentMonth |  0xFF)
    {
      if(Scheduler[0][0].Day == currentDay | 0xFF)
      {
        if(Scheduler[0][0].Hour == currenHour)
        {
          if(Scheduler[0][0].Minute == currentMin)
          {
            r2Time = Scheduler[2][6].OnTime;
          }
        }
      }
    }*/ 

    // OUTLET
    if(Scheduler[3][0].Hour == currentHour)
    {
      if(Scheduler[3][0].Minute == currentMin)
      {
        r4Time = Scheduler[3][0].OnTime;
      }
    }
    // OUTLET
    if(Scheduler[3][1].Hour == currentHour)
    {
      if(Scheduler[3][1].Minute == currentMin)
      {
        r4Time = Scheduler[3][1].OnTime;
      }
    }
    // OUTLET
    if(Scheduler[3][2].Hour == currentHour)
    {
      if(Scheduler[3][2].Minute == currentMin)
      {
        r4Time = Scheduler[3][2].OnTime;
      }
    }
    // OUTLET
    if(Scheduler[3][3].Hour == currentHour)
    {
      if(Scheduler[3][3].Minute == currentMin)
      {
        r4Time = Scheduler[3][3].OnTime;
      }
    }
    // OUTLET
    if(Scheduler[3][4].Hour == currentHour)
    {
      if(Scheduler[3][4].Minute == currentMin)
      {
        r4Time = Scheduler[3][4].OnTime;
      }
    }
    // OUTLET
    if(Scheduler[3][5].Hour == currentHour)
    {
      if(Scheduler[3][5].Minute == currentMin)
      {
        r4Time = Scheduler[3][5].OnTime;
      }
    }
           
    // Relay Tasks
    relay1Task();
    relay2Task();
    relay3Task();
    relay4Task();
  }
}

/* RELAY TASKS */
 
void relay1Task(void) // LIGHTS 
{
  if ((r1Time) && (toggleState_1 == HIGH))
  {
    digitalWrite(r1, LOW); // Switch on Relay
    r1Time--;
  }
  else if ((r1Time == 0) | (toggleState_1 == LOW))
  {
    digitalWrite(r1, HIGH); // Switch off Relay
  }
}

void relay2Task(void) //LIGHTS
{
  if ((r2Time) && (toggleState_1 == HIGH))
  {
    digitalWrite(r2, LOW); // Switch on Relay
    r2Time--;
  }
  else if ((r2Time == 0) | (toggleState_1 == LOW))
  {
    digitalWrite(r2, HIGH); // Switch off Relay
  }
}

void relay3Task(void) //INLET
{
  if ((r3Time) && (toggleState_2 == HIGH))
  {
    digitalWrite(r3, LOW); // Switch on Relay
    r3Time--;
  }
  else if ((r3Time == 0) | (toggleState_2 == LOW))
  {
    digitalWrite(r3, HIGH); // Switch off Relay
  }
}

void relay4Task(void) //OUTLET
{
  if ((r4Time) && (toggleState_3 == HIGH))
  {
    digitalWrite(r4, LOW); // Switch on Relay
    r4Time--;
  }
  else if ((r4Time == 0) | (toggleState_3 == LOW))
  {
    digitalWrite(r4, HIGH); // Switch off Relay
  }
}


void controlHumidity(void)
{
  if((humidity <= 53) && (toggleState_4 == HIGH))
  {
    digitalWrite(r5, LOW);
  }

  if((humidity >= 56) | (toggleState_4 == LOW))
  {
    digitalWrite(r5, HIGH);
  }
}
/*void ir_remote()
{
  if (irrecv.decode(&results)) {
      switch(results.value){
          case 0x80BF49B6:  
            digitalWrite(RelayPin1, toggleState_1);
            toggleState_1 = !toggleState_1;
            Blynk.virtualWrite(VPIN_BUTTON_1, toggleState_1);
            delay(100);            
            break;
          case 0x80BFC936:  
            digitalWrite(RelayPin2, toggleState_2);
            toggleState_2 = !toggleState_2;
            Blynk.virtualWrite(VPIN_BUTTON_2, toggleState_2);
            delay(100);            
            break;
          case 0x80BF33CC:  
            digitalWrite(RelayPin3, toggleState_3);
            toggleState_3 = !toggleState_3;
            Blynk.virtualWrite(VPIN_BUTTON_3, toggleState_3);
            delay(100);            
            break;
          case 0x80BF718E:  
            digitalWrite(RelayPin4, toggleState_4);
            toggleState_4 = !toggleState_4;
            Blynk.virtualWrite(VPIN_BUTTON_4, toggleState_4);
            delay(100);            
            break;
          case 0x80BFF10E:  
            digitalWrite(RelayPin5, toggleState_5);
            toggleState_5 = !toggleState_5;
            Blynk.virtualWrite(VPIN_BUTTON_5, toggleState_5);
            delay(100);            
            break;
          case 0x80BF13EC:  
            digitalWrite(RelayPin6, toggleState_6);
            toggleState_6 = !toggleState_6;
            Blynk.virtualWrite(VPIN_BUTTON_6, toggleState_6);
            delay(100);            
            break;
          case 0x80BF51AE:  
            digitalWrite(RelayPin7, toggleState_7);
            toggleState_7 = !toggleState_7;
            Blynk.virtualWrite(VPIN_BUTTON_7, toggleState_7);
            delay(100);            
            break;
          case 0x80BFD12E:  
            digitalWrite(RelayPin8, toggleState_8);
            toggleState_8 = !toggleState_8;
            Blynk.virtualWrite(VPIN_BUTTON_8, toggleState_8);
            delay(100);            
            break;  
          default : break;         
        }   
        //Serial.println(results.value, HEX);    
        irrecv.resume();   
  } 
}*/