   sensors.setResolution(ds18b20RA, 10);
   sensors.setResolution(ds18b20SA, 10);
 
+  while (Blynk.connect() == false) {
+    // Wait until connected
+  }
+  rtc.begin();
+
   timer.setInterval(2500L, sendTemps); // Temperature sensor polling interval
   timer.setInterval(2500L, sendLCDstatus); // Blower fan status polling interval
   timer.setInterval(5000L, sendHeartbeat); // Blinks Blynk LED to reflect online status
-
-  while (Blynk.connect() == false) {
-    // Wait until connected
-  }
-  rtc.begin();
+  timer.setInterval(300000L, sendWU); // 5 minutes between Wunderground API calls.
+  timer.setInterval(90000L, sendWUtoBlynk); // 1.5 minutes between API data updates to Blynk.
+
+   static char respBuf[4096];
+}
+
+static char respBuf[4096];
+
+bool showWeather(char *json);
+
+void sendWUtoBlynk()
+{
+    Blynk.virtualWrite(12, temp_f);
+}
+
+void sendWU()
+{
+  // Open socket to WU server port 80
+  Serial.print(F("Connecting to "));
+  Serial.println(WUNDERGROUND);
+
+  // Use WiFiClient class to create TCP connections (A LITTLE WORRIED HOW THIS WILL WORK WITH BLYNK)
+  WiFiClient httpclient;
+  const int httpPort = 80;
+  if (!httpclient.connect(WUNDERGROUND, httpPort)) {
+    Serial.println(F("connection failed"));
+    delay(DELAY_ERROR);
+    return;
+  }
+
+  // This will send the http request to the server
+  Serial.print(WUNDERGROUND_REQ);
+  httpclient.print(WUNDERGROUND_REQ);
+  httpclient.flush();
+
+  // Collect http response headers and content from Weather Underground
+  // HTTP headers are discarded.
+  // The content is formatted in JSON and is left in respBuf.
+  int respLen = 0;
+  bool skip_headers = true;
+  while (httpclient.connected() || httpclient.available()) {
+    if (skip_headers) {
+      String aLine = httpclient.readStringUntil('\n');
+      //Serial.println(aLine);
+      // Blank line denotes end of headers
+      if (aLine.length() <= 1) {
+        skip_headers = false;
+      }
+    }
+    else {
+      int bytesIn;
+      bytesIn = httpclient.read((uint8_t *)&respBuf[respLen], sizeof(respBuf) - respLen);
+      Serial.print(F("bytesIn ")); Serial.println(bytesIn);
+      if (bytesIn > 0) {
+        respLen += bytesIn;
+        if (respLen > sizeof(respBuf)) respLen = sizeof(respBuf);
+      }
+      else if (bytesIn < 0) {
+        Serial.print(F("read error "));
+        Serial.println(bytesIn);
+      }
+    }
+    delay(1);
+  }
+  httpclient.stop();
+
+  if (respLen >= sizeof(respBuf)) {
+    Serial.print(F("respBuf overflow "));
+    Serial.println(respLen);
+    delay(DELAY_ERROR);
+    return;
+  }
+  // Terminate the C string
+  respBuf[respLen++] = '\0';
+  Serial.print(F("respLen "));
+  Serial.println(respLen);
+  //Serial.println(respBuf);
+
+
+// This part will be removed in favor of the timer feature. Probably remove delay_error and just report ERR.
+  if (showWeather(respBuf)) {
+    delay(DELAY_NORMAL);
+  }
+  else {
+    delay(DELAY_ERROR);
+  }
+
+}
+
+bool showWeather(char *json)
+{
+  StaticJsonBuffer<3*1024> jsonBuffer;
+
+  // Skip characters until first '{' found
+  // Ignore chunked length, if present
+  char *jsonstart = strchr(json, '{');
+  //Serial.print(F("jsonstart ")); Serial.println(jsonstart);
+  if (jsonstart == NULL) {
+    Serial.println(F("JSON data missing"));
+    return false;
+  }
+  json = jsonstart;
+
+  // Parse JSON
+  JsonObject& root = jsonBuffer.parseObject(json);
+  if (!root.success()) {
+    Serial.println(F("jsonBuffer.parseObject() failed"));
+    return false;
+  }
+
+  // Extract weather info from parsed JSON
+  JsonObject& current = root["current_observation"];
+  temp_f = current["temp_f"];  // Was `const float temp_f = current["temp_f"];`
+  Serial.print(temp_f, 1); Serial.print(F(" F "));
+
+  return true;
 }
 
 void sendTemps()

unsigned long onNow = now();
unsigned long offNow = now(); // To prevent error on first Tweet after blower starts - NOT WORKING YET

int offHour, offHour24, onHour, onHour24, offMinute, onMinute, offSecond, onSecond, offMonth, onMonth, 
offDay, onDay,runTime, tempSplit, secondsCount, alarmTime;

void setup()
{

#include <BlynkSimpleEsp8266.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <TimeLib.h> //Can this go away?
#include <WidgetRTC.h>
#define ONE_WIRE_BUS 2
#include <ArduinoJson.h>


OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
