   "\n<p><a href='/'>WaterElf</a>&nbsp;&nbsp;&nbsp;"
   "<a href='https://www.fish4tea.net/'>Fish4Tea</a></p></body></html>";
 
+/////////////////////////////////////////////////////////////////////////////
+// data monitoring stuff
+const int MONITOR_POINTS = 1024;
+struct monitor_t {
+  unsigned long timestamp;
+  float celsius;
+  float fahrenheit;
+};
+monitor_t monitorData[MONITOR_POINTS];
+int monitorCursor = 0;
+void updateSensorData(monitor_t *monitorData);
+void getTemperature(float* celsius, float* fahrenheit);
+
+/////////////////////////////////////////////////////////////////////////////
+// temperature sensor stuff
+OneWire ds(2); // on pin 2 (a 4.7K resistor is necessary)
+
+/////////////////////////////////////////////////////////////////////////////
+// init and main loop ///////////////////////////////////////////////////////
 void setup() {
   Serial.begin(115200);
   // Serial.setDebugOutput(true);

  server.send(200, "text/html", toSend);
  delay(100);
}

/////////////////////////////////////////////////////////////////////////////
// waterelf.ino
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <DNSServer.h>
#include <OneWire.h>

/////////////////////////////////////////////////////////////////////////////
// wifi management stuff
const byte DNS_PORT = 53;
IPAddress apIP(192, 168, 1, 1);
IPAddress netMsk(255, 255, 255, 0);
DNSServer dnsServer;
ESP8266WebServer server(80);
const char* ssid = "WaterElf";

/////////////////////////////////////////////////////////////////////////////
// page generation stuff
const char* pageTop =
  "<html><head><title>WaterElf Aquaponics Helper";
const char* pageTop2 = "</title>\n"
