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