code-sammler-flat-room-group-B3.14xHB3.14.1-1.x — ESP32 simulation

Web-Log-Terminal: vollständige h-Ausgabe (Puffer 64), größere Anzeige und Stick-to-Bottom-Scroll-Logik.

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

Components

Sketch code

// Version: B3.14.1-1.3

// ===================================================================
// SKETCH.INO - TEIL 1 (Definitionen, Variablen & Prototypen)
// ===================================================================
#include <WiFi.h>
#include <WebServer.h>
WebServer server(80);

#include <esp_now.h>
#include <ArduinoJson.h>
#include <esp_task_wdt.h> 
#include "esp_mac.h" 
#include "config.h"
#include "webpage.h"
#include <stdarg.h> 
#include <time.h>
#include <ArduinoOTA.h>  // ✅ Neu für drahtlose Updates

// B3.5.1: Muss vor den von Arduino/Velxio erzeugten Funktionsprototypen
// vollstaendig definiert sein. ActionTargetType kommt aus config.h.
struct ResolvedActionTarget {
    bool valid;
    ActionTargetType type;
    uint16_t targetId;
    int16_t index;
    uint8_t deviceType;
};

// ===================================================================
// EXPLIZITE VORABDECLARATIONEN - ODE/ARDUINO 2.x
// ===================================================================
// Diese Deklarationen stehen bewusst vor den Funktionsdefinitionen.
// Dadurch werden die von ODE/Arduino automatisch erzeugten Prototypen
// nicht auf noch unbekannte lokale Struct-/Enum-Typen abgebildet.
struct RuleActionResult;
struct RuleTemporalGate;
struct LogicState;
struct SourceRecognitionState;
struct SourceEvent;
struct LogicDecision;
struct RuleMatchDecision;
struct TemporalGuard;
struct TemporalTask;
struct TemporalActionBinding;
struct ManualOverrideState;
struct IdState;
struct B390TestResult;
enum LogicContextId : uint16_t;
enum TemporalGuardType : uint8_t;
enum TemporalTaskType : uint8_t;
enum TemporalActionPolicy : uint8_t;
enum SourceEventKind : uint8_t {
    SOURCE_EVENT_CLICK = EVENT_CLICK,
    SOURCE_EVENT_VALUE_CHANGE = EVENT_VALUE_CHANGE,
    SOURCE_EVENT_HOLD = EVENT_HOLD,
    SOURCE_EVENT_RELEASE = EVENT_RELEASE,
    SOURCE_EVENT_PRESSED = EVENT_PRESSED,
    SOURCE_EVENT_RELEASED = EVENT_RELEASED,
    SOURCE_EVENT_DOUBLE_CLICK = EVENT_DOUBLE_CLICK,
    SOURCE_EVENT_TRIPLE_CLICK = EVENT_TRIPLE_CLICK,
    SOURCE_EVENT_LONG_PRESS = EVENT_LONG_PRESS,
    SOURCE_EVENT_REPEAT = EVENT_REPEAT
};

static bool b314ResolveRuleConflict(uint8_t bestPriority, const uint8_t* candidateIndices, uint8_t candidateCount, uint8_t& winnerIndex);
RuleTemporalGate* findRuleTemporalGate(uint16_t ruleId);
bool setRuleTemporalGate(uint16_t ruleId, bool enabled, uint16_t startMinute, uint16_t endMinute, uint8_t weekdayMask);
bool clearRuleTemporalGate(uint16_t ruleId);
bool ruleTemporalGateMatches(const Rule& rule);
unsigned long temporalNow();
void temporalSetTestTime(unsigned long nowMs);
void temporalAdvanceTestTime(unsigned long deltaMs);
void temporalUseRealTime();
TemporalGuard* findTemporalGuard(uint16_t actionId, TemporalGuardType type);
TemporalGuard* ensureTemporalGuard(uint16_t actionId, TemporalGuardType type);
bool temporalSetGuard(uint16_t actionId, TemporalGuardType type, unsigned long durationMs);
bool temporalClearGuard(uint16_t actionId, TemporalG

More projects by bmw550i