2015年12月2日水曜日

TinkerMode 試してみた

概要

Tinker Mode は IoT 用のクラウドサービスで Tinker Mode に接続しているデバイスをスマートフォンや PC から制御できるようにすることができます
シミュレータを使って制御することもできますが、せっかくなので RaspberryPi を使って Tinker Mode に接続しスマホから L チカしてみました

環境

  • TinkerMode 2015/12/01 時点
  • node 4.2.1
  • mode-device ( npm module ) 1.0.3
  • iPhone 6 ( iOS 9.1 )
  • Raspberry Pi Type B Single Board Computer 512MB
  • Raspbian 8.0 (Jessie)
  • Kernel Version 4.1.7+

サインアップ

まずはサインアップします
名前/パスワードとメールアドレスを入力して確認のメールが来たら記載の URL をクリックすれば登録完了です
signup_mode.png

登録できたら早速コントロールパネルにログインしてみましょう
https://console.tinkermode.com/console/

サンプルプロジェクトの作成

サンプルプロジェクトを作成します
ログインするとすでに「Sample Project」というプロジェクトが 1 つ存在していると思います
今回はこれを使っていきます

制御用のサンプルアプリ Lumos をダウンロードする

このアプリを使って最終的に RPi の L チカを制御します

App Store から「Lumos」というアプリをダウンロードしてください
検索すると Lumos という同じ名前の他のアプリがいろいろと出てきてしまうので MODE INC が公開者になっているアプリをダンロードしてください

ダウンロードしたら早速アプリを開きましょう
アプリを開くといきなりプロジェクト ID を入力させられます
先ほど確認したサンプルプロジェクトのプロジェクト ID を入力すれば OK です
プロジェクト ID はコントロールパネルの

Dashboard -> OVERVIEW -> Project ID

で確認することができます
プロジェクトを開いているのであれば URL にも番号があるのでそれでも OK です

次にプロジェクト内に存在するユーザを登録します ( これはサインアップしたユーザとは違うユーザになります )
登録には電話番号が必要になります
Name と Phone number を入力したら Next で登録処理に進みます
電話番号は国別コードから入力する必要があるので、日本で試している場合は「+8109xxxxyyyy」みたいな感じで入力してください
入力した電話番号に SMS メッセージが届きます
そこに記載されている PIN コードを入力すれば登録完了です

Tinker Mode ではユーザの認証に電話番号による SMS 認証を採用しています
電話番号に記載の PIN コードを入力することで認証することができます

ここの流れは Getting Started の Install the Sample App を見ると画像もあるので、やり方のイメージがつかみやすいと思います

Home を作成する

このまま Lums のアプリ上で作成します
Home はデバイスやユーザを管理するものです

アプリにログインすると初めは Home の一覧になるので何もないと思います
右上に「+」ボタンがあるのでそこから Home を追加しましょう
名前とタイムゾーンを決定すれば OK です

制御するデバイスを Home に登録する

コントロールパネルでデバイスシミュレータを開きます
Sample Project にはすでにデバイス ( デバイスクラス ) も登録されているのでそれを使います

Devices -> smart_light -> DEVICE LIST -> 適当なデバイスを選択 ->
Device Simulator -> LAUNCH SIMULATOR

でシミュレータを起動しましょう
起動すると別ウィンドウで開きます
シミュレータの左ペインに「CLAIM MODE」というボタンがあるのでクリックします
claim_code.png

すると 300 秒間のカウントに入ります
この間に再度 Lumos のアプリ上で Home にデバイスの登録を行います

作成しておいた Home を選択して Devices を開きます
Home 追加時同様に右上に「+」ボタンがあるのでタップしてデバイスを追加します
デバイスを追加するには「Claim Code」が必要になります
これはデフォルトだとランダムに発行される文字列になります ( スクリーンショットの Claim Code は自分で変更したものになります )
Claim Code の確認は開いているシミュレータ上でもできます
コントロールパネルのデバイス一覧からも行えます
Claim Code を 300 秒間の間に入力してアプリ上で Add しましょう
エラーが発生しなければ登録成功です

一覧に出てこない場合は一旦 back して再度 Home を選択してみてください
登録したデバイスが表示されるはずです
ここまでできれば一旦アプリ上での作業は完了です

RPi 側の準備

ここからは RPi 側の準備になります
OS のインストールやネットワークの設定は事前に済ませておいてください

node をインストールする

最新の node が必要になります

Tinkder Mode を操作する Javascript SDK をインストールします

エラーなくインストールされれば OK です
執筆時点での SDK のバージョンは 1.0.3 でした
https://www.npmjs.com/package/mode-device

ソースコードを修正する

取得した app.js を修正します
修正するといっても API 認証のための情報を書き換えるだけです

Tinker Mode の API をコールするためには Device ごとに割り振られている DeviceID と API Key が必要になります
プロジェクトごとではなくデバイスごとなので別のデバイスを制御したい場合は、別の DeviceID と API Key に書き換えてください

DeviceID と API Key の取得はコントールパネルから行えます

Devices -> smart_light -> DEVICE LIST -> 適当なデバイスを選択

get_id_and_key.png

取得できたらソースを修正していきます
修正する箇所は app.js の 10, 11 行目です

var DEVICE_ID = 1;
var API_KEY = 'v1.cccc.bbbbbbbbbbbbbbbbbb.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';

取得した Device ID と API Key に書き換えたら保存して終了しましょう

接続できるか試してみる

この状態で一旦 RPi から Tinker Mode に接続できるか試してみるといいと思います

  • node app.js

でスクリプトを起動しましょう

Connecting to wss://api.tinkermode.com:443/devices/1/command
Event is triggered
WebSocket Client Connected

となれば成功です
ほっておくと ping - pong のやり取りもはじまります

Lチカ用の配線をする

ブレッドボードを使って L チカ用の配線をしましょう
ここでは配線に関する詳細は省略します
Lチカ配線は過去にも紹介しているので参考にしてください
あとはググってもいろいろと情報がでてくると思います

一点だけポイントですが、GPIO は論理番号 4 番ピンを使ってください
app.js 内で 4 番 PIN を制御しているためです
もちろんスクリプトを修正して別の番号の PIN を制御するようにすれば別の PIN を使っても OK です

アプリシミュレータから LED を点灯させてみる

これで準備が整いました
では、アプリから LED を点灯させてみましょう
まずはアプリシミュレータを使って点灯させます
アプリも Sample Project 作成時に 1 つ存在するのでそれを使えば OK です

Apps -> controller_app -> App Simulator -> LAUNCH SIMULATOR

で別ウィンドウでシミュレータが起動します
スマホから Home を作成したと思うのですでにシミュレータ側にも Home があると思います
ないスマホで作成した方法と同様でいいので Home を作成してください

Home を選択すると右ペインに「Outgoing: Commands」というのが表示されます
これを使ってデバイス ( RPi ) に信号を送り LED をチカっとさせます
送信する信号の情報は以下の通りです
send_signal.png

Target のデバイス情報は Home に登録したデバイスがプルダウンで選択できるので、登録したデバイスを選択してください
プルダウンにデバイスが表示されない場合は、Home へのデバイス登録が失敗している可能性があります
再度 Claim Mode にして Claim Code を使って Home にデバイスを登録してください

情報が入力できたら「SEND COMMAND」で OK です
で、成功すると LED がチカっ光るはずです
なんかリモコンみたいな感じで初めは感動します
消灯する場合は送信する信号の Parameters を on : 0 にすれば OK です

Lumos アプリから LED を点灯させてみる

アプリの場合はトグルを ON/OFF するだけで LED が点灯したり消灯したりします
アプリにログインして Home を選択してデバイスの一覧を表示するとデバイスの右にトグルボタンが表示されていると思います
そのトグルを ON/OFF してみてください
LED がチカチカするはず、、、がしない

ちょっとだけソースを修正する必要があります
21, 22 行目で Tinker Mode から受け取る信号を if 文で切り分けている部分があります
そこを書き換えましょう
以下のようにすれば OK です

device.commandCallback = function(msg, flags) {
  if (msg['action'] == 'change') {
    var v = msg['parameters']['switch'] ? 1 : 0;
    led.writeSync(v);
  }
}

どうやら Lumos アプリから送信される信号は以下の JSON 情報のようでシミュレータから送られる情報とは異なるようです

{“action”:”change”, “parameters”:{“switch”:0}}

書き換えて再度 node app.js で起動して Lumos アプリからトグルを ON/OFF すればアプリから L チカを制御できるようになります

最後に

確かにおもしろいサービスだと思いました
おそろく制御の情報はすべて WebSocket でやり取りしているのでほぼリアルタイムに行えます
今回は GPIO の制御をしましたが、逆に言えば GPIO の制御ができるデバイスは全て Tinker Mode から制御できるということになります

参考サイト

Tips

iPhone アプリの「Lumos」で制御したい場合はプロジェクト配下にあるアプリ名が「controller_app」でなければなりません
一度プロジェクトを削除した場合などで Lumos を使いたい場合はアプリ名を必ず上記にしてください

0 件のコメント:

コメントを投稿