 const int filterChangeHours = 300L;   // Duration in hours between filter changes. Up for debate and experimentation!
 bool changeFilterAlarm = FALSE;       // TRUE if filter needs to be changed, until reset.
 
+long todaysAccumRuntimeSecCooling;    // Seconds that system has been cooling.
+long todaysAccumRuntimeSecHeating;    // Seconds that system has been heating.
+bool dominantMode;                    // FALSE = Cooling. TRUE = Heating.
+bool hvacMode;                        // FALSE = Cooling. TRUE = Heating.
+
 double tempRA, tempSA;                // Return and supply air temperatures
 
 void setup()

String currentTimeDate;               // Time formatted as "0:00AM on 0/0"
String startTimeDate, stopTimeDate, resetTimeDate;
int runStatus;                        // Used for graphing. 40 == running. NULL == off.

long currentFilterSec;                // Filter age based on unit runtime in seconds (stored in vPin). Seconds used for finer resolution.
long currentFilterHours;              // Filter age based on unit runtime in hours.

  if (digitalRead(blowerPin) == HIGH && startFlag == TRUE) {          // OFF, but was running
    stopTimeDate = currentTimeDate;                                   // Set off time.
    Blynk.virtualWrite(16, String("HVAC OFF since ") + stopTimeDate); // Write to app.
    currentStatus = String("HVAC OFF since ") + stopTimeDate;
    Blynk.setProperty(V0, "color", "#808080");
    Blynk.setProperty(V1, "color", "#808080");
    Blynk.setProperty(V16, "color", "#808080");
