# System Architecture Diagram ## Complete System Flow ```mermaid graph TB subgraph "ESP8266 Device" ESP[ESP8266 NodeMCU] RTC[DS3231 RTC Module] R1[Relay 1 - D0] R2[Relay 2 - D5] R3[Relay 3 - D6] R4[Relay 4 - D7] R5[Relay 5 - D4] ESP --> RTC ESP --> R1 ESP --> R2 ESP --> R3 ESP --> R4 ESP --> R5 end subgraph "MQTT Communication" BROKER[MQTT Broker
49.207.44.7:1883] PUB_STATUS[Publish: relay/status/0-4] SUB_MODE[Subscribe: relay/set_mode] SUB_RTC[Subscribe: rtc/set] end subgraph "Node-RED Server" FLOW[Node-RED Flow] STORAGE[Flow Context Storage] API_STATUS[GET /api/relays/status] API_MODE[POST /api/relays/mode] API_ROUTINES[POST /api/relays/routines] API_RTC[POST /api/rtc/sync] FLOW --> STORAGE FLOW --> API_STATUS FLOW --> API_MODE FLOW --> API_ROUTINES FLOW --> API_RTC end subgraph "Web Dashboard" HTML[dashboard.html] CSS[styles.css] JS[app.js] BROWSER[Web Browser] HTML --> CSS HTML --> JS BROWSER --> HTML end ESP -->|Publish Status
Every 2 min| PUB_STATUS PUB_STATUS --> BROKER BROKER --> FLOW FLOW -->|Commands| SUB_MODE FLOW -->|Time Sync| SUB_RTC SUB_MODE --> BROKER SUB_RTC --> BROKER BROKER -->|Subscribe| ESP BROWSER -->|HTTP Requests| API_STATUS BROWSER -->|HTTP Requests| API_MODE BROWSER -->|HTTP Requests| API_ROUTINES BROWSER -->|HTTP Requests| API_RTC API_STATUS -->|JSON Response| BROWSER API_MODE -->|JSON Response| BROWSER API_ROUTINES -->|JSON Response| BROWSER API_RTC -->|JSON Response| BROWSER style ESP fill:#4CAF50,color:#fff style BROKER fill:#FF9800,color:#fff style FLOW fill:#2196F3,color:#fff style BROWSER fill:#9C27B0,color:#fff ``` ## Data Flow Sequence ```mermaid sequenceDiagram participant ESP as ESP8266 participant MQTT as MQTT Broker participant NR as Node-RED participant DB as Web Dashboard participant User as User Note over ESP,User: System Startup ESP->>MQTT: Connect & Subscribe to topics NR->>MQTT: Connect & Subscribe DB->>NR: GET /api/relays/status NR->>DB: Return cached status Note over ESP,User: Status Publishing (Every 2 min) loop Every 2 minutes per relay ESP->>MQTT: Publish relay/status/0-4 MQTT->>NR: Forward status message NR->>NR: Store in flow context end Note over ESP,User: Dashboard Polling (Every 5 sec) loop Every 5 seconds DB->>NR: GET /api/relays/status NR->>DB: Return current status DB->>DB: Update UI end Note over ESP,User: User Control Action User->>DB: Click "Manual ON" button DB->>NR: POST /api/relays/mode {relay:0, mode:"manual_on"} NR->>NR: Update local storage NR->>MQTT: Publish relay/set_mode MQTT->>ESP: Forward command ESP->>ESP: Change relay state ESP->>MQTT: Publish updated status MQTT->>NR: Forward status NR->>NR: Update storage DB->>NR: GET /api/relays/status NR->>DB: Return updated status DB->>User: Show relay is ON ``` ## Component Interaction ```mermaid graph LR subgraph Input USER[User Input] TIME[RTC Time] ROUTINE[Scheduled Routines] end subgraph Processing AUTO[Auto Mode Logic] MANUAL[Manual Override] MQTT_PROC[MQTT Processing] end subgraph Output RELAY[Relay Control] STATUS[Status Updates] STORAGE[Persistent Storage] end USER --> MANUAL TIME --> AUTO ROUTINE --> AUTO AUTO --> RELAY MANUAL --> RELAY MQTT_PROC --> MANUAL RELAY --> STATUS RELAY --> STORAGE STATUS --> MQTT_PROC style USER fill:#E91E63,color:#fff style RELAY fill:#4CAF50,color:#fff style STORAGE fill:#FF9800,color:#fff ``` ## Network Topology ```mermaid graph TB subgraph "Internet" USER_DEVICE[User Device
Laptop/Phone] end subgraph "Cloud Server" NR_SERVER[Node-RED Server
sensorsnodered.kalpatech.co.in] MQTT_SERVER[MQTT Broker
49.207.44.7:1883] end subgraph "Local Network" ROUTER[WiFi Router
2.4 GHz] ESP_DEVICE[ESP8266
Relay Controller] end USER_DEVICE -->|HTTPS| NR_SERVER ESP_DEVICE -->|MQTT| MQTT_SERVER NR_SERVER -->|MQTT| MQTT_SERVER ROUTER --> ESP_DEVICE style USER_DEVICE fill:#2196F3,color:#fff style NR_SERVER fill:#4CAF50,color:#fff style MQTT_SERVER fill:#FF9800,color:#fff style ESP_DEVICE fill:#9C27B0,color:#fff ``` ## State Machine - Relay Operation ```mermaid stateDiagram-v2 [*] --> PowerOn PowerOn --> Initializing Initializing --> ConnectingWiFi ConnectingWiFi --> WiFiConnected: Success ConnectingWiFi --> APMode: Failed WiFiConnected --> ConnectingMQTT ConnectingMQTT --> MQTTConnected: Success ConnectingMQTT --> Standalone: Failed MQTTConnected --> AutoMode Standalone --> AutoMode APMode --> AutoMode state OperationMode { AutoMode --> CheckRoutines CheckRoutines --> RelayOn: Time Match CheckRoutines --> RelayOff: No Match RelayOn --> CheckRoutines: Loop RelayOff --> CheckRoutines: Loop AutoMode --> ManualOn: User Command AutoMode --> ManualOff: User Command ManualOn --> AutoMode: User Command ManualOff --> AutoMode: User Command } OperationMode --> PublishStatus: Every 2 min PublishStatus --> OperationMode OperationMode --> [*]: Power Off ``` ## Data Structure ```mermaid classDiagram class RelayData { +Array relays +RTC rtc } class Relay { +int relay +boolean state +string mode +Array routines } class Routine { +string on +string off +boolean enabled } class RTC { +string date +string time } RelayData "1" --> "5" Relay Relay "1" --> "*" Routine RelayData "1" --> "1" RTC ``` ## File Structure ``` Project Root │ ├── ESP8266 Code │ └── Esp8266_Enhanced_FIXED.ino │ ├── Web Dashboard │ ├── dashboard.html (Main UI) │ ├── styles.css (Styling) │ └── app.js (Logic & API calls) │ ├── Node-RED │ └── nodered-flow.json (Complete flow) │ └── Documentation ├── SETUP_GUIDE.md (Full setup instructions) ├── QUICK_REFERENCE.md (Quick reference card) └── ARCHITECTURE.md (This file) ``` ## Technology Stack ```mermaid graph LR subgraph Frontend HTML5[HTML5] CSS3[CSS3] JS[JavaScript ES6] BS[Bootstrap 5.3] BI[Bootstrap Icons] end subgraph Backend NR_RUNTIME[Node-RED Runtime] MQTT_LIB[PubSubClient] JSON_LIB[ArduinoJson] end subgraph Hardware ESP_CHIP[ESP8266] RTC_CHIP[DS3231] RELAY_MOD[5CH Relay Module] end subgraph Protocols HTTP_PROTO[HTTP/REST] MQTT_PROTO[MQTT] I2C_PROTO[I2C] end HTML5 --> HTTP_PROTO JS --> HTTP_PROTO NR_RUNTIME --> HTTP_PROTO NR_RUNTIME --> MQTT_PROTO ESP_CHIP --> MQTT_PROTO ESP_CHIP --> I2C_PROTO RTC_CHIP --> I2C_PROTO style Frontend fill:#2196F3,color:#fff style Backend fill:#4CAF50,color:#fff style Hardware fill:#FF9800,color:#fff style Protocols fill:#9C27B0,color:#fff ``` ## Security Layers ```mermaid graph TB subgraph "Security Measures" AUTH[Authentication] ENCRYPT[Encryption] ACCESS[Access Control] FIREWALL[Firewall Rules] end subgraph "Implementation" MQTT_AUTH[MQTT User/Pass] WIFI_PSK[WiFi Password] AP_PSK[Hotspot Password] CORS[CORS Headers] end AUTH --> MQTT_AUTH AUTH --> WIFI_PSK AUTH --> AP_PSK ACCESS --> CORS style AUTH fill:#E91E63,color:#fff style ENCRYPT fill:#FF9800,color:#fff style MQTT_AUTH fill:#4CAF50,color:#fff ```