     String(address[0]) + "." + String(address[1]) + "." + 
     String(address[2]) + "." + String(address[3]);
 }
+void getMAC(char *buf) { // the MAC is 6 bytes, so needs careful conversion...
+  uint64_t mac = ESP.getEfuseMac(); // ...to string (high 2, low 4):
+  sprintf(buf, "%04X%08X", (uint16_t) (mac >> 32), (uint32_t) mac);
+}

      dbg(netDBG, " (");
      dbg(netDBG, WiFi.RSSI(i));
      dbg(netDBG, ")");
      dln(netDBG, (WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*");

      f.concat("<input type='radio' name='ssid' value='");
      f.concat(WiFi.SSID(i));

/////////////////////////////////////////////////////////////////////////////
// config utils /////////////////////////////////////////////////////////////
boolean getCloudShare() {
  preferences.begin("cloudshare", true);
  boolean b = preferences.getBool("enabled", false);
  preferences.end();
  return b;
}
void setCloudShare(boolean b) {
  preferences.begin("cloudshare", false);
  if(b) {
    preferences.putBool("enabled", b);
  } else {
    preferences.clear();
  }
  preferences.end();
}
String getSvrAddrP() {
  preferences.begin("serveradd", false);
  String s = preferences.getString("ipadd", "");
  s.trim();
  preferences.end();
  return s;
}
void setSvrAddrP(String s) {
  preferences.begin("serveradd", false);
  preferences.putString("ipadd", s);
  preferences.end();
}
String getAnalogSensorP() {
  analogSensor = ANALOG_SENSOR_NONE; // the default is...
  GOT_ANALOG_SENSOR = false;         // ...no sensor
  preferences.begin("analog", false);
  String s = preferences.getString("details", "");
  if(s) {
    GOT_ANALOG_SENSOR = true;
    s.trim();
    preferences.end();
  }
  return s;
}
void setAnalogSensorP(String s) {
  preferences.begin("analog", true);
  preferences.putString("details", s);
  preferences.end();
}

/////////////////////////////////////////////////////////////////////////////
