====== MQTT 通訊協定 ======
===== 系統概述 =====
本文檔描述小碧潭捷運站與侑盈能源管理系統之間的 MQTT 通訊協定,涵蓋設備監控數據傳輸、警戒值管理及復歸控制等功能。
===== 連線資訊 =====
* **MQTT 版本**:v3.1.1
* **連接埠**:1883、8883 (SSL)
* **連線網址**:''emst.yo-win.com''
* **連線帳密**:與技術窗口聯絡取得
* **數據更新頻率**:每秒
* **訂閱主題 (Topic)**:
* 正式機
* 規則:''/mrt/xiaobitan/{站號}/{資料類型}''
* 範例:''/mrt/xiaobitan/1/raw_data''
* 測試機
* 規則:''/test/mrt/xiaobitan/{站號}/{資料類型}''
* 範例:''/test/mrt/xiaobitan/1/raw_data''
* **站號定義**:
* 該站點設備的流水號,主要用途為定義出口。
* 此設計是為了保留其他站點可配置多道門的彈性。
* 以 **小碧潭捷運站** 為例,其站號為 **1**。
* 以 **台北火車捷運站** 為例,站號可為 1:東、2:西、3:南、4:北門,以此類推。
==== Topic 命名規則 ====
/mrt/xiaobitan/{station_id}/{data_type}
^ 參數 ^ 說明 ^ 範例 ^
| station_id | 站台編號 | 1, 2, 3... |
| data_type | 資料類型 | raw_data, alert_setting, alert_log, switch_light |
===== 系統架構圖 =====
==== 使用者案例圖 ====
{{public:mrt:mqtt.diagram.png}}
==== 時間序列圖 ====
%%{init: {'theme':'dark', 'themeVariables': { 'primaryColor': '#bb2528', 'primaryTextColor': '#fff', 'primaryBorderColor': '#7C0000', 'lineColor': '#F8B229', 'secondaryColor': '#006100', 'tertiaryColor': '#fff', 'background': '#1a1a1a', 'mainBkg': '#2d2d2d', 'secondBkg': '#3d3d3d', 'tertiaryBkg': '#4d4d4d'}}}%%
sequenceDiagram
participant M as MRT
participant E as EMS
participant U as User
Note over M, E: 功能 1: 數據傳輸
loop 監控
M->>E: 原始數據
Note right of E: 顯示於畫面
end
Note over M, E: 功能 2: 警戒報告
alt 超過警戒值
M->>E: 警戒報告
Note right of E: 顯示警戒
end
Note over U, M: 功能 3: 修改警戒值
U->>E: 修改警戒值
E->>M: 新警戒值
Note over U, M: 功能 4: 復歸操作
U->>E: 復歸按鈕
E->>M: 燈號變更
===== MQTT 資料格式定義 =====
==== 1. 原始監控資料 (Raw Data) ====
=== 基本資訊 ===
* **Topic**: ''/mrt/xiaobitan/{station_id}/raw_data''
* **方向**: 捷運站 → 侑盈系統
* **頻率**: 每秒傳送
* **用途**: 即時設備狀態監控
=== 資料結構 ===
{
"temperature": 25.3,
"x_displacement": 2,
"y_displacement": 3,
"z_displacement": 4,
"x_frequency": 2,
"y_frequency": 4,
"z_frequency": 5,
"avg_ele_current": 1.5,
"avg_ele_volt": 220.0,
"light": 0,
"info": {
"position": "xiaobitan_station",
"device_id": "IRM-001",
"timestamp": "2025-06-04 12:47:11"
}
}
=== 欄位說明 ===
^ 欄位名稱 ^ 資料型別 ^ 單位 ^ 說明 ^ 最小值 ^ 最大值 ^ 間距 ^ 警戒值 ^ 備註 ^
| position | String | | 安裝位置 | | | | | xiaobitan_station |
| device_id | String | | 裝置編號 | | | | | IRM-001 |
| temperature | Float | °C | 環境溫度 | 20 | 50 | 5 | 49 | |
| x_displacement | Integer | um | X軸位移量 | 0 | 40 | 10 | 30 | |
| y_displacement | Integer | um | Y軸位移量 | 0 | 40 | 10 | 30 | |
| z_displacement | Integer | um | Z軸位移量 | 0 | 40 | 10 | 30 | |
| x_frequency | Integer | Hz | X軸頻率 | 0 | 50 | 10 | 45 | |
| y_frequency | Integer | Hz | Y軸頻率 | 0 | 50 | 10 | 45 | |
| z_frequency | Integer | Hz | Z軸頻率 | 0 | 50 | 50 | 45 | |
| avg_ele_current | Float | A | 平均電流 | 0 | 5 | 1 | 4 | |
| avg_ele_volt | Float | V | 平均電壓 | 190 | 250 | 10 | 198\\ 242 | |
| light | Integer | | 燈號啟動狀態 | | | | | 0 為異常燈號(橘)\\ 1 為正常燈號(綠) |
==== 2. 警戒值設定資料 (Alert Settings) ====
=== 基本資訊 ===
* **Topic**: ''/mrt/xiaobitan/{station_id}/alert_setting''
* **方向**: 侑盈系統 -> 捷運站;當使用者在侑盈 EMS 上進行數值變更的時候,通知捷運站 IPC
* **用途**: 動態調整監控閾值
=== 資料結構 ===
{
"v_high": 242,
"v_low": 198,
"i_high": 1.9,
"i_low": 0,
"dxyz_displacement_high": 30,
"dxyz_displacement_low": 0,
"dxyz_fz_high": 45,
"dxyz_fz_low": 0,
"temp_high": 48.0,
"temp_low": 0,
"info": {
"position": "xiaobitan_station",
"device_id": "IRM-001",
"timestamp": "2025-06-04 12:47:11"
}
}
=== 警戒值對照表 ===
^ 監控項目 ^ 高警戒值 ^ 低警戒值 ^ 正常範圍 ^ 備註 ^
| 電壓 | 242V | 198V | 190V~250V | Y軸監控 |
| 電流 | 1.9A | 0A | - | 超過即警報 |
| 位移量 | 30mm | 0mm | 0~50mm | XYZ軸綜合 |
| 頻率 | 45Hz | 0Hz | 0~50Hz | XYZ軸綜合 |
| 溫度 | 48.0°C | 0°C | - | 環境溫度 |
=== 告警值接收資料欄位說明 ===
^ 鍵(Key) ^ 資料說明 ^ 型別 ^ 單位 ^
| v_high | 電壓過高警報 | Float | V |
| v_low | 電壓過低警報 | Float | V |
| i_high | 電流過高警報 | Float | A |
| i_low | 電流過低警報 | Float | A |
| dxyz_displacement_high | 三軸位移過高警報 | Integer | um |
| dxyz_displacement_low | 三軸位移過低警報 | Integer | um |
| dxyz_fz_high | 三軸頻率過高警報 | Integer | Hz |
| dxyz_fz_low | 三軸頻率過低警報 | Integer | Hz |
| temp_high | 溫度過高警報 | Float | °C |
| temp_low | 溫度過低警報 | Float | °C |
==== 3. 警報記錄資料 (Alert Log) ====
=== 基本資訊 ===
* **Topic**: ''/mrt/xiaobitan/{station_id}/alert_log''
* **方向**: 捷運站 → 侑盈系統
* **用途**: 異常事件記錄與追蹤
=== 資料結構 ===
{
"v_high_alert": 250, // 電壓過高警報
"temp_low_alert": 10, // 溫度過低警報
// ... (略)
"info": {
"position": "xiaobitan_station", // 小碧潭捷運站
"device_id": "IRM-001", // 設備代號
"timestamp": "2025-06-04 12:47:11" // 發生時間戳
}
}
=== 事件記錄範例 ===
^ 時間戳記 ^ 事件類型 ^ 詳細內容 ^
| 2025-10-11 03:05:06 | 系統操作 | 執行復歸程序 |
| 2025-10-10 03:05:06 | 觸及警戒值 | 電壓過高警報:250V |
| 2025-10-10 03:05:06 | 觸及警戒值 | 溫度過低警報:10°C |
==== 4. 復歸控制訊號 (Switch Light) ====
=== 基本資訊 ===
* **Topic**: ''/mrt/xiaobitan/{station_id}/switch_light''
* **方向**: 侑盈系統 → 捷運站
* **用途**: 遠端復歸控制
=== 資料結構 ===
{
"light": 0,
"info": {
"position": "xiaobitan_station",
"device_id": "IRM-001",
"timestamp": "2025-06-04 12:47:11"
}
}
=== 燈號說明 ===
^ 指令值 ^ 功能 ^ 說明 ^
| 0 | 橘燈 | 異常燈號 |
| 1 | 綠燈 | 正常燈號 |
===== 公共資料結構 =====
==== Info 物件規格 ====
* 所有 MQTT 訊息都包含統一的 ''info'' 物件
* 符合 [[https://zh.wikipedia.org/zh-tw/ISO_8601|ISO 8601]] 標準的一個變體,台灣日光節約使用 +8
"info": {
"position": "xiaobitan_station", // 站台識別碼
"device_id": "IRM-001", // 設備編號
"timestamp": "2025-06-04 12:47:11" // 資料時間戳記 (YYYY-MM-DD HH:mm:ss)
}
===== 注意事項 =====
==== QoS 設定建議 ====
* 原始監控資料: QoS 0 (頻繁傳輸,允許遺失)
* 警戒值設定: QoS 1 (確保送達)
* 警報記錄: QoS 1 (重要事件記錄)
* 復歸控制: QoS 2 (關鍵控制指令)
==== 錯誤處理 ====
* 連線中斷時自動重連
* 資料格式驗證失敗時記錄錯誤
* 超過警戒值時立即發送警報
==== 安全考量 ====
* 建議使用 TLS/SSL 加密傳輸
* 實作適當的認證機制
* 定期更新密碼或憑證