   Serial.println("");
   Serial.println("WiFi connected");
 
-  //Start OTA
-  ArduinoOTA.setHostname(DEVICE_NAME);
-  ArduinoOTA.setPassword(OTA_PASS);
-
   // Start the server
   server.begin();
   Serial.println("Server started");
 
   // Print the IP address
   Serial.println(WiFi.localIP());
+}
+
+//Start OTA
+void initOTA() {
+  ArduinoOTA.setHostname(DEVICE_NAME);
+  ArduinoOTA.setPassword(OTA_PASS);
+
+  ArduinoOTA.onStart([]() {
+    String type;
+    if (ArduinoOTA.getCommand() == U_FLASH) {
+      type = "sketch";
+    } else { // U_FS
+      type = "filesystem";
+    }
+
+    // NOTE: if updating FS this would be the place to unmount FS using FS.end()
+    Serial.println("Start updating " + type);
+  });
+  ArduinoOTA.onEnd([]() {
+    Serial.println("\nEnd");
+  });
+  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
+    Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
+  });
+  ArduinoOTA.onError([](ota_error_t error) {
+    Serial.printf("Error[%u]: ", error);
+    if (error == OTA_AUTH_ERROR) {
+      Serial.println("Auth Failed");
+    } else if (error == OTA_BEGIN_ERROR) {
+      Serial.println("Begin Failed");
+    } else if (error == OTA_CONNECT_ERROR) {
+      Serial.println("Connect Failed");
+    } else if (error == OTA_RECEIVE_ERROR) {
+      Serial.println("Receive Failed");
+    } else if (error == OTA_END_ERROR) {
+      Serial.println("End Failed");
+    }
+  });
+  ArduinoOTA.begin();
 }
 
 void SendGratuitousARP() {

//Setup DHT
DHT dht(DHT_PIN, DHTTYPE);

// The port to listen for incoming TCP connections
ESP8266WebServer server(80);

//Init Starting Times

}

void loop() {
  //Handle any incoming requests
  server.handleClient();
  ArduinoOTA.handle();

  // Check for system power off state
  if (millis() > lastPowerCheck + POWER_CHECK_FREQUENCY) {
