はじめに
今回はSakuraレンタルサーバにGrafanaとInfluxDBを入れて、STM550JのデータをGrafanaで可視化していきます
サーバの設定と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
⑤接続確認
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ノードを使います

Server側ノード

MQTT Inノードの設定はサーバとTopicを入れて下さい
mqtt://<YourServerIP>
MQTT Brokerへの接続成功(server側Node-RED)

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

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

Inflxudb導入
InfluxDBの導入をしていきます
①リポジトリの作成
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の作成方法が分からなかったら下記のブログの一部を参考にして下さい

API Token作成方法参照

Node-redとInfluxDBの設定
Node-RED(Windos)から来てNode-RED(サーバ)で受け取ったデータをInfluxDBに格納していきます
ノード配置(サーバ側)

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

・Server部分設定

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

Grafana導入
Grafanaを導入していきます
①リポジトリの追加
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")
データの中身

グラフ
