   void on()  { stateChange(true); } // fill time
   void off() { stateChange(false); }// drain time
   void step(monitor_t* now) {       // check conditions and adjust state
-    /* TODO
     if(! running) {
-      if(startTime >= millis()) {
+      if(startTime >= millis())
         running = true;
-        ...
-      }
-    }
-    */
+      else
+        return;
+    }
   }
 };
 int Valve::counter = 1;             // definition (the above only declares)

void loop() {
  dnsServer.processNextRequest();
  webServer.handleClient();

  // valve demo mode TODO remove?
  if (GOT_TEMP_SENSOR==FALSE) {
    flowController.valves[0].on();
    delay(15000);
    flowController.valves[0].off();
    delay(5000);
  }

  if(loopCounter == TICK_MONITOR) { // monitor levels, step valves, push data
    monitor_t* now = &monitorData[monitorCursor];


/////////////////////////////////////////////////////////////////////////////
// valves and flow control //////////////////////////////////////////////////
/*
user settable parameters:
- per elf:
