Machinist(マシニスト)の活用例

日付:2018年12月18日 火曜日
テーマプロダクト&サービス

IIJ 畠山です。

前回の記事に引き続き、IIJ謹製ツール「Machinist(マシニスト)」のご紹介です。

今回はソースコードなども交えた具体的な活用例について、ご紹介していきます。

やりたい事とその構成

Bルートブログということで、Machinistに投入するデータはスマートメーターBルート活用サービスで保持している電力測定値を使い、Machinistで可視化・拠点比較・監視をを行います。

構成は、手元にあるパソコン(MacBook)を使って、スマートメーターBルート活用サービスの公開APIからデータを取得し、それをMachinistに送信する形です。

まずは電力データの取得

Machinsitにデータを送信する際、Machinist用にデータフォーマットを少し整える必要があります。

簡単にデータ処理を行う関係で、今回は node.js を使って、API経由でデータ取得からデータ整形までのコードを書きました。

<get_InstPower.js>

‘use strict’
var fs = require(‘fs’);
var http = require(‘http’);

// スマートメーターBルート活用サービス(以下、SMBA)のAPIに接続する
var http = require(‘https’);
var host = ‘api.pms.iij.jp’;
var request = http.get({
    ”host” : host,
    ”port” : 443,
    ”path” : “/external_api/v1/inst_power/{SMBAのサービスコード}”,
    ”auth” : “{SMBAのAccessキー}:{SMBAのAccessトークン}”
  },
  function(response) {
    var body = ”;
    response.setEncoding(‘utf8’);
    response.on(‘data’, function(chunk){
      body += chunk;
    });
    response.on(‘end’, function(response){
     // 最新の値だけ取得する
     var rcvData = JSON.parse(body);
     var lastValue = rcvData[rcvData.length-1].value;

     // Machinistに送信するデータを作成
     var toStrObj = {};
     toStrObj.agent_id = ” MachinistのエージェントID ”;
     toStrObj.api_key = ” MachinistのAPIキー ”;
     toStrObj.metrics = [{namespace : “ID-0001”,
                  name : “Inst Power”, value : lastValue}];

     // JSON形式に変換し、tmpという一時ファイルに保存する
     var toStr = JSON.stringify(toStrObj);
     fs.writeFile(“tmp”, toStr, function (err) {
       if (err) {
         console.log(err.message);
       }
      });
    });
  }
);
request.on(‘error’, function(e){
  console.log(e);
})

Machinistへの送信

上のコードで生成した一時ファイルを、curlコマンドを使ってMachinistへ送信します。以下のように1行です。

<curlコマンド>

curl -X POST -H “Content-Type: application/json” https://gw.machinist.iij.jp/gateway -d @tmp
実は、、、Machinistへ送信する部分を「curlコマンド 1行で!」としたかったため、上記のデータ取得・整形のサンプルコードでは、データ整形後、あえて一時ファイルに出力する形にしました。

もちろん、データ取得→データ→Machinistへ送信 という一連の流れを1つのプログラムで実装することも可能です。

定期的に繰り返す

上記の部品をひとつにまとめつつ、定期的に「データ取得・Machinistへ送信」を繰り返すようにします。

今回は60秒周期としました。

<定期取得のシェルスクリプト>

#/usr/bin/bash

while :
do
  node get_InstPower.js
  curl -X POST -H “Content-Type: application/json” https://gw.machinist.iij.jp/gateway -d @tmp
  sleep 60
done

あとは、このスクリプトを実行すれば諸々の準備は完了です。

可視化

では、実際に送信したデータをMachinistの画面で見てみましょう。

 

最新値のグラフと1日分のグラフです。

グラフの種類と色は見やすいよう少しカスタマイズしています。

拠点比較

複数のデータを比較するには、カスタムチャートが便利です。

「カスタムチャートを作成する」ボタンを選択し、比較したいデータを選択します。

あとは、グラフの種類や色などを調整して見た目を整えます。
カスタムチャートで作成したグラフは、リンクURLで第三者と共有することもできます。

 

監視設定

データの見える化だけではすぐに飽きてしまいますので、監視設定を使ってもう少し賢くしてみます。

先に出てきたオレンジ色の線グラフの値を見ると、就寝時・外出時の数値から待機電力は200W~250Wくらいなのがわかります。

精度は荒いですが、大よその待機電力の数値を見ることで、電気を使っているか、電気を使っていない(就寝時・外出時)の判定を行うことができます。

 

まず、「電気使用監視」という監視設定を作り、監視設定に条件を追加していきます。

250Wを閾値として、閾値より大きい場合を『電気使用中』、閾値以下の場合を『待機状態』と定義します。

条件の作成が終わったら、作成した条件と監視対象のデータの紐付けを行います。

これで監視設定が完了しました。

監視設定を行うと、対象のデータのグラフの下に監視結果が表示されるようになり、状態変化したときの値と時間が一覧で表示されるようになります。

また、アクション設定を行うことで監視の状態変化に合わせてEメールを送ることもできます。

監視設定の条件をうまく使えば、電気の消し忘れを通知したり、電気の使いすぎを通知するなどの応用も可能です。

最後に

今回のブログでは、スマートメーターBルート活用サービスのAPIを使ったMachinistの活用例をご紹介させていただきました。

今回の例のような外部APIとMachinistの組み合わせはいろいろ応用が利きます。相性が良さそうなところだと、気象情報、為替レートなどです。それ以外にも、SNSのフォロワー数やいいねの数といった情報も時間経過によって変化するのでMachinsitで可視化しても面白いと思います。

Machinistに興味をお持ちいただいた方は、是非アカウントを作成してみてください。

↓ ベータ版 無料アカウント作成はこちらから
https://machinist.iij.jp/