技能誌

☁️《我把 BLE 裝置接上雲!HomeKit、MQTT、iOS 三方整合實作》

資訊/科技
奧提斯的頭像
奧提斯
更新日:2025年4月22日

在這個萬物聯網的時代,感測器不能只藏在家裡,它應該「上雲」。

這篇我來分享怎麼讓:

  • BLE 裝置 → MQTT
  • MQTT → Homebridge Plugin → HomeKit
  • MQTT → 其他平台(可選)

不但 Siri 能開風扇,連 Grafana 都能畫出你家的濕度趨勢圖,一次滿足自嗨、實用與炫技三種需求!


🎯 為什麼要導入 MQTT?

因為 BLE 本身連線距離短,資料只能傳給手機或單一裝置,但:

  • MQTT 可以跨平台同步(手機、平板、網頁都能訂閱)
  • 資料可以儲存分析(用 InfluxDB + Grafana 畫圖)
  • MQTT 支援 QoS、保留訊息、自動重送,非常適合感測器資料
  • Homebridge 有超多 MQTT Plugin 可以無縫串接 HomeKit!

一句話:BLE 感測器 + MQTT = 全平台智慧家庭基底


🧱 架構圖(簡化版)

[BLE Sensor]
     ↓
[iOS App / Raspberry Pi Script]
     ↓ 解析後送 MQTT 訊息
[MQTT Broker (如 Mosquitto)]
     ↓               ↓
[Homebridge Plugin]  [Grafana / Home Assistant / Cloud DB]
     ↓
[HomeKit]

🔧 我怎麼實作的?

1️⃣ 建 BLE → MQTT 中繼程式

可以用:

  • iOS App(使用 CoreBluetooth 掃描並轉發)
  • Raspberry Pi + Node.js + noble 套件
  • 或 Python 的 bleak 套件

我選 Node.js 為例子:

const noble = require("@abandonware/noble");
const mqtt = require("mqtt");
const client = mqtt.connect("mqtt://localhost");

noble.on("discover", (peripheral) => {
  const temperature = parseSensor(peripheral.advertisement.manufacturerData);
  client.publish("home/temperature", temperature.toString());
});

2️⃣ Homebridge 使用 homebridge-mqttthing 插件接資料

安裝插件後,config 加入:

{
  "accessory": "mqttthing",
  "type": "temperatureSensor",
  "name": "BLE 溫度感測器",
  "url": "mqtt://localhost",
  "topics": {
    "getCurrentTemperature": "home/temperature"
  }
}

這樣 Apple 家庭 App 就能顯示從 BLE 裝置廣播來的溫度了 🎉

3️⃣ 想做歷史圖表?加上 fakegato-history 或導資料進 InfluxDB → Grafana!


🧠 Bonus 整合玩法

  • 與 Home Assistant 串接:MQTT 是原生支援
  • 跨區域同步:遠端監控家中溫濕度
  • Web dashboard:自己架前端 UI,感覺像在控制 NASA 控制台 🛰️

⚠️ 實作提醒

  • MQTT Broker 建議選擇 Mosquitto(穩又輕)
  • BLE 廣播資料要定時解析並確認 checksum,避免誤傳
  • 如果 BLE Sensor 不穩,可以用 Raspberry Pi 當固定中繼機
  • MQTT topic 記得保持一致格式,例如 home/room1/temperature,方便維護

🚀 結語

BLE 本來就是一種「局部」通訊技術,但透過 MQTT,你把它接到了整個雲端世界,也讓 HomeKit 不只是「本地智慧」,而是跨平台協作的智慧家庭中樞

iOS App 客製化 上架。
iOS 軟體開發、修改、維護既有App
IT/程式 > iPhone/iPad/Mac應用程式開發
$ 10000
iOS App 客製化 上架。
$ 10000
iOS App 客製化 上架。
0 / 1000
回到文章列表