ダイキンのルームエアコンでおうちハックする(パラメーター解析編)
我が家ではダイキン製ルームエアコンAN80TRP-Wに無線LAN接続アダプターBRP072A41を接続し、iPhoneにダイキンスマートAPPをインストールして操作できるようにしています。
これはこれでとても便利に使えているのですが、どうせならHomebridgeを使って「ホーム」アプリに対応させたり、気温などの条件によって動作を自動化させたいと思い、アプリと無線LANアダプターの通信内容を解析してハックしてみることにしました。
解析方法
大抵の場合はHTTPを使っているに違いない、ということで今回はmitmproxyを使って解析してみます。
mitmproxyのインストール方法は公式サイトを参考に。私はMacを使っているので
$ brew install mitmproxy
でインストールしました。
インストールしたら、
$ mitmproxy
で起動し、iPhoneの設定アプリからWi-Fi→使用中のSSID→プロキシを構成の順に進んでいき、mitmproxyをインストールしたマシンのIPアドレスとポート番号(通常は8080、ターミナル画面右下に表示されている)を入力します。
その後、ダイキンスマートAPPを起動してエアコンの情報を取得します。
バッチリ取れました。
その後は(電気代を気にしつつ)色々操作をしながら通信内容を解析していきます。
エンドポイント
APIのエンドポイントは以下の通り。と言ってもRESTfulではなくリクエストはすべてGETで行われているようで、レスポンスはキーと値を=で繋いだコンマ区切りのフォーマットです。
パス | 内容 |
---|---|
/aircon/get_sensor_info | センサの情報。気温とか湿度とか。 |
/aircon/get_control_info | 設定情報。運転モードとか。 |
/aircon/set_control_info | 設定情報の変更。「?」以降にクエリ文字列を付加してリクエストを送るとエアコンの動作を制御できる。 |
/common/basic_info | 基本的な情報。IDやパスワードまで返ってくる(!)ので取扱注意。 |
/common/get_datetime | 現在日時。 |
/aircon/get_scdltimer_body?target=c | ウィークリータイマーの設定情報。 |
基本的な操作だけなら上3つを使用するだけで良さそうです。
レスポンス解析
/aircon/get_control_info にアクセスすると以下のようなレスポンスを取得できます。
ret=OK,pow=0,mode=3,adv=,stemp=25.0,shum=0,dt1=M,dt2=M,dt3=25.0,dt4=20.0,dt5=20.0,dt7=M,dh1=AUTO,dh2=55,dh3=0,dh4=0,dh5=0,dh7=AUTO,dhh=40,b_mode=3,b_stemp=25.0,b_shum=0,alert=16,stemp_a=,dt1_a=0,dt7_a=0,b_stemp_a=
さっぱりワケが分かりませんが、エアコンの動作を変更しながら少しずつ解析を進めてみました。なお、アプリを使わなくても普通にブラウザからアクセスするだけで取得できます。
pow
電源状態です。0でオフ、1でオンです。
mode
動作モードです。
設定値 | 内容 |
---|---|
1 | 自動 |
2 | 除湿 |
3 | 冷房 |
4 | 暖房 |
5 | 不明 |
6 | 送風 |
7 | 自動 |
HUM | 加湿 |
どの動作モードにしても5になることがありませんでした。一部の機種で使われているのでしょうか?詳細は不明です。
1と7が自動ですが、7は自動モードで温度を上げたり下げたりする際に使われるモードのようです。
加湿だけ突然アルファベットになるところがなかなかアレですね。
dt*
それぞれのモードに対して設定されている温度です。
設定値 | 内容 | 自動(dt1) | 除湿(dt2) | 冷房(dt3) | 暖房(dt4) | 不明(dt5) | 自動(dt7) |
---|---|---|---|---|---|---|---|
M | 自動 | ○ | ○ | ○ | |||
14 | 14 | ○ | ○ | ||||
15 | 15 | ○ | ○ | ||||
16 | 16 | ○ | ○ | ||||
17 | 17 | ○ | ○ | ||||
18 | 18 | ○ | ○ | ○ | |||
19 | 19 | ○ | ○ | ○ | |||
20 | 20 | ○ | ○ | ○ | |||
21 | 21 | ○ | ○ | ○ | |||
22 | 22 | ○ | ○ | ○ | |||
23 | 23 | ○ | ○ | ○ | |||
24 | 24 | ○ | ○ | ○ | |||
25 | 25 | ○ | ○ | ○ | |||
26 | 26 | ○ | ○ | ○ | |||
27 | 27 | ○ | ○ | ○ | |||
28 | 28 | ○ | ○ | ○ | |||
29 | 29 | ○ | ○ | ○ | |||
30 | 30 | ○ | ○ | ○ | |||
31 | 31 | ○ | |||||
32 | 32 | ○ |
なぜか除湿モードも値が設定されています。今回解析した範囲ではM以外にはなることはありませんでした。また、dt5はdt4と同じ設定値が使われているようです。暖房の温度を変更するとdt5の値も変更されました。
dh*
それぞれのモードに対して設定されている湿度です。
設定値 | 内容 | 自動(dh1) | 除湿(dh2) | 冷房(dh3) | 暖房(dh4) | 不明(dh5) | 自動(dh7) | 加湿(dhh) |
---|---|---|---|---|---|---|---|---|
0 | OFF | ○ | ○ | ○ | ○ | ○ | ||
40 | 40% | ○ | ○ | ○ | ||||
45 | 45% | ○ | ○ | ○ | ||||
50 | 50% | ○ | ○ | ○ | ○ | ○ | ||
55 | 55% | ○ | ○ | |||||
60 | 60% | ○ | ○ | |||||
CONTINUE | 連続 | ○ | ○ | ○ | ○ | ○ | ||
AUTO_L | 低め | ○ | ○ | |||||
AUTO | 標準 | ○ | ○ | |||||
AUTO_H | 高め | ○ | ○ |
dt5と同じくdh5はdt4と同じ値が設定されるようです。
stemp
現在の動作モードで設定されている温度です。dt*の値と同一になります。
shum
現在の動作モードで設定されている湿度です。dh*の値と同一になります。
dt1_a, dt7a_, stemp_a
自動運転モードで「温度を下げる」「温度を上げる」の操作をした場合に値が設定されます。操作した回数に応じて、-8.0〜8.0の値が設定されました。
adv
不明。今回の解析では値が設定されることはありませんでした。
alert
不明。
b_mode=7, b_shum=AUTO, b_stemp=M, b_stemp_a
不明ですが、今回の解析ではb_なしのパラメータと同じ値が設定されているようでした。
次は操作編に続きます。