Python、Docker、Bluetooth を使用したスマート ヒーター コントローラーの構築 #2
第 2 章: Python を使用した Bluetooth コントロールのクラッキング
導入
第 1 章では、Raspberry Pi、Docker、およびパイソン。 次は、以下について詳しく見ていきます。
- BLE の仕組み
- と、BLE を使用してヒーターと通信する方法。 bluetoothctl
- を使用して Bluetooth 接続をデバッグしています。 温度とモード設定のための データのエンコードとデコード
- 。 すべてをまとめた Python スクリプト
- 。
Terma MOA Blue
ヒーターは、通信に Bluetooth Low Energy (BLE) を使用します。 BLE デバイスは GATT 特性を公開しており、データ ポイント のように機能し、読み取り または 書き込み が可能です。
主要な概念:- UUID:
- 温度やモードなど、特定のデータポイントを識別する一意の ID。 特徴:
- 実際のデータを保持する BLE プロパティ。 記述子:
- 特性に関する追加のメタデータ。 書き込み操作と読み取り操作:
- 一部の特性は 読み取り (例: 現在の温度) のみをサポートしますが、他の特性は 書き込み (例: 温度の設定) を許可します。
Python でプロセスを自動化する前に、手動テストとデバッグに
bluetoothctlを使用しました。
ステップ 1: デバイスをスキャンするbluetoothctl scan on
という名前のデバイスを探します。
- ヒーターがペアリング モードになっていることを確認します。
- ライトが点滅するまで、温度ボタンを 5 秒間押し続けます。これによりペアリングモードが有効になります。 最も近いデバイスを特定する:
- 最も低い RSSI 値 (例、RSSI: -50) を持つデバイスは、最も近いヒーターである可能性があります。 RSSI 値が低い (負が大きい) と信号が弱いことを示すため、最も強い信号 に注目してください。
プロンプトが表示されたら、PIN コード
pair <DEVICE_ADDRESS>
を入力します。
ステップ 3: 信頼してつながるtrust <DEVICE_ADDRESS> connect <DEVICE_ADDRESS>
接続したら、次を使用します:
bluetoothctl scan on
これにより、データの読み取りと書き込みに使用可能な UUID が表示されます。
重要な注意事項:
- まず他のデバイスのことは忘れてください:
- ヒーターが別のデバイス (電話アプリなど) とすでにペアリングしている場合は、続行する前にそのデバイスからペアリングを解除する必要があります。
ヒーターは一度に1 つのアクティブなペアリングのみを維持できます。
-
失敗後の再接続:
- ヒーターが正常に接続されたものの、その後再接続に失敗する場合は、次の手順を実行します。
pair <DEVICE_ADDRESS>
ログイン後にコピーログイン後にコピー
- その後、上記の手順を使用して再ペアリングします。
-
Python スクリプトには初期接続が必要です:
- 最初の接続はbluetoothctl経由で手動で確立する必要があります。 ペアリングされると、Python スクリプトはヒーターと対話できるようになります。
- ただし、後でヒーターを別のデバイスとペアリングする (接続を切断する) 場合は、スクリプトを再度実行する前に、Raspberry Pi から手動で
- 削除 し、再接続する必要があります。 .
ヒーターのデータフォーマットの解読
温度エンコーディング
ヒーターは温度を2 バイト (リトルエンディアン) として 0.1°C 精度 でエンコードします。
例:
trust <DEVICE_ADDRESS> connect <DEVICE_ADDRESS>
Python デコード:
info <DEVICE_ADDRESS>
Python エンコーディング:
remove <DEVICE_ADDRESS>
モードエンコーディング
動作モードは、特定の値を持つ単一バイト として保存されます:
- 0: オフ
- 5: 手動 (室温)
- 6: 手動 (発熱体温度)
- 33: 検証済み発熱体モード (16 進数: 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)
学んだ主な教訓
-
Bluetooth ペアリングの課題:
- 手動ペアリングでは、多くの場合、ペアリング モードを有効にして PIN を再入力する必要がありました。
- 切断を避けるためには、デバイスを信頼することが重要でした。
-
エンコードミス:
- 最初の試みでは、温度エンコードに
- 255 の代わりに 256 スケーリング を使用しました。
- リトルエンディアン 0.1°C スケーリング に修正することで、デコード エラーが解決されました。
-
モード処理の問題:
- BLE モードは十分に文書化されていないため、値をリバース エンジニアリングする必要がありました。
- テストにより、33 (0x21) が 手動発熱体温度 モードで動作することが確認されました。
次は何ですか?
次の章では、次のことを行います:
- 複数のヒーターをサポートするようにスクリプトを拡張します。
- デプロイメントを容易にするために、Docker 統合 を導入します。
- ホーム アシスタントを使用して、自動設定の探索を開始します。
フィードバックと提案はありますか?
GitHub リポジトリ:
をチェックしてください。
? GitHub - ha-hudsonread-heater-control
以下のコメント欄でご意見やご提案をお聞かせください。
以上がPython、Docker、Bluetooth を使用したスマート ヒーター コントローラーの構築 #2の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

正規表現は、プログラミングにおけるパターンマッチングとテキスト操作のための強力なツールであり、さまざまなアプリケーションにわたるテキスト処理の効率を高めます。

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。
