Modbus轉TCP/IP到AWS雲端:大型設施儀表監測系統完整導入指南
核心重點:昶特ATLANTIS提供Modbus儀表與邊緣網關採集解決方案,從現場測點到邊緣計算層完全負責。AWS雲端部署、應用層開發與整合由客戶自行負責。本指南提供完整的技術銜接範例,讓您的開發團隊無縫整合。
系統架構四層分責說明
| 層級 | 功能說明 | ATLANTIS負責 | 客戶自行負責 |
|---|---|---|---|
| 第一層:儀表層 | 壓力錶、溫度計、流量錶等Modbus儀表 | ✅ 設備供應、規格選型、校正認證 | — |
| 第二層:採集層(邊緣網關) | 讀取Modbus儀表,協議轉換,本地邏輯處理 | ✅ 網關供應、RS485配線、Modbus輪詢配置、本地緩存、故障診斷 | — |
| 第三層:網路傳輸層 | 邊緣網關→AWS之間的網路連線、協議選擇、加密傳輸 | ✅ 提供HTTP/MQTT兩種接口,協議文件與認證方式 | ✅ 網路環境配置、防火牆開放、VPN設置(如需要) |
| 第四層:雲端處理層 | AWS Lambda、DynamoDB、數據存儲、預警邏輯、API開發 | — | ✅ 完全由客戶負責。我們提供API對接文件與範例代碼 |
| 第五層:應用層 | Drupal儀表板、Google Chart圖表、SMS/Line預警 | — | ✅ 完全由客戶負責。我們提供API格式與集成範例 |
🔴 重要:應用層責任邊界
ATLANTIS提供的邊緣網關只負責「數據採集與本地處理」。若您需要雲端監測、預警通知、儀表板展示,這些完全由您的開發團隊透過AWS服務自行建置。我們提供API文件與Python範例代碼供參考,但不提供云端部署或應用開發服務。
第一部份:ATLANTIS負責範疇——邊緣網關架構
1.1 典型的三層邊緣網關架構
第一層:感測器側(您的現場儀表)
- Modbus RTU儀表(壓力錶、溫度計、流量錶等)
- RS-485通訊線,最多127個儀表並聯
- 每10秒輪詢一次全部感測器
第二層:邊緣網關(ATLANTIS提供)
- 採集所有Modbus數據
- 執行本地異常檢測(隔離森林演算法)
- 本地快取72小時數據(網路中斷時補償)
- 決定哪些數據上傳,降低雲端流量
第三層:網路傳輸(由客戶配置網路環境)
- 邊緣網關透過企業LAN/WAN連接網際網路
- 支援HTTP/HTTPS或MQTT over TLS兩種協議
- 所有數據加密傳輸,支援VPN
1.2 邊緣網關的關鍵功能
| 功能 | 說明 | 好處 |
|---|---|---|
| Modbus RTU輪詢 | 每10秒讀取一次所有RS485儀表 | 實時性強,延遲<1秒 |
| 本地緩存 | 若網路中斷,自動存儲72小時數據 | 網路恢復後自動補傳,無數據遺失 |
| 孤立森林異常檢測 | 在邊緣層執行ML異常檢測 | 不依賴雲端,故障秒級檢出 |
| 智能上傳策略 | 正常數據5分鐘上傳一次,異常數據即時上傳 | 降低AWS流量成本50~70% |
| 雙重備援 | 雙SIM卡、雙網口、電池備份 | 99.5%可用性保證 |
1.3 邊緣網關上傳數據格式(ATLANTIS標準)
邊緣網關每5分鐘向您的AWS發送一次標準JSON格式。您需要在AWS後端建立HTTP/MQTT接收端點來解析此數據。
📤 邊緣網關上傳的JSON結構說明:
| 欄位名稱 | 型別 | 說明 | 範例值 |
|---|---|---|---|
| gateway_id | String | 邊緣網關的唯一識別碼 | "GW-001" |
| timestamp | ISO 8601 | UTC時間戳,所有測點的同步時間 | "2026-09-09T14:35:00Z" |
| readings[] | Array | 所有感測器的測值陣列 | [{...}, {...}] |
| readings[].sensor_id | Integer | 感測器編號(1~127) | 1 |
| readings[].sensor_name | String | 感測器名稱,便於識別 | "熱水系統壓力" |
| readings[].value | Float | 測量值 | 3.5 |
| readings[].unit | String | 測量單位 | "bar" / "°C" / "L/min" |
| readings[].status | Enum | 邊緣層判斷的狀態 | "normal" / "warning" / "alarm" |
| edge_metrics | Object | 邊緣網關自身狀態(CPU、內存、網延) | {"cpu_usage": 28.5, ...} |
📡 HTTP傳輸細節:
- 🔒 認證方式: Authorization 頭使用 Bearer Token 或 API Key
- 🔒 簽名驗證: X-Signature 頭包含 HMAC-SHA256(body, SECRET_KEY) — 客戶需驗證簽名防止偽造
- 🔒 Content-Type: application/json(UTF-8編碼)
- 🔒 上傳頻率: 預設5分鐘一次(客戶可自行調整)
- 🔒 超時設定: 網關等待AWS回應最多10秒,若超時則本地緩存,下次重傳
👉 AWS側需建立的接收端點:
- ✅ HTTP端點:POST /api/v1/data/push
- ✅ 驗證簽名:解析X-Signature,用HMAC-SHA256驗證
- ✅ 解析JSON:提取gateway_id、timestamp、readings陣列
- ✅ 寫入DynamoDB:插入sensor_readings表
- ✅ 檢查預警:與sensor_config比較閾值,觸發預警邏輯
- ✅ 返回HTTP 200:確認收訊成功
第二部份:客戶自行負責——AWS雲端整合範例
請確保您的開發團隊具備AWS、Python、Node.js或其他雲端開發經驗。
2.1 AWS Lambda函數邏輯 — 接收與驗證邊緣數據
AWS Lambda是無伺服器運算服務,完全由客戶部署與維護。以下是Python實現的關鍵邏輯流程:
🐍 Lambda函數的五大步驟:
- ✅ 步驟1:簽名驗證 — 從HTTP頭取出X-Signature,用HMAC-SHA256驗證邊緣網關身份(防止偽造數據)
- ✅ 步驟2:解析JSON — 提取gateway_id、timestamp、readings陣列
- ✅ 步驟3:閾值檢查 — 逐筆讀取sensor_config表,比較測值與high_threshold / low_threshold
- ✅ 步驟4:觸發預警 — 若超過閾值,寫入alarm_logs表,調用AWS SNS發送簡訊
- ✅ 步驟5:存儲數據 — 將完整數據寫入sensor_readings(DynamoDB時序表),記錄received_at時間戳
技術棧要求:
- Python 3.9+ + boto3(AWS SDK)
- DynamoDB表:sensor_readings、alarm_logs、sensor_config
- 環境變數:GATEWAY_SECRET_KEY(用於HMAC驗證)
- IAM角色:允許Lambda讀寫DynamoDB與調用SNS
- Lambda記憶體:512MB起(時序數據處理)
- 逾時設定:60秒
偽代碼邏輯示意:
def lambda_handler(event):
1. 驗證簽名 = HMAC-SHA256(body, SECRET_KEY)
2. IF 簽名無效 THEN 返回 403
3. data = parse_json(event.body)
4. FOR 每個 reading IN data.readings:
config = DynamoDB_get(sensor_id)
IF reading.value > config.high_threshold THEN
DynamoDB_insert(alarm_logs)
SNS_publish_SMS(config.phone_number)
5. DynamoDB_insert(sensor_readings) # 存儲全數據
6. return HTTP 200 success
2.2 REST API設計 — 前端Drupal查詢儀表板數據
Drupal前端通過REST API從AWS後端拉取實時數據與歷史趨勢。API可用Flask、FastAPI或AWS API Gateway實現,由客戶自行開發。
🌐 兩個核心API端點:
端點A:查詢特定感測器數據
- 📍 URL: GET /api/v1/dashboard/sensor/{sensor_id}
- 📍 參數: hours=24 (可選,預設24小時)
- 📍 返回格式: JSON,包含current_value、data_points陣列
- 📍 流程:
(1) 接收sensor_id與hours參數
(2) 從DynamoDB查詢過去N小時的記錄(使用分區鍵 + 排序鍵)
(3) 提取timestamp、value、unit三個欄位
(4) 按時間排序,返回最新值與歷史點
端點B:查詢最近預警事件
- 📍 URL: GET /api/v1/alarms/recent
- 📍 參數: hours=24 (可選)
- 📍 返回格式: JSON,包含alarm_logs表的預警清單
- 📍 流程:
(1) 掃描alarm_logs表過去N小時的紀錄
(2) 返回alarm_type、sensor_name、actual_value、threshold、alarm_time
(3) 按alarm_time倒序排列
技術棧建議:
- Backend框架:Flask、FastAPI 或 AWS Lambda + API Gateway
- 資料庫:Amazon DynamoDB(時序優化)
- 認證:API Key / Bearer Token
- 回應時間:< 500ms(前端不卡頓)
- 快取:CloudFront CDN(降低DynamoDB查詢次數)
2.3 Drupal儀表板集成 — Google Chart圖表
在Drupal節點中嵌入JavaScript,透過REST API拉取數據並用Google Chart繪製實時圖表。由客戶的Drupal開發人員實現。
📊 Drupal前端的五大步驟:
- ✅ 步驟1:載入Google Chart庫 — 從googleapis CDN下載chart loader
- ✅ 步驟2:調用REST API — 使用fetch()呼叫/api/v1/dashboard/sensor/{sensor_id}?hours=24
- ✅ 步驟3:轉換數據格式 — 將API回傳的data_points轉換為Google Chart認可的二維陣列
- ✅ 步驟4:設定圖表選項 — 配置標題、軸標籤、顏色、刻度等
- ✅ 步驟5:繪製圖表 — LineChart / ColumnChart / AreaChart取決於業務需求
技術細節:
- 圖表類型:LineChart(趨勢)、ColumnChart(對比)、AreaChart(累積)
- 資料刷新頻率:每5分鐘自動重繪一次(setInterval)
- 互動功能:滑鼠懸停顯示數值、可縮放時間軸、下載PNG功能
- 響應式設計:自適應手機、平板、桌面螢幕(使用Drupal主題)
- 暗主題支援:背景#0a0e27、文字#e8eef5、線條#ffa500
Drupal模組建議:
- 💻 Views模組 — 用於查詢與展示DynamoDB數據
- 💻 REST API模組 — Drupal原生支援,提供JSON序列化
- 💻 Custom Twig Template — 自訂前端佈局,嵌入JavaScript
- 💻 Block系統 — 將各個監測點分組為多個Block,靈活組合
2.4 預警通知整合 — Line與SMS
當感測器超過預警閾值時,系統自動發送通知。Line與SMS由AWS服務整合,客戶負責API金鑰與通道設置。
💬 兩種通知方式的實現邏輯:
方式A:AWS SNS發送簡訊(SMS)
- 📱 觸發條件: Lambda檢測到高預警或低預警
- 📱 呼叫方式: boto3.client('sns').publish(PhoneNumber=config['phone_number'], Message=...)
- 📱 訊息格式: "⚠️ [感測器名稱]異常\n現值:[值]\n預警值:[閾值]\n時間:[時間戳]"
- 📱 延遲時間: Lambda觸發 + SNS排隊 + 電信商送達 ≈ 2~10秒
- 📱 成本: AWS SNS約NT$1~2/條(取決於區域與量級)
- 📱 配置需求:
(1) AWS SNS主題建立(SNS Topic)
(2) Lambda IAM權限允許PublishToTopic
(3) 電話號碼格式:+886912345678(國際格式)
方式B:Line Messaging API發送訊息
- 💬 觸發條件: 同上,Lambda偵測到異常
- 💬 呼叫方式: requests.post('https://api.line.biz/v2/bot/message/push', json={...})
- 💬 訊息格式: JSON結構,支援文字、按鈕、卡片等豐富格式
- 💬 延遲時間: Lambda觸發 + Line API ≈ 5~15秒
- 💬 成本: Line官方帳號免費(訊息推播按月計費)
- 💬 配置需求:
(1) Line Official Account(Line官方帳號)
(2) Channel Access Token(保存在Lambda環境變數)
(3) User ID(客戶提供,用於指定接收者)
預警邏輯的虛擬流程:
IF reading.value > config.high_threshold:
message = "⚠️ [sensor_name]超溫\n現值: [value]°C\n警值: [high_threshold]°C"
send_SMS(config.phone_number, message)
send_Line(config.line_id, message)
log_alarm_to_DynamoDB(alarm_logs)
IF reading.value BACK_TO_NORMAL:
message = "✅ [sensor_name]已恢復正常\n當前: [value]°C"
send_SMS_and_Line(message) # 通知已恢復
技術要點:
- 🔐 安全性: 將Channel Access Token、API Key存在AWS Secrets Manager,勿硬編碼
- 🔁 重試機制: SNS/Line發送失敗時,Lambda應重試3次
- ⏰ 防誤報: 同一感測器在5分鐘內超過閾值僅發一條預警,避免轟炸
- 📊 通知追蹤: 記錄sms_status、line_status到alarm_logs表,追蹤推播是否成功
第三部份:真實案例研究
北台灣運動中心監測升級案例
客戶背景:北台灣某縣市運動中心,年均客流180萬人次,需監測熱水、冷卻、泳池等系統。
ATLANTIS負責的部分:
- ✅ 供應25個Modbus RTU儀表(壓力錶12個、溫度計8個、流量錶3個、電表2個)
- ✅ 工業網關1台,支援16埠並行Modbus輪詢
- ✅ RS-485配線與現場安裝
- ✅ 邊緣層孤立森林異常檢測演算法
- ✅ 本地72小時數據緩存
- ✅ 提供HTTP API與認證方式文件
客戶(或合作開發商)自行負責的部分:
- ☁️ AWS EC2 t3.small執行個體租賃
- ☁️ AWS Lambda函數開發(數據接收、驗證、存儲)
- ☁️ DynamoDB時序數據庫設計與優化
- ☁️ REST API開發(給前端查詢)
- ☁️ Drupal儀表板模組開發
- ☁️ Google Chart圖表整合
- ☁️ AWS SNS + Line Messaging API預警邏輯
成效(6個月後):
- 故障停機次數:2~3次/月 → 0.3次/月(↓ 85%)
- 平均停機時間:2~3小時 → 15~20分鐘(↓ 85%)
- 月均故障成本:NT$20,000 → NT$2,000(↓ 90%)
- 年度人力巡檢節省:NT$195,000
- 投資回本週期:4.2個月
實施費用與責任清單
| 項目 | 提供方 | 說明 | 費用性質 |
|---|---|---|---|
| Modbus儀表 | ATLANTIS | 壓力錶、溫度計等,依規格報價 | 報價制 |
| 邊緣網關 | ATLANTIS | 工業網關1台,16埠Modbus RTU | 報價制 |
| 現場安裝 | ATLANTIS | RS-485配線、Modbus位址設置、測試 | 報價制 |
| 邊緣層軟體 | ATLANTIS | Modbus輪詢、異常檢測、本地緩存 | 含在網關費用中 |
| AWS雲端費用 | 客戶 | EC2、Lambda、DynamoDB、SNS等 | 客戶承擔(月均NT$200~500) |
| 後端API開發 | 客戶開發團隊 | Lambda函數、REST API | 客戶自行開發或外包 |
| 前端Drupal開發 | 客戶開發團隊 | 儀表板、圖表、預警邏輯 | 客戶自行開發或外包 |
| 第一年維保 | ATLANTIS | 邊緣層故障排查、固件更新 | 報價制/年 |
• 傳統人工巡檢:NT$240,000/年
• 停機成本:NT$260,000/年
• ATLANTIS邊緣層投資:報價制(通常NT$80,000~150,000)
• AWS月費:NT$200~500/月
• 首年投資回本率:4~6個月
常見問答
❓ Q1:ATLANTIS為什麼不提供完整的雲端+應用層解決方案?
我們專注於工業儀表與邊緣計算,這是我們31年累積的核心競爭力。雲端開發與應用層涉及千變萬化的業務邏輯,應由您的開發團隊或雲端合作夥伴(如AWS認證商)來負責。這樣分工反而更專業、更靈活。
❓ Q2:邊緣網關發送的API格式能改嗎?
標準JSON格式已優化,建議保持。但若您有特殊需求(如增加自訂欄位),可在簽單前與我們討論,進行客製化修改(可能需額外工程費用)。
❓ Q3:提供的Python範例代碼可以直接用嗎?
代碼是參考實現,展示基本邏輯。生產環境需要加強錯誤處理、日誌記錄、性能優化、安全認證等。強烈建議由您的開發團隊Review與改善。
❓ Q4:如果客戶沒有開發團隊怎麼辦?
您可以:(1)向AWS認證合作夥伴洽詢雲端開發服務,(2)尋找Drupal或AWS顧問公司協助,(3)我們可介紹合作的系統整合商。費用另計,不在ATLANTIS報價內。
❓ Q5:邊緣網關可以離線運作嗎?
可以。邊緣網關內建72小時本地快取。若無網路連線,仍可獨立運作,繼續採集與異常檢測。恢復網路後自動補傳所有數據。
❓ Q6:支援MQTT協議嗎?
支援。邊緣網關可選擇HTTP/HTTPS或MQTT over TLS兩種協議。MQTT特別適合IoT環境,發布/訂閱模式更靈活。我們可提供MQTT配置文件。
❓ Q7:儀表故障時會影響整個系統嗎?
不會。網關自動檢測故障儀表(無應答),該測點標記為離線,但其他測點繼續正常工作。系統會記錄故障事件供維修參考。
❓ Q8:預警通知延遲有多久?
完整路徑:邊緣檢測(< 1秒) → 上傳AWS(< 2秒) → Lambda處理(< 1秒) → SNS/Line API(< 30秒) = 總計約30~40秒。即時性很高。
❓ Q9:能否與現有的SCADA或PLC系統並行?
可以。邊緣網關只負責Modbus數據採集,不影響既有系統。若要整合SCADA,需額外開發。建議咨詢系統整合商。
❓ Q10:三年內總投資成本大約多少?
ATLANTIS部分:報價制初投 + 年度維保費
客戶承擔:AWS月費(NT$200~500×36個月) + 人力或外包開發費用(取決於項目規模)
典型案例:首年回本,2~3年內總收益>初投10倍。
聯絡與後續步驟
準備升級您的設施監測系統?
第一步:聯絡昶特評估您的現場環境
第二步:我們提供邊緣層方案報價與技術規格
第三步:您評估雲端/應用層開發預算,選擇開發廠商
第四步:邊緣層部署上線,開發與整合並行
業務聯絡
電話:02-2820-3405
信箱:service@re-atlantis.tw
官網:re-atlantis.tw
地址:台北市北投區致遠一路二段109號
線上快速詢價
re-atlantis.tw/zh-hant/node/add/businesspartners
技術支援資源
- 📘 邊緣網關技術文件:提供完整API規格、認證方式、JSON格式說明
- 🐍 Python範例代碼:Lambda、Flask、異常檢測、通知邏輯
- 🌐 Drupal整合示例:前端查詢API、Google Chart圖表、權限管理
- 📊 客戶案例庫:5+個真實客戶的架構配置與成本分析
- 💬 技術顧問:免費30分鐘諮詢,幫您評估是否適合這套方案
🎯 昶特ATLANTIS的承諾
我們提供「邊緣層到AWS API接口」的完整解決方案,讓您的開發團隊無縫銜接。不追求「一站式服務」,而是專注於邊緣計算與工業儀表——這是我們31年的專業所在。與我們合作的客戶,將獲得穩定可靠的數據源,剩下的創新空間交給您的團隊。