Raspberry Pi をThingWorx につなげる（前編）

#前編： 概要説明とJava SDK によるエージェントアプリ作成
ThingWorx Foundation サーバー（以下、ThingWorx） に機器を接続する方法はいくつかありますが、PTC社が提供するThingWorx Edge Java SDK をつかって接続してみます。
ここでは、とりあえずRaspberry Pi をつないで下の図のようなアプリを作成してみます。
センサーの温度と湿度の現在値と時系列データを表示し、ラジオボタンでLEDのオン・オフを切り替えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/af00fd5f-911c-6baa-21e2-2fcd720da28f.png)

Edge Java EDK の詳細につきましては、@kanoloa さんの[ThingWorx Java SDK 開発概要](https://qiita.com/kanoloa/items/1448e7f1192534931540)をご参照くださいませ。

##必要なもの
* ThingWorx: SCP/SCOどちらでも対応可能なはずです。
* [ThingWorx Edge Java SDK](https://marketplace.ptc.com/apps/193524/java-sdk#!overview) (PTC社 [Marketplace](https://www.ptc.com/en/marketplace) より無料でダウンロード可能。要登録)
* Java SE8 （JDK1.8)
* Eclipse IDE for Java Developers
* Raspberry Pi (３以降がよいでしょう。Zero W でもOK です）
* 温度湿度センサー AM2302
* LED
* 抵抗 (今回は1kΩ、10kΩ を使いました）

##手順
1. ThingWorx Edge Java SDK セットアップ
2. Raspberry Pi 事前準備
3. ThingWorx アプリケ−ションキー作成
4. エージェントアプリ作成
5. PC上で接続を確認

##1. ThingWorx Edge Java SDK セットアップ
###プロジェクト作成
1. Eclipse IDE を起動
2. Workspaceは任意の名前でOKです“Create a new Java Project” を選択
3. プロジェクト名を入力今回は “ThingWorx Development”としましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/da638b91-4090-b273-2ad8-36b3b5a7a4a1.png)

###ライブラリーの設定
1.入手した ThingWorx Edge Java SDKのZIPファイルを任意のディレクトリで解凍します
Eclipseの Project Explorer の”Build Path” -> “Add Libraries…” を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/fd93c637-765f-7a08-8cc1-beff5a16744c.png)
3. User Library を選択して”Next >”をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/81a574af-c18a-d2db-2820-79aebe73e6fa.png)
4.“User Libraries…” をクリックし、ライブラリ名"ThingWorx Java SDK" を入力して“OK” をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/9810b2fd-20ef-8d93-a4b5-412d808b2304.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/5ebb7ce6-e116-b311-2097-7b81cdad235b.png)
5. “Add External JARs…”をクリック
6. 解凍したJava EDKのlib ディレクトリ以下にある全ファイルを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/46664ff6-7732-01d4-3d05-02108da37391.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/ed186d74-b728-9258-f0ce-af0690a73a78.png)

###JavaDoc の設定
1. thingworx-common-***.jar ファイルのJavadoc locationを選択し”Edit”をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/0e876553-6229-0468-eede-87582ed3c21b.png)
2. Lib以下のthingworx-java-sdk-development.***-javadoc.jar を指定<br>
2か所設定したら”Apply and Close”
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/ef607a21-7690-6296-6090-138a87b27126.png)

##2. サーバー認証用アプリケーションキーの作成
ThingWorx に機器を接続する際に必要となる、アプリケーションキーを作成します。
1. ThingWorx のComposer 画面を開きます
2. 画面左側のフォルダーアイコン→ SECURITY グループの下のApplication Keys の右にある“＋”をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/6e84509c-6617-e2c3-0c2f-90479f9e1cd5.png)
3. キーの名前を入力（名前は任意）
4. User Name Reference はAdministrator に設定
※ 本来は適切なユーザーを選択します。今回はデモ目的として割り切っています。
5. Expiration Date を設定します。
6. 画面上の”Save”をクリック
7. 保存後のKey IDがアプリケーションキーとなります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/7acbafa8-cfe1-ae10-0b61-28daebad910d.png)

##3. エージェントアプリの作成
Raspberry Pi 上で動作するエージェントアプリをPC上のEclipseで作成します。
今回使うサンプルコードは[GitHub](https://github.com/akiranishi/thingworx_sample/tree/master/raspdemo01/SimpleThing)に置いてあります。(ファイルは２つ）

1. ソースのインポートsrcフォルダを選択 → Import → File Systemを選択
2. 配布したソースファイル（２つ）を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/9c722cf2-5f52-c4e1-a0f4-504010c671b6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/44020070-6c70-6d20-2a3c-1bc352390aab.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/5c50db6b-18ba-e14f-03b3-d624069badd5.png)
3. “Ran As” -> “Run Configuration” を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/4d53afe9-e3fe-998d-9c62-2466134eada9.png)
4. Java Application → Main タブのMain class の”Search…” をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/d0dde38a-2b9b-604a-61a6-fccb974304b3.png)
5. "SimpleThingClient" を選択 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/1b42087e-477a-b8d4-918f-185eeed6089a.png)
6. Nameを”SimpleThingClient”に
7. Arguments に “simulated” を追加
（PC 上で実行した際はプログラム内でセンサーのダミー値を使うため）
8. “Apply”をクリック
9. “Close”をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/4c6e588b-0970-85ad-70bf-78c6b4f04b30.png)

### ソースコードの編集
1. Eclipse でSimpleThingClient.java を開く
2. URIを編集します。
エージェントアプリからアクセスするThingWorx のURLを指定します。
SSLを使わない場合は、"ws://"ではじまり、SSLを使う場合は"wss://"とします。
サーバーのポート番号（Tomcatのポート番号）の指定と、その後の"/Thingworx/WS"を忘れないでつけてください。
3. AppKey の内容を自分で作成したアプリケーションキーに変更します。
4. 編集が終わったら、必ず保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/660dee54-42e0-4104-3c02-84ae0cb359d6.png)

##4. PC 上で接続を確認
1. Eclipse上でアプリを実行します。
2. ThingWorx のComposer で、Monitoring → STATUS → Remote Things の Unbound にraspPiThing_1 が表示されれば接続ができています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111405/c5bb6274-287b-ab05-bfab-2963119e9080.png)


この後の[中編](https://qiita.com/akiranishi/items/98dfb380815df64f3edd)では、Raspberry Pi 上でエージェントアプリを走らせてThingWorx に接続します。