20
株式会社ソニーコンピュータサイエンス研究所 Kadecot API概要 大和田 株式会社ソニーコンピュータサイエンス研究所 http://kadecot.net/webapi

Kadecot API/Opensources for Engineers

  • Upload
    sonycsl

  • View
    3.050

  • Download
    2

Embed Size (px)

Citation preview

株式会社ソニーコンピュータサイエンス研究所

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 &params={"propertyName":“OperationStatus","propertyValue":[0x30]}

• Get http://[KadecotIP]:31413/jsonp/v1/devices/[Device ID] ?procedure=get &params={"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