2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

環境情報「見える化」サービスFerix IOのご紹介

Last updated at Posted at 2019-11-01

はじめに

こんにちは。Ferixの井上です。このたび一般公開になったFerix社の新しい環境「見える化」サービス・Ferix IOについて、本記事においてご紹介したいと思います。
簡単なチュートリアル、サンプルコードを合わせて掲載しています。
なお、現在開発版のためご不便あるかと思います。バグなどを発見されましたら、コメントで頂けると助かります。

Ferix IOとは?

Ferix IOは環境情報を「見える化」する新しいプラットフォームです。
Raspberry Piとオムロン環境センサをご用意いただければ、IoTセンサとしてすぐに導入可能です。
たとえば温度、湿度、照度、気圧、騒音、CO2濃度(相当)などを計測し、リアルタイムから過去にさかのぼり、その量と変化をブラウザ上から見ることができます。
Ferix IOは家やオフィス、病院や学校などあらゆる場所で簡単に導入できるIoTデータの可視化をサポートするサービスです。

ご用意して頂くもの

今回のチュートリアルでは、Raspberry Pi 3 B+とオムロン環境センサ(USB型)、言語はPHPを使ってご紹介したいと思います。
今後Python向けライブラリも用意する予定です。もうしばらくお待ち下さい。

チュートリアルの環境

  • Raspberry Pi 3 B+
  • Raspbian GNU/Linux 10 (buster)
  • オムロン環境センサー(USBタイプ、形2JCIE-BU01)
  • PHP 7.2
  • PHP用Ferix IOライブラリ

新規登録をする

Ferix IOを使用するには、まずアカウント登録をする必要があります。
ユーザー新規登録ページへと進んでください。
WS000000.JPG

登録にはユーザー名の他、ご自身のEメールアドレスが必要となります。
指示に従って、利用規約をよくお読み頂いてからフォームへの記入をお願いします。

WS000001.JPG

利用規約に同意して登録ボタンを押していただくと、記入されたEメールアドレスに検証用コードが送信されます。
検証用コードは通常六桁の数字になっており、これをフォームへと記入したください。

WS000003.JPG
以上でユーザー登録が終わります。Ferix IOのログイン画面を通じて、コンソール画面(ダッシュボード画面)へと進んでください。

Ferix IOでユニットを設定する。

ここから少し設定が難しくなるかもしれません。

Ferix IOでは現在のところ、母艦センサーユニットセンサーデータという3つの単位を使用しています。
データを取得するセンサー等を**「センサー・ユニット(または単にユニット)」と呼び、そのセンサー・ユニットのグループを「母艦」**と呼んでいます。

例えばオムロン環境センサとRaspberry Piを組み合わせて使用する場合は、オムロン環境センサーがセンサー・ユニットに当たり、Raspberry Piが母艦に当たります。

こういった区別は最初は複雑に感じると思うでしょうが、複数のオムロン環境センサーや多様なセンサーを同時に使いたい場合に役に立つと思います。Ferix IOに送信するデバイスはRaspberry Pi一台というとき、母艦というのはグループの単位として使用され、ユニットはそのグループ(母艦)のどれかに属する、ということになります。

母艦を設定する

母艦はセンサーユニットが所属するグループに当たります。
左側のメニューが**Unit Settings**のページを開いてください。このページでセンサー・ユニットの設定をします。
WS000007.JPG

新規登録したばかりの場合、母艦は何も設定されていないと思います。
新たに母艦を設定してみましょう。「新しい母艦ID」というフォームに新しい母艦IDを入力してください。任意の英数字・ハイフン・アンダーバー・コロンを使用できます。
今回は一例としてm-1と名付けました(mothership-1ぐらいの意味です)
WS000008.JPG

「母艦を追加する」ボタンをクリックすると、新しいカードが表示されると思います。これがその母艦に属するユニットを設定することができます。

WS000010.JPG

母艦名には好きな母艦の名前をつけられます。今回は母艦1としておきます。
その母艦に所属するセンサーユニットのIDと表示名(名前)を決めるのですが、このときIDと表示名はカンマ区切りで記入してください。
今回は「u-1,ユニット1」と記入します。
センサーユニットIDには任意の英数字・ハイフン・アンダーバー・コロンが使用できますが、カンマは使えません。
表示名にはカンマ以外の好きな文字が使用できます。

最後に「変更を保存する」ボタンで変更を確実にしてください。
このボタンをクリックするまでは新しい母艦IDなども保存されません。

APIキーの確認

最後に、APIキーを確認しておきましょう。
Unit Settingsの最上部にAPIキーが入ったフォームがあります。APIキーを使用するときはこのフォームからコピーして使用してください。

クライアント側の設定をする。

Ferix IOのWeb APIは、基本的どの言語でも使用できますが、すでにあるライブラリを使用するのをおすすめします。
PHPとPythonの二種類ご用意しておりますので、どちらもご利用いただけます。

GitHubのリポジトリからCloneします。

git clone https://github.com/Ferix-Inc/ferix-io-client.git
cd ferix-io-client

phpを使用する場合はFerixIO.phpをrequire_once()などで読み込んで使用することになります。

サンプルコード(Python)

サンプルコードはpython/app.pyとなります。

app.py

サンプルコード1(PHP)

クライアントのサンプル用コードとしてphp/sample.php が用意されていますので、こちらを見てみましょう。

sample.php
// ライブラリの読み込み
require_once("./FerixIo.php");

// ユーザーID
$userId = "sample";

// 母艦ID
$mothershipId = "m-1";

// ユニットID
$unitId = "u-1";

// APIキー
$ferixIoAPIKey = "y0lXK7SLHnJc9XJ9JdeY/3oTHMgYEZymuNIIcf01/Rk=";

// アップロードのスパン。10秒以下には設定しないでください。
$waitingTime = 10;


sample.phpでは、すでに母艦IDとユニットIDなどが記載されていますが、これを自身の設定に書き換えてください。

このsample.phpはFerixIOの最もシンプルなデータ送信の例として気温データだけを送信しています。今回は実際の気温ではなくランダムの数字を気温代わりとして送信しています。

実際に気温などのデータで使用するときは、この値を書き換えてご使用ください。

sample.php
// インスタンス
$ferix = new FerixIo($userId, $mothershipId, $ferixIoAPIKey);


// データ送信のためのメインループ
while(true) {

	$params = ["unit_id"=>$unitId,
				"temperature"=> mt_rand(24, 30)];

	$result = $ferix->sendEnvData($params);


	if (isset($result["header"]["http_code"]) && $result["header"]["http_code"] === 200) {
		// 成功
		print date("Y-m-d H:i:s") . " [INFO] Success - Environmental data has been sent.\n";
	} else {
		// 失敗
		print date("Y-m-d H:i:s") . " [ERROR] Failed to send environmental data.\n";
	}

	// 指定された時間だけ待機
	sleep($waitingTime);
}

続くwhile文とsleep文で、一定間隔にデータを送信しています。
送信するときはsendEnvData()メソッドを利用し、第一引数に連想配列を入れてください。これでデータを送信することができます。
正しく送信されれば、HTTPレスポンスのステータスコード200で返ってきます。

このときですが、使用できる連想配列のキー名は決まっています
例えば気温情報についてアップロードしたいときは、temperatureを使ってください。
※将来的にはもう少し自由に決められるようしたいのですが……、ご不便おかけします。
以下が現在使えるキー名です。

属性 値の意味
unit_id ユニットID(※必須) u-1
_time 時間(UNIX時間、秒) 1564463165
temperature 気温 32.72
humidity 湿度 44.89
atm 気圧 1005.139
eco2 CO2(相当) 1005.139
etvoc TVOC相当 137
illumination 照度 516
noise 騒音 68.85

USB型オムロン環境センサを使う場合(PHP)

現在Ferix IOではUSB型オムロン環境センサの使用に対応しています。

WS000001.JPG

ご使用の際は、ユニット設定画面でユニットIDにオムロン環境センサのBIDを指定してください。
BIDは環境センサと一緒に箱パッケージの中に入っていると思います。

Ferix IOのPHPライブラリでは、オムロン環境センサ用のメソッドを用意しているので、そちらを使ってより簡単に7種のデータをアップロードすることができます。
サンプルのPHPコードを以下のようになります。

sample2.php
require_once("FerixIo.php");


// ユーザーID
$userId = "sample";

// 母艦ID
$mothershipId="m-1";


// APIキー
$ferixIoAPIKey = "y0lXK7SLHnJc9XJ9JdeKl3oTHMgYEZymuNIIcf01/Rk=";

// アップロードのスパン。10秒以下には設定しないでください。
$waitingTime = 10;


// インスタンス
$ferix = new FerixIo($userId, $mothershipId, $ferixIoAPIKey);


// データ送信のためのメインループ
while(true) {

	// オムロン環境センサからデータを取得して、送信する
	$result = $ferix->sendOmronData();

	if (isset($result["header"]["http_code"]) && $result["header"]["http_code"] === 200) {
		// 成功
		print date("Y-m-d H:i:s") . " [INFO] Success - Environmental data has been sent.\n";
	} else {
		// 失敗
		print $result;
		print date("Y-m-d H:i:s") . " [ERROR] Failed to send environmental data.\n";
	}

	// 指定された時間だけ待機
	sleep($waitingTime);
}

ほとんどsample1.phpと同じなのですが、使用するメソッドが違います。通常のサンプルと違って、独自に連想配列を作る必要はありません。
sendOmronData()メソッドを実行すれば、7種類のデータを自動で取得されアップロードできます。

データ送信の一例(Python版)

ユーザーの新規登録をして、母艦ID、ユニットIDの登録も済ませておいてください。必要な情報は、ユーザーID、母艦ID、ユニットID、それにAPIキーの4つとなります。

Python向けのサンプルコードは、pythonディレクトリの中のapp.pyになります。基本的にはferix_io_client.pyを読み込んで使用してもらえれば簡単にデータをアップロードできます。

ただしPHP版と違いとして、オムロン環境センサを使用する場合はユニットIDも記載してもらう必要がありますので、こちにはBIDをあらかじめご用意しておいてください。

import time
import datetime
from ferix_io_client import FerixIoClient


# ユーザーID
USER_ID = "sample"

# 母艦ID
MOTHERSHIP_ID = "m_1"

# APIキー
API_KEY = ここにAPIキーを入力

# スリープする時間(秒。10秒以下にしないでください)
SLEEP_TIME = 10

# ユニットID
UNIT_ID = ここにユニットIDを入力

f = FerixIoClient(USER_ID,MOTHERSHIP_ID,API_KEY)

while True:
    res = f.send_omron_data(UNIT_ID)

    if res.status_code == 200:
        print("[*] Success: {}".format(datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")))
    else:
        print("[*] Error {0}: {1}".format(res.status_code, res.text))

    # 古いデータがある場合送信する。
    res_old = f.sendOldData(200)

    time.sleep(10)

オムロン環境センサを使わずに、任意のデータを送信したい場合は以下のように使います。

import time
import datetime
from ferix_io_client import FerixIoClient


# ユーザーID
USER_ID = "sample"

# 母艦ID
MOTHERSHIP_ID = "m_1"

# APIキー
API_KEY = ここにAPIキーを入力

# スリープする時間(秒。10秒以下にしないでください)
SLEEP_TIME = 10

# ユニットID
UNIT_ID = "u_1"

f = FerixIoClient(USER_ID,MOTHERSHIP_ID,API_KEY)

while True:
    params = {
        "_time":int(datetime.now().timestamp()),
        "unit_id": UNIT_ID,
        "mothership_id": MOTHERSHIP_ID,
        "temperature": 26.5
    }
    res = f.send(params)

    if res.status_code == 200:
        print("[*] Success: {}".format(datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")))
    else:
        print("[*] Error {0}: {1}".format(res.status_code, res.text))


    time.sleep(10)


Python版の説明は以上となります。

終わりに

やや駆け足となりましたが、Ferix IOの使用方法についてご紹介しました。
Ferix IOにはこのような環境データ保存・総覧以外に、CSV形式のデータとして保存したり、閾値を設定することによるメール送信機能もありますが、次回以降紹介していきたいなと思っております。

まだまだ不十分なところもあるため、現在サービス充実を目指して鋭意開発中です。
何らかのバグなど見つけた場合や、何か新しい希望などありましたら、コメントでいただけると嬉しいです。
ここまでお読み頂きありがとうございました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?