 
 void sendSelfTestResponse()
 {
-   sprintf(buf, ("timeSince=%lu&"), (now() - selftest.lastTestTime));
+   sprintf(buf, ((char*)pgm_read_word(&(str_timeSince_lu))), (now() - selftest.lastTestTime));
    net.responseSendPart(buf);
-   sprintf(buf, ("cyclesSince=%d&"), acpump.onCycles-selftest.acCycles);
+   sprintf(buf, ((char*)pgm_read_word(&(str_cyclesSince_d))), acpump.onCycles-selftest.acCycles);
    net.responseSendPart(buf);
-   sprintf(buf, ("voltage=%d&"), selftest.batteryVoltageMv);
+   sprintf(buf, ((char*)pgm_read_word(&(str_voltage_d))), selftest.batteryVoltageMv);
    net.responseSendPart(buf);
-   sprintf(buf, ("length=%d&"), (int)selftest.testLength);
+   sprintf(buf, ((char*)pgm_read_word(&(str_length_d))), (int)selftest.testLength);
    net.responseSendPart(buf);
-   sprintf(buf, ("pumpedHeight=%d&"), selftest.startingHeight - selftest.endingHeight);
+   sprintf(buf, ((char*)pgm_read_word(&(str_pumpedHeight_d))), selftest.startingHeight - selftest.endingHeight);
    net.responseSendPart(buf);
-   sprintf(buf, ("result=%d"), selftest.passed);
+   sprintf(buf, ((char*)pgm_read_word(&(str_result_d))), selftest.passed);
    net.responseSendPart(buf);
    net.responseEnd();
 }

// Buffer for char conversions
char buf [100];

void setup()
{
  readConfig();

    // Battery voltage should not drop too much
    if (selftest.batteryVoltageMv < conf.alertBatteryVoltage) {
      selftest.passed = false;
      sprintf(buf, ((char*)pgm_read_word(&(str_Weak_battery_dmV))), selftest.batteryVoltageMv);
      raiseAlert(DcPumpMalfunction, buf);
      return;
    }
    // Determine if water level was reduced enough
    if (selftest.startingHeight - selftest.endingHeight < 5) {
      selftest.passed = false;
      sprintf(buf, ((char*)pgm_read_word(&(str_DC_Pump_failure_dCM_pumped_in_d_sec))), (selftest.startingHeight - selftest.endingHeight), (int)selftest.testLength);
      raiseAlert(DcPumpMalfunction, buf);
      return;
    }
