 static unsigned int const POWERSAVE_IN_MS       = 20 * 1000;   // 20 secs
 #else
 static unsigned int const PAUSE_POWERSAVE_IN_MS = 1000 * 360; // 10 minutes
-static unsigned int const PAUSE_ACTIVE_IN_MS    = 500;        // half a sec
+static unsigned int const PAUSE_ACTIVE_IN_MS    = 2500;       // half a sec
 static unsigned int const POWERSAVE_IN_MS       = 120 * 1000; // 2 minutes
 #endif
-static unsigned int pauseInMs = PAUSE_ACTIVE_IN_MS;
+static unsigned int const UPLOAD_TIME_IN_MS  = 1000 * 3600 * 4; // 4 hours must be less than 50 days
+static unsigned int       pauseInMs          = PAUSE_ACTIVE_IN_MS;
+static unsigned int       lastUploadTimeInMs = 0;
+static unsigned int       lastMillis         = 0;
 
 static unsigned int const CURRENT_TIME_ZONE_IN_S = 3600; // UTC+1
 
 static unsigned int const SCREEN_WIDTH  = 128;
 static unsigned int const SCREEN_HEIGHT = 32;
+
+static unsigned int const NUM_LAST_SAMPLES = 5;
 
 extern const unsigned char LECertRoot[] PROGMEM;
 extern const unsigned int  LECertRootSize;


	u8g2.clearBuffer();
	u8g2.setFont(u8g2_font_5x7_tf);
	unsigned int size = u8g2.getStrWidth(wifiConnection.getPublicIP().c_str());
	u8g2.drawStr(0, SCREEN_HEIGHT, wifiConnection.getPublicIP().c_str());
	u8g2.setFont(u8g2_font_9x15B_tf);
	u8g2.drawUTF8(0, SCREEN_HEIGHT / 2, displayData.c_str());

	{
		drawScreen();
	}
	postData();

	lastButtonPressed += pauseInMs; // a little false since we are doing other, stuff, but, meh
	if (lastButtonPressed >= POWERSAVE_IN_MS)
	{
