首頁 >後端開發 >Python教學 >使用 Python、Docker 和藍牙建立智慧加熱器控制器 #2

使用 Python、Docker 和藍牙建立智慧加熱器控制器 #2

DDD
DDD原創
2024-12-30 15:26:09181瀏覽

Building a Smart Heater Controller with Python, Docker, and Bluetooth #2

第二章:用Python破解藍牙控制

介紹

第1 章中,我們使用Raspberry PiDockerDocker 建立了控制Terma MOA BlueTer 加熱器的基礎

Python

    現在是時候深入研究:
  • BLE 的工作原理
  • 以及我們如何使用它與加熱器進行通訊。 使用 bluetoothctl
  • 調試藍牙連接
  • 編碼和解碼資料
  • 用於溫度和模式設定。
  • 將所有內容整合在一起的 Python 腳本

低功耗藍牙 (BLE) – 快速概述 Terma MOA Blue 加熱器使用 低功耗藍牙 (BLE) 進行通訊。 BLE 裝置公開GATT 特性,其作用類似資料點,您可以讀取或

寫入

關鍵概念:
  • UUID:
  • 標識特定資料點(例如溫度或模式)的唯一 ID。
  • 特性:
  • BLE 屬性保存實際資料。
  • 描述符:
  • 有關特徵的附加元資料。 寫入與讀取操作:某些特性僅支援讀取(例如當前溫度),而其他特性則允許
  • 寫入
(例如設定溫度) 。

使用 bluetoothctl 調試藍牙連接 在使用 Python 自動化流程之前,我們使用

bluetoothctl

進行手動測試和調試。

第 1 步:掃描設備
bluetoothctl
scan on

尋找名為

「Terma Wireless」
    的裝置。
  • 確保加熱器處於配對模式:按下並
  • 按住溫度按鈕 5 秒鐘
  • 直到指示燈閃爍。這將啟動配對模式。 辨識最近的裝置:具有RSSI 值最低(例如RSSI:-50)的裝置可能是最近的加熱器。較低(負值較大)的 RSSI 值表示訊號較弱,因此請關注
  • 最強訊號

第 2 步:與加熱器配對
pair <DEVICE_ADDRESS>

出現提示時,輸入 PIN 碼

123456

.

第 3 步:信任與連結
trust <DEVICE_ADDRESS>
connect <DEVICE_ADDRESS>

第 4 步:讀取特徵


連接後,使用:
bluetoothctl
scan on

這會顯示可用於讀取和寫入資料的UUID

重要提示:

  1. 先忘記其他設備:
  2. 如果加熱器已與其他裝置(例如手機應用程式)配對,您需要在繼續之前與該裝置取消配對
  3. 加熱器一次只能維持一個活躍配對

  4. 失敗後重新連線:

    • 如果加熱器連接成功但後來無法重新連接,請使用以下步驟:
    pair <DEVICE_ADDRESS>
    
  • 然後使用上述步驟重新配對
  1. Python 腳本需要初始連線:
    • 第一個連線必須透過bluetoothctl手動建立
    • 配對後,Python 腳本將能夠與加熱器互動。
    • 但是,如果您稍後將加熱器與其他設備配對(斷開連接),則需要在再次運行腳本之前從Raspberry Pi 手動刪除重新連接 .

破解加熱器的資料格式

溫度編碼

加熱器將溫度編碼為兩個位元組(小端),0.1°C 精確度

範例:

trust <DEVICE_ADDRESS>
connect <DEVICE_ADDRESS>

Python 解碼:

info <DEVICE_ADDRESS>

Python 編碼:

 remove <DEVICE_ADDRESS>

模式編碼

操作模式儲存為單字節,具體值:

  • 0: 關閉
  • 5:手冊(室溫)
  • 6: 手冊(加熱元件溫度)
  • 33: 已驗證的加熱元件模式(十六進位:0x21)

Python 解碼:

Hex: 012d → Decoded: 30.1°C

Python 編碼:

def decode_temperature(data):
    current_temp = ((data[1] << 8) | data[0]) / 10
    target_temp = ((data[3] << 8) | data[2]) / 10
    return round(current_temp, 1), round(target_temp, 1)

主要經驗教訓

  1. 藍牙配對挑戰:

    • 手動配對通常需要啟用配對模式並重新輸入 PIN。
    • 信任設備對於避免斷開連接至關重要。
  2. 編碼錯誤:

    • 最初嘗試使用 256 縮放 而不是 255 進行溫度編碼。
    • 修正little-endian 0.1°C 縮放解決了解碼錯誤。
  3. 模式處理問題:

    • BLE 模式沒有詳細記錄,我們必須對這些值進行逆向工程。
    • 測試已確認33 (0x21)適用於手動加熱元件溫度模式。

接下來是什麼?

在下一章中,我將:

  • 擴充腳本以支援多個加熱器
  • 引入Docker整合以更輕鬆地部署。
  • 開始與家庭助理探索自動化設定

回饋和建議?

查看 GitHub 儲存庫

? GitHub - ha-hudsonread-heater-control

請在下面的評論中告訴我您的想法和建議!

以上是使用 Python、Docker 和藍牙建立智慧加熱器控制器 #2的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn