みなさんこんにちは。 この記事では、TI SensorTag、Raspberry PI、Apache CamelのバンドルをWebパーツへの出力とともに使用する例を示します。 その結果、センサーからのリアルタイムデータを表示し、Apache Camelアプリケーションの形式で中間接続ノードに読み取り値を保存するWebアプリケーションが存在します。
準備する
仕事のために使用された:
- ラズベリーPI 3
- TI SensorTag 2650(TI SensorTag 2541を使用できますが、センサーの数は少なくなります)
TI SensorTagをカスタマイズする
- 標準ファームウェアをまだ書き直していない場合は、作業に適しています。
- または、 BLEスタックをダウンロードして、%programfiles(x86)%内のCC2650SensorTag_BLE_All_v1_20.hexイメージをフラッシュする必要があります。
Raspberry PIを構成する
ここから Raspberry PIにRaspbianをインストールします 。
エクリプスくら
Eclipse Kuraは、Raspberry PIなどのプラットフォームでIoTアプリケーションを構築するためのフレームワークです。 WebインターフェイスまたはAPIを介してアプリケーションを構成できます。 アプリケーションはOSGiを介してデプロイされます。 また、mqttブローカーとの連携も行います。 [1]
Eclipse Kuraをインストールする
簡単にするために、ルートになり、パッケージのリストを更新しますsudo -i && apt-get update
。 Javaをインストールします(Oracle java、 apt-get install oracle-java8-jdk
を使用apt-get install oracle-java8-jdk
ます)。 Raspbian(モデル2)のKuraバージョンをダウンロード- ここから安定(記事の時点で最新バージョンをダウンロード: wget http://mirror.onet.pl/pub/mirrors/eclipse//kura/releases/3.0.0/kura_3.0.0_raspberry-pi-2-3_installer.deb
)およびインストール: dpkg -i kura_*_installer.deb && apt-get install -f
。 Raspberry PIを再起動します: shutdown -r now
。
http:// \ <rpi-device-ip>でユーザー名とパスワードadmin / adminを使用してKura WEB UIを開くことができます。 ここで、ネットワーク、Wi-Fiアクセスポイント、デバイス名、およびその他のパラメーターを構成できます。
SensorTagを使用したBLE通信用のBlueZセットアップ
パッケージマネージャーのバージョンは問題ないはずです。 したがって、以下を実行します。
apt-get install -y libusb-dev libdbus-1-dev libglib2.0-dev libudev-dev libical-dev libreadline-dev
apt-get install bluez
bluetoothサービスを起動し、スタートアップに追加します: systemctl enable bluetooth && systemctl start bluetooth
。 ワイヤレスインターフェースhciconfig hci0 up
ます。 インターフェイスがオンになっていて、すべてが機能していることを確認します: hciconfig -a
。 bluezでエラーが発生した場合は、たとえば記事 [3] [4]で最新バージョンをダウンロードしてコンパイルしてみてください。
Mosquittoのインストール
Mosquittoは、オープンソースのMQTTメッセージブローカーです。 SensorTagからCamelバックエンドアプリケーションにデータを送信するために必要です。
Rasperry PIと別のマシンの両方にインストールするか、クラウドソリューション(IBM、Azure)を使用できます。 ただし、Webパーツを機能させるには、mosquittoがWebSocketでmqttを介して機能するように構成する必要があります(これは、ローカルブローカーではなく、ブローカーの別のインスタンスで実行できます)。
Raspberry PIへのインストール:
標準リポジトリのバージョン
apt-get install mosquitto systemctl enable mosquitto
mosquittoでwebsocketを有効にするには、次の行を/etc/mosquitto/mosquitto.confに追加します
# Websocket listener 1883 listener 9001 protocol websockets
そしてsystemctl start mosquitto
を実行します。 Websocketをサポートする最新のmosquttioバージョンをインストールするには。 [2]
wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key apt-key add mosquitto-repo.gpg.key cd /etc/apt/sources.list.d/ wget http://repo.mosquitto.org/debian/mosquitto-jessie.list apt-get update apt-get install mosquitto
BLE TI SensorTagサンプルアプリケーションのビルドとデプロイ
Kuraには、TI SensorTagを操作するためのサンプルアプリケーションが含まれています。 n秒ごとに、BLEを介してデバイスに接続し、Generic Attribute Profile(GATT)を使用してデータを読み取り、ブローカーに送信します。 かなり遅いことがわかりますが、最初はそうです。
まず、kuraを使用してリポジトリを複製します。 オリジナルのhttps://github.com/eclipse/kuraまたはフォークされたプロジェクトhttps://github.com/leadex/kuraのいずれかを使用できます。このプロジェクトには、気圧計からの温度メトリックの読み取り値が追加されます。
デフレート:
git clone https://github.com/leadex/kura cd kura
Linuxでのみコードをコンパイルできました。 ビルドするには、. ./build-all.sh
ます。 後続のビルドのみのbleの例:
cd kura/kura/examples/org.eclipse.kura.example.ble.tisensortag mvn clean install -Dmaven.test.skip=true
次に、結果のjarをRaspberry PIにコピーします。
cd kura/examples/org.eclipse.kura.example.ble.tisensortag scp target/org.eclipse.kura.example.ble.tisensortag-*-SNAPSHOT.jar pi@<rpi-device-ip>:/tmp
展開
Raspberry PI telnet localhost 5002
またはリモートでtelnet <rpi-device-ip> 5002
からOSGiコンソールに接続します。 コンパイル済みアプリケーションのinstall file:///tmp/org.eclipse.kura.example.ble.tisensortag-1.0.3-SNAPSHOT.jar
をインストールするコマンドを入力し、それを入力してss
を確認します。 最後にインストール済みだが実行されていないバンドルが表示されます: 75 INSTALLED org.eclipse.kura.example.ble.tisensortag
。
コマンドstart 75
実行します。75は前のステップのアプリケーションIDです。 75 ACTIVE org.eclipse.kura.example.ble.tisensortag
を実行すると、Raspberry PIのログを表示できます: tail -f /var/log/kura.log
[5]。
Kura Web UIは、新しいBluetoohLeサービスを導入します。 開いて設定します。
Kuraを再起動すると、デプロイされたバンドルが表示されなくなるため、バンドルの永続的な操作に関する指示を使用できます。
Kuraを構成します。
- CloudServiceで、 encode.gzipをfalse に設定します
- MqttDataTransportで、 broker-url 、 topic.context.account-nameを指定します
CamelおよびWebパーツとの統合
MongoDB + Mosquitto + Webviewをすばやく起動するには、プロジェクトのルートでdocker docker-compose up -d
実行できます。 これにより、3つのコンテナーが作成され、mqtt、websocket、http(8081)ポートがローカルホストにバインドされます。 この直後、Webパーツはhttp:// localhost:8081で利用可能になります。 また、localhost:1883のmqttブローカー。したがって、Kura MqttDataTransportでIPを指定できます。
Webパーツの例:
キャメルの統合
iot-backend-camelには、メッセージブローカーをサブスクライブしてKuraPayloadを受信するApache Camelプロジェクトが含まれています。
EclipseKuraメッセージは、 Google Protobufエンコード形式で送信されます。 したがって、 com.google.protobuf:protobuf-java
をデコードするためにGoogleのライブラリが必要です。
次に、メトリックはメッセージから取得され、jsonでシリアル化され、Webパーツのサブスクライバーにブローカーに送信され、MongoDBデータベースに保存されます。
Camelアプリケーションを起動するには、次を実行します: gradlew clean build
and java -jar ./build/libs/iot-backend-camel-1.0.0-SNAPSHOT.jar
Webパーツ
webviewには、htmlおよびjsを使用したnginxに基づいたdockerイメージが含まれています。 Webパーツは、websocket Pahoライブラリおよびハイチャート上でmqttを使用して、センサー値(IRセンサーと光レベルの温度)を動的に表示します。
このサイトは、データ更新のためにブローカーを購読しています。 おそらく仕事のために、webviewでmqttホストを変更する必要があります。 これはwebview/dist/view.js
でwebview/dist/view.js
できます。 インライン:
// Create a client instance client = new Paho.MQTT.Client("localhost", Number(9001), "webview_" + parseInt(Math.random() * 1000000, 10));
docker docker-compose up -d --build
webviewを再起動できます。 これにより、Dockerイメージが再構築され、変更された場合は再起動されます。
参照資料
- http://eclipse.github.io/kura/doc/intro.html
- https://mosquitto.org/2013/01/mosquitto-debian-repository/
- http://blog.mrgibbs.io/bluez-5-39-ble-setup-on-the-raspberry-pi/
- http://wiki.beyondlogic.org/index.php?title=Cross_Compiling_BlueZ_Bluetooth_tools_for_ARM
- http://eclipse.github.io/kura/doc/deploying-bundles.html