Intern

SOFIXCANΩEyeで得た認識結果をGrafanaで可視化してみよう

はじめに

今回はSOFIXソフト・MINISFORUMを使用して
「Milesight」でデジタル温湿度計を撮影し、その画像から数値を読み取り、デジタルデータに変換、認識結果をCSV形式で出力させる

今回は前回の続きであるSOFIXCANΩEyeで認識した結果をInfluxDBに格納し、Garafanaで可視化させる方法を紹介する

SOFIXCANΩEyeのWebAPI仕様(8日目) 目次 はじめに SOFIXCAN Ω Eyeとは ソフトウェア構成 コンテンツ取得 情報取得 処理要求 ...



SOFIXCANΩEyeのインストールカメラセットアップが終わっていない場合、WebAPIの仕様が分からない場合は、以下のブログを参照

SOFIXCANΩEyeのインストール手順(7日目) 目次 はじめに SOFIXCAN Ω Eyeとは ライセンス発行 インストール手順 ...
SOFIXCAN「OMEGA-EYE」のカメラセットアップをしてみよう はじめに 今回はSOFIXCANさんが出している「OMEGA-EYE」という製品を使わせて頂きます。カメラは「Milesight...

環境

SOFIXCANΩEyeからのデータをNodeREDで取得し、Dockerで展開しているInfluxDBに格納、同じくDockerで展開しているGrafanaで認識したデータを可視化させている

動作イメージ

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

Node-REDのフロー作成

[ 全体像 ]

 ① injectノード

  ・「injectノード」を追加

  ・「繰り返し」を「指定した時間間隔」→「1秒」に変更

  http requestノード

  ・「http requestノード」を追加

  ・ http requestノードを開き、URLの項目に最新の認識結果を取得するHTTPを記入

 ➂ Functionノード(データを分ける)

  ・「Functionノード(データを分ける)」を追加

  ・ 以下のコードを入力
   → このコードでデータを分割して配列に変換している

// 入力されたテキストデータを改行で分割して配列に変換
let lines = msg.payload.split('\n');

// 空のエントリをフィルタリング
msg.payload = lines.filter(line => line.trim() !== '');

return msg;

 ➃ splitノード

  ・「splitノード」を追加

 ➄ Functionノード(加工)

  ・「Functionノード(加工)」を追加

  ・ 以下のコードを入力
   → このコードでエラーの数値をデータに格納しないように除外し、出力されるデータの形式を編集している

let line = msg.payload;
let data = line.split(',');
let timestamp = data;
let temperatureStr = data[10].replace(/"/g, '');
let humidityStr = data[13].replace(/"/g, '');

// 数値の中にが含まれている場合はエラーログを出力し、データを格納しない
if (temperatureStr.includes('')  humidityStr.includes('*')) {
    node.error("Invalid sensor data: " + line, msg);
    return null; // データを次のノードに送信しない
}

let temperature = parseFloat(temperatureStr);
let humidity = parseFloat(humidityStr);

// 数値が正しく読み取れない場合もエラーログを出力し、データを格納しない
if (isNaN(temperature)  isNaN(humidity)) {
    node.error("Invalid sensor data: " + line, msg);
    return null; // データを次のノードに送信しない
}

msg.payload = {
    timestamp: timestamp,
    temperature: temperature,
    humidity: humidity
};

return msg;

 ➅ Debugノード

  ・「Debugノード」を追加

 ⑦ Influxdb outノード

  ・ influxDBで新規バケットを作成

  ・「influxdb outノード」を追加

  ・ influxDBノードを編集
    編集方法の詳細過去のブログを参照

EnOcean「Easy Fit」のデータをGrafanaで可視化してみよう 初めに 今回は今までブログで行った事の応用になります過去のブログで一度紹介した説明は所々省かせて頂きますEasyFITsinga...

 ⑧ 出力結果確認

・「デプロイ」をした後に、Injectノードの左にあるボタンを押して、フローを実行する
 → デバッグタブで出力結果を確認できる(下記の画像)

InfluxDBでデータを確認

 ①「Data Explorer」を開く

 ➁「influxDBノード」で設定した「バケット」・「Measurment」・「field」を選択

 → 下の画像のようにテーブルにデータが格納されていれば成功

Grafanaで可視化

 ①「Grafana」と「InfluxDB」を接続
  詳細な接続方法は過去のブログを参照

EnOcean「Easy Fit」のデータをGrafanaで可視化してみよう 初めに 今回は今までブログで行った事の応用になります過去のブログで一度紹介した説明は所々省かせて頂きますEasyFITsinga...

 ➁ ダッシュボードを作成し、以下のクエリを入力

  ・「温度」のクエリ

from(bucket: "omega-eye-realtime")
  |> range(start: -1h)
  |> filter(fn: (r) => r._measurement == "sofixcan")
  |> filter(fn: (r) => r._field == "temperature")
  |> yield(name: "mean_temperature")

  ・「湿度」のクエリ

from(bucket: "omega-eye-realtime")
  |> range(start: -inf)
  |> filter(fn: (r) => r._measurement == "sofixcan")
  |> filter(fn: (r) => r._field == "humidity")
  |> yield(name: "mean_humidity")

 ➂ グラフと比較

・温度と湿度のグラフ