code-sammler-flat-room-group-04d — ESP32 simulation

An interactive ESP32 circuit simulation you can run free in your browser on Velxio, by bmw550i.

Components

Sketch code

// ===================================================================
// Teil 3: GLOBALE DEBUG-FLAGS, SYSTEMLOGF (MIT IDENTITÄT) & CRC16
// ===================================================================
#include <WiFi.h>
#include <esp_now.h>
#include <ArduinoJson.h>
#include <esp_task_wdt.h> 
#include "config.h"
#include <stdarg.h> 

#define WDT_TIMEOUT_SECONDS 5 

uint32_t myLocalSequenceNumber = 0;
uint32_t simSequenceCounter = 0; 

bool logToSerialActive = true;    
bool logToEspNowActive = false;   
bool logToWebActive = false;    // <--- NEU: Globales Flag für Web-Logging

struct MsgFingerprint {
    uint16_t srcId;
    uint32_t seqNum;
};

#define MESH_HISTORY_SIZE 20
MsgFingerprint meshHistory[MESH_HISTORY_SIZE];
uint8_t meshHistoryIdx = 0;

void sendBroadcast(LightControlPayload &payload);
// Prototyp, falls noch nicht deklariert
void processDebugCommand(const char* cmdStr);

// Simulierte Webserver-Schnittstelle
void handleWebDebugCommand(const char* webCmdStr) {
    if (logToSerialActive) {
        Serial.print(F("[WEB-UI Endpunkt] Verarbeite Befehl: "));
        Serial.println(webCmdStr);
    }
    processDebugCommand(webCmdStr); // Weiterleitung an den zentralen Parser
}

void systemLogf(const char* format, ...) {
    char buffer[128]; 
    va_list args;
    va_start(args, format);
    vsnprintf(buffer, sizeof(buffer), format, args);
    va_end(args);

    if (logToSerialActive) {
        Serial.print(buffer);
    }

    // --- NEU: FALLBACK / DATA STREAM FÜR DAS WEB-INTERFACE ---
    if (logToWebActive) {
        if (logToSerialActive) {
            Serial.print(F("[WEB-STREAM-BUFFER]: "));
            Serial.print(buffer);
        }
    }

    if (logToEspNowActive) {
        LightControlPayload logPacket;
        memset(&logPacket, 0, sizeof(logPacket));
        logPacket.version = PROTO_VERSION_1;
        logPacket.type = MSG_DEBUG_LOG;               
        logPacket.deviceType = DEV_TYPE_LIGHT_ACTOR;  
        logPacket.errorCode = ERR_NONE;
        logPacket.flat = 1; logPacket.floor = 1; logPacket.room = 1;
        logPacket.targetGroup = 0;                    
        logPacket.espDeviceId = sysCfg.myEspId;
        logPacket.srcAddress.id = sysCfg.myEspId; 
        memcpy(logPacket.senderMac, sysCfg.myMacAddress, 6);
        strncpy(logPacket.data.logText, buffer, sizeof(logPacket.data.logText) - 1); 
        simSequenceCounter++;
        logPacket.sequenceNumber = simSequenceCounter;
        sendBroadcast(logPacket);
    }
}

void processDebugCommand(const char* cmdStr) {
    if (strcmp(cmdStr, "l 0") == 0) {
        logToSerialActive = false;
        Serial.println("[SYS] Lokales Serial-Logging DEAKTIVIERT.");
    }
    else if (strcmp(cmdStr, "l 1") == 0) {
        logToSerialActive = true;
        systemLogf("[SYS] Lokales Serial-Logging AKTIVIERT.\n");
    }
    else if (strcmp(cmdStr, "l e 0") == 0 || strcmp(cmdStr, "l e0") == 0) {
        logToEspNowActive = false;
        systemLogf("[SYS] ESP-NOW Funk-Logging 

More projects by bmw550i