#include #include #include #include #include #include "mqtt.h" #include "wifi.h" char consoleBuffer[64] = ""; char *consoleBufferW = consoleBuffer; void consoleLoop() { uint8_t i = 0; while (Serial.available() > 0 && i++ < 100) { const char symbol = static_cast(Serial.read()); if (symbol == '\n' || symbol == '\r') { if (*consoleBuffer != 0) { Serial.print('\n'); info("CONSOLE > %s", consoleBuffer); consoleHandle(consoleBuffer); consoleBufferW = consoleBuffer; *consoleBufferW = 0; } } else if (symbol == '\b') { if (consoleBufferW > consoleBuffer) { consoleBufferW--; *consoleBufferW = 0; Serial.print("\b \b"); } } else { if (consoleBufferW < consoleBuffer + sizeof consoleBuffer - 1) { *consoleBufferW = symbol; consoleBufferW++; *consoleBufferW = 0; Serial.print("\r"); Serial.print(consoleBuffer); } else { Serial.print("\nCONSOLE BUFFER OVERFLOW\n"); Serial.print(consoleBuffer); } } } } void consoleHandle(const char *cmd) { if (strcmp(cmd, "help") == 0) { info("help : print this help"); info("info : print system info"); info("reboot : reboot system"); info("wifi : reconnect wifi"); info("mqtt : reconnect mqtt"); info("debug : toggle debug log"); } else if (strcmp(cmd, "info") == 0) { info("HOSTNAME: %17s", HOSTNAME); info("MAC: %17s", WiFi.macAddress().c_str()); info("IP: %17s", WiFi.localIP().toString().c_str()); info("Gateway: %17s", WiFi.gatewayIP().toString().c_str()); info("SSID: %17s", WiFi.SSID().c_str()); info("BSSID: %17s", WiFi.BSSIDstr().c_str()); info("RSSI: %17d", WiFi.RSSI()); } else if (strcmp(cmd, "reboot") == 0) { info("Rebooting..."); delay(500); yield(); ESP.restart(); } else if (strcmp(cmd, "wifi") == 0) { info("Reconnecting WiFi..."); wifiConnect(); } else if (strcmp(cmd, "mqtt") == 0) { info("Reconnecting MQTT..."); mqttDisconnect(); } else if (strcmp(cmd, "debug") == 0) { setDebugEnabled(!isDebugEnabled()); info("DEBUG: %s", isDebugEnabled() ? "ON" : "OFF"); } else { info("Unknown command: %s", cmd); } }