# islam4562/diplom-scada-edp120 architecture

> Architecture diagram of the GitHub repository islam4562/diplom-scada-edp120, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/islam4562/diplom-scada-edp120
- Repository: https://github.com/islam4562/diplom-scada-edp120
- Video tour (about a minute): https://gitdiagram.com/islam4562/diplom-scada-edp120/video

## Overview

This repository is a browser-based SCADA simulator for an electric arc furnace, with operator controls, live process monitoring, alarms, trends, and AI-assisted analysis. The main workflow is: the operator uses the web interface to control or monitor a simulated heat; the FastAPI backend advances the furnace model, distributes snapshots, and invokes AI processing; operators can review anomaly findings and analysis history. PostgreSQL stores process and AI records, while Groq provides optional LLM analysis. The README is empty, and sampled excerpts omit some wiring, so uncertain relationships are not shown.

Main entry points: [`backend/main.py`](https://github.com/islam4562/diplom-scada-edp120/blob/main/backend/main.py) (FastAPI service), [`backend/db.py`](https://github.com/islam4562/diplom-scada-edp120/blob/main/backend/db.py) (Database access), [`backend/ai_engine.py`](https://github.com/islam4562/diplom-scada-edp120/blob/main/backend/ai_engine.py) (AI facade), [`frontend/static/scada.js`](https://github.com/islam4562/diplom-scada-edp120/blob/main/frontend/static/scada.js) (WebSocket client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["Operator interface"]
  node_web_pages["SCADA pages"]
  node_web_client["WebSocket client<br/>[scada.js]"]
  node_trend_page["Trends view<br/>[trends.html]"]
  node_alarms_page["Alarms view<br/>[alarms.html]"]
  node_journal_page["Journal view<br/>[journal.html]"]
  node_params_page["Parameters view<br/>[params.html]"]
  node_ai_page["AI view<br/>[ai.html]"]
end

subgraph group_runtime["Simulation runtime"]
  node_api["FastAPI service<br/>[main.py]"]
  node_furnace["Furnace simulator<br/>[simulator.py]"]
  node_trends["Trend history<br/>[main.py]"]
  node_alarms["Alarm state<br/>[simulator.py]"]
end

subgraph group_intelligence["AI analysis"]
  node_ai_system["AI facade<br/>[ai_engine.py]"]
  node_anomaly["Anomaly detector<br/>[ai_engine.py]"]
  node_analyst["LLM analyst<br/>[ai_engine.py]"]
end

subgraph group_persistence["Persistence"]
  node_db_layer["Database access<br/>[db.py]"]
  node_postgres[("PostgreSQL")]
end

node_operator(("Operator"))
node_groq["Groq API"]

node_operator -->|"uses"| node_web_pages
node_web_pages -->|"loads"| node_web_client
node_web_client -->|"sends controls"| node_api
node_api -->|"streams snapshots"| node_web_client
node_api -->|"advances and reads"| node_furnace
node_furnace -->|"returns snapshot"| node_api
node_api -->|"records points"| node_trends
node_api -->|"processes snapshots"| node_ai_system
node_api -->|"reads and acknowledges"| node_alarms
node_ai_system -->|"detects anomalies"| node_anomaly
node_ai_system -->|"requests analysis"| node_analyst
node_analyst -.->|"requests completion"| node_groq
node_anomaly -->|"loads history"| node_db_layer
node_ai_system -->|"saves findings"| node_db_layer
node_analyst -->|"saves analyses"| node_db_layer
node_api -->|"reads history"| node_db_layer
node_db_layer -->|"queries and writes"| node_postgres
node_operator -->|"reviews trends"| node_trend_page
node_operator -->|"reviews alarms"| node_alarms_page
node_operator -->|"reviews journal"| node_journal_page
node_operator -->|"views parameters"| node_params_page
node_operator -->|"requests analysis"| node_ai_page

click node_web_pages "https://github.com/islam4562/diplom-scada-edp120/tree/main/frontend"
click node_web_client "https://github.com/islam4562/diplom-scada-edp120/blob/main/frontend/static/scada.js"
click node_trend_page "https://github.com/islam4562/diplom-scada-edp120/blob/main/frontend/trends.html"
click node_alarms_page "https://github.com/islam4562/diplom-scada-edp120/blob/main/frontend/alarms.html"
click node_journal_page "https://github.com/islam4562/diplom-scada-edp120/blob/main/frontend/journal.html"
click node_params_page "https://github.com/islam4562/diplom-scada-edp120/blob/main/frontend/params.html"
click node_ai_page "https://github.com/islam4562/diplom-scada-edp120/blob/main/frontend/ai.html"
click node_api "https://github.com/islam4562/diplom-scada-edp120/blob/main/backend/main.py"
click node_furnace "https://github.com/islam4562/diplom-scada-edp120/blob/main/backend/simulator.py"
click node_trends "https://github.com/islam4562/diplom-scada-edp120/blob/main/backend/main.py"
click node_alarms "https://github.com/islam4562/diplom-scada-edp120/blob/main/backend/simulator.py"
click node_ai_system "https://github.com/islam4562/diplom-scada-edp120/blob/main/backend/ai_engine.py"
click node_anomaly "https://github.com/islam4562/diplom-scada-edp120/blob/main/backend/ai_engine.py"
click node_analyst "https://github.com/islam4562/diplom-scada-edp120/blob/main/backend/ai_engine.py"
click node_db_layer "https://github.com/islam4562/diplom-scada-edp120/blob/main/backend/db.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_web_pages,node_web_client,node_trend_page,node_alarms_page,node_journal_page,node_params_page,node_ai_page toneBlue
class node_api,node_furnace,node_trends,node_alarms toneAmber
class node_ai_system,node_anomaly,node_analyst,node_groq toneMint
class node_db_layer,node_postgres toneRose
class node_operator toneIndigo
```

## Components

### Operator interface

- [SCADA pages](https://github.com/islam4562/diplom-scada-edp120/tree/main/frontend): `frontend`
- [WebSocket client](https://github.com/islam4562/diplom-scada-edp120/blob/main/frontend/static/scada.js): `frontend/static/scada.js`
- [Trends view](https://github.com/islam4562/diplom-scada-edp120/blob/main/frontend/trends.html): `frontend/trends.html`
- [Alarms view](https://github.com/islam4562/diplom-scada-edp120/blob/main/frontend/alarms.html): `frontend/alarms.html`
- [Journal view](https://github.com/islam4562/diplom-scada-edp120/blob/main/frontend/journal.html): `frontend/journal.html`
- [Parameters view](https://github.com/islam4562/diplom-scada-edp120/blob/main/frontend/params.html): `frontend/params.html`
- [AI view](https://github.com/islam4562/diplom-scada-edp120/blob/main/frontend/ai.html): `frontend/ai.html`

### Simulation runtime

- [FastAPI service](https://github.com/islam4562/diplom-scada-edp120/blob/main/backend/main.py): `backend/main.py`
- [Furnace simulator](https://github.com/islam4562/diplom-scada-edp120/blob/main/backend/simulator.py): `backend/simulator.py`
- [Trend history](https://github.com/islam4562/diplom-scada-edp120/blob/main/backend/main.py): `backend/main.py`
- [Alarm state](https://github.com/islam4562/diplom-scada-edp120/blob/main/backend/simulator.py): `backend/simulator.py`

### AI analysis

- [AI facade](https://github.com/islam4562/diplom-scada-edp120/blob/main/backend/ai_engine.py): `backend/ai_engine.py`
- [Anomaly detector](https://github.com/islam4562/diplom-scada-edp120/blob/main/backend/ai_engine.py): `backend/ai_engine.py`
- [LLM analyst](https://github.com/islam4562/diplom-scada-edp120/blob/main/backend/ai_engine.py): `backend/ai_engine.py`

### Persistence

- [Database access](https://github.com/islam4562/diplom-scada-edp120/blob/main/backend/db.py): `backend/db.py`
- **PostgreSQL**

### Other components

- **Operator**
- **Groq API**

## Connections

- Operator → SCADA pages: uses
- SCADA pages → WebSocket client: loads
- WebSocket client → FastAPI service: sends controls
- FastAPI service → WebSocket client: streams snapshots
- FastAPI service → Furnace simulator: advances and reads
- Furnace simulator → FastAPI service: returns snapshot
- FastAPI service → Trend history: records points
- FastAPI service → AI facade: processes snapshots
- FastAPI service → Alarm state: reads and acknowledges
- AI facade → Anomaly detector: detects anomalies
- AI facade → LLM analyst: requests analysis
- LLM analyst → Groq API: requests completion
- Anomaly detector → Database access: loads history
- AI facade → Database access: saves findings
- LLM analyst → Database access: saves analyses
- FastAPI service → Database access: reads history
- Database access → PostgreSQL: queries and writes
- Operator → Trends view: reviews trends
- Operator → Alarms view: reviews alarms
- Operator → Journal view: reviews journal
- Operator → Parameters view: views parameters
- Operator → AI view: requests analysis
