45
中華製安価デバイスを 解析した話 第42回 NDS 2015/06/13 @civic

第42回中華製安価デバイスの通信を解析した話

Embed Size (px)

Citation preview

中華製安価デバイスを解析した話

第42回 NDS 2015/06/13 @civic

今日お話する内容

デバイス通信の解析

今日お話しする内容

• ニーズについて

• 温度ロガーについて

• 解析方法について

• 出来上がった成果

ニーズについて

キャンプとか好き

アウトドアの天候は 変わりやすい

寒い!

暑い!!

色んな経験をした

• どのぐらい寒かった/暑かった

• ある一時点の気温では説明しきれない

• 一日の温度変化を記録すれば説得力抜群

暑い/寒い以上の情報量

データロガー

• 温度、湿度などの環境情報を定期的に記録

温度ロガーを使って キャンプ中の温度を ロギングしよう!

温度ロガー

温度ロガーは結構高価

• 有名メーカーのものは数万円

• 温度センサーの部品は安い

• PC接続するタイプは安い

• バッテリー駆動必須

• min/maxの記録だけのは安い

Amazonで安いの発見

安心の中国製

スペック• ボタン電池型の充電可能バッテリー

• 外部電源なしで単体動作

• USB接続でデータ取得

• 10分間隔の記録で111日間の記録が可能

• 記録間隔は設定可能(10秒~24時間)

価格=3100円⁉

唯一の問題点

Windowsツールのみ

意外と高機能

データ取り込みや、 パラメータ設定に使用

カスタマーQ&A

回答

余談

!?

VirtualBoxでなんとかなる

インストール時

• USB-UART変換ドライバがインストールされてた

解説しよう

温度ロガー

Windows

USBケーブル 管理ツールCOMx

←温度データくれ リクエスト

温度データ レスポンス→

できる?

温度ロガー

MacOS or Linux

USBケーブル 自前 プログラム/dev/tty.*

←温度データくれ リクエスト

温度データ レスポンス→

解析方法について

通信をのぞき見

• 通信をのぞき見するか、ブリッジできればよい

• そういったソフトウェアがたくさんある

• レガシーデバイスの再利用で需要あるみたい

モニタリングツール

• Free Serial port Analyzer

• 無料ながらも高機能

Free Serial Analyzer

←便利!

バイナリデータを 見てわかるのか不安

意外と分かりやすかった

解析方針

• モニターしながら設定値を1箇所だけ変更

• 変更前後の差分から推測

例: 日付時刻

07 DF 05 0E 16 2F 04-- -- -- -- -- -- --YY YY MM DD HH MI SS

2015 / 5/14 22:47:04

チェックサム

• モジュロ256

• sumして256で割ったあまりが末尾についてる →0x00~0xFFの1バイト

一応解析できた

• 初期化処理?

• 設定値取得

• 設定更新

• 記録データ取得

できあがった成果

Pythonプログラムとして作成

• データアクセス用のライブラリ

• コマンドラインツール

データ取得$ elitech-device.py -c get /dev/tty.SLAB_USBtoUART 1 2015-06-11 23:34:34 26.5 2 2015-06-11 23:35:34 26.7 3 2015-06-11 23:36:34 26.8 4 2015-06-11 23:37:34 26.9 5 2015-06-11 23:38:34 27.0 6 2015-06-11 23:39:34 27.0 7 2015-06-11 23:40:34 27.0 8 2015-06-11 23:41:34 27.1 9 2015-06-11 23:42:34 27.1

設定値取得$ elitech-device.py -c devinfo /dev/tty.SLAB_USBtoUART stop_button=StopButton.ENABLE rec_interval=00:01:00 alarm=AlarmSetting.NONE delay=0.0 tone_set=ToneSet.NONE work_sts=WorkStatus.STOP current=2015-06-12 02:06:24 last_online=2015-06-12 02:06:07 temp_calibration=-1.5 station_no=3 user_info=RC-4 Data Logger upper_limit=60.0

ライブラリとして利用import elitech

# 初期化 device = elitech.Device("/dev/tty.SLAB_USBtoUART") device.init()

# デバイス設定値の取得 devinfo = device.get_devinfo()

ソースコード公開

• Github https://github.com/civic/elitech-datareader

• PyPI登録pip install elitech-datareader

まとめ

まとめ

• モニタリングツールを使えば便利

• 通信フォーマットが単純なら解析可能

• USBシリアルポート変換ドライバだったので可能だった