MQTT 是什麼?白話看懂 broker、QoS 與發布訂閱,工廠感測器資料怎麼送進系統

恆遠數位編輯團隊約 15 分鐘閱讀
MQTT 是什麼文章封面:白話看懂發布訂閱與 QoS,工廠感測器資料怎麼送進系統
複製引文

MQTT 是一種專門給物聯網設備用的輕量訊息協定。設備把資料「發布」到一台叫 broker 的中繼伺服器,需要資料的系統去「訂閱」自己關心的主題,雙方不用直接連線。感測器每幾秒報一次溫度、機台一停機就通知後台,這種又小又頻繁的資料,用 MQTT 送最省頻寬,網路斷斷續續也比較撐得住。

我們幫工廠把溫度感測器、ESP32 Wi-Fi 模組、掃碼槍、標籤機和 3D 列印機接進系統時,MQTT 幾乎都是那條「資料進門」的路。這篇用工廠現場聽得懂的話把它拆開:broker、topic、QoS 各是什麼,跟一般網頁用的 HTTP 差在哪,工廠實際拿它送哪些資料,從感測器到看板整條線怎麼搭。帳號、加密這些資安設定我們另外寫過 MQTT 三層防禦架構,這篇不重講。

它的來歷很務實。MQTT 在 1999 年由 IBM 的工程師為了監控輸油管線而設計,當時要透過又貴又慢的衛星線路回傳資料,所以每一個位元組都要省(HiveMQ 整理的 MQTT 發展史有完整經過)。後來它交給 OASIS 標準組織維護,2019 年推出 MQTT 5.0 規格,現在是物聯網最常見的通訊方式之一。

設備數量也一直在長。研究機構 IoT Analytics 的統計估計 2025 年底全球連網的物聯網設備約 211 億台,2030 年上看 390 億台。設備一多,「每台設備定時問一次伺服器」的做法就會越來越吃力,這正是 MQTT 擅長的場景。

MQTT 是什麼?先看一張白話對照表

先講結論:把 MQTT 想成工廠裡的收發室。每台設備把消息交給收發室(broker),收發室按照信封上的分類(topic)轉給有登記要收這類消息的人(訂閱者)。下面這張表把常聽到的名詞一次翻成白話,看完這張,後面的內容就讀得懂了。

名詞

白話

工廠裡的例子

Broker

收發室,所有消息都先送到這裡再轉出去

一台跑 Mosquitto 的小主機,或雲端託管服務

Client(用戶端)

會連上 broker 的任何程式或設備

ESP32 溫度模組、後端寫資料庫的程式、看板網頁

Publish(發布)

把一則消息丟給 broker

烤箱每 30 秒送出目前溫度

Subscribe(訂閱)

跟 broker 登記「這類消息請轉給我」

告警服務訂閱所有溫度資料

Topic(主題)

消息的分類路徑,用斜線分層

factory1/line2/oven03/temperature

Payload(內容)

消息本體,格式自己決定,常用 JSON

{"temp_c": 182.4}

QoS(服務品質)

這則消息要保證送到幾次,分 0、1、2 三級

溫度用 0,報工用 1

Retained(保留訊息)

broker 幫這個主題記住最後一則,新訂閱者一連上就拿到

機台目前是運轉還是停機

Last Will(遺囑)

設備連線時先寄放的一則訊息,異常斷線時由 broker 代發

「oven03 離線了」

Keep Alive(心跳)

設備定時跟 broker 說「我還在」,太久沒聲音就判定斷線

每 60 秒一次心跳

看完還是不確定自己的設備該怎麼接進系統,可以直接 加 LINE 問我們,把設備型號和想看的資料丟過來,我們會告訴你大概要怎麼接。

發布/訂閱怎麼運作:設備只管發,系統各自訂

一句話:設備只負責把資料交給 broker,誰要用資料誰自己去訂,設備完全不用知道後面接了幾套系統。

這個設計最大的好處是「加東西不用動設備」。今天先接一個寫資料庫的程式,下個月想加一面現場看板,再過半年要接告警簡訊,都只是在 broker 後面多掛一個訂閱者。對工廠來說這很重要,因為設備端的程式一旦燒進去,要改就得跑現場一台一台更新。

圖表載入中…

topic 怎麼命名比較不會後悔

topic 是用斜線分層的字串,例如 「factory1/line2/oven03/temperature」。訂閱時可以用萬用字元:「+」 代表任一層,「#」 代表這層以下全部。所以 「factory1/+/+/temperature」 會收到一廠所有設備的溫度,「factory1/line2/#」 會收到二線的所有資料。

命名一開始就要想清楚,半年後設備變成幾十台,亂取的 topic 會讓所有人看不懂。我們接案時習慣照這個順序排:

  • 由大到小:廠區 → 產線 → 設備 → 資料種類,查詢和授權都比較好切
  • 只用英文小寫、數字和底線,不要放空白和中文,各家工具的支援不一定一樣
  • 設備編號跟現場貼的標籤一致,維修人員看到 oven03 就知道是哪一台
  • 狀態、量測、指令分開:「.../status」、「.../temperature」、「.../cmd」 不要混在同一個主題

QoS 0、1、2 怎麼選

QoS 決定這則消息要保證送到幾次。等級越高越可靠,但來回確認的封包越多,broker 要記的東西也越多。工廠裡大多數資料用 0 或 1 就夠了。

等級

保證什麼

代價

工廠裡適合送

QoS 0:最多一次

送出去就不管,網路斷了這則就沒了

最省,沒有確認封包

每 10 到 30 秒一筆的溫度、電流,掉一筆下一筆就補上

QoS 1:至少一次

一定送到,但可能重複

每則要等確認,接收端要能去重

報工、掃碼、異常事件,少一筆就對不上帳

QoS 2:剛好一次

不遺失也不重複

四次交握,最慢也最吃資源

少數不能重複執行的指令,例如扣料、出貨確認

我們的做法是預設用 QoS 1,再在後端用每則訊息的流水號去重,比全面開 QoS 2 好維護。這套「設備只管發、系統各自訂」的架構,就是工廠管理系統的現場資料入口。像我們做的 生產力管理系統,重點就是生產可見性與異常管理,現場資料怎麼進門,直接決定看板準不準。

MQTT 跟 HTTP 差在哪?什麼時候不需要 MQTT

先講結論:設備要「一直報」就用 MQTT,系統之間「偶爾問」就用 HTTP。兩個都是好工具,差別在資料怎麼流。

HTTP 是一般網頁和 API 用的方式,一問一答:用戶端發請求,伺服器回答,答完就結束。要知道設備最新狀態,就得每隔幾秒問一次(輪詢)。算一下就知道:50 台機台每 5 秒問一次,一小時就是 36,000 次請求,而且大部分回答都是「沒變」。MQTT 讓設備維持一條長連線,狀態有變才推一則消息過來,網路和伺服器都輕鬆很多。

比較項目

MQTT

HTTP(REST API)

連線方式

設備跟 broker 維持一條長連線

每次請求建立、回完就結束(可重用但仍是一問一答)

誰先開口

設備有資料就推

用戶端要資料就拉,想即時只能輪詢

每則訊息的額外負擔

固定標頭最小 2 個位元組

每次請求都要帶一整組文字標頭

即時性

資料一到就轉出去

看輪詢間隔,5 秒輪詢就可能慢 5 秒

斷線處理

QoS、持久連線狀態、Last Will 都內建

重試、補送要自己寫

一對多

一則消息可以同時給很多訂閱者

要通知幾個系統就得各打一次

除錯門檻

要裝 MQTT 工具才看得到訊息

瀏覽器、curl 就能測

最適合

感測器、機台狀態、現場事件

查詢資料、送表單、系統對系統 API

HiveMQ 的協定比較也提到同一件事:HTTP 每次請求都得重帶一次標頭,MQTT 連線建好之後,每則訊息只多一點點開銷。訊息越小、越頻繁,差距就越大。

但我們不認同「做物聯網就一定要上 MQTT」這種說法。如果工廠只有兩三台設備、每分鐘回報一次,設備直接打後端的 HTTP API 完全夠用,硬上 MQTT 反而多養一台 broker、多一個要監控的東西。我們的判斷門檻大概是:設備超過十幾台、需要秒級狀態,或同一份資料要給好幾套系統用,MQTT 才開始划算。

工廠裡 MQTT 拿來送什麼資料

簡單分三類:連續量測(溫度、濕度、電流)、狀態變化(運轉、停機、待料、異常)、人或設備產生的事件(報工、掃碼、列印完成)。三類的送法不太一樣,下表是我們規劃時的起手設定。

資料類型

例子

topic 範例

QoS

怎麼送

進系統後變成

連續量測

烤箱、冷藏庫溫度

f1/line2/oven03/temperature

0

每 10 到 30 秒一筆

溫度曲線、超標告警

狀態變化

運轉/停機/待料

f1/line2/cnc05/status

1 + retained

狀態一變就送

稼動率、停機原因統計

報工事件

掃工單條碼、完工數量

f1/line2/station1/report

1

掃一次送一次

工單進度、產量報表

設備任務

3D 列印機開始、完成、失敗

f1/lab/printer02/job

1

任務狀態改變時

列印排程、機台使用率

在線狀態

設備上線/離線

f1/line2/cnc05/online

1 + retained

上線時發布,異常斷線靠 Last Will

設備清單紅綠燈

下發指令

換線參數、重新開機

f1/line2/cnc05/cmd

1 或 2

人在後台按下才送

設備執行紀錄

溫度監控:多數工廠的第一步

溫度是最常見的入門題,因為感測器便宜、規則好懂、出事代價又高:冷藏庫斷電、烤箱過熱,晚發現一小時就是一整批報廢。我們接溫度感測器時,告警通常不會一超標就叫,會設成「連續 3 筆超標才通知」,不然門一開就響,兩個禮拜後就沒人理告警了。

機台狀態:稼動率的原始資料

稼動率要算得準,靠的是每一次狀態切換都有時間戳。設備在「運轉→停機」那一刻送一則消息,後端把每段時間加總,就能算出今天停了多久、停在哪個原因。這也是 工廠管理系統 從 Excel 升級時最先想補上的資料,因為人工填的停機時間幾乎都是估的。

報工與掃碼:人產生的事件

現場人員用掃碼槍掃工單條碼、輸入完工數量,這筆事件透過平板或 ESP32 用 MQTT 送進系統。這類資料一定要用 QoS 1,而且要處理重複:同一筆報工如果因為網路重送收到兩次,產量就會多算。做法是每筆事件帶一個唯一編號,後端存之前先查有沒有存過。報工資料再往下串到批號與檢驗紀錄,就是 生產履歷系統 的基礎。

PLC 那一段誰負責

很多機台的資料在 PLC 裡,要用 Modbus 或 OPC UA 讀出來。這段我們老實說:通常由設備商或系統整合商處理,他們用閘道器把 PLC 的數值轉成 MQTT 送出來,我們負責 broker 之後的系統端,包括資料怎麼存、怎麼算、怎麼呈現。分工講清楚,報價和責任就不會打架。

從 ESP32 到看板:一條完整的 MQTT 資料路線

一條最常見的路線分五段:感測器接在 ESP32 上,ESP32 透過 Wi-Fi 連到 MQTT broker,後端程式訂閱資料寫進資料庫,最後由看板和告警把資料呈現出來。下圖是整條線的樣子。

圖表載入中…

ESP32 是一顆內建 Wi-Fi 的便宜晶片,接感測器、讀數值、送 MQTT 都做得到,是工廠做概念驗證最常用的板子。想先了解這顆晶片,可以看我們寫過的 ESP32-P4 入門指南,或是用同一類晶片做的 NFC 打卡系統。

設備送出來的內容,我們建議至少帶這四個欄位:

JSON
{
  "device_id": "oven-03",
  "ts": "2026-10-19T09:15:30+08:00",
  "temp_c": 182.4,
  "seq": 10233
}

「ts」 是設備量到的時間,不要用 broker 收到的時間,斷線補傳時才不會亂掉;「seq」 是流水號,後端靠它判斷有沒有重複或漏掉。這兩個欄位一開始沒放,之後要補就得全部設備重燒一次。

段落

做什麼

常見選擇

通常誰負責

容易出事的地方

感測器/設備

量測或產生事件

溫度探棒、掃碼槍、3D 列印機

工廠採購

量測位置不對,數字準也沒用

邊緣端

讀數值、打包、連網送出

ESP32、工業閘道器

系統開發商或設備商

Wi-Fi 死角、斷線沒補傳

Broker

收消息、轉給訂閱者

Mosquitto、EMQX、雲端託管

系統開發商

沒監控,掛了沒人知道

後端訂閱服務

驗證、去重、寫入

Node.js、Python 程式

系統開發商

重複資料、時間戳錯亂

資料庫

長期存放與查詢

PostgreSQL、時序資料庫

系統開發商

沒規劃保存期限,一年後塞爆

看板與告警

給人看、通知人

網頁看板、LINE 或 Email 通知

系統開發商

告警太多,沒人在看

這條線再往上接,就是工單、報工、品質這些 MES 功能。想看整套製造執行系統怎麼規劃,可以讀我們的 客製化 MES 開發完整指南;MES、ERP、QMS 三套系統怎麼分工,則在 ERP、MES、QMS 差在哪 有一張分工表。

選 MQTT broker 要看哪幾件事

先決定要自己架還是用雲端託管,再看預計幾台設備、斷線時訊息要不要留著、需不需要多台備援。下表是常見的四種選項。

方案

類型

適合

要注意

Mosquitto

開源,單機輕量

幾十到幾百台設備的工廠、概念驗證

沒有內建叢集,要高可用得自己想辦法

EMQX

開源加商業版

上千台以上、需要叢集與規則引擎

功能多學習成本高,授權條款近年有調整,商用前先看清楚

HiveMQ

商業版為主,另有社群版

大型企業、需要原廠支援

授權費用較高

雲端託管(AWS IoT Core、Azure IoT Hub 等)

全託管服務

不想自己顧主機、設備分散各地

按連線或訊息量計費,跟平台綁得比較緊

綁平台這件事要特別小心。Google 在 2023 年 8 月停掉了 Cloud IoT Core,當時用它的公司都得在期限內把所有設備搬家。所以我們的原則是:設備端只講標準 MQTT,不用任何平台專屬的 SDK,哪天要換 broker,只要改連線位址和帳號就好。

規劃 broker 時可以照這張清單問一輪:

  • 設備數和訊息量:幾台設備、每台多久送一次,算出每秒大概幾則
  • 斷線要不要補:設備或後端斷線期間的訊息要不要留著,影響持久連線狀態的設定
  • MQTT 5 支援:訊息有效期限、遺囑延遲這些 5.0 才有的功能,對工廠很實用
  • 監控:連線數、訊息量、broker 本身有沒有活著,要有人收得到通知
  • 備援:broker 掛了產線資料會斷,可以接受斷多久
  • 帳號權限:哪台設備能發哪些 topic,細節見 MQTT 三層防禦

MQTT 常見踩坑:斷線、重複、舊指令

大部分 MQTT 的問題,都出在「以為送到了」。協定本身很穩,出事的通常是設定和資料設計。下面是我們最常看到的幾種:

  • 斷線期間的訊息全不見:用戶端用 clean session(乾淨連線)登入,broker 就不會幫它保留斷線期間的訊息。後端訂閱服務要改用持久連線,並搭配 QoS 1
  • 報工數量多算:QoS 1 保證送到但可能重複,後端沒有用流水號去重,就會一筆報工算兩次
  • 設備執行一週前的舊指令:指令主題設成 retained,設備重開機一連上就收到上次留下的指令又執行一次。指令不要用 retained,或用 MQTT 5 的訊息有效期限讓它過期
  • 網路一抖就狂報離線:Wi-Fi 不穩時設備頻繁上下線,Last Will 一直觸發。MQTT 5 可以設遺囑延遲,短暫斷線不發離線通知
  • 時間軸錯亂:用 broker 收到的時間當資料時間,斷線補傳的資料全擠在同一秒。設備端要校時並自帶時間戳
  • topic 越長越亂:沒有命名規則,半年後沒人知道 test/abc/temp2 是哪台

這幾個坑都不難修,難的是上線前沒人想到。系統導入失敗常常死在這些小地方,MES 導入失敗原因 那篇整理過更多類似的例子。

MQTT 資安先顧三件事

最低限度要做到三件事:每台設備有自己的帳號或憑證、連線走 TLS 加密(常用 8883 埠,未加密是 1883 埠)、用存取控制限制每台設備只能發布或訂閱自己的 topic。還有一條最基本的:1883 埠不要直接開在網際網路上。

這三層要怎麼設、Mosquitto 的設定檔長什麼樣子,我們在 MQTT 帳密認證夠安全嗎?三層防禦架構 寫得很完整,照著做就可以。工廠設備一旦被接管,影響的是產線,資安不要留到最後才補。

MQTT 專案自己接還是找人做?分工與預算怎麼抓

先講結論:兩三台設備做概念驗證,有工程背景的同事可以自己來;要進正式生產、接進 MES 或 ERP、讓很多人看同一面看板,就值得找人把系統端做好。

階段

範圍

誰做比較合適

預算怎麼拆

概念驗證

1 到 3 台設備,Mosquitto 加簡單看板

內部工程師或小型開發商

主要是硬體和人力時間

產線試點

一條產線,加上告警、報表、帳號權限

系統開發商

硬體、佈線、系統開發分開估

全廠導入

多產線、接工單與報工,串 ERP

系統開發商加設備商分工

依設備數、資料種類、要串的系統估

預算最容易漏估的是佈線和現場安裝。我們估價時會把軟體、硬體、佈線三塊拆開,佈線以市場行情來說每點大約 1,000 到 2,500 元,現場環境越複雜越高。完整的拆法可以看 MES 系統價格怎麼算,要比較套裝、系統整合商、客製開發三種廠商,則看 MES 廠商怎麼選。

如果你的工廠現在是這樣:溫度靠人每兩小時抄一次、停機時間月底才憑印象補、想看產線狀況得走到現場問,這三件事中了兩件,就很值得先把一條產線的資料接進系統試試看。整體轉型的順序怎麼排,台灣製造業智慧製造導入指南 和 製造業內部系統開發指南 都有整理。

想聊聊你的設備適不適合用 MQTT 接進系統,我們很樂意 聽你說說現場的情況,或直接 加 LINE 把設備清單丟過來。這個階段我們陪你一起看哪一段最值得先做,真的要動手再談範圍跟費用。

ℹ️我們做過這件事

這篇講的東西都是我們實際接過的:MQTT、溫度感測器、ESP32 Wi-Fi 聯網、掃碼槍、標籤機、3D 列印機,我們都把它們串進過系統,目前累積 40+ 企業客製案落地。

工廠類的系統,可以參考我們做的 生產力管理系統:為傳統製造業建立生產可見性、異常管理與產能效益分析。PLC、OPC UA 這類機台端的整合通常由設備商負責,我們專心把 broker 之後的系統做好。

看到這裡,如果你也在想「我們工廠的資料要怎麼接進來」,我們很樂意 聽你聊聊現在的實際情況,一起看看從哪條產線開始最划算。

ℹ️我們怎麼看

接下來三年,會有越來越多設備出廠就內建 MQTT 輸出,「怎麼把資料送出來」會變得越來越簡單。真正拉開差距的會是系統端:topic 怎麼命名、資料怎麼去重和存放、怎麼變成報工、稼動率和告警。這也是我們選擇專心做的一段,PLC 端交給設備商,我們把資料變成能用的系統。

給工廠老闆一個判斷方法:先問自己三個問題。哪一個數字現在是靠人抄的?晚一小時知道會損失多少?這個數字有幾個人要看?三個答案都明確的那條產線,就是第一個值得接 MQTT 的地方。

QMQTT 的全名是什麼?

早期寫作 MQ Telemetry Transport,MQ 來自 IBM 的 MQ 系列產品。現在的標準文件直接稱為 MQTT,由 OASIS 標準組織維護,最新的主要版本是 2019 年發布的 MQTT 5.0。

QMQTT 用哪個連接埠?

未加密的 MQTT 預設用 1883 埠,走 TLS 加密的用 8883 埠,透過 WebSocket 連線的常見設定是 8083 或 443。正式環境建議一律走加密,1883 埠不要對外開放。

QMQTT 和 HTTP 該選哪個?

設備要持續回報資料、需要即時狀態,或同一份資料要給好幾套系統用,選 MQTT。設備只有幾台、每分鐘才回報一次,或是系統之間偶爾查詢資料,用 HTTP API 就夠了,不需要多養一台 broker。

QMQTT 和 Modbus、OPC UA 有什麼不同?

Modbus 和 OPC UA 多半用在讀取 PLC 與機台內部的數值,MQTT 擅長把資料從現場送到伺服器和雲端。常見的做法是由設備商的閘道器用 Modbus 或 OPC UA 讀機台,再轉成 MQTT 送進系統。

QMQTT 3.1.1 和 5.0 要用哪個版本?

新專案建議直接用 5.0。它多了訊息有效期限、遺囑延遲、更清楚的錯誤代碼等功能,對工廠設備斷線、舊指令這類問題很有幫助。主流 broker 和 ESP32 常用的函式庫都已經支援。

Q用 MQTT 把工廠設備接進系統要多少錢?

看設備數量、資料種類和要串的系統。概念驗證主要是硬體和人力時間;產線試點以上要把硬體、佈線、系統開發分開估,佈線市場行情約每點 1,000 到 2,500 元。可以先從一條產線試點,確認資料有用再擴大。

分享文章
恆

AUTHOR

恆遠數位編輯團隊

查看作者頁

留言(0)

尚無留言,成為第一個留言的人吧!

需要網站系統架設或軟體開發?

無論是品牌官網、客製化系統還是應用程式,我們的團隊擁有豐富經驗,歡迎聯繫我們,讓專業為您的事業加分。