MQTT-Display-LaserCutter/test_sketches/test_telnet.cpp
MaPaLo76 4dd4ce0620 feat(FR-002): Web Console via HTTP-Polling (/log + /log-data) -- v1.1.0
- Ring-Buffer _logBuf in web_server.cpp: webLogForward() schreibt auf Core 1
- GET /log-data liefert Puffer als Plain-Text (kein WebSocket, kein Core-Konflikt)
- Browser pollt alle 2 s, Auto-Scroll, dunkles Terminal-Theme
- LOG_I/LOG_E/LOG_D: Timestamp (HH:MM:SS nach NTP, sonst +Xs), webLogForward()
- Alle Serial.* in laser_tracker.cpp, mqtt_client.cpp, web_server.cpp auf LOG_I/LOG_E
- main.cpp: esp_reset_reason() beim Booten loggen (POWER_ON / WATCHDOG / PANIC...)
- telnet_logger.h entfernt (war nur noch Deprecated-Stub)
- Feature-Requests.md: FR-002 abgeschlossen
2026-02-28 17:24:56 +01:00

119 lines
3.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* TEST SKETCH Telnet Server (Minimal, keine externen Libraries)
*
* Testet ob WiFiServer / WiFiClient auf dem ESP32 korrekt funktioniert.
* Keine Abhängigkeiten außer dem ESP32 Arduino Framework.
*
* Ablauf:
* 1. Verbindet sich mit WLAN (Credentials in mqtt_test_secrets.h)
* 2. Öffnet Telnet-Server auf Port 23
* 3. Sendet jede Sekunde einen Zähler über Serial UND Telnet
* 4. Eingehende Telnet-Bytes werden auf Serial gespiegelt
*
* ENTHÄLT ArduinoOTA → nach dem Test kann per OTA zurückgeflasht werden!
*
* Flash: pio run -e test-telnet --target upload
* Monitor: pio device monitor (USB Serial, 115200)
* Telnet: telnet <IP> 23 oder PuTTY (Telnet, Port 23)
* Zurück: pio run -e az-delivery-devkit-v4-ota --target upload
*
* Erwartetes Verhalten:
* Serial + Telnet: "[TICK] uptime: 5 s, heap: 234560" jede Sekunde
*/
#include <Arduino.h>
#include <WiFi.h>
#include <ArduinoOTA.h>
#include "mqtt_test_secrets.h" // TEST_WIFI_SSID, TEST_WIFI_PASSWORD
// -----------------------------------------------------------------------
// WiFi-Zugangsdaten aus mqtt_test_secrets.h
// Fehlermeldung falls nicht definiert
// -----------------------------------------------------------------------
#ifndef TEST_WIFI_SSID
#error "TEST_WIFI_SSID nicht definiert bitte mqtt_test_secrets.h anlegen"
#endif
static WiFiServer telnetServer(23);
static WiFiClient telnetClient;
// -----------------------------------------------------------------------
void setup() {
Serial.begin(115200);
delay(500);
Serial.println("\n[SETUP] Telnet-Test gestartet");
// WLAN verbinden
Serial.printf("[SETUP] Verbinde mit SSID: %s ...\n", TEST_WIFI_SSID);
WiFi.begin(TEST_WIFI_SSID, TEST_WIFI_PASSWORD);
uint32_t t = millis();
while (WiFi.status() != WL_CONNECTED) {
if (millis() - t > 15000) {
Serial.println("[SETUP] FEHLER: WLAN-Verbindung nach 15s fehlgeschlagen!");
Serial.println("[SETUP] Gerät startet neu ...");
delay(1000);
ESP.restart();
}
delay(500);
Serial.print(".");
}
Serial.printf("\n[SETUP] WiFi verbunden! IP: %s\n", WiFi.localIP().toString().c_str());
// ArduinoOTA starten (damit nach dem Test per OTA zurückgeflasht werden kann)
ArduinoOTA.setHostname("lasercutter-display");
ArduinoOTA.begin();
Serial.println("[SETUP] ArduinoOTA aktiv");
// Telnet-Server starten
telnetServer.begin();
telnetServer.setNoDelay(true);
Serial.printf("[SETUP] Telnet-Server läuft auf Port 23\n");
Serial.printf("[SETUP] Verbinde mit: telnet %s 23\n", WiFi.localIP().toString().c_str());
}
// -----------------------------------------------------------------------
void loop() {
ArduinoOTA.handle();
// --- Neuen Client annehmen ---
if (!telnetClient || !telnetClient.connected()) {
WiFiClient newClient = telnetServer.available();
if (newClient) {
telnetClient = newClient;
telnetClient.setNoDelay(true);
Serial.println("[TELNET] Client verbunden!");
telnetClient.println("[TELNET] Verbindung OK. Sekunden-Ticks folgen ...");
telnetClient.flush();
}
} else {
// Weiteren wartenden Client ablehnen
WiFiClient extra = telnetServer.available();
if (extra) {
extra.stop();
}
// Eingehende Bytes auf Serial spiegeln
while (telnetClient.available()) {
char c = telnetClient.read();
Serial.print(c);
}
}
// --- Jede Sekunde Tick senden ---
static uint32_t lastTick = 0;
static uint32_t counter = 0;
if (millis() - lastTick >= 1000) {
lastTick = millis();
counter++;
char msg[80];
snprintf(msg, sizeof(msg), "[TICK] #%lu uptime: %lu s heap: %u\n",
counter, millis() / 1000, ESP.getFreeHeap());
Serial.print(msg);
if (telnetClient && telnetClient.connected()) {
telnetClient.print(msg);
telnetClient.flush();
}
}
}