ども。こんばんは。
買ってみました。
eSensor イーセンサー スマホで温度、湿度、照度、音、空気質を確認できるWIFI環境センサー、更にeRemoteと連動可能 (黒)
えと、eRmoteなるやつを買えば、エアコンとかの制御もできるらしいですが、あんまり興味はないです
んでまぁ、あれです。
ファームウェアv26以降で外からも見れるんですが、その前にファームウェアの更新で躓く。
こいつめっちゃ外に通信しおる。しかも、80/8080とあとなんだっけなハイポートも使ってた。
おいおい。。大丈夫かよ。。。
#ちなみに外から確認するときはUPnPとかそんな話じゃなくて、BroadLinkのサーバに送った情報をスマフォが拾うみたいです。MACアドレスかなんかで拾ってんのかな。
んでまぁ、温度とかアプリで見れて満足満足な感じだったのですが久々に血が騒ぎまして。
これ、Wi-Fiで取れるってことはなんとかすりゃ専用アプリ以外でも取れるんじゃないかと。
んでもって適当にCronかなんかで定期取得して何度以上でメール出すとかまで出来るんじゃないかと。
てなわけでパケットキャプチャしてみました。
Androidでパケットキャプチャなんて初めてやった。root無くてもできるんですね。VPNアダプタ作られたけど。
えーと、80/udpで何やら通信している模様ですが中身がちょっとわからないなということで、SDKを探してみました。
ありました。
Topic: Cheap Wifi + RF + IR Controller (Broadlink-RM2-Pro) (Read 9873 times)
サンプルのソースを見ているとこんな記述が。
private void A1Refresh() {
JsonObject initJsonObjectIn = new JsonObject();
JsonObject initJsonObjectOut = new JsonObject();
String initOut;
initJsonObjectIn.addProperty(MyApplication.api_id, 161);
initJsonObjectIn.addProperty(MyApplication.command, “a1_refresh”);
initJsonObjectIn.addProperty(“mac”, mMac);String string = initJsonObjectIn.toString();
initOut = MyApplication.mBlNetwork.requestDispatch(string);initJsonObjectOut = new JsonParser().parse(initOut).getAsJsonObject();
int code = initJsonObjectOut.get(MyApplication.CODE).getAsInt();
if (0 == code) {
Toast.makeText(this, getString(R.string.toast_a1_refresh_success), Toast.LENGTH_SHORT).show();
mTvTemperature.setText(initJsonObjectOut.get(“temperature”).getAsFloat() + “”);
mTvHumidity.setText(initJsonObjectOut.get(“humidity”).getAsFloat() + “”);
} else {
Toast.makeText(this, getString(R.string.toast_a1_refresh_fail), Toast.LENGTH_SHORT).show();
}}
なるほど。80/udpにJSONフォーマットで投げつければ良さそう。
できるかなー。
気が向いたら作ってみます。
ではでは。またの機会に。



うーん。JSONのフォーマットは簡単な内容で
こんな↓感じ。
{
“api_id”:161,
“command”:”a1_refresh”,
“mac”:”xx:xx:xx:xx:xx:xx”,
}
がしかし、こいつをどうやって渡しているかが謎。
やんにHTTPでPOSTというわけにもいかないらしく、
「libBLNetwork.so」で定義されたメソッドでA1にリクエストを投げている。
ところがこの大事なメソッドがJNIで呼び出しているっぽい。
native String broadlink_request_dispatch(String paramString1, String paramString2, String paramString3);
っということで、libBLNetwork.soのx86_64ないしi366でもないものかと探してみたけど無いっぽい。まぁAndroid用ですしおすし・・・。
Andoirdで取得したパケットキャプチャをそのまま渡せば応答も同じものが返っては来るものの、応答内容のバイナリからどうやってJSONに戻せばいいのか不明。。
うーん。詰んだ。
やんに
→たんに