       startEspOTA(strPayload);
     }
   }
-  else if (strTopic == (mqttCommandTopic + "/reboot"))
+  else if (strTopic == (mqttCommandTopic + "/reboot")
+        || strTopic == (mqttGroupCommandTopic + "/reboot"))
   { // '[...]/device/command/reboot' == reboot microcontroller)
+    // '[...]/group/command/reboot' == reboot microcontroller)
     debugPrintln(F("MQTT: Rebooting device"));
     espReset();
   }
-  else if (strTopic == (mqttCommandTopic + "/factoryreset"))
+  else if (strTopic == (mqttCommandTopic + "/factoryreset")
+        || strTopic == (mqttGroupCommandTopic + "/factoryreset"))
   { // '[...]/device/command/factoryreset' == clear all saved settings)
+    // '[...]/group/command/factoryreset' == clear all saved settings)
     clearSavedConfig();
   }
   else if (strTopic.startsWith(mqttCommandTopic) && (strPayload == ""))


  // Incoming Namespace:
  // '[...]/device/command' -m '' = undefined
  // '[...]/device/command' -m 'dim 50' = sendNextionCmd("dim 50")
  // '[...]/device/command/page' -m '1' = sendNextionCmd("page 1")
  // '[...]/device/command/lcdupdate' -m 'http://192.168.0.10/local/HASwitchPlate.tft' = startNextionOtaDownload("http://192.168.0.10/local/HASwitchPlate.tft")
  // '[...]/device/command/lcdupdate' -m '' = startNextionOtaDownload("lcdFirmwareUrl")
  // '[...]/device/command/espupdate' -m 'http://192.168.0.10/local/HASwitchPlate.ino.d1_mini.bin' = startEspOTA("http://192.168.0.10/local/HASwitchPlate.ino.d1_mini.bin")
  // '[...]/device/command/espupdate' -m '' = startEspOTA("espFirmwareUrl")
  // '[...]/device/command/p[1].b[4].txt' -m '' = getNextionAttr("p[1].b[4].txt")
  // '[...]/device/command/p[1].b[4].txt' -m '"Lights On"' = setNextionAttr("p[1].b[4].txt", "\"Lights On\"")

  debugPrintln(String(F("MQTT IN:  '")) + strTopic + "' : '" + strPayload + "'");

  if ((strTopic == mqttCommandTopic) && (strPayload == ""))
  { // '[...]/device/command' -m '' = undefined
    // currently undefined
  }
  else if (strTopic == mqttCommandTopic)
  { // '[...]/device/command' -m 'dim 50' == sendNextionCmd("dim 50")
    sendNextionCmd(strPayload);
  }
  else if (strTopic == (mqttCommandTopic + "/page"))
  { // '[...]/device/command/page' -m '1' == sendNextionCmd("page 1")
    if (nextionActivePage != strPayload.toInt())
    { // Hass likes to send duplicate responses to things like page requests and there are no plans to fix that behavior, so try and track it locally
      nextionActivePage = strPayload.toInt();
      sendNextionCmd("page " + strPayload);
    }
  }
  else if (strTopic == (mqttCommandTopic + "/statusupdate"))
  {                     // '[...]/device/command/statusupdate' == mqttStatusUpdate()
    mqttStatusUpdate(); // return status JSON via MQTT;
  }
  else if (strTopic == (mqttCommandTopic + "/lcdupdate"))
  { // '[...]/device/command/lcdupdate' -m 'http://192.168.0.10/local/HASwitchPlate.tft' == startNextionOtaDownload("http://192.168.0.10/local/HASwitchPlate.tft")
    if (strPayload == "")
    {
      startNextionOtaDownload(lcdFirmwareUrl);

    mqttGetSubtopic = "/" + subTopic;
    getNextionAttr(subTopic);
  }
  else if (strTopic.startsWith(mqttGroupCommandTopic) && (strPayload == ""))
  { // '[...]/group/command/p[1].b[4].txt' -m '' == getNextionAttr("p[1].b[4].txt")
    String subTopic = strTopic.substring(mqttGroupCommandTopic.length() + 1);
    mqttGetSubtopic = "/" + subTopic;
    getNextionAttr(subTopic);
  }
  else if (strTopic.startsWith(mqttCommandTopic))
  { // '[...]/device/command/p[1].b[4].txt' -m '"Lights On"' == setNextionAttr("p[1].b[4].txt", "\"Lights On\"")
    String subTopic = strTopic.substring(mqttCommandTopic.length() + 1);
    setNextionAttr(subTopic, strPayload);
  }
  else if (strTopic.startsWith(mqttGroupCommandTopic))
  { // '[...]/group/command/p[1].b[4].txt' -m '"Lights On"' == setNextionAttr("p[1].b[4].txt", "\"Lights On\"")
    String subTopic = strTopic.substring(mqttGroupCommandTopic.length() + 1);
    setNextionAttr(subTopic, strPayload);
  }
  else if (strTopic == mqttLightBrightCommandTopic)
