SwitchBotデバイス(防水温湿度計・CO2センサー)からBLE(Bluetooth Low Energy)アドバタイズメントデータで温度・湿度・バッテリー情報を読み取るPythonプログラムです。
- 🌡️ リアルタイム監視: 1秒ごとの温度・湿度データ取得
- 🔋 バッテリー情報: デバイスのバッテリー残量も表示
- 📡 接続不要: BLEアドバタイズメントデータから読み取り(デバイスへの負荷なし)
- 🎯 高精度: 温度0.1度単位、湿度1%単位で取得
- 📱 複数デバイス対応: 複数のMACアドレス指定が可能
- 🔧 デバイス種別対応: 防水温湿度計とCO2センサーに対応
- 🐛 デバッグモード: 詳細なデバッグ情報表示機能
- ⚡ 軽量: uvを使った高速なパッケージ管理
- Python 3.11以上
- Linux または macOS(Bluetoothスタック対応)
- SwitchBotデバイス(防水温湿度計またはCO2センサー)
curl -LsSf https://astral.sh/uv/install.sh | sh# プロジェクトディレクトリに移動
cd switchbot-ble-readeruv sync# ユーザーをbluetoothグループに追加
sudo usermod -a -G bluetooth $USER
# 再ログインまたは再起動が必要- システム環境設定 → セキュリティとプライバシー → プライバシー → Bluetooth
- TerminalまたはITerm2にBluetooth権限を付与
# ヘルプ表示
uv run python switchbot_reader.py --help利用可能な引数:
--mac: 監視するMACアドレス(複数指定可能)--device-type: デバイス種別(meter: 防水温湿度計,co2: CO2センサー)--debug: デバッグ情報を表示--location: デバイスの場所(InfluxDB 3タグ用)--influxdb-url: InfluxDB 3 URL--influxdb-token: InfluxDB 3 APIトークン--influxdb-database: InfluxDB 3データベース名 (デフォルト: switchbot_meter)
# デフォルト設定で実行(防水温湿度計、デフォルトMACアドレス)
uv run python switchbot_reader.py
# 特定のMACアドレスを指定
uv run python switchbot_reader.py --mac AA:BB:CC:DD:EE:FF
# 複数のデバイスを監視
uv run python switchbot_reader.py --mac AA:BB:CC:DD:EE:FF --mac AA:BB:CC:DD:EE:F0
# CO2センサーを監視
uv run python switchbot_reader.py --device-type co2 --mac AA:BB:CC:DD:EE:FF
# デバッグモードで実行
uv run python switchbot_reader.py --debug --mac AA:BB:CC:DD:EE:FF# InfluxDB 3にデータを送信
uv run python switchbot_reader.py \
--mac AA:BB:CC:DD:EE:FF \
--location "リビング" \
--influxdb-url http://localhost:8086 \
--influxdb-token your_token_here \
--influxdb-database switchbot_meter
# 複数デバイスでInfluxDB 3連携
uv run python switchbot_reader.py \
--mac AA:BB:CC:DD:EE:FF \
--mac AA:BB:CC:DD:EE:FF \
--location "家庭" \
--interval 30 \
--influxdb-url http://localhost:8086 \
--influxdb-token your_token_here \
--influxdb-database switchbot_meter
# CO2センサーでInfluxDB 3連携
uv run python switchbot_reader.py \
--device-type co2 \
--mac AA:BB:CC:DD:EE:FF \
--location "寝室" \
--influxdb-url http://localhost:8086 \
--influxdb-token your_token_here \
--influxdb-database switchbot_meterSwitchBot meter BLE読み取りプログラム
対象デバイス: AA:BB:CC:DD:EE:FF
インターバル: 1.0秒
Ctrl+Cで終了
----------------------------------------
[2025-06-16 22:45:30] SwitchBot (AA:BB:CC:DD:EE:FF) - 温度: 25.1°C, 湿度: 61%, バッテリー: 100%
[2025-06-16 22:45:31] SwitchBot (AA:BB:CC:DD:EE:FF) - 温度: 25.2°C, 湿度: 61%, バッテリー: 100%
SwitchBot meter BLE読み取りプログラム
対象デバイス: AA:BB:CC:DD:EE:FF
インターバル: 1.0秒
InfluxDB 3送信: ON (http://localhost:8086)
データベース: switchbot_meter
場所: リビング
Ctrl+Cで終了
----------------------------------------
[2025-06-16 22:45:30] SwitchBot (AA:BB:CC:DD:EE:FF) - 温度: 25.1°C, 湿度: 61%, バッテリー: 100%
[2025-06-16 22:45:31] SwitchBot (AA:BB:CC:DD:EE:FF) - 温度: 25.2°C, 湿度: 61%, バッテリー: 100%
このプロジェクトではRuffを使用してコードの品質管理を行っています。
# コードチェック + 自動修正
uv run ruff check --fix .
# フォーマット
uv run ruff format .
# 両方を一度に実行
uv run ruff check --fix . && uv run ruff format .switchbot-ble-reader/
├── switchbot_reader.py # メインプログラム
├── pyproject.toml # プロジェクト設定
├── README.md # このファイル
└── .venv/ # 仮想環境(uvが自動作成)
- 温度: 8バイト目下位4ビット(小数部)+ 9バイト目下位7ビット(整数部)+ 10バイト目上位1ビット(符号)
- 湿度: 10バイト目下位7ビット
- バッテリー: 最下位バイト
Database: switchbot_meter
Table: sensor
Tags:
location: デバイスの場所device_type: デバイス種別 (meter/co2)
Fields:
temp: 温度 (°C)hum: 湿度 (%)battery: バッテリー残量 (%) - オプションco2ppm: CO2濃度 (ppm) - CO2センサーのみ
- bleak: クロスプラットフォームBLEライブラリ
- influxdb3-python: InfluxDB 3クライアントライブラリ
- asyncio: 非同期処理
- struct: バイナリデータ解析
-
SwitchBot温湿度計の電源確認
- デバイスが動作していることを確認
- 必要に応じて電池交換
-
Bluetooth設定確認
# Bluetoothサービスの状態確認(Linux) sudo systemctl status bluetooth # Bluetoothデバイスの確認 bluetoothctl devices
-
距離の確認
- デバイスとの距離を近づける(1-2m以内推奨)
# sudo で実行
sudo uv run python switchbot_reader.pyデバッグモードを使用して、生のBLEデータを解析:
# デバッグモードで実行
uv run python switchbot_reader.py --debug --mac AA:BB:CC:DD:EE:FFMIT License
バグ報告や機能追加の提案は、GitHubのIssuesでお願いします。プルリクエストも歓迎します!
注意: このプログラムはSwitchBot防水温湿度計とCO2センサー専用です。他のSwitchBotデバイス(通常の温湿度計など)では異なるデータ形式を使用しているため、正しく動作しない可能性があります。