Code seems to get 'stuck' and causes watchdog reboot (Mega + Esp on local)

I’m using a Mega + Esp12 (Beta 3.3) + 12.6 localServer for a climate monitoring system and controlling several relays. For some reason, my code seems to be occasionally getting stuck- I’m not sure if I’m sending too much information to my local server, or if my poorly written code is just terrible, but I’m getting a hiccup where I’m getting something that hangs for more than 8 seconds causing my watchdog timer to go off/causing a reboot.

Can anyone just take a quick glance down my code and tell me if you see any glaring errors- especially with the Blynk / Simpletimer stuff?

#include <ESP8266_HardSer.h>
#include <BlynkSimpleShieldEsp8266_HardSer.h>
#include <Arduino.h>
#include <Wire.h>
#include <SparkFunHTU21D.h>
#include <SimpleTimer.h>
#include "kSeries.h"
#include <avr/wdt.h>  // required for watchdog timer


// Set ESP8266 Serial object
#define EspSerial Serial2


ESP8266 wifi(EspSerial);
SimpleTimer timer;

HTU21D myClimate;    //Instance of HTU sensor
kSeries K_30(12, 13); //Start up CO2 Sensor on pins 12+13

WidgetBridge bridge1(V20);    //HRV Bridge
WidgetBridge bridge2(V21);    //Heat Pump Bridge


WidgetLED highBlowLED(V10);
//WidgetLED heatLED(V11);
WidgetLED humdLED(V12);
WidgetLED damperLED(V16);
WidgetLED hrvLED(V17);

int chamberNumber = 1;

int t;
int h;
double co2;

bool hrvBlowerInUse = false;

bool manualLightSwitch = 0;
bool timerLightSwitch = 0;

int tempSlider;
int humdSlider;
int co2Slider;


int lowSpeedBlowerRelay = 4;
int highSpeedBlowerRelay = 5;
int lightRelay = 6;
int humdRelay = 7;
int damperRelay = 8;
int heatValveOnRelay = 10;
int heatValveOffRelay = 11;

//Relay Control Requests

bool blowerTemp;
bool blowerHumd;
bool blowerCo2;
bool heatValveTemp;
bool hrvValveTemp;    // Photon
bool hrvValveCo2;




//Switch Statement Summations... These sum all requests from climate control functions and are sent to relay switch
//control functions to prevent multiple things being turned on/off at once.
bool highSpeedBlowerSum;
bool lowSpeedBlowerSum;                //This must be set by Blynk Button Switch
bool heatValveSum;
bool hrvSum;
bool heatPumpSum;

bool isFirstConnect = true;


//Localhost Blynk Auth Chamber 1
char auth[] = "blah";


void reconnectBlynk() {
  if (Blynk.connect() == false) {
    Blynk.connect();
  }
}

// This function will run every time Blynk connection is established
BLYNK_CONNECTED() {
    Blynk.syncAll();
     bridge1.setAuthToken("2c00df3d2e2a4e50ad99f6321f3754f9");  //HRV Controller
}


//Warnings... Sends Push notifications + emails if climate is messed up

void warningSystem() {
  if ((t < tempSlider - 5) || (t > (tempSlider + 5))) {
    Blynk.notify(String("Your chamber ") + chamberNumber + " temperature is currently: " + t + " but should be: " + tempSlider);
    String mailMessage = "";
    mailMessage = "Your Chamber 1 Temperature is currently: ";
    mailMessage += t;
    mailMessage += " degrees fahrenheit, but SHOULD be ";
    mailMessage += tempSlider;

    Blynk.email("snarfsnarf@gmail.com", "Chamber 1 Temperature Warning", mailMessage);
  }
  if ((h < humdSlider - 5) || (h > (humdSlider + 5))) {
    Blynk.notify(String("Your chamber ") + chamberNumber + " humidity is currently: " + h + " but should be: " + humdSlider);
    String mailMessage = "";
    mailMessage = "Your Chamber 1 Humidity is currently: ";
    mailMessage += h;
    mailMessage += " percent humidity, but SHOULD be ";
    mailMessage += humdSlider;

    Blynk.email("snarfsnarf@gmail.com", "Chamber 1 Humidity Warning", mailMessage);
  }
  if (co2 > (co2Slider + 1000)) {
    Blynk.notify(String("Your chamber ") + chamberNumber + " CO2 is currently: " + co2 + " but should be: " + co2Slider);
    String mailMessage = "";
    mailMessage = "Your Chamber 1 CO2 is currently: ";
    mailMessage += co2;
    mailMessage += " ppm, but SHOULD be ";
    mailMessage += co2Slider;

    Blynk.email("snarfsnarfs@gmail.com", "Chamber 1 CO2 Warning", mailMessage);
  }
}


BLYNK_WRITE(6)  // Manual override for Timed Light Switch
{
  manualLightSwitch = param.asInt();
}

//Timed Switch
BLYNK_WRITE(8) {
  timerLightSwitch = param.asInt();
}


//..........................................................................................................
//Climate Control Functions.................................................................................
//..........................................................................................................


void temperatureControl()
{

  //Room Stable Condition

  if (t == tempSlider) {
    //Notes:  Need to change to if >= then temp shit shuts off or if <= Hrv shit shuts off... might be better than relying on ==
    //Start Timer

    //Turn off heat valve, turn on OFF heat valve, turn off high speed blower,
    //Closes damper
    hrvValveTemp = 0;   //Tells ESP cooling is not needed
    heatValveTemp = 0;   //Closes heat Valve
    blowerTemp = 0;
    if (hrvBlowerInUse) {
      hrvBlowerInUse = false;  //Flips HRV in-use switch back to off
    }
  }

  //Cooling Condition

  else if (t >= (tempSlider + 3)) {
    blowerTemp = 1;      //Turns on high speed blower
    heatValveTemp = 0;   //Makes sure heat is off
    hrvValveTemp = 1;   //This sends signal to ESP to request cooling
    hrvBlowerInUse = true;
  }


  //Heating Condition

  else if (t <= (tempSlider - 3)) {
    blowerTemp = 1;      //Requests high speed blower to be turned on
    hrvValveTemp = 0;   //Sends signal to ESP to stop cooling
    heatValveTemp = 1;   //Turns opens heat valve
  }

  //Humidity Control

  if (h >= humdSlider) {
    blowerHumd = 0;
    digitalWrite(humdRelay, LOW);
   //  humdLED.off();
  }
  //Low Humidity Condition
  else if (h < humdSlider - 2) {
    blowerHumd = 1;
    digitalWrite(humdRelay, HIGH);
   //   humdLED.on();
  }

  //Co2 Control

  //Stable CO2 condition
  if (co2 <= co2Slider) {
    blowerCo2 = 0;
    hrvValveCo2 = 0;
  }
  //Co2 is too high condition
  else if (co2 >= (co2Slider + 150)) {
    blowerCo2 = 1;
    hrvValveCo2 = 1;
  }
}


//RELAY CONTROL SWITCHES

//Low Speed Blower Switch
BLYNK_WRITE(9)  //Turns on Low speed Blower (Does not work if high speed blower is running)
{
  lowSpeedBlowerSum = param.asInt();
}


void blowerSwitch() {                        //Turns on/off high/low blower relays and damper

  if ((timerLightSwitch) || (manualLightSwitch))
  {
    digitalWrite(lightRelay, HIGH);
  }
  else
  {
    digitalWrite(lightRelay, LOW);
  }

  //Low speed blower is turned on and high speed blower motor is not needed
  if ((highSpeedBlowerSum == 0) && (lowSpeedBlowerSum == 1))
  {
    digitalWrite(highSpeedBlowerRelay, LOW);
    digitalWrite(lowSpeedBlowerRelay, HIGH);
   //  highBlowLED.off();
  }
  //Blower motor is turned on
  else if (highSpeedBlowerSum > 0) {
    digitalWrite(lowSpeedBlowerRelay, LOW);
    digitalWrite(highSpeedBlowerRelay, HIGH);
   // highBlowLED.on();
  }

  //high and low speed blowers are not needed and are then turned off
  else {
    digitalWrite(lowSpeedBlowerRelay, LOW);
    digitalWrite(highSpeedBlowerRelay, LOW);
   // highBlowLED.off();
  }
}

void heatValveSwitch() {                     //Turns on/off heat valve relays
  //heating is needed
  if (heatValveSum > 0) {
    digitalWrite(heatValveOffRelay, LOW);
    digitalWrite(heatValveOnRelay, HIGH);
   // bridge2.virtualWrite(V1, 1);    ///Sends Signal to Boiler
   //heatLED.on();
  }
  //heating is not needed and valve is turned off
  else {
    digitalWrite(heatValveOnRelay, LOW);
    digitalWrite(heatValveOffRelay, HIGH);
   // bridge2.virtualWrite(V1, 0);
  //  heatLED.off();
  }
}


void switchSummation() {

  if (hrvValveTemp || hrvValveCo2) {
    hrvSum = true;
  } else {
    hrvSum = false;
  }

  if (blowerTemp || blowerHumd || blowerCo2) {
    highSpeedBlowerSum = true;
  } else {
    highSpeedBlowerSum = false;
  }

  lowSpeedBlowerSum;

  if (heatValveTemp) {
    heatValveSum = true;
  } else {
    heatValveSum = false;
  }

  if (hrvSum > 0) {
    digitalWrite(damperRelay, HIGH);
    //damperLED.on();
    //hrvLED.on();
    bridge1.virtualWrite(V1, 1);  // Sends request for HRV
  }
  else {
    digitalWrite(damperRelay, LOW);
    //damperLED.off();
    bridge1.virtualWrite(V1, 0);   //Sends request for no HRV
    //hrvLED.off();
  }
}


//..........................................................................................................
//Blynk Climate Settings (Slider Widgets)...........................................................................
//..........................................................................................................

//Incoming slider Temp on VPin 2 with Debug on Pin 13
BLYNK_WRITE(2) {
  int tempSetting = param.asInt();
  if (tempSetting != tempSlider) {
    Blynk.virtualWrite(13, tempSetting);
    tempSlider = tempSetting;
  }
}


//Slider Humdity with Debug on Pin 14
BLYNK_WRITE(3) {
  int humdSetting = param.asInt();
  if (humdSetting != humdSlider) {
    humdSlider = humdSetting;
    Blynk.virtualWrite(14, humdSlider);
  }
}

//Slider CO2 with Debug on Pin 15

BLYNK_WRITE(4) {
  int co2Setting = param.asInt() + 0;
  if (co2Setting != 0 && co2Setting != co2Slider) {

    co2Slider = co2Setting;
    Blynk.virtualWrite(15, co2Slider);

  }
}

//..........................................................................................................
//Display Climate Values via Blynk Display (set to PUSH)
//..........................................................................................................

void currentConditions() {

  wdt_reset();    //Reset Watchdog Timer

  //Get current temperature (f) and humidity (%) and CO2 (ppm)

  float celsiusTemp = myClimate.readTemperature();
  celsiusTemp = (celsiusTemp * 9.0) / 5.0 + 32.0; //convert to fahrenheit
  if (t != celsiusTemp) {
    t = celsiusTemp;
    Blynk.virtualWrite(0, t);

  }

  int incomingH = myClimate.readHumidity();
  if (incomingH != h) {
    h = incomingH;
    Blynk.virtualWrite(1, h);
  }

  double initialCo2 = K_30.getCO2('p');
  if (initialCo2 > 0 && (initialCo2 != co2)) {
    co2 = initialCo2;
    Blynk.virtualWrite(5, co2);
  }
}


void setup()
{
 // Set ESP8266 baud rate with AT+UART_DEF=9600,8,1,0,0
  EspSerial.begin(115200);
  delay(10);

  //Blynk.begin(auth, wifi, "NETGEAR21", "luckylotus914");   //Global
  Blynk.begin(auth, wifi, "derp", "alerp", "192.168.1.50");   //WAREHOUSE
  while (Blynk.connect() == false) {
    //wait until connected

  }
  Blynk.notify("Test");
  wdt_enable(WDTO_8S);

  myClimate.begin();

  pinMode(lowSpeedBlowerRelay, OUTPUT);
  pinMode(highSpeedBlowerRelay, OUTPUT);
  pinMode(lightRelay, OUTPUT);
  pinMode(humdRelay, OUTPUT);
  pinMode(heatValveOnRelay, OUTPUT);
  pinMode(heatValveOffRelay, OUTPUT);
  pinMode(damperRelay, OUTPUT);


  //NOTE.  There is a 10-event LIMIT to SIMPLETIMER
  //timer.setInterval(30000L, reconnectBlynk);

  //timer.setInterval(3200L, heatValveSwitch);
  timer.setInterval(3000L, blowerSwitch);
  timer.setInterval(20 * 60000L, warningSystem);
  timer.setInterval(10000L, currentConditions);
  timer.setInterval(3200L, switchSummation);
  timer.setInterval(3000L, temperatureControl);
}

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

You could put in some Serial.print lines to see where it hangs?