kadecot api/opensources for engineers
Post on 16-Jul-2015
3.050 Views
Preview:
TRANSCRIPT
株式会社ソニーコンピュータサイエンス研究所
Kadecot API概要
大和田 茂 株式会社ソニーコンピュータサイエンス研究所
http://kadecot.net/webapi
株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
概要
• AndroidアプリKadecot (http://kadecot.net)のWebAPIについて解説します。
ECHONET Lite家電機器やセンサー、ソニー製機器、Hue、IRKitなどをブラウザからJavaScriptで制御可能 Google PlayからダウンロードしAndroidで動作 オープンソースの無料ソフトウェア 標準提供以外のプロトコルも、プラグインとして外部から追加可能
基本機能
● 接続機器一覧取得 ● 機器へのコマンド送信 ● 機器の状態取得 ● 機器の変化通知
APIサーバーKadecot
(カデコ)
株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
WebAPIとは?
• あるWebサービスの機能を他のWebサービスなどから利用するためのアクセスポイント
• 多くはJavaScriptから簡単に利用できるように作られている
Google Maps API 楽天API
株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
家電にもAPIがある
• Roomba, Hue, スマート体重計など
• 東芝・パナソニック・シャープなど各社ネット対応家電
• iRemocon・IRKitなど
問題① 各社ばらばらの体系で協調動作させづらい
株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
ブラウザから家電ネットワークには 直接アクセスできないことが多い
Web SSDP ECHONET Lite
HTTP UDP/TCP
プロトコルが違う
問題② Webアプリとの連携がしづらい
株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
Kadecotの提供する機能
WebAPI
アクセス仲介用 Webサーバ
ローカルWebAPI プロトコル透過 プラグインアーキテクチャ
Web
HTTP
SSDP ECHONET Lite
UDP/TCP
様々なプロトコルをまとめてWebに提供する仲介サーバ
株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
KadecotのWeb APIは二種類
• JSONP API –簡単
–低速(アクセスごとに接続切断)
–機器からの非同期通知は受け取れない(要ポーリング)
• WebSocket API –高速(常時接続)
–機器からの通知を非同期に受けとれる
– WAMPなどの前提知識が必要
株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
KadecotのWeb API
• JSONP API –簡単
–低速(アクセスごとに接続切断)
–機器からの非同期通知は受け取れない(要ポーリング)
• WebSocket API –高速(常時接続)
–機器からの通知を非同期に受けとれる
– WAMPなどの前提知識が必要
株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
JSONP API
• JSONP : JSON with Paddingの略。 – クロスドメイン問題(後述)がない<script>タグを 用いてHTTPベースで機能の呼び出しを行う手法
– ブラウザのURLフィールドにコマンドを打ち込んで使える
• Kadecotの設定画面から、「開発者モード」にチェックを入れることで使用可能になる
• セキュリティは何もなく、制約なくすべての機能が使える ⇒使用時には十分注意が必要。つけっぱなしにして忘れたりするとかなり危険
• 後述WAMPのRPC機能のみ利用
株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
ブラウザで家電を動かせる • List
http://[Kadecot IP]:31413/jsonp/v1/devices/
• Set http://[KadecotIP]:31413/jsonp/v1/devices/[Device ID] ?procedure=set ¶ms={"propertyName":“OperationStatus","propertyValue":[0x30]}
• Get http://[KadecotIP]:31413/jsonp/v1/devices/[Device ID] ?procedure=get ¶ms={"propertyName":“OperationStatus"}
http://kadecot.net/blog/1633/
※Device IDはKadecotの機器アイコンに表示されています。 ※procedureがSetとGetだけなのはECHONET Liteだけ
株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
KadecotのWeb API
• JSONP API –簡単
–低速(アクセスごとに接続切断)
–機器からの非同期通知は受け取れない(要ポーリング)
• WebSocket API –高速(常時接続)
–機器からの通知を非同期に受けとれる
– WAMPなどの前提知識が必要
株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
WebSocket API
• ブラウザから使えるソケットであるWebSocketを使ったインターフェース – WebSocket: 通常のソケット+ハンドシェイク
• ハンドシェイクが終了すれば普通のソケット
• さらに上位のプロトコル(サブプロトコル)としてWAMP (The Web Application Messaging Protocol)を使用 – WAMP: Webアプリ間の情報の授受方式を定めたもの
– http://wamp.ws
UDP
WebSocket
WAMP
Kadecot WebSock
API
株式会社ソニーコンピュータサイエンス研究所
WAMPメッセージング概要
RPC パターン • 呼び出し元のタイミングで情報を問い合わせたり機能の呼び出しを行う。
• 家電リモコン機能の実装などActiveな情報伝達に有効
• 概念的にはJSONP APIに類似
PubSub パターン
• 情報提供者が任意のタイミングで情報を出力
• センサー情報の出力などPassiveな情報伝達に有効
Caller
Callee
Cal
l
Rep
ly
Subscriber
Publisher
Sub
scri
be
in a
dva
nce
Asy
nch
ron
us
No
tifi
cati
on
s (P
ub
licat
ion
)
株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
WebSocket APIの使い方 [初期化] <!-- ライブラリ読み込み <script type="text/javascript" src="http://app.kadecot.net/js/wamp-client.min.js"></script> <script type="text/javascript" src="http://app.kadecot.net/js/wamp-client-browser.js"></script> <script> onload=function(){ //↓ WAMPオブジェクトを作る var wampClient = new WampClientBrowser() ; //↓ 接続成功時のコールバック wampClient.addOpenCallback(function(){ //↓ 接続成功したら、Helloコマンドを送る wampClient.sendHello("default", {"roles":{"caller":{},"subscriber":{}}}, function(){ // request device list //↓ Helloが成功したら、機器一覧を得るRPCメッセージ(後述)を送る wampClient.sendCall({}, "com.sonycsl.kadecot.provider.procedure.getDeviceList“ , null, null, function(ret){ console.log('Devlist reply! : '+JSON.stringify(arguments)) ; //var ds = ret[4].deviceList ; }); } ) ; } ) ; //↓ 接続開始 wampClient.connect("ws://[KadecotIP]:41314/"); } ; </script>
株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
WebSocket APIの使い方 [RPC]
// 機器一覧を取得するためのコード例です。 wampClient.sendCall( {} , "com.sonycsl.kadecot.provider.procedure.getDeviceList“ , null , null , function(ret){ var ds = ret[4].deviceList ; } ); // deviceId 1 番の機器の電源に0x30を送る wampClient.sendCall( {"deviceId":1} ,"com.sonycsl.kadecot.echonetlite.procedure.set" ,[] ,{"propertyName":"OperationStatus","propertyValue":[0x30]} ,function(){} );
RPCではwampClient.sendCall()という関数呼び出しを使う
↓「プロシージャ」と呼ばれる文字列。関数名に相当
←コールバック関数(省略可
←引数なし
←プロシージャ
(コールバック関数。この例では使用しない)
←引数
←操作対象デバイス
株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
WebSocket APIの使い方[PubSub]
• 関心がある対象(トピックと呼ぶ)を指定し、コールバック関数を設定するだけでOK
• ただし、トピックは機器ごとに設定されているわけではなく、同じ種類の機器全てからコールバックを受け取ってしまうので、自分が興味のある機器からのメッセージかを判別する必要がある wampClient.sendSubscribe(
{} ,"com.sonycsl.kadecot.echonetlite.topic.HomeAirConditioner.OperationStatus" ,function(r){ console.log('Value changed :’+JSON.stringify(r)); if( r[4].deviceId != 1 ) return ; } ,function(){ console.log('Subscribed : '+JSON.stringify(arguments)); } ;
// ↓「トピック」
// コールバック1:機器が値をPublishしたときに呼ばれる(都度
// コールバック2:sendSubscribeが成功したとき一度だけ呼ばれる
// 興味がない機器を除外
PubSubでは wampClient.sendSubscribe() を用いる
株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
参考文献1
JSON/WAMP RPCで使用可能なプロシージャ+引数と、
WAMP PubSubで使用可能なトピックのデータベースです。
http://app.kadecot.net/docs/ProcTopic/
株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
参考文献2
• Procedureに書ける文字列については、API Toolを使って確認できる – Kadecotのデバイス一覧画面右下にあるAppsボタンを押すと、アプリの一つとして表示される
– Kadecotが認識した実機器の情報のみ表示される。対応機器をお持ちでない方はエミュレータを使用してください
• KadecotのIPアドレスが必要だが以下のURLでもアクセス可能
http://app.kadecot.net/Apps/APITool/?kip=[Kadecot IP]
株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
参考文献3:オープンソース • KadecotCore + ECHONET Lite Plugin (MITライセンス)
– Kadecotのソースコード
• OpenECHO for Java / C++ (MITライセンス) – ECHONET Lite用クラスライブラリ(ミドルウェア)
• ECHONET Lite - Object Database (CC0:パブリックドメイン) – CSV版ECHONET Lite機器データベース – OpenECHOの生成に利用 – Release C
• MoekadenRoom (MITライセンス)
– PC用のECHONET Liteエミュレータ – http://kadecot.net/blog/1479/
https://github.com/SonyCSL/から公開中!
株式会社ソニーコンピュータサイエンス研究所
Thank you http://kadecot.net/ http://moekaden.com/
@kadecot_dev @moekaden
top related