Armadillo-IoT G3Lを使って、データをAWSに送信してkibanaで可視化してみました。
Kibanaとは?
Kibana は、ログと時系列の分析、アプリケーションのモニタリング、オペレーショナルインテリジェンスのユースケースに使われる、
オープンソースのデータの視覚化および調査ツールです。
参考:AWS-Kibana
環境
・Armadillo-IoT G3L(ネットワーク接続有)
-AWSのアカウントが必要です。
-ArmadilloをAWSのIoTcoreへの登録が必要です。
(今回は下記サイトを参考にAWSのIoTCoreにArmadilloを登録させていただきました。)
参考:[メモ] Raspberry PiをAWS IoTに接続する (とりあえずGUIで)
手順
1.必要なパッケージをインストールします
・必要なパッケージをインストールします。
[armadillo ~]# apt-get update [armadillo ~]# apt-get install python3 [armadillo ~]# apt-get install python3-pip [armadillo ~]# pip3 install AWSIoTPythonSDK
2.MQTTTを送信するプログラムを作成します。
以下のコードをpublish.pyという名前で保存します。
import subprocess as sub import random import json import time from datetime import datetime # Import SDK packages from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient def support_datetime_default(o): if isinstance(o, datetime): return o.isoformat() def get_data(): sensor = {} sensor['temp'] = random.randint(20,30) #今回はテスト用でデータをランダムに生成しています。 message = {} message['timestamp'] = datetime.now() message['sensor'] = sensor messageJson = json.dumps(message, default=support_datetime_default) return messageJson def main(): #while True: # For certificate based connection myMQTTClient = AWSIoTMQTTClient("myClientID") myMQTTClient.configureEndpoint("AWSIoTエンドポイント", 8883) myMQTTClient.configureCredentials("[AmazonRootCA1.pemのPATH]", "[pprivate.pem.keyのPATH]", "[certificate.pem.crtのPATH]") myMQTTClient.configureOfflinePublishQueueing(-1) # Infinite offline Pubblish queueing myMQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz myMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec myMQTTClient.configureMQTTOperationTimeout(5) # 5 sec myMQTTClient.connect() while True: messageJson = get_data() myMQTTClient.publish("myTopic", messageJson, 1) time.sleep(1) myMQTTClient.disconnect() if __name__ == '__main__': main()
AWS側の設定
1.Elasticsearch Serviceのドメインの作成
下記サイトを参考にElasticsearch Serviceのドメインの作成をしてkibanaにアクセスするところまで行います。
参考:Kibanaの使い方 〜環境準備〜【Amazon Elasticsearch Service】
※ドメインが作成されるまで約10分かかります
2.IoTCoreのルールの作成
IoTCore→ACT→ルール→作成
-名前:任意
-ルールクエリステートメント:SELECT * FROM 'myTopic'
-アクション:Amazon Elasticsearch Service にメッセージを送信する
[ドメイン]先ほど作成したドメインを選択
[ID]${newuuid()}
[索引]timestamp
[タイプ]timestamp
[ロール]新しいロールの作成
確認
1.Armadilloでpublish.pyを実行する
# python3 publish.py
2.kibanaで確認する
kibana→index pattern→Create index pattern
[Index pattern]timestamp*
→Next step
[Custom index pattern ID]timestamp
Create index pattern
3.visualizationの作成
Visualize→New Visualization→Area
[Index pattern]timestamp*
[Y-Axis]Aggregation:Average
Field:sensor.temp
[X-Axis]Aggregation:Date Histogram
Field:timestamp