Intern

SakuraレンタルサーバにGrafanaを入れてSTM550Jのデータを見える化してみよう

はじめに

今回はSakuraレンタルサーバにGrafanaとInfluxDBを入れて、STM550JのデータをGrafanaで可視化していきます

サーバの設定とNode-REDのダウンロードは前回の記事をご参照ください

Sakura internetでレンタルサーバを借りてNode-REDをインストールしてみよう はじめに 今回はsakura internetでレンタルサーバを借りて、Node-redをインストールから立ち上げまでやってみた...

目次

実装フロー

・Mosquittoのインストール
・InfluxDBのインストール
・Grafanaのインストール
上記の3つが主なポイントになると思われます

サーバ側の設定

サーバが基本的に外部と通信する場合は、Portの通信許可をしないといけません
パケットフィルターで今回使うPortに通信許可を出していきます

  • Grafana:3000
  • InfluxDB:8086
  • Mosquitto:1883

以下画像参照

これでサーバを起動します

Mosquittoを導入

サーバに入ったらMosquittoをサーバにインストールしていきます

①EPELリポジトリのインストールしていきます

sudo dnf install epel-release

②Mosquittoをダウンロードしていきます

sudo dnf install mosquitto

③Mosquittoを起動

sudo systemctl start mosquitto

④netstatをインストール
後でListenがどこと通信可能となっているか確認したいためにツールをいれます

sudo dnf install net-tools

この後、設定ファイルを弄るのでVimを入れる事をおススメします

sudo dnf install vim

InfluxDBやGrafanaを展開している状態でインストールコマンドを打つとサーバがフリーズするのでインストールするものは先に入れましょう

⑤接続確認
Litenが0.0.0.0になっていたら外部から接続が可能です

sudo netstat -tuln | grep 1883

⑥127.0.0.0だった場合

Mosuquittoの設定ファイルの中身を弄っていきます
設定ファイルを開く

sudo vim /etc/mosquitto/mosquitto.conf


以下画像みたいなのが開くと思います

こいつに少しテコ入れしていきます
vimの使い方は
「i」を押すとInsertモードになって文字が入れられます

以下の文字をどこかに入れます

# リモートアクセス用のリスナー設定
listener 1883
allow_anonymous true

Saveの方法は
「ESC」→「:wq」を入れてENTERを押します

再起動をして⑥の手順を行って確認してみて下さい

sudo systemctl restart mosquitto

MQTT通信が出来るかを確認しよう

Windowsとサーバ側のNode-REDを立ち上げてBrokerにアクセスしましょう
今回はSTM550Jのデータを見たいので取り合えずデータをMQTTで送れるかを確認します

Windows側のNode-REDの設定は以下のリンクから参照ください
最後のデータの飛ばし先がMQTT outノードを使います

EnOcean「STM 550J」を動かしてみようEnOcean「STM550J」を動かしてgrafanaでどういうデータが取れているかを見える化していきます...

Server側ノード

MQTT Inノードの設定はサーバとTopicを入れて下さい

mqtt://<YourServerIP>

MQTT Brokerへの接続成功(server側Node-RED)

MQTT brokerへの接続成功(Widows側Node-RED)

同じデータが届いている
左Windows 右サーバ 

Inflxudb導入

InfluxDBの導入をしていきます

InfluxDBのダウンロードの手順が終わったらstartせずGrafanaを先にインストールする事をおススメします

①リポジトリの作成

sudo tee /etc/yum.repos.d/influxdb.repo <<EOF
[influxdb]
name = InfluxData Repository - Stable
baseurl = https://repos.influxdata.com/rhel/8//$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdata-archive_compat.key
EOF

②InfluxDBをインストール

sudo dnf install influxdb2

③InfluxDBを立ち上げる

sudo systemctl start influxdb

④接続できるか確認

http://<YourServerIP>:8086


接続が成功したらLoginが出来る様になっています

⑤初期設定しましょう

⑥Buckets作成&API Tokenを作成
Login作業が終わったら、Bucktsを作成します
ついでにAPI tokenを作成しましょう

もしinfluxDBのBucktの作成方法が分からなかったら下記のブログの一部を参考にして下さい

Docker内でInfluxDBを動かしてみる初心者の私がdocker内でinfluxDBを動かしてみる...

API Token作成方法参照

GrafanaとInfluxDBを繋げてみようDockerコンテナで作ったGrafanaとInfluxDBを接続してみます...

Node-redとInfluxDBの設定

Node-RED(Windos)から来てNode-RED(サーバ)で受け取ったデータをInfluxDBに格納していきます

InfluxDBノードは追加してください

ノード配置(サーバ側)

InfluxDBノード設定

  • Organization:初期で設定した物
  • Bucket:今回作成したもの
  • Measurement:お好きな物をどうぞ

Time precisionはmsにして下さい

・Server部分設定

デプロイが上手く行くと下記の様にデータが入ります

Grafana導入

Grafanaを導入していきます

GrafanaをインストールするときにバックでNode-REDとInfluxDBを起動した状態ではインストールしないで下さい
サーバが固まります

①リポジトリの追加

sudo tee /etc/yum.repos.d/grafana.repo <<EOF
[grafana]
name=Grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
EOF

②インストール

sudo dnf install grafana

③起動

sudo systemctl start grafana-server

④接続

http://<yourIP>:3000

Grafanaで見える化

InfluxDBとGrafanaを接続していきます
今回は「0420a6de」という個体のみの照度と湿度を見える化します

湿度

クエリ

deviceID = from(bucket: "mqtt_test")
  |> range(start:-2h)
  |> filter(fn: (r) => r["_measurement"] == "STM550J" and r["_field"] == "id" and r["_value"] == "0420a6de")
  |> keep(columns: ["_time", "_start", "_stop", "_measurement", "_value"])
  |> rename(columns: {"_value": "deviceID"})

humidityData = from(bucket: "mqtt_test")
  |> range(start:-2h)
  |> filter(fn: (r) => r["_measurement"] == "STM550J" and r["_field"] == "humidity")
  |> keep(columns: ["_time", "_start", "_stop", "_measurement", "_value"])
  |> rename(columns: {"_value": "humidity"})

join(
    tables: {deviceID: deviceID, humidityData: humidityData},
    on: ["_time", "_measurement"]
)
  |> keep(columns: ["_time", "humidity", "deviceID"])
  |> yield(name: "humidityData")

データ中身

グラフ

照度

クエリ

deviceID = from(bucket: "mqtt_test")
  |> range(start:-2h)
  |> filter(fn: (r) => r["_measurement"] == "STM550J" and r["_field"] == "id" and r["_value"] == "0420a6de")
  |> keep(columns: ["_time", "_start", "_stop", "_measurement", "_value"])
  |> rename(columns: {"_value": "deviceID"})

illuminationData = from(bucket: "mqtt_test")
  |> range(start:-2h)
  |> filter(fn: (r) => r["_measurement"] == "STM550J" and r["_field"] == "illumination")
  |> keep(columns: ["_time", "_start", "_stop", "_measurement", "_value"])
  |> rename(columns: {"_value": "illumination"})

join(
    tables: {deviceID: deviceID, illuminationData: illuminationData},
    on: ["_time", "_measurement"]
)
  |> keep(columns: ["_time", "illumination", "deviceID"])
  |> yield(name: "illuminationData")

データの中身

グラフ