KeremOzcn/industrialsense-iot-monitoring

GitHub: KeremOzcn/industrialsense-iot-monitoring

这是一个专为纺织工厂设计的实时物联网监控与异常检测系统,结合规则引擎和AI预测提升生产可靠性。

Stars: 0 | Forks: 0

# IndustrialSense **实时物联网传感器监控与异常检测系统 — 专为纺织编织工厂环境设计。** 一款生产级的 Spring Boot 应用程序,用于接收来自工厂车间设备(织机、纱锭、电力系统)的实时传感器数据,运行可配置的基于规则的异常检测,并提供安全的 REST API。内置的 AI 预测器使用 Z 分数分析来预测未来的异常,从而在造成停机前进行预警。 ## 架构 ``` ┌──────────────────────────────────────────────────────────────┐ │ Client / Swagger UI │ └─────────────────────────┬────────────────────────────────────┘ │ HTTP (JWT Bearer) ┌─────────────────────────▼────────────────────────────────────┐ │ sensor-api (Spring Boot 3.2 / Java 17) │ │ │ │ ┌─────────────┐ ┌───────────────────┐ ┌───────────────┐ │ │ │ Auth Layer │ │ REST Controllers │ │ Rate Limit │ │ │ │ JWT / BCrypt│ │ /api/sensors │ │ Bucket4j + │ │ │ └─────────────┘ │ /api/anomalies │ │ Caffeine │ │ │ │ /api/auth │ └───────────────┘ │ │ └────────┬──────────┘ │ │ │ │ │ ┌─────────────────────────▼──────────────────────────────┐ │ │ │ Service Layer │ │ │ │ SensorService │ SensorReadingService │ │ │ │ AnomalyDetectionService │ AIPredictionService │ │ │ │ (rule engine) (async WebClient) │ │ │ └─────────────────────────┬──────────────────────────────┘ │ │ │ │ │ ┌─────────────────────────▼──────────────────────────────┐ │ │ │ Persistence (Spring Data JPA + Flyway) │ │ │ └─────────────────────────┬──────────────────────────────┘ │ └────────────────────────────┼─────────────────────────────────┘ │ ┌───────────────────┼──────────────────┐ │ │ │ ┌────────▼──────┐ ┌─────────▼──────┐ ┌────────▼──────────┐ │ PostgreSQL 15 │ │ Redis 7 │ │ anomaly-predictor │ │ (primary DB) │ │ (response │ │ FastAPI / Python │ │ │ │ cache) │ │ Z-score model │ └───────────────┘ └────────────────┘ └───────────────────┘ ▲ ┌────────┴─────────────────────────────────────────────────┐ │ sensor-simulator (Spring Boot, embedded) │ │ Generates realistic readings every 5 s with ±5% noise │ │ and configurable anomaly injection (default: 10%) │ └──────────────────────────────────────────────────────────┘ ``` ## 传感器类型(纺织工厂领域) | 类型 | 单位 | 正常范围 | 异常阈值 | |---|---|---|---| | `TEMPERATURE` | °C | 22 – 38 | < 10 或 > 52 | | `HUMIDITY` | %RH | 58 – 76 | < 45 或 > 88 | | `VIBRATION` | mm/s | 0.3 – 2.1 | < 0 或 > 5.5 | | `THREAD_TENSION` | cN | 90 – 170 | < 55 或 > 220 | | `RPM` | rpm | 380 – 710 | < 280 或 > 820 | | `POWER_CONSUMPTION` | kW | 30 – 100 | < 2 或 > 145 | ## 技术栈 | 层级 | 技术 | |---|---| | 语言 | Java 17 | | 框架 | Spring Boot 3.2.5 | | 安全 | Spring Security 6, JJWT 0.12.6 (HMAC-SHA256) | | 持久层 | Spring Data JPA, Hibernate 6, Flyway | | 数据库 | PostgreSQL 15 (生产) / H2 内存数据库 (开发/测试) | | 缓存 | Redis 7 + Spring Cache | | 速率限制 | Bucket4j + Caffeine (有界缓存, 支持 10k 客户端) | | HTTP 客户端 | Spring WebFlux WebClient (非阻塞) | | 构建工具 | Maven 3 — 多模块 | | API 文档 | SpringDoc OpenAPI 3 / Swagger UI | | AI 预测器 | FastAPI + NumPy (Z 分数, Python 3.11) | | 测试 | JUnit 5, Mockito, AssertJ, Spring Boot Test | | 容器化 | Docker, Docker Compose | ## 快速开始 ### 选项 1 — Docker Compose (推荐) 启动 PostgreSQL、Redis 和 AI 预测器。同时运行 Spring Boot 应用。 ``` # 克隆 git clone && cd JavaProject # 设置所需密钥 export APP_JWT_SECRET="replace-with-a-256-bit-secret" export ADMIN_USERNAME="admin" export ADMIN_PASSWORD="{bcrypt}\$2a\$10\$..." # bcrypt hash # 启动基础设施 docker compose up -d # 运行 API (生产配置) cd sensor-api mvn spring-boot:run -Dspring-boot.run.profiles=prod ``` - API: `http://localhost:8080` - 生产环境中 Swagger UI 已禁用(可通过 `springdoc.swagger-ui.enabled=true` 重新启用) ### 选项 2 — 开发模式 (无 Docker) 使用 H2 内存数据库。模拟器自动启动。 ``` cd sensor-api mvn spring-boot:run ``` - API: `http://localhost:8081` - Swagger UI: `http://localhost:8081/swagger-ui.html` - H2 控制台: `http://localhost:8081/h2-console` - 默认凭据: `admin` / `admin123` ## 环境变量(生产环境) | 变量 | 是否必需 | 描述 | |---|---|---| | `APP_JWT_SECRET` | 是 | HMAC-SHA256 签名密钥 (≥ 256 位) | | `ADMIN_USERNAME` | 是 | 管理员账户用户名 | | `ADMIN_PASSWORD` | 是 | BCrypt 编码的管理员密码 | | `SPRING_DATASOURCE_URL` | 是 | PostgreSQL JDBC URL | | `SPRING_DATASOURCE_USERNAME` | 是 | 数据库用户名 | | `SPRING_DATASOURCE_PASSWORD` | 是 | 数据库密码 | | `SPRING_REDIS_HOST` | 是 | Redis 主机名 | | `AI_PREDICTOR_URL` | 否 | AI 预测器基础 URL (默认: `http://localhost:8000`) | ## API 参考 除 `/api/auth/login` 外,所有端点都需要 `Authorization: Bearer `。 ### 认证 ``` POST /api/auth/login ``` ``` // Request { "username": "admin", "password": "admin123" } // Response { "success": true, "data": { "token": "eyJ...", "tokenType": "Bearer", "expiresIn": 86400 } } ``` ### 传感器 | 方法 | 路径 | 描述 | |---|---|---| | `POST` | `/api/sensors` | 注册传感器 | | `GET` | `/api/sensors?page=0&size=50` | 列出所有传感器(分页) | | `GET` | `/api/sensors/{id}` | 根据 ID 获取传感器 | **注册示例:** ``` { "name": "VIBR-LOOM-01", "type": "VIBRATION", "location": "Weaving Hall A", "unit": "mm/s" } ``` ### 读数 | 方法 | 路径 | 描述 | |---|---|---| | `POST` | `/api/sensors/{id}/readings` | 提交读数 | | `GET` | `/api/sensors/{id}/readings` | 获取读数(分页,最新优先) | | `GET` | `/api/sensors/{id}/readings?anomalyOnly=true` | 仅异常读数 | **提交示例:** ``` { "value": 4.8 } ``` ### 异常 | 方法 | 路径 | 描述 | |---|---|---| | `GET` | `/api/anomalies` | 所有传感器的所有异常(分页) | 所有响应使用统一的信封格式: ``` { "success": true, "data": { ... }, "error": null } ``` ## 异常检测流水线 当一个读数被提交时,会运行两个引擎: 1. **规则引擎** (`AnomalyDetectionService`) — 同步,在事务内执行。 加载该传感器的所有 `AnomalyRule` 记录并检查每个阈值。如果任何规则被违反(`value < minThreshold` 或 `value > maxThreshold`),则该读数将以 `isAnomaly = true` 持久化保存。 2. **AI 预测器** (`AIPredictionService`) — 异步,非阻塞。 读数保存后,最近的 20 个读数将通过 WebClient 发送到 FastAPI Z 分数服务。如果 `|Z-score| ≥ 3.0` (3-sigma 规则),则会标记一个预测性异常。此过程不会阻塞 HTTP 响应。 ## 运行测试 ``` cd sensor-api mvn test ``` **17 个测试 — 0 个失败:** | 测试套件 | 测试数 | 类型 | |---|---|---| | `AnomalyDetectionServiceTest` | 10 — 边界、多规则、空安全 | 单元测试 | | `SensorIntegrationTest` | 6 — 完整 HTTP、真实 Spring 上下文、H2 | 集成测试 | | `IndustrialSenseApplicationTests` | 1 — 上下文加载 | 冒烟测试 | ## 项目结构 ``` JavaProject/ ├── pom.xml # Root parent POM ├── docker-compose.yml # PostgreSQL + Redis + predictor ├── sensor-api/ # Main Spring Boot application │ └── src/ │ ├── main/java/com/industrialsense/ │ │ ├── controller/ # REST controllers (Auth, Sensor, Anomaly) │ │ ├── service/ # Business logic │ │ ├── model/ # JPA entities │ │ ├── dto/ # Request / response Java records │ │ ├── repository/ # Spring Data JPA repositories │ │ ├── security/ # JWT provider, auth filter, SecurityConfig │ │ ├── config/ # CORS, cache, OpenAPI, properties │ │ └── filter/ # RateLimitFilter, RequestLoggingFilter │ └── test/java/com/industrialsense/ │ ├── SensorIntegrationTest.java │ └── service/AnomalyDetectionServiceTest.java ├── sensor-simulator/ # Embedded scheduled data generator │ └── src/main/java/.../simulator/ │ └── SensorDataGenerator.java └── anomaly-predictor/ # Python AI microservice ├── main.py # Z-score prediction endpoint (FastAPI) ├── requirements.txt └── Dockerfile ``` ## 安全设计 - JWT 认证 (HMAC-SHA256, 符合 RFC 6750 — `expiresIn` 单位为秒) - BCrypt 密码哈希 - 速率限制:每 IP 每 10 秒 20 次请求 — 使用 Caffeine 支持的有界缓存(最大 10k 条目,2 分钟 TTL)的 Bucket4j - 所有日志记录的请求 URI 均防止 CRLF 注入 - 所有请求 DTO 使用 Bean 验证 (`@NotBlank`, `@NotNull`, `@Size`, `@Pattern`) - 不信任 `X-Forwarded-For` — 客户端 IP 仅从 `remoteAddr` 解析 - 生产环境禁用 Swagger UI 和 H2 控制台 - 通配符 CORS 限制于 `@Profile("!prod")` - 无硬编码密钥 — 所有凭据在启动时从环境变量获取;如果未设置,`@NotBlank` 验证会快速失败 ## 许可证 MIT
标签:AV绕过, Docker, FastAPI, JWT认证, REST API, Spring Boot, Swagger UI, TCP/UDP协议, Z-score分析, 云计算, 人工智能, 传感器数据处理, 域名枚举, 安全防御评估, 工业物联网, 异常检测, 搜索引擎查询, 测试用例, 生产环境部署, 用户模式Hook绕过, 纺织制造, 缓存优化, 规则引擎, 请求拦截, 预测性维护