New file |
| | |
| | | # ð æ¨¡åè®¾è®¡ææ¡£ï¼12. 宿¶ç¯å¢ä¿¡æ¯å±ç¤ºï¼â
â
â
â
â
ï¼ |
| | | |
| | | ## ä¸ã模åç®ç |
| | | |
| | | æ¬æ¨¡åç¨äºå¨å®¢æ·ç«¯å¤§å±å®æ¶å±ç¤ºæºæ
§å·¥å°ååºåçç¯å¢ä¿¡æ¯ï¼å
æ¬æ¸©åº¦ã湿度ãç²å°æµåº¦ãæ½å·¥è¿åº¦ãçæ§è½®æçãåæ¶æ¯æå¨æå
容æ©å±ï¼å°å°å¾ãèå¤ç®åµï¼ã |
| | | |
| | | --- |
| | | |
| | | ## äºã主è¦åè½ |
| | | |
| | | | åè½åç§° | æè¿° | |
| | | | ------ | ---------------- | |
| | | | ç¯å¢ä¿¡æ¯å±ç¤º | æå·¥å°åºåå±ç¤ºæ¸©åº¦ã湿度ãç²å°ç | |
| | | | æ½å·¥è¿åº¦å±ç¤º | å±ç¤ºæ½å·¥åé¶æ®µç计åä¸å®æé | |
| | | | çæ§è½®æ | è½®æµæ¾ç¤ºåæå头è§é¢ | |
| | | | å°å°å¾é¢è§ | å°åºåæ æ³¨åä¼ æè®¾å¤ä¸ç¶æ | |
| | | | è夿
åµå¿«è§ | å½å人åå¨åºæ°ãç¾å°çç | |
| | | |
| | | --- |
| | | |
| | | ## ä¸ãæ°æ®æ¥æºè¯´æ |
| | | |
| | | | æ°æ®é¡¹ | æ¥æº | æ¹å¼ | |
| | | | -------- | ------------- | ------------ | |
| | | | 温度/湿度/ç²å° | ä¼ æå¨ä¸ä¼ â æå¡ç«¯è½¬å | ç宿¶ï¼æå¡ç«¯ä¸»å¨æ¨éï¼ | |
| | | | æ½å·¥è¿åº¦ | æ°æ®åºè®°å½ | 客æ·ç«¯å®æ¶è¯·æ±ï¼è½®è¯¢ï¼ | |
| | | | æå头ç»é¢ | æå头/æå¡ç«¯è§é¢è½¬ç æ¥å£ | RTSP/HTTP ææ¾ | |
| | | | è夿
åµ | æå¡ç«¯æ¥å£ | 轮询/æ´æ°æ¨é | |
| | | |
| | | --- |
| | | |
| | | ## åã客æ·ç«¯è®¾è®¡ |
| | | |
| | | ### Qtç»æå»ºè®®ï¼åºäºå¤§å±æ¾ç¤ºï¼ |
| | | |
| | | ```bash |
| | | EnvDisplayModule/ |
| | | âââ EnvMainWindow.ui # 大å±çé¢å¸å± |
| | | âââ EnvRealtimeWidget.h/.cpp # ç¯å¢æ°æ®å±ç¤ºåº |
| | | âââ VideoCarouselWidget.h/.cpp # è§é¢è½®æåº |
| | | âââ MapMiniWidget.h/.cpp # å°å°å¾æ¾ç¤ºåºå |
| | | âââ ProgressWidget.h/.cpp # æ½å·¥è¿åº¦åº |
| | | âââ AttendanceSummaryWidget.h/.cpp # èå¤å¿«è§ |
| | | âââ EnvSocketHandler.h/.cpp # æ¥æ¶æ¨éæ°æ® |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## äºãæå¡ç«¯æ¥å£è®¾è®¡ |
| | | |
| | | ### WebSocket æ¨éæ¥å£ï¼æ¨èï¼ |
| | | |
| | | * å°åï¼`ws://server:port/ws/env` |
| | | * æ¨éæ ¼å¼ï¼JSONï¼ï¼ |
| | | |
| | | ```json |
| | | { |
| | | "area": "ååº1å·å¡å", |
| | | "device_id": "D-1002", |
| | | "temperature": 31.2, |
| | | "humidity": 48.3, |
| | | "dust": 0.76, |
| | | "timestamp": "2025-06-17T14:00:00" |
| | | } |
| | | ``` |
| | | |
| | | ### æ½å·¥è¿åº¦æ¥è¯¢æ¥å£ |
| | | |
| | | * URLï¼`GET /api/progress/list` |
| | | * è¿åå¼ï¼ |
| | | |
| | | ```json |
| | | [ |
| | | { |
| | | "type": "åºå弿", |
| | | "plan": 100, |
| | | "done": 60, |
| | | "unit": "m³", |
| | | "timestamp": "2025-06-17" |
| | | } |
| | | ] |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## å
ãæ°æ®åºç»æè®¾è®¡ |
| | | |
| | | ### ç¯å¢ä¿¡æ¯è¡¨ `env_data` |
| | | |
| | | | åæ®µå | ç±»å | æè¿° | |
| | | | ----------- | -------- | ---- | |
| | | | id | int | ä¸»é® | |
| | | | device\_id | varchar | 设å¤ç¼å· | |
| | | | area | varchar | åºååç§° | |
| | | | temperature | float | 温度 | |
| | | | humidity | float | 湿度 | |
| | | | dust | float | ç²å°æµåº¦ | |
| | | | timestamp | datetime | æ°æ®æ¶é´ | |
| | | |
| | | ### æ½å·¥è¿åº¦è¡¨ `progress_info` |
| | | |
| | | | åæ®µå | ç±»å | æè¿° | |
| | | | --------- | -------- | ----- | |
| | | | id | int | ä¸»é® | |
| | | | type | varchar | æ½å·¥ç±»å | |
| | | | plan | float | é¢è®¡å·¥ä½é | |
| | | | done | float | å½å宿 | |
| | | | unit | varchar | åä½ | |
| | | | timestamp | datetime | æ´æ°æ¶é´ | |
| | | |
| | | --- |
| | | |
| | | # ð¨ æ¨¡åè®¾è®¡ææ¡£ï¼13. è¦æ¥ç®¡çï¼â
â
â
â
ï¼ |
| | | |
| | | ## ä¸ã模åç®ç |
| | | |
| | | 对工å°ä¸çç¯å¢ææ è¿è¡å®æ¶çæµåæ¥è¦å¤æï¼å½æ°å¼è¶
è¿è®¾å®é弿¶è§¦åæ¥è¦ï¼éè¿å£°å
é¢è¦ã客æ·ç«¯æç¤ºãæ´¾åçæ¹å¼è¿è¡éç¯ç®¡çã |
| | | |
| | | --- |
| | | |
| | | ## äºãåè½æ¦è¿° |
| | | |
| | | | åè½ | æè¿° | |
| | | | ----- | ------------------- | |
| | | | éå¼ç®¡ç | æ¯é¡¹ææ å¯è®¾ç½®æå°å¼/æå¤§å¼ï¼å¨æè°æ´ | |
| | | | æ¥è¦è§¦å | æå¡ç«¯å¤æè¶
è¿é弿¶è§¦åè¦æ¥äºä»¶ | |
| | | | 客æ·ç«¯æ¾ç¤º | ææå®¢æ·ç«¯å®æ¶å¼¹åºææ è®°è¦æ¥ä¿¡æ¯ | |
| | | | æ¥è¦è®°å½ | ææå岿¥è¦å
¥åºï¼ä¾æ¥è¯¢ç»è®¡ | |
| | | | æ¥è¦å¤ç | å¯è®°å½å¤çæ¹å¼ï¼èªå¨/æ´¾å/æå¨ï¼ | |
| | | |
| | | --- |
| | | |
| | | ## ä¸ãæ¥è¦è§¦åé»è¾ |
| | | |
| | | ### æå¡ç«¯å¤çæµç¨ï¼ |
| | | |
| | | ``` |
| | | æ°æ®æ¥æ¶ â 夿æ¯å¦è¶
åºéå¼ â æ¯ â |
| | | 1. åå
¥è¦æ¥è¡¨ |
| | | 2. è½¬åæ¥è¦ç»ææå®¢æ·ç«¯ï¼WebSocketï¼ |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## åãæ°æ®åºè¡¨ç»æè®¾è®¡ |
| | | |
| | | ### è¦æ¥ä¿¡æ¯è¡¨ `alarm_info` |
| | | |
| | | | åæ®µå | ç±»å | æè¿° | |
| | | | -------------- | -------- | -------------- | |
| | | | id | int | ä¸»é® | |
| | | | device\_id | varchar | æ¥æºè®¾å¤ç¼å· | |
| | | | metric | varchar | ææ åç§°ï¼æ¸©åº¦çï¼ | |
| | | | value | float | 触åå¼ | |
| | | | threshold\_min | float | æå°éå¼ | |
| | | | threshold\_max | float | æå¤§éå¼ | |
| | | | status | varchar | ç¶æï¼é¢è¦/å¤çä¸/已解å³ï¼ | |
| | | | handler | varchar | å¤ç人 | |
| | | | timestamp | datetime | è§¦åæ¶é´ | |
| | | |
| | | ### éå¼è®¾ç½®è¡¨ `alarm_threshold` |
| | | |
| | | | åæ®µå | ç±»å | æè¿° | |
| | | | ------------ | -------- | ---------- | |
| | | | id | int | ä¸»é® | |
| | | | metric | varchar | ææ ï¼æ¸©åº¦ã湿度çï¼ | |
| | | | min\_value | float | æå°å¼ | |
| | | | max\_value | float | æå¤§å¼ | |
| | | | update\_time | datetime | æ´æ°æ¶é´ | |
| | | |
| | | --- |
| | | |
| | | ## äºã客æ·ç«¯çé¢è®¾è®¡ |
| | | |
| | | ### éå¼ç®¡ççé¢ |
| | | |
| | | * æ¯ææ¥è¯¢ãä¿®æ¹ï¼æéæ ¡éªï¼ |
| | | * ç¨è¡¨æ ¼æ¹å¼å±ç¤ºåææ å½åéå¼ |
| | | |
| | | ### è¦æ¥å±ç¤ºçé¢ |
| | | |
| | | * å¯ä½ä¸ºé¡¶é¨çº¢è²æ¨ªå¹
宿¶æ»å¨ |
| | | * æ¯æå¼¹çªéç¥ãæ¥è¦å表å±ç¤º |
| | | |
| | | --- |
| | | |
| | | ## å
ãæ°æ®æ¨éæ ¼å¼ï¼WebSocketï¼ |
| | | |
| | | ```json |
| | | { |
| | | "type": "alarm", |
| | | "device_id": "D-1002", |
| | | "metric": "ç²å°æµåº¦", |
| | | "value": 1.35, |
| | | "min": 0.0, |
| | | "max": 1.2, |
| | | "status": "é¢è¦", |
| | | "timestamp": "2025-06-17T14:01:00" |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## ä¸ã客æ·ç«¯æ¨¡å设计建议 |
| | | |
| | | ```bash |
| | | AlarmModule/ |
| | | âââ AlarmManager.h/.cpp # é»è¾å¤çãéå¼å¤æå°è£
|
| | | âââ AlarmThresholdWidget.ui # éå¼è®¾ç½®çé¢ |
| | | âââ AlarmDisplayWidget.ui # 宿¶è¦æ¥æ¾ç¤ºåº |
| | | âââ AlarmWebSocketHandler.cpp # æ¨éå¤çå¨ |
| | | ``` |
| | | |
| | | ------ |
| | | |
| | | # â
æ¨èæ¶æï¼**æ°æ®ç»ä¸ç®¡çï¼Widget åªè´è´£æ¾ç¤º** |
| | | |
| | | > ð **æ ¸å¿ææ³ï¼æ°æ®è·åç»ä¸å¤çï¼UI æ¾ç¤ºå嫿´æ°** |
| | | |
| | | ------ |
| | | |
| | | ## ð§ æ¶æåå±å»ºè®® |
| | | |
| | | ### 1. â
æ°æ®ä¸å¿ï¼ç»ä¸ç®¡çï¼ |
| | | |
| | | è´è´£æ¥æ¶ãè§£æãç¼åæææ°æ®ï¼å
æ¬æ¨éåè½®è¯¢ï¼ |
| | | **æ¨èåä¾ç±»**ï¼`DataCenter` æ `DataDispatcher` |
| | | |
| | | å®è´è´£ï¼ |
| | | |
| | | - ç»ä¸ WebSocket/TCP æ¥æ¶ä¼ æå¨æ°æ®ï¼æ¨éï¼ |
| | | - 宿¶è½®è¯¢æ¥å£æåæ°æ®åºæ°æ® |
| | | - ç»´æ¤æ¬å°ç¼åï¼å¦å½å温度ãè¿åº¦ãèå¤ï¼ |
| | | - åå° Qt ä¿¡å·ï¼`dataUpdated()`ï¼éç¥ææéè¦å·æ°æ¾ç¤ºçæ§ä»¶ |
| | | |
| | | ```cpp |
| | | class DataCenter : public QObject { |
| | | Q_OBJECT |
| | | public: |
| | | static DataCenter* instance(); // åä¾ |
| | | |
| | | void init(); // åå§åæ°æ®æºè¿æ¥ã宿¶å¨ç |
| | | QVariantMap getEnvData(); // è·åå½åç¼å |
| | | QVariantMap getProgressData(); |
| | | |
| | | signals: |
| | | void envDataUpdated(); |
| | | void progressDataUpdated(); |
| | | void attendDataUpdated(); |
| | | }; |
| | | ``` |
| | | |
| | | ------ |
| | | |
| | | ### 2. â
æ¯ä¸ªååº widget ââ åªçå¬ãæ¾ç¤º |
| | | |
| | | å个 widget 䏿³¨å**ä¸ä»¶äºï¼æ¾ç¤º UI + æ¥æ¶æ°æ®æ´æ°ä¿¡å·** |
| | | |
| | | - `EnvWidget` çå¬ `envDataUpdated()`ï¼èªå¨æ´æ°æ¸©åº¦/湿度æ ç¾ |
| | | - `ProgressWidget` çå¬ `progressDataUpdated()`ï¼å·æ°å¾è¡¨ |
| | | - `AttendWidget` çå¬ `attendDataUpdated()`ï¼å±ç¤ºåºå¤äººæ° |
| | | - `AlarmWidget` çå¬ç»ä¸åè¦ä¿¡å· `alarmTriggered(...)`ï¼å¼¹åºæç¤º |
| | | |
| | | ```cpp |
| | | connect(DataCenter::instance(), &DataCenter::envDataUpdated, this, &EnvWidget::updateDisplay); |
| | | ``` |
| | | |
| | | ------ |
| | | |
| | | ### 3. â
è§é¢ææ¾é¨åï¼ä¾å¤ï¼ |
| | | |
| | | - RTSP è§é¢æ¨èç±æ¯ä¸ª `CameraWidget` èªè¡ç»´æ¤æµå°å䏿æ¾å¨ï¼å¦ VLC/FFmpeg å°è£
ï¼ |
| | | - å 为æ¯ä¸ªçæ§ç»é¢ææ¾è´è½½é«ãå¹¶ä¸ UI æ§å¶è¾å¼ºï¼è½®æãåæ¢ï¼ |
| | | - å¯ç»ä¸é
ç½®è§é¢æºï¼ä½ææ¾é»è¾åå¸å¨æ§ä»¶ä¸ |
| | | |
| | | ------ |
| | | |
| | | ## â³ï¸ æ»ç»å¯¹æ¯ |
| | | |
| | | | æ¹æ¡ | ç¹ç¹ | 建议 | |
| | | | ------------------------ | --------------------------------------- | ---------------------------------------------- | |
| | | | **ç»ä¸ç®¡çï¼æ¨èï¼** | æææ°æ®ç»ä¸æ¥å
¥ãç¼åã转åç»å widget | æ´æ¸
æ°ãæ´æç»´æ¤ãæ´å¥½è§£è¦ | |
| | | | åå«å¨å widget è·åæ°æ® | æ§ä»¶èªå·±å»è½®è¯¢ãç»´æ¤å®æ¶å¨ãè§£ææ¥å£ | åæç®åï¼åæå®¹ææ··ä¹±ãéå¤ä»£ç ãä¸å¥½ç»ä¸æ´æ° | |
| | | |
| | | ------ |
| | | |
| | | ## â
ç»ä¸ç®¡ççä¼ç¹ |
| | | |
| | | - ð **è§£è¦**ï¼UI åæ°æ®å¤çåå¼ï¼æ¸
æ°èè´£ |
| | | - ð¦ **ç¼åéä¸**ï¼å¤ä¸ª widget å
±äº«æ°æ®ï¼ä¸éå¤è®¿é®æ¥å£ |
| | | - ð **ç»ä¸è½®è¯¢/æ¨éå¤ç**ï¼æ¹ä¾¿æ©å±åè®®ãæ¥å£ãè°è¯ |
| | | - ð¨ **ç»ä¸åè¦å¤ç**ï¼åè¦å¤æé»è¾ä¸éè¦å卿¯ä¸ª widget ä¸ |
| | | |
| | | ------ |
| | | |
| | | ## ð§± æ¨èä½ å®ç°ç模åç±»åå |
| | | |
| | | | 模å | ç±»å | ä½ç¨ | |
| | | | --------------- | -------------------------------- | ------------------------------------------- | |
| | | | æ°æ®ä¸å¿ | `DataCenter` | ç®¡çæææ°æ®éä¿¡ãç¼åãä¿¡å· | |
| | | | ç½ç»éä¿¡ | `WebSocketClient` / `HttpClient` | å®ç°æ¨é/轮询 | |
| | | | UI - ç¯å¢ä¿¡æ¯åº | `EnvDisplayWidget` | çå¬ `envDataUpdated()` | |
| | | | UI - è§é¢è½®æ | `CameraCarouselWidget` | ç»´æ¤ææ¾å¨ | |
| | | | UI - å°å¾ | `MapWidget` | æ ¹æ® `deviceDataUpdated()` æ·»å 设å¤ç¶æå¾æ | |
| | | | UI - è¿åº¦å¾ | `ProgressChartWidget` | å±ç¤ºæ°æ®åºè¿åº¦æ°æ® | |
| | | | UI - èå¤ | `AttendWidget` | å±ç¤ºæå¡ç«¯èå¤ç»æ | |
| | | | UI - åè¦ | `AlarmBannerWidget` | ç»ä¸æ¥æ¶é¢è¦æ¾ç¤º | |
| | | |
| | | ------ |
| | | |