Contenu connexe Similaire à Kadecot API/Opensources for Engineers (20) Kadecot API/Opensources for Engineers9. 株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
JSONP API
• JSONP : JSON with Paddingの略。
– クロスドメイン問題(後述)がない<script>タグを
用いてHTTPベースで機能の呼び出しを行う手法
– ブラウザのURLフィールドにコマンドを打ち込んで使える
• Kadecotの設定画面から、「開発者モード」にチェックを入れ
ることで使用可能になる
• セキュリティは何もなく、制約なくすべての機能が使える
⇒使用時には十分注意が必要。つけっぱなしにして忘れた
りするとかなり危険
• 後述WAMPのRPC機能のみ利用
10. 株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
ブラウザで家電を動かせる
• 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だけ
12. 株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
WebSocket API
• ブラウザから使えるソケットである
WebSocketを使ったインターフェース
– WebSocket: 通常のソケット+ハンドシェイク
• ハンドシェイクが終了すれば普通のソケット
• さらに上位のプロトコル(サブプロトコル)
としてWAMP (The Web Application
Messaging Protocol)を使用
– WAMP: Webアプリ間の情報の授受方式を
定めたもの
– http://wamp.ws
UDP
WebSocket
WAMP
Kadecot
WebSock
API
14. 株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
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>
15. 株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
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()という関数呼び出しを使う
↓「プロシージャ」と呼ばれる文字列。関数名に相当
←コールバック関数(省略可
←引数なし
←プロシージャ
(コールバック関数。この例では使用しない)
←引数
←操作対象デバイス
16. 株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
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() を用いる
19. 株式会社ソニーコンピュータサイエンス研究所 株式会社ソニーコンピュータサイエンス研究所
参考文献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/から公開中!