docs(i18n): add Korean, Spanish, Russian README and architecture diagrams

- Add README.ko.md (한국어), README.es.md (Español), README.ru.md (Русский)
- Update language navigation bar in all existing READMEs (en/zh/ja/vi)
- Add architecture panorama SVG and PNG for ko/es/ru (2400x1536 @2x)
- Fix README architecture diagram references to use language-specific images
This commit is contained in:
pnoker
2026-07-13 14:19:48 +08:00
parent 1ea6fb1239
commit e84d2c3ca6
13 changed files with 1592 additions and 48 deletions
+250
View File
@@ -0,0 +1,250 @@
<p align="right">
<a href="./README.md">English</a> | <a href="./README.zh.md">中文</a> | <a href="./README.ja.md">日本語</a> | <a href="./README.vi.md">Tiếng Việt</a> | <a href="./README.ko.md">한국어</a> | <a href="./README.es.md">Español</a> | <a href="./README.ru.md">Русский</a>
</p>
> **Asistentes de IA:** Lea primero [README.ai.md](./README.ai.md) para obtener una descripción general concisa y
> amigable para IA de IoT DC3.
<p align="center">
<img src="docs/public/images/logo.png" width="240" alt="IoT DC3">
</p>
<p align="center">
<a href="https://github.com/pnoker/iot-dc3/stargazers">
<img src="https://img.shields.io/github/stars/pnoker/iot-dc3?style=flat&logo=github&color=green" alt="GitHub Stars">
</a>
<a href="https://gitee.com/pnoker/iot-dc3/stargazers">
<img src="https://gitee.com/pnoker/iot-dc3/badge/star.svg?theme=gvp" alt="Gitee Star">
</a>
<a href="https://gitee.com/pnoker/iot-dc3/members">
<img src="https://gitee.com/pnoker/iot-dc3/badge/fork.svg?theme=gvp" alt="Gitee Fork">
</a>
<a href="https://github.com/pnoker/iot-dc3/graphs/contributors">
<img src="https://img.shields.io/github/contributors/pnoker/iot-dc3?label=contributors&color=orange" alt="Contributors">
</a>
<img src="https://img.shields.io/badge/License-AGPL%203.0-blue" alt="License">
<img src="https://img.shields.io/badge/Java-21-orange?logo=openjdk" alt="Java 21">
<img src="https://img.shields.io/badge/Spring%20Boot-4.0-6DB33F?logo=springboot" alt="Spring Boot 4">
</p>
<p align="center">
<strong>
IoT DC3 — plataforma de código abierto de IoT industrial, multiprotocolo, impulsada por IA y nativa de la nube.<br>
Microservicios nativos de la nube · Conectividad multiprotocolo · Operaciones asistidas por IA · 28 controladores listos para usar
</strong>
</p>
<p align="center">
<a href="https://docs.dc3.site">https://docs.dc3.site</a>
</p>
<p align="center">
🔌 <strong>Conectividad multiprotocolo</strong> &nbsp;·&nbsp;
🤖 <strong>AI Agentic Center</strong> &nbsp;·&nbsp;
☁️ <strong>Microservicios nativos de la nube</strong>
</p>
---
## 📸 Vista previa del producto
<table>
<tr>
<th width="33%">📸 Resumen de la plataforma</th>
<th width="33%">📸 Gestión de dispositivos</th>
<th width="33%">📸 Chat con IA</th>
</tr>
<tr>
<td align="center">
<img src="docs/public/images/screenshot-overview.png" alt="Panel de control de la plataforma" width="100%">
<br>
<strong>Inicio / Panel de control</strong><br>
<em>Resumen del sistema · Métricas de dispositivos en línea · Gráficos de tendencias de datos</em>
</td>
<td align="center">
<img src="docs/public/images/screenshot-device.png" alt="Página de gestión de dispositivos" width="100%">
<br>
<strong>Gestión de dispositivos</strong><br>
<em>Lista de dispositivos · Estado en línea · Búsqueda y filtrado</em>
</td>
<td align="center">
<img src="docs/public/images/screenshot-ai.png" alt="Página de chat con IA" width="100%">
<br>
<strong>Chat con IA</strong><br>
<em>Consultas de dispositivos en lenguaje natural · Análisis de datos · Asistencia inteligente</em>
</td>
</tr>
</table>
## 🏗️ Resumen de arquitectura
### Arquitectura de un vistazo
![Panorama de Arquitectura de IoT DC3](docs/public/images/architecture-panorama-es.png)
Arquitectura de microservicios en seis capas de un vistazo: clientes → puerta de enlace → cuatro servicios centrales →
bus de mensajes → 28 controladores de protocolo → dispositivos de campo. PostgreSQL (TimescaleDB + pgvector + AGE) para
persistencia y stack de observabilidad opcional (ELK + Prometheus + Grafana) presentados en una sola vista.
🧱 **Principios de diseño** — Las llamadas entre servicios siempre se realizan a través de interfaces Facade; el modelo
de tres niveles DO/BO/VO mantiene estrictamente separadas la persistencia, la lógica de negocio y las formas de API; y
el aislamiento de inquilinos se aplica de extremo a extremo en las rutas de base de datos, caché y API. Límites claros
que escalan entre servicios y equipos.
> 📖 Para la documentación completa de la arquitectura,
> consulte [Descripción general de la arquitectura del sistema](https://docs.dc3.site/en/architecture/).
## ✨ Características principales
### 🔌 Conectividad de dispositivos multiprotocolo
IoT DC3 incluye **28 módulos de controladores de acceso** para automatización industrial, comunicaciones IoT, puenteo de
datos, comunicaciones básicas y escenarios de simulación/depuración, reduciendo el costo de conectar dispositivos y
fuentes de datos comunes:
| Categoría | Módulos de controladores |
|------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|
| 🏭 **Protocolos industriales** | Modbus TCP · Modbus RTU · OPC UA · OPC DA · Siemens S7 · BACnet/IP · EtherNet/IP · Omron FINS · Mitsubishi MELSEC · IEC 60870-5-104 · SL651 · DLMS |
| 📡 **Protocolos IoT** | MQTT · CoAP · LwM2M · HTTP · BLE · Zigbee |
| 🗄️ **Puenteo de datos** | MySQL · PostgreSQL · Oracle · SQL Server |
| 🔧 **Comunicaciones básicas y gestión de red** | TCP/UDP · Serial · SNMP · CAN |
| 🧪 **Simulación y depuración** | Virtual · Listening Virtual |
El **Driver SDK** permite el desarrollo rápido de controladores de protocolo personalizados y su registro en la
plataforma de ejecución.
### 🤖 Integración de capacidades de IA
El centro de agentes inteligentes está construido sobre **Spring AI** y conecta modelos de lenguaje de gran tamaño en
los flujos de trabajo de operaciones de IoT:
- **Operaciones asistidas por lenguaje natural** — a través de Tool Calling y bajo control de acceso, los LLM pueden
consultar dispositivos, leer/escribir puntos de datos y ayudar con la ejecución de comandos
- **Análisis inteligente de alarmas** — la IA ayuda con el análisis de causa raíz y sugerencias de respuesta
- **Perspectivas de datos** — consulta de datos de dispositivos en lenguaje natural y generación de gráficos de
visualización
- **Soporte multi-modelo** — compatible con proveedores estilo API de OpenAI y modelos principales como GPT, Claude,
DeepSeek y Qwen
- **Memoria de conversación** — conversaciones de múltiples turnos y memoria de contexto persistida en la base de datos
### 🏗️ Microservicios nativos de la nube
Arquitectura de microservicios distribuida basada en **Spring Boot 4 + Spring Cloud 2025**:
- **Gobernanza de servicios** — Spring Cloud Gateway como punto de entrada unificado, con enrutamiento estático y
variables de entorno flexibles
- **Comunicación eficiente** — llamadas entre servicios mediante gRPC con serialización Protobuf
- **Escalado horizontal** — diseño sin estado para escalar servicios individuales según la carga de trabajo
- **Resiliencia** — nodos de servicio reemplazables y aislamiento de fallos
### 📊 Motor de datos en tiempo real
- **Recopilación de datos** — los controladores recopilan telemetría de dispositivos y la envían de forma asíncrona a
través de RabbitMQ
- **Almacenamiento de series temporales** — consultas eficientes para datos en tiempo real e históricos
- **Motor de reglas** — reglas de alarma flexibles con alarmas multinivel y notificaciones
- **Trazabilidad de eventos** — historial completo de comandos y eventos
### 🔐 Seguridad empresarial y multiinquilinos
- **Aislamiento de inquilinos** — aislamiento a nivel de inquilinos en las rutas de base de datos, caché y API
- **Autenticación y autorización** — JWT + Spring Security con modelo RBAC
- **Cifrado en tránsito** — soporte para comunicación TLS/SSL
- **Seguimiento de auditoría** — registros de operaciones de usuarios y eventos del sistema
### 🧩 Amigable para desarrolladores
- **Driver SDK** — un kit de herramientas completo para el desarrollo de controladores. Consulte
la [Guía de creación de controladores](https://docs.dc3.site/en/development/driver-authoring)
- **Frontend y backend separados** — frontend Vue 3 + TypeScript, APIs RESTful y gRPC
- **Despliegue contenedorizado** — inicio con un comando mediante Podman / Docker Compose, con camino hacia Kubernetes y
otras plataformas contenedorizadas
- **Documentación completa** — documentación en línea, guía de inicio rápido y guía de solución de problemas
## ⚡ Inicio rápido
Para el desarrollo local basado en fuente, inicie PostgreSQL y RabbitMQ, cargue las variables de entorno locales y luego
compile:
```bash
make up-db
source dc3/env/dev.env.sh
mvn -s .mvn/settings.xml clean package
```
Use `make up-db-cn` si prefiere el registro de Alibaba Cloud en China continental.
> 📖 Para el orden de inicio de servicios, configuración de IDE, comandos de verificación y problemas comunes,
> consulte el [Inicio rápido completo](https://docs.dc3.site/en/quickstart/).
## 🛠️ Stack tecnológico
IoT DC3 está construido sobre Java 21, Spring Boot 4, Spring Cloud 2025, Spring AI 2, PostgreSQL, RabbitMQ, gRPC, Vue 3,
TypeScript y Vite.
Consulte [Stack tecnológico](https://docs.dc3.site/en/introduction/technology-stack) para obtener detalles de los
componentes y dónde se utiliza cada tecnología.
## 📖 Documentación y comunidad
| Recurso | Enlace |
|--------------------------------|--------------------------------------------------------------------------------------------|
| 📚 Documentación en línea | [docs.dc3.site](https://docs.dc3.site/) |
| 🚀 Inicio rápido | [Guía de inicio rápido](https://docs.dc3.site/en/quickstart/) |
| 🛠️ Stack tecnológico | [Technology Stack](https://docs.dc3.site/en/introduction/technology-stack) |
| 🏗️ Arquitectura | [Módulos y dependencias](https://docs.dc3.site/en/architecture/modules) |
| 🔧 Desarrollo de controladores | [Guía de creación de controladores](https://docs.dc3.site/en/development/driver-authoring) |
| 🐛 Solución de problemas | [Solución de problemas](https://docs.dc3.site/en/guide/troubleshooting) |
| 📋 Registro de cambios | [Registro de cambios de versión](https://docs.dc3.site/en/development/changelog) |
| 🐛 Reporte de problemas | [GitHub Issues](https://github.com/pnoker/iot-dc3/issues) |
| 🇨🇳 Espejo de Gitee | [Proyecto GVP de Gitee](https://gitee.com/pnoker/iot-dc3) |
## 🌍 Casos de uso
<table>
<tr>
<td align="center" width="60">🏭</td>
<td><strong>Fábrica inteligente</strong></td>
<td>Monitoreo de equipos en líneas de producción, recopilación de parámetros de proceso, mantenimiento predictivo y análisis OEE</td>
</tr>
<tr>
<td align="center">⚡</td>
<td><strong>Monitoreo de energía</strong></td>
<td>Medición remota de electricidad, agua y gas; análisis de tendencias energéticas; alarmas anómalas</td>
</tr>
<tr>
<td align="center">🌾</td>
<td><strong>Agricultura inteligente</strong></td>
<td>Monitoreo ambiental de invernaderos, control automático de riego, alertas de plagas y enfermedades, pronóstico de rendimiento</td>
</tr>
<tr>
<td align="center">🏙️</td>
<td><strong>Ciudad inteligente</strong></td>
<td>Gestión de alumbrado público, monitoreo de calidad ambiental, operación de instalaciones municipales, monitoreo de seguridad</td>
</tr>
</table>
## 🤝 Contribuir
Se da la bienvenida a todo tipo de contribuciones. Siga este flujo de trabajo:
1. **Fork y rama** — Cree una rama desde `main`, usando el formato `feature/your_name/feature_description`
(por ejemplo: `feature/pnoker/mqtt_driver`)
2. **Desarrollar y confirmar** — Complete sus cambios en la nueva rama y siga la
especificación [Conventional Commits](https://www.conventionalcommits.org/)
3. **Abrir un PR** — Envíe un Pull Request a la rama `develop` para revisión y fusión por parte de los mantenedores
## 📄 Licencia
IoT DC3 es de código abierto bajo la licencia [AGPL 3.0](./LICENSE-AGPL.txt).
-**Aprendizaje personal, investigación y uso interno** — Gratis
-**Modificar el código y publicar sus cambios como código abierto** — Bienvenido
- ⚠️ **Ofrecerlo como servicio comercial a terceros sin publicar las modificaciones como código abierto** — Requiere
licencia comercial
Para detalles de licenciamiento comercial, consulte [LICENSE.txt](./LICENSE.txt).
## ⭐ Historial de estrellas
[![Star History Chart](https://api.star-history.com/svg?repos=pnoker/iot-dc3&type=Date)](https://star-history.com/#pnoker/iot-dc3&Date)
+14 -13
View File
@@ -1,5 +1,5 @@
<p align="right">
<a href="./README.md">English</a> | <a href="./README.zh.md">中文</a> | <a href="./README.ja.md">日本語</a> | <a href="./README.vi.md">Tiếng Việt</a>
<a href="./README.md">English</a> | <a href="./README.zh.md">中文</a> | <a href="./README.ja.md">日本語</a> | <a href="./README.vi.md">Tiếng Việt</a> | <a href="./README.ko.md">한국어</a> | <a href="./README.es.md">Español</a> | <a href="./README.ru.md">Русский</a>
</p>
> **AI アシスタント:** IoT DC3 の簡潔な AI 向け概要については、最初に [README.ai.md](./README.ai.md) をお読みください。
@@ -82,7 +82,8 @@
![IoT DC3 Architecture Panorama](docs/public/images/architecture-panorama-ja.png)
6層マイクロサービスアーキテクチャの全体像:クライアント → ゲートウェイ → 4つのセンターサービス → メッセージバス → 28
プロトコルドライバー → フィールドデバイス。PostgreSQLTimescaleDB + pgvector + AGE)永続層とオプションの可観測性スタック(ELK +
プロトコルドライバー → フィールドデバイス。PostgreSQLTimescaleDB + pgvector +
AGE)永続層とオプションの可観測性スタック(ELK +
Prometheus + Grafana)を一望できます。
🧱 **設計原則** — サービス間呼び出しは常に Facade インターフェース経由;DO/BO/VO の三層モデルで永続化・ビジネス・API
@@ -174,17 +175,17 @@ TypeScript、Vite を基盤に構築されています。
## 📖 ドキュメントとコミュニティ
| リソース | リンク |
|----------------|-----------------------------------------------------------------------------|
| 📚 オンラインドキュメント | [docs.dc3.site](https://docs.dc3.site/) |
| 🚀 クイックスタート | [クイックスタートガイド](https://docs.dc3.site/en/quickstart/) |
| 🛠️ 技術スタック | [Technology Stack](https://docs.dc3.site/en/introduction/technology-stack) |
| 🏗️ アーキテクチャ | [モジュールと依存関係](https://docs.dc3.site/en/architecture/modules) |
| 🔧 ドライバー開発 | [ドライバー開発ガイド](https://docs.dc3.site/en/development/driver-authoring) |
| 🐛 トラブルシューティング | [よくある問題と解決策](https://docs.dc3.site/en/guide/troubleshooting) |
| 📋 変更履歴 | [リリース変更履歴](https://docs.dc3.site/en/development/changelog) |
| 🐛 問題報告 | [GitHub Issues](https://github.com/pnoker/iot-dc3/issues) |
| 🇨🇳 Gitee ミラー | [Gitee GVP プロジェクト](https://gitee.com/pnoker/iot-dc3) |
| リソース | リンク |
|----------------|----------------------------------------------------------------------------|
| 📚 オンラインドキュメント | [docs.dc3.site](https://docs.dc3.site/) |
| 🚀 クイックスタート | [クイックスタートガイド](https://docs.dc3.site/en/quickstart/) |
| 🛠️ 技術スタック | [Technology Stack](https://docs.dc3.site/en/introduction/technology-stack) |
| 🏗️ アーキテクチャ | [モジュールと依存関係](https://docs.dc3.site/en/architecture/modules) |
| 🔧 ドライバー開発 | [ドライバー開発ガイド](https://docs.dc3.site/en/development/driver-authoring) |
| 🐛 トラブルシューティング | [よくある問題と解決策](https://docs.dc3.site/en/guide/troubleshooting) |
| 📋 変更履歴 | [リリース変更履歴](https://docs.dc3.site/en/development/changelog) |
| 🐛 問題報告 | [GitHub Issues](https://github.com/pnoker/iot-dc3/issues) |
| 🇨🇳 Gitee ミラー | [Gitee GVP プロジェクト](https://gitee.com/pnoker/iot-dc3) |
## 🌍 ユースケース
+229
View File
@@ -0,0 +1,229 @@
<p align="right">
<a href="./README.md">English</a> | <a href="./README.zh.md">中文</a> | <a href="./README.ja.md">日本語</a> | <a href="./README.vi.md">Tiếng Việt</a> | <a href="./README.ko.md">한국어</a> | <a href="./README.es.md">Español</a> | <a href="./README.ru.md">Русский</a>
</p>
> **AI 어시스턴트:** IoT DC3의 간결한 AI 친화적 개요를 보려면 먼저 [README.ai.md](./README.ai.md)를 읽어주세요.
<p align="center">
<img src="docs/public/images/logo.png" width="240" alt="IoT DC3">
</p>
<p align="center">
<a href="https://github.com/pnoker/iot-dc3/stargazers">
<img src="https://img.shields.io/github/stars/pnoker/iot-dc3?style=flat&logo=github&color=green" alt="GitHub Stars">
</a>
<a href="https://gitee.com/pnoker/iot-dc3/stargazers">
<img src="https://gitee.com/pnoker/iot-dc3/badge/star.svg?theme=gvp" alt="Gitee Star">
</a>
<a href="https://gitee.com/pnoker/iot-dc3/members">
<img src="https://gitee.com/pnoker/iot-dc3/badge/fork.svg?theme=gvp" alt="Gitee Fork">
</a>
<a href="https://github.com/pnoker/iot-dc3/graphs/contributors">
<img src="https://img.shields.io/github/contributors/pnoker/iot-dc3?label=contributors&color=orange" alt="Contributors">
</a>
<img src="https://img.shields.io/badge/License-AGPL%203.0-blue" alt="License">
<img src="https://img.shields.io/badge/Java-21-orange?logo=openjdk" alt="Java 21">
<img src="https://img.shields.io/badge/Spring%20Boot-4.0-6DB33F?logo=springboot" alt="Spring Boot 4">
</p>
<p align="center">
<strong>
IoT DC3 — 멀티 프로토콜, AI 기반, 클라우드 네이티브 오픈소스 산업용 IoT 플랫폼<br>
클라우드 네이티브 마이크로서비스 · 멀티 프로토콜 연결 · AI 지원 운영 · 28개 즉시 사용 가능한 드라이버
</strong>
</p>
<p align="center">
<a href="https://docs.dc3.site">https://docs.dc3.site</a>
</p>
<p align="center">
🔌 <strong>멀티 프로토콜 연결</strong> &nbsp;·&nbsp;
🤖 <strong>AI Agentic Center</strong> &nbsp;·&nbsp;
☁️ <strong>클라우드 네이티브 마이크로서비스</strong>
</p>
---
## 📸 제품 미리보기
<table>
<tr>
<th width="33%">📸 플랫폼 개요</th>
<th width="33%">📸 디바이스 관리</th>
<th width="33%">📸 AI 채팅</th>
</tr>
<tr>
<td align="center">
<img src="docs/public/images/screenshot-overview.png" alt="플랫폼 대시보드" width="100%">
<br>
<strong>홈 / 대시보드</strong><br>
<em>시스템 개요 · 디바이스 온라인 통계 · 데이터 트렌드 차트</em>
</td>
<td align="center">
<img src="docs/public/images/screenshot-device.png" alt="디바이스 관리 페이지" width="100%">
<br>
<strong>디바이스 관리</strong><br>
<em>디바이스 목록 · 온라인 상태 · 검색 및 필터링</em>
</td>
<td align="center">
<img src="docs/public/images/screenshot-ai.png" alt="AI 채팅 페이지" width="100%">
<br>
<strong>AI 채팅</strong><br>
<em>자연어 디바이스 쿼리 · 데이터 분석 · 지능형 지원</em>
</td>
</tr>
</table>
## 🏗️ 아키텍처 개요
### 아키텍처 한눈에 보기
![IoT DC3 아키텍처 파노라마](docs/public/images/architecture-panorama-ko.png)
6계층 마이크로서비스 아키텍처: 클라이언트 → 게이트웨이 → 4개 센터 서비스 → 메시지 버스 → 28개 프로토콜 드라이버 → 현장 디바이스. PostgreSQL(TimescaleDB + pgvector + AGE)
영속성 계층과 선택적 관찰 가능성 스택(ELK + Prometheus + Grafana)이 한눈에 보입니다.
🧱 **설계 원칙** — 서비스 간 호출은 항상 Facade 인터페이스를 통해 이루어집니다. DO/BO/VO 3계층 모델은 영속성, 비즈니스, API 형태를 엄격히 분리합니다. 테넌트 격리는 데이터베이스, 캐시,
API 경로 전체에 걸쳐 적용됩니다. 서비스와 팀 전반에 걸쳐 확장 가능한 명확한 경계입니다.
> 📖 전체 아키텍처 문서는 [시스템 아키텍처 개요](https://docs.dc3.site/en/architecture/)를 참조하세요.
## ✨ 핵심 기능
### 🔌 멀티 프로토콜 디바이스 연결
IoT DC3는 산업 자동화, IoT 통신, 데이터 브리징, 기본 통신, 시뮬레이션/디버깅 시나리오를 위한 **28개의 접근 드라이버 모듈**을 포함하여 일반적인 디바이스와 데이터 소스의 연결 비용을 줄입니다:
| 카테고리 | 드라이버 모듈 |
|------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|
| 🏭 **산업 프로토콜** | Modbus TCP · Modbus RTU · OPC UA · OPC DA · Siemens S7 · BACnet/IP · EtherNet/IP · Omron FINS · Mitsubishi MELSEC · IEC 60870-5-104 · SL651 · DLMS |
| 📡 **IoT 프로토콜** | MQTT · CoAP · LwM2M · HTTP · BLE · Zigbee |
| 🗄️ **데이터 브리징** | MySQL · PostgreSQL · Oracle · SQL Server |
| 🔧 **기본 통신 및 네트워크 관리** | TCP/UDP · Serial · SNMP · CAN |
| 🧪 **시뮬레이션 및 디버깅** | Virtual · Listening Virtual |
**Driver SDK**를 통해 커스텀 프로토콜 드라이버를 빠르게 개발하고 실행 중인 플랫폼에 등록할 수 있습니다.
### 🤖 AI 기능 통합
**Spring AI** 기반의 에이전틱 센터는 대규모 언어 모델을 IoT 운영 워크플로에 연결합니다:
- **자연어 기반 운영 지원** — Tool Calling을 통해 LLM이 권한 관리 하에 디바이스를 쿼리하고, 포인트를 읽/쓰고, 명령 실행을 지원합니다
- **지능형 알람 분석** — AI가 근본 원인 분석과 대응 제안을 지원합니다
- **데이터 인사이트** — 자연어로 디바이스 데이터를 쿼리하고 시각화 차트를 생성합니다
- **멀티 모델 지원** — OpenAI API 스타일 프로바이더와 GPT, Claude, DeepSeek, Qwen 같은 주요 모델을 호환합니다
- **대화 메모리** — 다중 턴 대화와 컨텍스트 메모리를 데이터베이스에 영속화합니다
### 🏗️ 클라우드 네이티브 마이크로서비스
**Spring Boot 4 + Spring Cloud 2025** 기반의 분산 마이크로서비스 아키텍처:
- **서비스 거버넌스** — Spring Cloud Gateway를 통합 진입점으로 사용하며, 정적 라우팅과 유연한 환경 변수 설정
- **효율적인 통신** — gRPC 서비스 간 호출과 Protobuf 직렬화
- **수평적 확장** — 무상태 설계로 비즈니스 부하에 따라 개별 서비스를 독립적으로 확장
- **복원력** — 교체 가능한 서비스 노드와 장애 격리
### 📊 실시간 데이터 엔진
- **데이터 수집** — 드라이버 계층이 디바이스 원격 측정 데이터를 수집하고 RabbitMQ를 통해 비동기적으로 전송
- **시계열 저장** — 실시간 및 이력 데이터의 효율적인 쿼리
- **규칙 엔진** — 유연한 알람 규칙, 다중 수준 알람 및 알림 지원
- **이벤트 추적** — 전체 명령 및 이벤트 이력
### 🔐 엔터프라이즈 보안 및 멀티테넌시
- **테넌트 격리** — 데이터베이스, 캐시, API 경로 전체에 걸친 테넌트 수준 격리
- **인증 및 인가** — JWT + Spring Security, RBAC 권한 모델
- **전송 암호화** — TLS/SSL 통신 지원
- **감사 추적** — 사용자 작업 및 시스템 이벤트 로그
### 🧩 개발자 친화적
- **Driver SDK** — 완비된 드라이버 개발 도구 키트. [드라이버 작성 가이드](https://docs.dc3.site/en/development/driver-authoring) 참조
- **프론트엔드/백엔드 분리** — Vue 3 + TypeScript 프론트엔드, RESTful + gRPC API
- **컨테이너화된 배포** — Podman / Docker Compose로 원커맨드 시작, Kubernetes 등 컨테이너 플랫폼으로 쉽게 마이그레이션
- **완전한 문서** — 온라인 문서, 퀵스타트 가이드, 문제 해결 가이드
## ⚡ 퀵스타트
소스 기반 로컬 개발을 위해 PostgreSQL과 RabbitMQ를 시작하고, 로컬 환경 변수를 로드한 뒤 빌드합니다:
```bash
make up-db
source dc3/env/dev.env.sh
mvn -s .mvn/settings.xml clean package
```
중국 본토에서는 Alibaba Cloud 레지스트리를 사용하려면 `make up-db-cn`을 사용하세요.
> 📖 서비스 시작 순서, IDE 설정, 검증 명령 및 흔한 주의사항은 [전체 퀵스타트](https://docs.dc3.site/en/quickstart/)를 참조하세요.
## 🛠️ 기술 스택
IoT DC3는 Java 21, Spring Boot 4, Spring Cloud 2025, Spring AI 2, PostgreSQL, RabbitMQ, gRPC, Vue 3, TypeScript, Vite
기반으로 구축되었습니다.
구성 요소 세부 정보와 사용 위치는 [기술 스택](https://docs.dc3.site/en/introduction/technology-stack)을 참조하세요.
## 📖 문서 및 커뮤니티
| 리소스 | 링크 |
|---------------|----------------------------------------------------------------------------|
| 📚 온라인 문서 | [docs.dc3.site](https://docs.dc3.site/) |
| 🚀 퀵스타트 | [퀵스타트 가이드](https://docs.dc3.site/en/quickstart/) |
| 🛠️ 기술 스택 | [Technology Stack](https://docs.dc3.site/en/introduction/technology-stack) |
| 🏗️ 아키텍처 | [모듈 및 의존성](https://docs.dc3.site/en/architecture/modules) |
| 🔧 드라이버 개발 | [드라이버 작성 가이드](https://docs.dc3.site/en/development/driver-authoring) |
| 🐛 문제 해결 | [문제 해결](https://docs.dc3.site/en/guide/troubleshooting) |
| 📋 변경 로그 | [릴리스 변경 로그](https://docs.dc3.site/en/development/changelog) |
| 🐛 이슈 피드백 | [GitHub Issues](https://github.com/pnoker/iot-dc3/issues) |
| 🇨🇳 Gitee 미러 | [Gitee GVP 프로젝트](https://gitee.com/pnoker/iot-dc3) |
## 🌍 사용 사례
<table>
<tr>
<td align="center" width="60">🏭</td>
<td><strong>스마트 팩토리</strong></td>
<td>생산 라인 설비 모니터링, 공정 파라미터 수집, 예측 유지보수, OEE 분석</td>
</tr>
<tr>
<td align="center">⚡</td>
<td><strong>에너지 모니터링</strong></td>
<td>전력/수도/가스 원격 검침, 에너지 트렌드 분석, 이상 알람</td>
</tr>
<tr>
<td align="center">🌾</td>
<td><strong>스마트 농업</strong></td>
<td>온실 환경 모니터링, 자동 관개 제어, 병충해 경고, 수확량 예측</td>
</tr>
<tr>
<td align="center">🏙️</td>
<td><strong>스마트 시티</strong></td>
<td>가로등 관리, 환경 품질 모니터링, 시설 운영, 안전 모니터링</td>
</tr>
</table>
## 🤝 기여하기
모든 형태의 기여를 환영합니다. 다음 워크플로를 따라주세요:
1. **Fork 및 브랜치**`main`에서 브랜치를 만들고 `feature/your_name/feature_description` 형식으로 이름을 지정하세요
(예: `feature/pnoker/mqtt_driver`)
2. **개발 및 커밋** — 새 브랜치에서 변경을 완료하고 [Conventional Commits](https://www.conventionalcommits.org/) 사양을 따르세요
3. **PR 열기**`develop` 브랜치에 Pull Request를 제출하여 관리자에게 리뷰와 머지를 받으세요
## 📄 라이선스
IoT DC3는 [AGPL 3.0](./LICENSE-AGPL.txt) 라이선스 하에 오픈소스로 제공됩니다.
-**개인 학습, 연구, 내부 사용** — 무료
-**코드 수정 및 수정 사항 오픈소스화** — 환영합니다
- ⚠️ **수정 사항을 오픈소스화하지 않고 제3자에게 상업 서비스로 제공하는 경우** — 상업 라이선스 필요
상업 라이선스 세부 정보는 [LICENSE.txt](./LICENSE.txt)를 참조하세요.
## ⭐ Star History
[![Star History Chart](https://api.star-history.com/svg?repos=pnoker/iot-dc3&type=Date)](https://star-history.com/#pnoker/iot-dc3&Date)
+11 -11
View File
@@ -1,5 +1,5 @@
<p align="right">
<a href="./README.md">English</a> | <a href="./README.zh.md">中文</a> | <a href="./README.ja.md">日本語</a> | <a href="./README.vi.md">Tiếng Việt</a>
<a href="./README.md">English</a> | <a href="./README.zh.md">中文</a> | <a href="./README.ja.md">日本語</a> | <a href="./README.vi.md">Tiếng Việt</a> | <a href="./README.ko.md">한국어</a> | <a href="./README.es.md">Español</a> | <a href="./README.ru.md">Русский</a>
</p>
> **AI assistants:** Read [README.ai.md](./README.ai.md) first for a concise, AI-friendly overview of IoT DC3.
@@ -179,17 +179,17 @@ where each technology is used.
## 📖 Documentation and Community
| Resource | Link |
|-----------------------|-----------------------------------------------------------------------------------------|
| 📚 Online docs | [docs.dc3.site](https://docs.dc3.site/) |
| 🚀 Quickstart | [Quickstart Guide](https://docs.dc3.site/en/quickstart/) |
| 🛠️ Technology stack | [Technology Stack](https://docs.dc3.site/en/introduction/technology-stack) |
| 🏗️ Architecture | [Modules and Dependencies](https://docs.dc3.site/en/architecture/modules) |
| Resource | Link |
|-----------------------|---------------------------------------------------------------------------------|
| 📚 Online docs | [docs.dc3.site](https://docs.dc3.site/) |
| 🚀 Quickstart | [Quickstart Guide](https://docs.dc3.site/en/quickstart/) |
| 🛠️ Technology stack | [Technology Stack](https://docs.dc3.site/en/introduction/technology-stack) |
| 🏗️ Architecture | [Modules and Dependencies](https://docs.dc3.site/en/architecture/modules) |
| 🔧 Driver development | [Driver Authoring Guide](https://docs.dc3.site/en/development/driver-authoring) |
| 🐛 Troubleshooting | [Troubleshooting](https://docs.dc3.site/en/guide/troubleshooting) |
| 📋 Changelog | [Release Changelog](https://docs.dc3.site/en/development/changelog) |
| 🐛 Issue feedback | [GitHub Issues](https://github.com/pnoker/iot-dc3/issues) |
| 🇨🇳 Gitee mirror | [Gitee GVP Project](https://gitee.com/pnoker/iot-dc3) |
| 🐛 Troubleshooting | [Troubleshooting](https://docs.dc3.site/en/guide/troubleshooting) |
| 📋 Changelog | [Release Changelog](https://docs.dc3.site/en/development/changelog) |
| 🐛 Issue feedback | [GitHub Issues](https://github.com/pnoker/iot-dc3/issues) |
| 🇨🇳 Gitee mirror | [Gitee GVP Project](https://gitee.com/pnoker/iot-dc3) |
## 🌍 Use Cases
+248
View File
@@ -0,0 +1,248 @@
<p align="right">
<a href="./README.md">English</a> | <a href="./README.zh.md">中文</a> | <a href="./README.ja.md">日本語</a> | <a href="./README.vi.md">Tiếng Việt</a> | <a href="./README.ko.md">한국어</a> | <a href="./README.es.md">Español</a> | <a href="./README.ru.md">Русский</a>
</p>
> **ИИ-ассистенты:** Сначала прочитайте [README.ai.md](./README.ai.md) для краткого обзора IoT DC3, оптимизированного
> для ИИ.
<p align="center">
<img src="docs/public/images/logo.png" width="240" alt="IoT DC3">
</p>
<p align="center">
<a href="https://github.com/pnoker/iot-dc3/stargazers">
<img src="https://img.shields.io/github/stars/pnoker/iot-dc3?style=flat&logo=github&color=green" alt="GitHub Stars">
</a>
<a href="https://gitee.com/pnoker/iot-dc3/stargazers">
<img src="https://gitee.com/pnoker/iot-dc3/badge/star.svg?theme=gvp" alt="Gitee Star">
</a>
<a href="https://gitee.com/pnoker/iot-dc3/members">
<img src="https://gitee.com/pnoker/iot-dc3/badge/fork.svg?theme=gvp" alt="Gitee Fork">
</a>
<a href="https://github.com/pnoker/iot-dc3/graphs/contributors">
<img src="https://img.shields.io/github/contributors/pnoker/iot-dc3?label=contributors&color=orange" alt="Contributors">
</a>
<img src="https://img.shields.io/badge/License-AGPL%203.0-blue" alt="License">
<img src="https://img.shields.io/badge/Java-21-orange?logo=openjdk" alt="Java 21">
<img src="https://img.shields.io/badge/Spring%20Boot-4.0-6DB33F?logo=springboot" alt="Spring Boot 4">
</p>
<p align="center">
<strong>
IoT DC3 — многопротокольная, ИИ-управляемая, облачная открытая платформа промышленного Интернета вещей.<br>
Облачные микросервисы · Многопротокольное подключение · ИИ-помощь в эксплуатации · 28 готовых драйверов
</strong>
</p>
<p align="center">
<a href="https://docs.dc3.site">https://docs.dc3.site</a>
</p>
<p align="center">
🔌 <strong>Многопротокольное подключение</strong> &nbsp;·&nbsp;
🤖 <strong>AI Agentic Center</strong> &nbsp;·&nbsp;
☁️ <strong>Облачные микросервисы</strong>
</p>
---
## 📸 Превью продукта
<table>
<tr>
<th width="33%">📸 Обзор платформы</th>
<th width="33%">📸 Управление устройствами</th>
<th width="33%">📸 ИИ-чат</th>
</tr>
<tr>
<td align="center">
<img src="docs/public/images/screenshot-overview.png" alt="Панель управления платформой" width="100%">
<br>
<strong>Главная / Панель управления</strong><br>
<em>Обзор системы · Статистика онлайн-устройств · Графики трендов данных</em>
</td>
<td align="center">
<img src="docs/public/images/screenshot-device.png" alt="Страница управления устройствами" width="100%">
<br>
<strong>Управление устройствами</strong><br>
<em>Список устройств · Статус онлайн · Поиск и фильтрация</em>
</td>
<td align="center">
<img src="docs/public/images/screenshot-ai.png" alt="Страница ИИ-чата" width="100%">
<br>
<strong>ИИ-чат</strong><br>
<em>Запросы устройств на естественном языке · Анализ данных · Интеллектуальная помощь</em>
</td>
</tr>
</table>
## 🏗️ Обзор архитектуры
### Архитектура на одном экране
![Панорама архитектуры IoT DC3](docs/public/images/architecture-panorama-ru.png)
Шестиуровневая микросервисная архитектура: клиенты → шлюз → четыре центральных сервиса → шина сообщений → 28
протокольных драйверов → полевые устройства. PostgreSQL (TimescaleDB + pgvector + AGE) для хранения и опциональный
стек наблюдаемости (ELK + Prometheus + Grafana) — всё на одном чертеже.
🧱 **Принципы проектирования** — межсервисные вызовы всегда через интерфейсы Facade; трёхслойная модель DO/BO/VO
строго разделяет хранение, бизнес-логику и API; изоляция арендаторов от базы данных и кэша до API。Чёткие границы,
масштабируемые между сервисами и командами.
> 📖 Подробная документация по архитектуре:
> [Обзор системной архитектуры](https://docs.dc3.site/en/architecture/).
## ✨ Основные возможности
### 🔌 Многопротокольное подключение устройств
IoT DC3 включает **28 модулей драйверов доступа** для промышленной автоматизации, IoT-коммуникаций, мостовой
передачи данных, базовых коммуникаций и сценариев моделирования/отладки, снижая стоимость подключения распространённых
устройств и источников данных:
| Категория | Модули драйверов |
|------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|
| 🏭 **Промышленные протоколы** | Modbus TCP · Modbus RTU · OPC UA · OPC DA · Siemens S7 · BACnet/IP · EtherNet/IP · Omron FINS · Mitsubishi MELSEC · IEC 60870-5-104 · SL651 · DLMS |
| 📡 **IoT-протоколы** | MQTT · CoAP · LwM2M · HTTP · BLE · Zigbee |
| 🗄️ **Мостовая передача данных** | MySQL · PostgreSQL · Oracle · SQL Server |
| 🔧 **Базовые коммуникации и управление** | TCP/UDP · Serial · SNMP · CAN |
| 🧪 **Моделирование и отладка** | Virtual · Listening Virtual |
**Driver SDK** поддерживает быструю разработку пользовательских протокольных драйверов и их регистрацию в среде
выполнения платформы.
### 🤖 Интеграция ИИ-возможностей
Центр интеллектуальных агентов построен на **Spring AI** и подключает большие языковые модели к рабочим процессам
эксплуатации IoT:
- **Операционная поддержка на естественном языке** — LLM через Tool Calling и под контролем доступа может запрашивать
устройства, читать/записывать точки данных и помогать с выполнением команд
- **Интеллектуальный анализ аварий** — ИИ помогает с анализом корневых причин и предложениями по реагированию
- **Аналитика данных** — запросы данных устройств на естественном языке с генерацией визуальных графиков
- **Поддержка нескольких моделей** — совместимость с провайдерами в стиле OpenAI API и ведущими моделями, такими как
GPT,
Claude, DeepSeek и Qwen
- **Память диалога** — многошаговые диалоги и контекстная память, сохраняемые в базе данных
### 🏗️ Облачные микросервисы
Распределённая микросервисная архитектура на базе **Spring Boot 4 + Spring Cloud 2025**:
- **Управление сервисами** — Spring Cloud Gateway как единая точка входа со статическими маршрутами и гибкой
настройкой через переменные окружения
- **Эффективная коммуникация** — межсервисные вызовы через gRPC с сериализацией Protobuf
- **Горизонтальное масштабирование** — бездизайновый дизайн для масштабирования отдельных сервисов по нагрузке
- **Отказоустойчивость** — заменяемые узлы сервисов и изоляция сбоев
### 📊 Движок данных реального времени
- **Сбор данных** — драйверы собирают телеметрию устройств и передают асинхронно через RabbitMQ
- **Хранение временных рядов** — эффективные запросы для данных реального времени и истории
- **Движок правил** — гибкие правила аварий с многоуровневыми уведомлениями
- **Проследимость событий** — полная история команд и событий
### 🔐 Корпоративная безопасность и мультитенантность
- **Изоляция арендаторов** — изоляция на уровне арендаторов от базы данных и кэша до API
- **Аутентификация и авторизация** — JWT + Spring Security с моделью RBAC
- **Шифрование передачи** — поддержка TLS/SSL
- **Аудиторский трекинг** — журналы операций пользователей и системных событий
### 🧩 Удобство для разработчиков
- **Driver SDK** — полный набор инструментов для разработки драйверов. См.
[Руководство по созданию драйверов](https://docs.dc3.site/en/development/driver-authoring)
- **Разделение фронтенда и бэкенда** — фронтенд на Vue 3 + TypeScript, API RESTful и gRPC
- **Контейнеризированное развёртывание** — запуск одной командой через Podman / Docker Compose, с возможностью
миграции на Kubernetes и другие контейнерные платформы
- **Полная документация** — онлайн-документация, руководство по быстрому старту и руководство по устранению неполадок
## ⚡ Быстрый старт
Для локальной разработки из исходного кода запустите PostgreSQL и RabbitMQ, загрузите локальные переменные окружения,
затем соберите проект:
```bash
make up-db
source dc3/env/dev.env.sh
mvn -s .mvn/settings.xml clean package
```
Если вы находитесь в материковом Китае, используйте `make up-db-cn` для реестра Alibaba Cloud.
> 📖 Порядок запуска сервисов, настройка IDE, команды верификации и типичные подводные камни см. в
> [Полное руководство по быстрому старту](https://docs.dc3.site/en/quickstart/).
## 🛠️ Технологический стек
IoT DC3 построен на Java 21, Spring Boot 4, Spring Cloud 2025, Spring AI 2, PostgreSQL, RabbitMQ, gRPC, Vue 3,
TypeScript и Vite.
Подробности о компонентах и их использовании см.
в [Технологический стек](https://docs.dc3.site/en/introduction/technology-stack).
## 📖 Документация и сообщество
| Ресурс | Ссылка |
|--------------------------|--------------------------------------------------------------------------------------------|
| 📚 Онлайн-документация | [docs.dc3.site](https://docs.dc3.site/) |
| 🚀 Быстрый старт | [Руководство по быстрому старту](https://docs.dc3.site/en/quickstart/) |
| 🛠️ Технологический стек | [Technology Stack](https://docs.dc3.site/en/introduction/technology-stack) |
| 🏗️ Архитектура | [Модули и зависимости](https://docs.dc3.site/en/architecture/modules) |
| 🔧 Разработка драйверов | [Руководство по созданию драйверов](https://docs.dc3.site/en/development/driver-authoring) |
| 🐛 Устранение неполадок | [Устранение неполадок](https://docs.dc3.site/en/guide/troubleshooting) |
| 📋 Журнал изменений | [Журнал релизов](https://docs.dc3.site/en/development/changelog) |
| 🐛 Сообщить об ошибке | [GitHub Issues](https://github.com/pnoker/iot-dc3/issues) |
| 🇨🇳 Зеркало Gitee | [Gitee GVP проект](https://gitee.com/pnoker/iot-dc3) |
## 🌍 Сценарии применения
<table>
<tr>
<td align="center" width="60">🏭</td>
<td><strong>Умное производство</strong></td>
<td>Мониторинг оборудования на производственных линиях, сбор параметров процесса, предиктивное обслуживание, анализ OEE</td>
</tr>
<tr>
<td align="center">⚡</td>
<td><strong>Мониторинг энергии</strong></td>
<td>Дистанционный учёт электроэнергии, воды и газа; анализ трендов энергопотребления; аномальные оповещения</td>
</tr>
<tr>
<td align="center">🌾</td>
<td><strong>Умное сельское хозяйство</strong></td>
<td>Мониторинг теплиц, автоматическое управление поливом, предупреждение о вредителях и болезнях, прогноз урожайности</td>
</tr>
<tr>
<td align="center">🏙️</td>
<td><strong>Умный город</strong></td>
<td>Управление уличным освещением, мониторинг качества окружающей среды, эксплуатация муниципальных объектов, мониторинг безопасности</td>
</tr>
</table>
## 🤝 Участие в разработке
Мы приветствуем вклад в любом виде. Пожалуйста, следуйте этому рабочему процессу:
1. **Fork и ветка** — создайте ветку от `main`, используя формат `feature/your_name/feature_description`
(например: `feature/pnoker/mqtt_driver`)
2. **Разработка и коммит** — завершите изменения на новой ветке и следуйте спецификации
[Conventional Commits](https://www.conventionalcommits.org/)
3. **Открытие PR** —подайте Pull Request в ветку `develop` для рецензирования и слияния сопровождающими
## 📄 Лицензия
IoT DC3 — проект с открытым исходным кодом под лицензией [AGPL 3.0](./LICENSE-AGPL.txt).
-**Личное обучение, исследования и внутреннее использование** — бесплатно
-**Изменение кода и публикация ваших изменений** — приветствуется
- ⚠️ **Предоставление в качестве коммерческой услуги третьим лицам без публикации изменений** — требуется коммерческая
лицензия
Подробности о коммерческой лицензии см. в [LICENSE.txt](./LICENSE.txt).
## ⭐ История звёзд
[![Star History Chart](https://api.star-history.com/svg?repos=pnoker/iot-dc3&type=Date)](https://star-history.com/#pnoker/iot-dc3&Date)
+13 -12
View File
@@ -1,5 +1,5 @@
<p align="right">
<a href="./README.md">English</a> | <a href="./README.zh.md">中文</a> | <a href="./README.ja.md">日本語</a> | <a href="./README.vi.md">Tiếng Việt</a>
<a href="./README.md">English</a> | <a href="./README.zh.md">中文</a> | <a href="./README.ja.md">日本語</a> | <a href="./README.vi.md">Tiếng Việt</a> | <a href="./README.ko.md">한국어</a> | <a href="./README.es.md">Español</a> | <a href="./README.ru.md">Русский</a>
</p>
> **Trợ lý AI:** Đọc [README.ai.md](./README.ai.md) trước để có tổng quan ngắn gọn về IoT DC3 dành cho AI.
@@ -172,21 +172,22 @@ Nếu cần registry Alibaba Cloud cho Trung Quốc đại lục, dùng `make up
IoT DC3 được xây dựng trên Java 21, Spring Boot 4, Spring Cloud 2025, Spring AI 2, PostgreSQL, RabbitMQ, gRPC, Vue 3,
TypeScript và Vite.
Xem [Technology Stack](https://docs.dc3.site/en/introduction/technology-stack) để biết chi tiết từng thành phần và vị trí sử dụng.
Xem [Technology Stack](https://docs.dc3.site/en/introduction/technology-stack) để biết chi tiết từng thành phần và vị
trí sử dụng.
## 📖 Tài liệu và cộng đồng
| Tài nguyên | Liên kết |
|----------------------|-----------------------------------------------------------------------------------------|
| 📚 Tài liệu online | [docs.dc3.site](https://docs.dc3.site/) |
| 🚀 Quickstart | [Quickstart Guide](https://docs.dc3.site/en/quickstart/) |
| 🛠️ Công nghệ | [Technology Stack](https://docs.dc3.site/en/introduction/technology-stack) |
| 🏗️ Kiến trúc | [Modules and Dependencies](https://docs.dc3.site/en/architecture/modules) |
| Tài nguyên | Liên kết |
|----------------------|---------------------------------------------------------------------------------|
| 📚 Tài liệu online | [docs.dc3.site](https://docs.dc3.site/) |
| 🚀 Quickstart | [Quickstart Guide](https://docs.dc3.site/en/quickstart/) |
| 🛠️ Công nghệ | [Technology Stack](https://docs.dc3.site/en/introduction/technology-stack) |
| 🏗️ Kiến trúc | [Modules and Dependencies](https://docs.dc3.site/en/architecture/modules) |
| 🔧 Phát triển driver | [Driver Authoring Guide](https://docs.dc3.site/en/development/driver-authoring) |
| 🐛 Khắc phục sự cố | [Troubleshooting](https://docs.dc3.site/en/guide/troubleshooting) |
| 📋 Changelog | [Release Changelog](https://docs.dc3.site/en/development/changelog) |
| 🐛 Phản hồi issue | [GitHub Issues](https://github.com/pnoker/iot-dc3/issues) |
| 🇨🇳 Gitee mirror | [Gitee GVP Project](https://gitee.com/pnoker/iot-dc3) |
| 🐛 Khắc phục sự cố | [Troubleshooting](https://docs.dc3.site/en/guide/troubleshooting) |
| 📋 Changelog | [Release Changelog](https://docs.dc3.site/en/development/changelog) |
| 🐛 Phản hồi issue | [GitHub Issues](https://github.com/pnoker/iot-dc3/issues) |
| 🇨🇳 Gitee mirror | [Gitee GVP Project](https://gitee.com/pnoker/iot-dc3) |
## 🌍 Trường hợp ứng dụng
+12 -12
View File
@@ -1,5 +1,5 @@
<p align="right">
<a href="./README.md">English</a> | <a href="./README.zh.md">中文</a> | <a href="./README.ja.md">日本語</a> | <a href="./README.vi.md">Tiếng Việt</a>
<a href="./README.md">English</a> | <a href="./README.zh.md">中文</a> | <a href="./README.ja.md">日本語</a> | <a href="./README.vi.md">Tiếng Việt</a> | <a href="./README.ko.md">한국어</a> | <a href="./README.es.md">Español</a> | <a href="./README.ru.md">Русский</a>
</p>
> **AI 助手:** 请先阅读 [README.ai.md](./README.ai.md) 获取 IoT DC3 的 AI 友好概述。
@@ -169,17 +169,17 @@ TypeScript 与 Vite 构建。
## 📖 文档与社区
| 资源 | 链接 |
|-----------|------------------------------------------------------------------------------|
| 📚 在线文档 | [docs.dc3.site](https://docs.dc3.site/) |
| 🚀 快速开始 | [快速开始指南](https://docs.dc3.site/zh/quickstart/) |
| 🛠️ 技术栈 | [技术栈说明](https://docs.dc3.site/zh/introduction/technology-stack) |
| 🏗️ 架构说明 | [模块与依赖](https://docs.dc3.site/zh/architecture/modules) |
| 🔧 驱动开发 | [驱动开发指南](https://docs.dc3.site/zh/development/driver-authoring) |
| 🐛 故障排查 | [常见问题与解决方案](https://docs.dc3.site/zh/guide/troubleshooting) |
| 📋 变更日志 | [版本更新记录](https://docs.dc3.site/zh/development/changelog) |
| 🐛 问题反馈 | [GitHub Issues](https://github.com/pnoker/iot-dc3/issues) |
| 🇨🇳 码云镜像 | [Gitee GVP 最有价值开源项目](https://gitee.com/pnoker/iot-dc3) |
| 资源 | 链接 |
|-----------|-----------------------------------------------------------------|
| 📚 在线文档 | [docs.dc3.site](https://docs.dc3.site/) |
| 🚀 快速开始 | [快速开始指南](https://docs.dc3.site/zh/quickstart/) |
| 🛠️ 技术栈 | [技术栈说明](https://docs.dc3.site/zh/introduction/technology-stack) |
| 🏗️ 架构说明 | [模块与依赖](https://docs.dc3.site/zh/architecture/modules) |
| 🔧 驱动开发 | [驱动开发指南](https://docs.dc3.site/zh/development/driver-authoring) |
| 🐛 故障排查 | [常见问题与解决方案](https://docs.dc3.site/zh/guide/troubleshooting) |
| 📋 变更日志 | [版本更新记录](https://docs.dc3.site/zh/development/changelog) |
| 🐛 问题反馈 | [GitHub Issues](https://github.com/pnoker/iot-dc3/issues) |
| 🇨🇳 码云镜像 | [Gitee GVP 最有价值开源项目](https://gitee.com/pnoker/iot-dc3) |
## 🌍 应用场景
Binary file not shown.

After

Width:  |  Height:  |  Size: 284 KiB

@@ -0,0 +1,277 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
- Copyright 2016-present the IoT DC3 original author or authors.
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<svg xmlns="http://www.w3.org/2000/svg" aria-label="Panorama de Arquitectura de IoT DC3" role="img"
viewBox="0 0 1200 768">
<defs>
<marker id="dc3-ah" markerHeight="7" markerWidth="10" orient="auto" refX="9" refY="3.5">
<polygon fill="#94a3b8" points="0 0, 10 3.5, 0 7"/>
</marker>
<marker id="dc3-ah-amber" markerHeight="7" markerWidth="10" orient="auto" refX="9" refY="3.5">
<polygon fill="#d97706" points="0 0, 10 3.5, 0 7"/>
</marker>
<marker id="dc3-ah-rose" markerHeight="7" markerWidth="10" orient="auto" refX="9" refY="3.5">
<polygon fill="#e11d48" points="0 0, 10 3.5, 0 7"/>
</marker>
<pattern id="dc3-grid" height="40" patternUnits="userSpaceOnUse" width="40">
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#cbd5e1" stroke-width="0.5"/>
</pattern>
</defs>
<rect fill="url(#dc3-grid)" height="100%" width="100%"/>
<!-- regions -->
<rect fill="rgba(5, 150, 105, 0.05)" height="108" rx="12" stroke="#059669" stroke-dasharray="6,3"
stroke-width="0.8" width="756"
x="52" y="262"/>
<text fill="#059669" font-size="10" font-weight="600" x="64" y="280">Servicios Centrales · Interconexión gRPC
(Facade:
api / grpc / local)
</text>
<rect fill="rgba(5, 150, 105, 0.05)" height="108" rx="12" stroke="#059669" stroke-dasharray="6,3"
stroke-width="0.8" width="756"
x="52" y="496"/>
<text fill="#059669" font-size="10" font-weight="600" x="64" y="514">Capa de Controladores · 28+ controladores de
protocolo (gRPC ↔
manager, vía RabbitMQ)
</text>
<rect fill="rgba(217, 119, 6, 0.06)" height="200" rx="12" stroke="#d97706" stroke-dasharray="6,3"
stroke-width="0.8"
width="300" x="840" y="502"/>
<text fill="#d97706" font-size="10" font-weight="600" x="852" y="520">Observabilidad (opcional)</text>
<!-- arrows -->
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="175" x2="175" y1="134" y2="171"/>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="412" x2="412" y1="134" y2="171"/>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="667" x2="667" y1="134" y2="171"/>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="415" x2="415" y1="232" y2="289"/>
<text fill="#64748b" font-size="9" x="423" y="252">HTTP /api</text>
<line marker-end="url(#dc3-ah-rose)" stroke="#e11d48" stroke-dasharray="4,4" stroke-width="0.8"
x1="120" x2="120"
y1="232" y2="289"/>
<text fill="#e11d48" font-size="8" x="58" y="258">Verificación JWT gRPC</text>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="398" x2="398" y1="372" y2="406"/>
<text fill="#64748b" font-size="8" x="352" y="392">Comando▼</text>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="462" x2="462" y1="406" y2="374"/>
<text fill="#64748b" font-size="8" x="470" y="392">▲Datos</text>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="398" x2="398" y1="466" y2="494"/>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="462" x2="462" y1="494" y2="468"/>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="398" x2="398" y1="604" y2="642"/>
<text fill="#64748b" font-size="8" x="352" y="626">Escritura▼</text>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="462" x2="462" y1="642" y2="606"/>
<text fill="#64748b" font-size="8" x="470" y="626">▲Lectura</text>
<line marker-end="url(#dc3-ah)" marker-start="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="808"
x2="838" y1="330"
y2="330"/>
<text fill="#64748b" font-size="8" x="812" y="322">JDBC</text>
<line marker-end="url(#dc3-ah-amber)" stroke="#d97706" stroke-dasharray="4,4" stroke-width="0.8"
x1="980" x2="980"
y1="466" y2="501"/>
<text fill="#d97706" font-size="8" x="986" y="487">metrics/logs</text>
<!-- Band 1: clients -->
<rect fill="rgba(8, 145, 178, 0.07)" height="64" rx="6" stroke="#0891b2" stroke-width="0.8" width="230"
x="60"
y="70"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="175" y="98">Consola Web
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="175" y="116">Vue3 · Vite8 · Element Plus · :8080</text>
<rect fill="rgba(8, 145, 178, 0.07)" height="64" rx="6" stroke="#0891b2" stroke-width="0.8" width="215"
x="305"
y="70"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="412" y="98">dc3-cli
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="412" y="116">TypeScript CLI (HTTP)</text>
<rect fill="rgba(8, 145, 178, 0.07)" height="64" rx="6" stroke="#0891b2" stroke-width="0.8" width="265"
x="535"
y="70"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="667" y="98">
AI Agent / MCP Client
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="667" y="116">Chat · Llamadas a herramientas · OAuth2
</text>
<!-- Band 2: gateway -->
<rect fill="rgba(5, 150, 105, 0.07)" height="58" rx="6" stroke="#059669" stroke-width="0.8" width="740"
x="60"
y="174"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="430" y="200">dc3-gateway · Pasarela
API
:8000
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="430" y="218">Spring Cloud Gateway (WebFlux) ·
enrutamiento +
filtro de autenticación + límite de velocidad
</text>
<!-- Band 3: center services -->
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="176"
x="60"
y="292"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="148" y="316">auth</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="148" y="332">Autenticación · Inquilino · RBAC</text>
<text fill="#059669" font-size="8" text-anchor="middle" x="148" y="346">:8300 / gRPC 9300</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="176"
x="246"
y="292"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="334" y="316">manager
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="334" y="332">Driver/Device/Point/Profile</text>
<text fill="#059669" font-size="8" text-anchor="middle" x="334" y="346">:8400 / gRPC 9400</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="176"
x="432"
y="292"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="520" y="316">data</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="520" y="332">Valor de punto · Comando · Historial</text>
<text fill="#059669" font-size="8" text-anchor="middle" x="520" y="346">:8500 / gRPC 9500</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="182"
x="618"
y="292"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="709" y="316">agentic
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="709" y="332">Llamadas a herramientas IA · Sesión</text>
<text fill="#059669" font-size="8" text-anchor="middle" x="709" y="346">:8600 · Spring AI</text>
<!-- Band 4: message bus -->
<rect fill="rgba(217, 119, 6, 0.06)" height="56" rx="6" stroke="#d97706" stroke-width="0.8" width="740"
x="60"
y="410"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="430" y="435">
Bus de Mensajes RabbitMQ
</text>
<text fill="#d97706" font-size="9" text-anchor="middle" x="430" y="453">point_value · point_command · result · event
· notify | MQTT :1883
</text>
<!-- Band 5: drivers -->
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="150"
x="60"
y="526"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="135" y="552">Modbus
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="135" y="570">TCP / RTU</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="140"
x="220"
y="526"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="290" y="552">
OPC
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="290" y="570">UA / DA</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="120"
x="370"
y="526"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="430" y="552">S7 PLC
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="430" y="570">Siemens</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="120"
x="500"
y="526"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="560" y="552">
MQTT
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="560" y="570">Broker</text>
<rect fill="rgba(100, 116, 139, 0.03)" height="62" rx="6" stroke="#64748b" stroke-width="0.8" width="170"
x="630"
y="526"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="715" y="552">
+ 24 protocolos
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="715" y="570">BACnet·SNMP·IEC104·CoAP…</text>
<!-- Band 6: devices -->
<rect fill="rgba(100, 116, 139, 0.03)" height="58" rx="6" stroke="#64748b" stroke-width="0.8" width="740"
x="60"
y="644"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="430" y="670">
Dispositivos de Campo
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="430" y="688">PLC · Sensor · Medidor · Pasarela (Modbus /
OPC
/ S7 / MQTT)
</text>
<!-- PostgreSQL -->
<rect fill="rgba(99, 102, 241, 0.05)" height="204" rx="6" stroke="#6366f1" stroke-width="0.8" width="300"
x="840"
y="262"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="990" y="290">
Almacenamiento PostgreSQL
</text>
<text fill="#6366f1" font-size="9" x="858" y="318">• TimescaleDB — valores de puntos / historial (series
temporales)
</text>
<text fill="#6366f1" font-size="9" x="858" y="338">• pgvector — búsqueda vectorial IA / memoria</text>
<text fill="#6366f1" font-size="9" x="858" y="358">• AGE — grafo (relaciones de dispositivos)</text>
<text fill="#334155" font-size="9" x="858" y="384">schema:</text>
<text fill="#334155" font-size="8" x="858" y="402">dc3_auth · dc3_manager · dc3_data</text>
<text fill="#334155" font-size="8" x="858" y="416">dc3_agentic · dc3_common</text>
<text fill="#6366f1" font-size="9" text-anchor="middle" x="990" y="446">:35432 → 5432</text>
<!-- Observability -->
<rect fill="rgba(2, 132, 199, 0.05)" height="44" rx="6" stroke="#d97706" stroke-width="0.8"
width="276" x="852"
y="528"/>
<text fill="#334155" font-size="10" font-weight="600" text-anchor="middle" x="990" y="548">EMQX · MQTT
Broker
</text>
<text fill="#334155" font-size="8" text-anchor="middle" x="990" y="562">:31883 · Dashboard :18083</text>
<rect fill="rgba(2, 132, 199, 0.05)" height="44" rx="6" stroke="#d97706" stroke-width="0.8"
width="276" x="852"
y="584"/>
<text fill="#334155" font-size="10" font-weight="600" text-anchor="middle" x="990" y="604">
Pipeline de Logs ELK
</text>
<text fill="#334155" font-size="8" text-anchor="middle" x="990" y="618">ES · Logstash · Kibana :5601 · APM</text>
<rect fill="rgba(2, 132, 199, 0.05)" height="44" rx="6" stroke="#d97706" stroke-width="0.8"
width="276" x="852"
y="640"/>
<text fill="#334155" font-size="10" font-weight="600" text-anchor="middle" x="990" y="660">
Prometheus + Grafana
</text>
<text fill="#334155" font-size="8" text-anchor="middle" x="990" y="674">Métricas · Paneles :3000</text>
<!-- legend -->
<rect fill="rgba(8, 145, 178, 0.07)" height="11" rx="2" stroke="#0891b2" stroke-width="0.8" width="16"
x="60"
y="724"/>
<text fill="#334155" font-size="9" x="82" y="733">Acceso</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="11" rx="2" stroke="#059669" stroke-width="0.8" width="16"
x="160"
y="724"/>
<text fill="#334155" font-size="9" x="182" y="733">Servicios / Controladores</text>
<rect fill="rgba(217, 119, 6, 0.06)" height="11" rx="2" stroke="#d97706" stroke-width="0.8" width="16"
x="300"
y="724"/>
<text fill="#334155" font-size="9" x="322" y="733">Bus de Mensajes</text>
<rect fill="rgba(99, 102, 241, 0.05)" height="11" rx="2" stroke="#6366f1" stroke-width="0.8" width="16"
x="430"
y="724"/>
<text fill="#334155" font-size="9" x="452" y="733">Almacén de Datos</text>
<rect fill="rgba(2, 132, 199, 0.05)" height="11" rx="2" stroke="#d97706" stroke-width="0.8" width="16"
x="560"
y="724"/>
<text fill="#334155" font-size="9" x="582" y="733">Operaciones (opcional)</text>
<rect fill="rgba(100, 116, 139, 0.03)" height="11" rx="2" stroke="#64748b" stroke-width="0.8" width="16"
x="700"
y="724"/>
<text fill="#334155" font-size="9" x="722" y="733">Dispositivos / Externos</text>
<line stroke="#e11d48" stroke-dasharray="4,3" stroke-width="0.8" x1="870" x2="886" y1="730"
y2="730"/>
<text fill="#334155" font-size="9" x="892" y="733">Flujo de autenticación</text>
<text fill="#64748b" font-size="9" x="960" y="733">▼ Comando bajada ▲ Datos subida</text>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

@@ -0,0 +1,268 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
- Copyright 2016-present the IoT DC3 original author or authors.
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<svg xmlns="http://www.w3.org/2000/svg" aria-label="IoT DC3 아키텍처 파노라마" role="img" viewBox="0 0 1200 768">
<defs>
<marker id="dc3-ah" markerHeight="7" markerWidth="10" orient="auto" refX="9" refY="3.5">
<polygon fill="#94a3b8" points="0 0, 10 3.5, 0 7"/>
</marker>
<marker id="dc3-ah-amber" markerHeight="7" markerWidth="10" orient="auto" refX="9" refY="3.5">
<polygon fill="#d97706" points="0 0, 10 3.5, 0 7"/>
</marker>
<marker id="dc3-ah-rose" markerHeight="7" markerWidth="10" orient="auto" refX="9" refY="3.5">
<polygon fill="#e11d48" points="0 0, 10 3.5, 0 7"/>
</marker>
<pattern id="dc3-grid" height="40" patternUnits="userSpaceOnUse" width="40">
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#cbd5e1" stroke-width="0.5"/>
</pattern>
</defs>
<rect fill="url(#dc3-grid)" height="100%" width="100%"/>
<!-- regions -->
<rect fill="rgba(5, 150, 105, 0.05)" height="108" rx="12" stroke="#059669" stroke-dasharray="6,3"
stroke-width="0.8" width="756"
x="52" y="262"/>
<text fill="#059669" font-size="10" font-weight="600" x="64" y="280">센터 서비스 · gRPC 상호 연결 (Facade:
api / grpc / local)
</text>
<rect fill="rgba(5, 150, 105, 0.05)" height="108" rx="12" stroke="#059669" stroke-dasharray="6,3"
stroke-width="0.8" width="756"
x="52" y="496"/>
<text fill="#059669" font-size="10" font-weight="600" x="64" y="514">드라이버 계층 · 28+ 프로토콜 드라이버 (gRPC ↔
매니저, RabbitMQ 경유)
</text>
<rect fill="rgba(217, 119, 6, 0.06)" height="200" rx="12" stroke="#d97706" stroke-dasharray="6,3"
stroke-width="0.8"
width="300" x="840" y="502"/>
<text fill="#d97706" font-size="10" font-weight="600" x="852" y="520">관측성 (선택사항)</text>
<!-- arrows -->
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="175" x2="175" y1="134" y2="171"/>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="412" x2="412" y1="134" y2="171"/>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="667" x2="667" y1="134" y2="171"/>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="415" x2="415" y1="232" y2="289"/>
<text fill="#64748b" font-size="9" x="423" y="252">HTTP /api</text>
<line marker-end="url(#dc3-ah-rose)" stroke="#e11d48" stroke-dasharray="4,4" stroke-width="0.8"
x1="120" x2="120"
y1="232" y2="289"/>
<text fill="#e11d48" font-size="8" x="58" y="258">JWT 검증 gRPC</text>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="398" x2="398" y1="372" y2="406"/>
<text fill="#64748b" font-size="8" x="352" y="392">명령▼</text>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="462" x2="462" y1="406" y2="374"/>
<text fill="#64748b" font-size="8" x="470" y="392">▲데이터</text>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="398" x2="398" y1="466" y2="494"/>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="462" x2="462" y1="494" y2="468"/>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="398" x2="398" y1="604" y2="642"/>
<text fill="#64748b" font-size="8" x="352" y="626">쓰기▼</text>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="462" x2="462" y1="642" y2="606"/>
<text fill="#64748b" font-size="8" x="470" y="626">▲읽기</text>
<line marker-end="url(#dc3-ah)" marker-start="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="808"
x2="838" y1="330"
y2="330"/>
<text fill="#64748b" font-size="8" x="812" y="322">JDBC</text>
<line marker-end="url(#dc3-ah-amber)" stroke="#d97706" stroke-dasharray="4,4" stroke-width="0.8"
x1="980" x2="980"
y1="466" y2="501"/>
<text fill="#d97706" font-size="8" x="986" y="487">metrics/logs</text>
<!-- Band 1: clients -->
<rect fill="rgba(8, 145, 178, 0.07)" height="64" rx="6" stroke="#0891b2" stroke-width="0.8" width="230"
x="60"
y="70"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="175" y="98">Web 콘솔
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="175" y="116">Vue3 · Vite8 · Element Plus · :8080</text>
<rect fill="rgba(8, 145, 178, 0.07)" height="64" rx="6" stroke="#0891b2" stroke-width="0.8" width="215"
x="305"
y="70"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="412" y="98">dc3-cli
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="412" y="116">TypeScript CLI (HTTP)</text>
<rect fill="rgba(8, 145, 178, 0.07)" height="64" rx="6" stroke="#0891b2" stroke-width="0.8" width="265"
x="535"
y="70"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="667" y="98">
AI Agent / MCP Client
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="667" y="116">대화 · 도구 호출 · OAuth2</text>
<!-- Band 2: gateway -->
<rect fill="rgba(5, 150, 105, 0.07)" height="58" rx="6" stroke="#059669" stroke-width="0.8" width="740"
x="60"
y="174"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="430" y="200">dc3-gateway · API 게이트웨이
:8000
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="430" y="218">Spring Cloud Gateway (WebFlux) · 라우팅 +
인증 필터 + 속도 제한
</text>
<!-- Band 3: center services -->
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="176"
x="60"
y="292"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="148" y="316">auth</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="148" y="332">인증 · 테넌트 · RBAC</text>
<text fill="#059669" font-size="8" text-anchor="middle" x="148" y="346">:8300 / gRPC 9300</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="176"
x="246"
y="292"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="334" y="316">manager
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="334" y="332">Driver/Device/Point/Profile</text>
<text fill="#059669" font-size="8" text-anchor="middle" x="334" y="346">:8400 / gRPC 9400</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="176"
x="432"
y="292"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="520" y="316">data</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="520" y="332">포인트 값 · 명령 · 이력</text>
<text fill="#059669" font-size="8" text-anchor="middle" x="520" y="346">:8500 / gRPC 9500</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="182"
x="618"
y="292"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="709" y="316">agentic
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="709" y="332">AI 도구 호출 · 세션</text>
<text fill="#059669" font-size="8" text-anchor="middle" x="709" y="346">:8600 · Spring AI</text>
<!-- Band 4: message bus -->
<rect fill="rgba(217, 119, 6, 0.06)" height="56" rx="6" stroke="#d97706" stroke-width="0.8" width="740"
x="60"
y="410"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="430" y="435">
RabbitMQ 메시지 버스
</text>
<text fill="#d97706" font-size="9" text-anchor="middle" x="430" y="453">point_value · point_command · result · event
· notify | MQTT :1883
</text>
<!-- Band 5: drivers -->
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="150"
x="60"
y="526"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="135" y="552">Modbus
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="135" y="570">TCP / RTU</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="140"
x="220"
y="526"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="290" y="552">
OPC
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="290" y="570">UA / DA</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="120"
x="370"
y="526"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="430" y="552">S7 PLC
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="430" y="570">Siemens</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="120"
x="500"
y="526"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="560" y="552">
MQTT
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="560" y="570">Broker</text>
<rect fill="rgba(100, 116, 139, 0.03)" height="62" rx="6" stroke="#64748b" stroke-width="0.8" width="170"
x="630"
y="526"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="715" y="552">
+ 24 프로토콜
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="715" y="570">BACnet·SNMP·IEC104·CoAP…</text>
<!-- Band 6: devices -->
<rect fill="rgba(100, 116, 139, 0.03)" height="58" rx="6" stroke="#64748b" stroke-width="0.8" width="740"
x="60"
y="644"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="430" y="670">
현장 디바이스
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="430" y="688">PLC · 센서 · 미터 · 게이트웨이 (Modbus / OPC
/ S7 / MQTT)
</text>
<!-- PostgreSQL -->
<rect fill="rgba(99, 102, 241, 0.05)" height="204" rx="6" stroke="#6366f1" stroke-width="0.8" width="300"
x="840"
y="262"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="990" y="290">
PostgreSQL 저장소
</text>
<text fill="#6366f1" font-size="9" x="858" y="318">• TimescaleDB — 포인트 값 / 이력 (시계열)</text>
<text fill="#6366f1" font-size="9" x="858" y="338">• pgvector — AI 벡터 검색 / 메모리</text>
<text fill="#6366f1" font-size="9" x="858" y="358">• AGE — 그래프 (디바이스 관계)</text>
<text fill="#334155" font-size="9" x="858" y="384">schema:</text>
<text fill="#334155" font-size="8" x="858" y="402">dc3_auth · dc3_manager · dc3_data</text>
<text fill="#334155" font-size="8" x="858" y="416">dc3_agentic · dc3_common</text>
<text fill="#6366f1" font-size="9" text-anchor="middle" x="990" y="446">:35432 → 5432</text>
<!-- Observability -->
<rect fill="rgba(2, 132, 199, 0.05)" height="44" rx="6" stroke="#d97706" stroke-width="0.8"
width="276" x="852"
y="528"/>
<text fill="#334155" font-size="10" font-weight="600" text-anchor="middle" x="990" y="548">EMQX · MQTT
Broker
</text>
<text fill="#334155" font-size="8" text-anchor="middle" x="990" y="562">:31883 · Dashboard :18083</text>
<rect fill="rgba(2, 132, 199, 0.05)" height="44" rx="6" stroke="#d97706" stroke-width="0.8"
width="276" x="852"
y="584"/>
<text fill="#334155" font-size="10" font-weight="600" text-anchor="middle" x="990" y="604">
ELK 로그 파이프라인
</text>
<text fill="#334155" font-size="8" text-anchor="middle" x="990" y="618">ES · Logstash · Kibana :5601 · APM</text>
<rect fill="rgba(2, 132, 199, 0.05)" height="44" rx="6" stroke="#d97706" stroke-width="0.8"
width="276" x="852"
y="640"/>
<text fill="#334155" font-size="10" font-weight="600" text-anchor="middle" x="990" y="660">
Prometheus + Grafana
</text>
<text fill="#334155" font-size="8" text-anchor="middle" x="990" y="674">메트릭 · 대시보드 :3000</text>
<!-- legend -->
<rect fill="rgba(8, 145, 178, 0.07)" height="11" rx="2" stroke="#0891b2" stroke-width="0.8" width="16"
x="60"
y="724"/>
<text fill="#334155" font-size="9" x="82" y="733">접근</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="11" rx="2" stroke="#059669" stroke-width="0.8" width="16"
x="160"
y="724"/>
<text fill="#334155" font-size="9" x="182" y="733">서비스 / 드라이버</text>
<rect fill="rgba(217, 119, 6, 0.06)" height="11" rx="2" stroke="#d97706" stroke-width="0.8" width="16"
x="300"
y="724"/>
<text fill="#334155" font-size="9" x="322" y="733">메시지 버스</text>
<rect fill="rgba(99, 102, 241, 0.05)" height="11" rx="2" stroke="#6366f1" stroke-width="0.8" width="16"
x="430"
y="724"/>
<text fill="#334155" font-size="9" x="452" y="733">데이터 저장소</text>
<rect fill="rgba(2, 132, 199, 0.05)" height="11" rx="2" stroke="#d97706" stroke-width="0.8" width="16"
x="560"
y="724"/>
<text fill="#334155" font-size="9" x="582" y="733">운영 (선택사항)</text>
<rect fill="rgba(100, 116, 139, 0.03)" height="11" rx="2" stroke="#64748b" stroke-width="0.8" width="16"
x="700"
y="724"/>
<text fill="#334155" font-size="9" x="722" y="733">디바이스 / 외부</text>
<line stroke="#e11d48" stroke-dasharray="4,3" stroke-width="0.8" x1="870" x2="886" y1="730"
y2="730"/>
<text fill="#334155" font-size="9" x="892" y="733">인증 흐름</text>
<text fill="#64748b" font-size="9" x="960" y="733">▼ 명령 하강 ▲ 데이터 상승</text>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 KiB

@@ -0,0 +1,270 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
- Copyright 2016-present the IoT DC3 original author or authors.
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<svg xmlns="http://www.w3.org/2000/svg" aria-label="Панорама архитектуры IoT DC3" role="img" viewBox="0 0 1200 768">
<defs>
<marker id="dc3-ah" markerHeight="7" markerWidth="10" orient="auto" refX="9" refY="3.5">
<polygon fill="#94a3b8" points="0 0, 10 3.5, 0 7"/>
</marker>
<marker id="dc3-ah-amber" markerHeight="7" markerWidth="10" orient="auto" refX="9" refY="3.5">
<polygon fill="#d97706" points="0 0, 10 3.5, 0 7"/>
</marker>
<marker id="dc3-ah-rose" markerHeight="7" markerWidth="10" orient="auto" refX="9" refY="3.5">
<polygon fill="#e11d48" points="0 0, 10 3.5, 0 7"/>
</marker>
<pattern id="dc3-grid" height="40" patternUnits="userSpaceOnUse" width="40">
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#cbd5e1" stroke-width="0.5"/>
</pattern>
</defs>
<rect fill="url(#dc3-grid)" height="100%" width="100%"/>
<!-- regions -->
<rect fill="rgba(5, 150, 105, 0.05)" height="108" rx="12" stroke="#059669" stroke-dasharray="6,3"
stroke-width="0.8" width="756"
x="52" y="262"/>
<text fill="#059669" font-size="10" font-weight="600" x="64" y="280">Центральные сервисы · gRPC взаимосвязь (Facade:
api / grpc / local)
</text>
<rect fill="rgba(5, 150, 105, 0.05)" height="108" rx="12" stroke="#059669" stroke-dasharray="6,3"
stroke-width="0.8" width="756"
x="52" y="496"/>
<text fill="#059669" font-size="10" font-weight="600" x="64" y="514">Слой драйверов · 28+ протокольных драйверов
(gRPC ↔
менеджер, через RabbitMQ)
</text>
<rect fill="rgba(217, 119, 6, 0.06)" height="200" rx="12" stroke="#d97706" stroke-dasharray="6,3"
stroke-width="0.8"
width="300" x="840" y="502"/>
<text fill="#d97706" font-size="10" font-weight="600" x="852" y="520">Наблюдаемость (опционально)</text>
<!-- arrows -->
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="175" x2="175" y1="134" y2="171"/>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="412" x2="412" y1="134" y2="171"/>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="667" x2="667" y1="134" y2="171"/>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="415" x2="415" y1="232" y2="289"/>
<text fill="#64748b" font-size="9" x="423" y="252">HTTP /api</text>
<line marker-end="url(#dc3-ah-rose)" stroke="#e11d48" stroke-dasharray="4,4" stroke-width="0.8"
x1="120" x2="120"
y1="232" y2="289"/>
<text fill="#e11d48" font-size="8" x="58" y="258">JWT проверка gRPC</text>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="398" x2="398" y1="372" y2="406"/>
<text fill="#64748b" font-size="8" x="352" y="392">Команда▼</text>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="462" x2="462" y1="406" y2="374"/>
<text fill="#64748b" font-size="8" x="470" y="392">▲Данные</text>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="398" x2="398" y1="466" y2="494"/>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="462" x2="462" y1="494" y2="468"/>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="398" x2="398" y1="604" y2="642"/>
<text fill="#64748b" font-size="8" x="352" y="626">Запись▼</text>
<line marker-end="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="462" x2="462" y1="642" y2="606"/>
<text fill="#64748b" font-size="8" x="470" y="626">▲Чтение</text>
<line marker-end="url(#dc3-ah)" marker-start="url(#dc3-ah)" stroke="#94a3b8" stroke-width="0.8" x1="808"
x2="838" y1="330"
y2="330"/>
<text fill="#64748b" font-size="8" x="812" y="322">JDBC</text>
<line marker-end="url(#dc3-ah-amber)" stroke="#d97706" stroke-dasharray="4,4" stroke-width="0.8"
x1="980" x2="980"
y1="466" y2="501"/>
<text fill="#d97706" font-size="8" x="986" y="487">metrics/logs</text>
<!-- Band 1: clients -->
<rect fill="rgba(8, 145, 178, 0.07)" height="64" rx="6" stroke="#0891b2" stroke-width="0.8" width="230"
x="60"
y="70"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="175" y="98">Web консоль
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="175" y="116">Vue3 · Vite8 · Element Plus · :8080</text>
<rect fill="rgba(8, 145, 178, 0.07)" height="64" rx="6" stroke="#0891b2" stroke-width="0.8" width="215"
x="305"
y="70"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="412" y="98">dc3-cli
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="412" y="116">TypeScript CLI (HTTP)</text>
<rect fill="rgba(8, 145, 178, 0.07)" height="64" rx="6" stroke="#0891b2" stroke-width="0.8" width="265"
x="535"
y="70"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="667" y="98">
AI Agent / MCP Client
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="667" y="116">Чат · Вызов инструментов · OAuth2</text>
<!-- Band 2: gateway -->
<rect fill="rgba(5, 150, 105, 0.07)" height="58" rx="6" stroke="#059669" stroke-width="0.8" width="740"
x="60"
y="174"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="430" y="200">dc3-gateway · API шлюз
:8000
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="430" y="218">Spring Cloud Gateway (WebFlux) ·
маршрутизация +
фильтр аутентификации + ограничение скорости
</text>
<!-- Band 3: center services -->
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="176"
x="60"
y="292"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="148" y="316">auth</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="148" y="332">Аутентификация · Арендатор · RBAC</text>
<text fill="#059669" font-size="8" text-anchor="middle" x="148" y="346">:8300 / gRPC 9300</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="176"
x="246"
y="292"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="334" y="316">manager
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="334" y="332">Driver/Device/Point/Profile</text>
<text fill="#059669" font-size="8" text-anchor="middle" x="334" y="346">:8400 / gRPC 9400</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="176"
x="432"
y="292"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="520" y="316">data</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="520" y="332">Значение точки · Команда · История</text>
<text fill="#059669" font-size="8" text-anchor="middle" x="520" y="346">:8500 / gRPC 9500</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="182"
x="618"
y="292"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="709" y="316">agentic
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="709" y="332">Вызов инструментов AI · Сессия</text>
<text fill="#059669" font-size="8" text-anchor="middle" x="709" y="346">:8600 · Spring AI</text>
<!-- Band 4: message bus -->
<rect fill="rgba(217, 119, 6, 0.06)" height="56" rx="6" stroke="#d97706" stroke-width="0.8" width="740"
x="60"
y="410"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="430" y="435">
Шина сообщений RabbitMQ
</text>
<text fill="#d97706" font-size="9" text-anchor="middle" x="430" y="453">point_value · point_command · result · event
· notify | MQTT :1883
</text>
<!-- Band 5: drivers -->
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="150"
x="60"
y="526"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="135" y="552">Modbus
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="135" y="570">TCP / RTU</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="140"
x="220"
y="526"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="290" y="552">
OPC
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="290" y="570">UA / DA</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="120"
x="370"
y="526"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="430" y="552">S7 PLC
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="430" y="570">Siemens</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="62" rx="6" stroke="#059669" stroke-width="0.8" width="120"
x="500"
y="526"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="560" y="552">
MQTT
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="560" y="570">Broker</text>
<rect fill="rgba(100, 116, 139, 0.03)" height="62" rx="6" stroke="#64748b" stroke-width="0.8" width="170"
x="630"
y="526"/>
<text fill="#334155" font-size="11" font-weight="600" text-anchor="middle" x="715" y="552">
+ 24 протокола
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="715" y="570">BACnet·SNMP·IEC104·CoAP…</text>
<!-- Band 6: devices -->
<rect fill="rgba(100, 116, 139, 0.03)" height="58" rx="6" stroke="#64748b" stroke-width="0.8" width="740"
x="60"
y="644"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="430" y="670">
Полевые устройства
</text>
<text fill="#334155" font-size="9" text-anchor="middle" x="430" y="688">PLC · Датчик · Счётчик · Шлюз (Modbus / OPC
/ S7 / MQTT)
</text>
<!-- PostgreSQL -->
<rect fill="rgba(99, 102, 241, 0.05)" height="204" rx="6" stroke="#6366f1" stroke-width="0.8" width="300"
x="840"
y="262"/>
<text fill="#334155" font-size="12" font-weight="600" text-anchor="middle" x="990" y="290">
Хранилище PostgreSQL
</text>
<text fill="#6366f1" font-size="9" x="858" y="318">• TimescaleDB — значения точек / история (временные ряды)</text>
<text fill="#6366f1" font-size="9" x="858" y="338">• pgvector — AI векторный поиск / память</text>
<text fill="#6366f1" font-size="9" x="858" y="358">• AGE — граф (связи устройств)</text>
<text fill="#334155" font-size="9" x="858" y="384">schema:</text>
<text fill="#334155" font-size="8" x="858" y="402">dc3_auth · dc3_manager · dc3_data</text>
<text fill="#334155" font-size="8" x="858" y="416">dc3_agentic · dc3_common</text>
<text fill="#6366f1" font-size="9" text-anchor="middle" x="990" y="446">:35432 → 5432</text>
<!-- Observability -->
<rect fill="rgba(2, 132, 199, 0.05)" height="44" rx="6" stroke="#d97706" stroke-width="0.8"
width="276" x="852"
y="528"/>
<text fill="#334155" font-size="10" font-weight="600" text-anchor="middle" x="990" y="548">EMQX · MQTT
Broker
</text>
<text fill="#334155" font-size="8" text-anchor="middle" x="990" y="562">:31883 · Dashboard :18083</text>
<rect fill="rgba(2, 132, 199, 0.05)" height="44" rx="6" stroke="#d97706" stroke-width="0.8"
width="276" x="852"
y="584"/>
<text fill="#334155" font-size="10" font-weight="600" text-anchor="middle" x="990" y="604">
Конвейер логов ELK
</text>
<text fill="#334155" font-size="8" text-anchor="middle" x="990" y="618">ES · Logstash · Kibana :5601 · APM</text>
<rect fill="rgba(2, 132, 199, 0.05)" height="44" rx="6" stroke="#d97706" stroke-width="0.8"
width="276" x="852"
y="640"/>
<text fill="#334155" font-size="10" font-weight="600" text-anchor="middle" x="990" y="660">
Prometheus + Grafana
</text>
<text fill="#334155" font-size="8" text-anchor="middle" x="990" y="674">Метрики · Панели :3000</text>
<!-- legend -->
<rect fill="rgba(8, 145, 178, 0.07)" height="11" rx="2" stroke="#0891b2" stroke-width="0.8" width="16"
x="60"
y="724"/>
<text fill="#334155" font-size="9" x="82" y="733">Доступ</text>
<rect fill="rgba(5, 150, 105, 0.07)" height="11" rx="2" stroke="#059669" stroke-width="0.8" width="16"
x="160"
y="724"/>
<text fill="#334155" font-size="9" x="182" y="733">Сервисы / Драйверы</text>
<rect fill="rgba(217, 119, 6, 0.06)" height="11" rx="2" stroke="#d97706" stroke-width="0.8" width="16"
x="300"
y="724"/>
<text fill="#334155" font-size="9" x="322" y="733">Шина сообщений</text>
<rect fill="rgba(99, 102, 241, 0.05)" height="11" rx="2" stroke="#6366f1" stroke-width="0.8" width="16"
x="430"
y="724"/>
<text fill="#334155" font-size="9" x="452" y="733">Хранилище данных</text>
<rect fill="rgba(2, 132, 199, 0.05)" height="11" rx="2" stroke="#d97706" stroke-width="0.8" width="16"
x="560"
y="724"/>
<text fill="#334155" font-size="9" x="582" y="733">Операции (опционально)</text>
<rect fill="rgba(100, 116, 139, 0.03)" height="11" rx="2" stroke="#64748b" stroke-width="0.8" width="16"
x="700"
y="724"/>
<text fill="#334155" font-size="9" x="722" y="733">Устройства / Внешние</text>
<line stroke="#e11d48" stroke-dasharray="4,3" stroke-width="0.8" x1="870" x2="886" y1="730"
y2="730"/>
<text fill="#334155" font-size="9" x="892" y="733">Поток аутентификации</text>
<text fill="#64748b" font-size="9" x="960" y="733">▼ Команда вниз ▲ Данные вверх</text>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB