1NCE Pluginのデータ可視化サービスDatacakeで土壌水分量をIoT監視し、LINE通知してみた

2024年4月12日掲載

Datacake コンソール画面

皆さんこんにちは。IoTソリューションアーキテクトのTakamasaです。

この記事では、2024年から低容量IoT回線「1NCE」が新しく発表したPlugin機能の1つである、ローコード可視化サービス「Datacake」を使って、簡単にIoTデバイスのセンサーデータの可視化をする方法と、水分センサーを使ってメール及びLINE APIを使ってスマホに通知をする方法を紹介します。

目次

1NCEとは?

先ずはおさらいですが、1NCE(ワンス) というIoT回線の特徴を簡単にまとめてみます。

  • 1回線当たり一括2,200円(税込)の支払いのみで、最長10年間、500MBまで利用可能(プリペイド式)

  • SIMカード1枚からオンラインで購入可能

  • 日本国内に加えて、165以上の国と地域において追加料金なしでローミングサービスを利用可能

  • SIMカードに加えて、ウェブ上の回線管理ツール(CMP)や、お客さまのシステムとのデータ連携を可能にするAPI、安全にデータを伝送するOpen VPNなどの機能を追加料金なしで利用可能

  • eSIMやIPSec(各拠点のLANを相互接続する高セキュリティーのネットワーク)、VPCピアリング(AWS VPC同士を接続)などの機能を、有償の追加オプションとして提供

一番の特徴は、IoT回線でよくありがちな月額基本料金+従量課金ということではなく、一括で10年間前払いするという部分がとても特徴的ですね。

また今回使ってみるSIM管理プラットフォームについても、2,200円(税込)の中で使用できるということなので、気軽にIoTをプロトタイピングしてみるといった使い方でもできそうです。

尚、1NCE(ワンス)SIMカードでは法人ユーザーであれば、どなたでも1枚からWEBで購入が可能です。

▶ 1NCEショップ

1NCEのSIM回線プラットフォーム自体には、REST APIや、IMEIロック、SMS送信、回線無効化、追加チャージなど、回線に関わる操作が一元的に管理できるものなっています。

 

1nce customer portal

1NCE OSについて

1NCE OSとは、1NCE プラットフォーム上で受信したデータを加工・分析・変換などができる付加サービスです。

OSと名前がついているので、IoTデバイス側に使われるOperating System (OS)と勘違いする人も多いのですが、1NCE OSというプラットフォームサービス名なだけで特にデバイス側に何か特別なOSをインストールする必要はありません。

1nce os

1NCE OS機能は、全部で6つの機能に別れています。

  • Device Authenticator:SIM認証を使ったデバイスオンボード機能

  • IoT Integrator:UDP、CoAP、LwM2Mのデータエンドポイント機能と、送られたデータをクラウド側に転送する機能

  • Device Inspector:Device Integratorに送れたデータを最大7日間保管する機能

  • Device Locator:IoTデバイスの基地局情報から位置情報を取得して、APIとして返す機能

  • Energy Saver:バイナリデータとJSONテンプレートを使ってデータ整形する機能

  • Plugin:サードパーティーのサービス統合機能

いくつかの機能に別れていますが、基本的に1NCE OSの考え方は機能パーツという感じに近く、単体で使えるものも有れば、組み合わせて使わないと動作しないものも様々あるのが、ちょっと使いづらい点ですね。

私なりに 1NCE OS の全体像を分かりやすく可視化してみました。

 1NCE OS の全体像

1NCE OSの全体的な仕組みとしては、バイナリデータを使ったデータ転送機能、データハブ機能、クラウドからデバイス側へのデータ転送機能、位置情報機能、そしてサードパーティープラグインというのが、現状の機能になります。

1NCE Pluginの概要

さて、それでは今回発表された1NCE Pluginとは何かという部分をもう少し深堀りしていきたいと思います。

正確には1NCE OS機能の一部としてのPluginという機能がある形になりますが、1NCE Pluginとしても表現する場合があります。

コンセプトとしては、1NCE OS自体に新たな機能が増えていくわけではなく、1NCEのパートナー企業の提供するサービスと、1NCE OSと簡単に繋げるようになっているようです。近年流行ったChatGPTのPluginのイメージに近いかもしれません。

この記事執筆時点で、1NCE Pluginのパートナーとしては、以下の3つが準備されています。

1NCE Pluginのパートナー

FOTA (Firmware OTA):Mender社の提供するFOTAサーバの利用が可能。差分アップデートによりデータ量の節約が可能。

データ可視化: Datacake社が提供するデータ可視化サービス。収集したデータをローコードで解析し、Rule Engineに基づいたアクションが設定可能。

Azure ハブ:Tartabit社の提供するIoT Bridge機能。Azureの各種サービスにワンクリックで接続が可能。

 

注意としてですが、1NCEとしてこれらのサービスを提供しているわけではなく、サービス自体はあくまでも各パートナーが提供しているものになります。そのため、課金体系としても各パートナーが個別に請求してきます。

1NCE Pluginとしては、これらのサービスとの接続をワンクリックで実施できるようにしています。

ちなみに、1NCE Pluginへの接続機能自体は、1NCE SIMを購入された全てのお客さまなら追加費用無しで利用が可能です。

今回構築する構成について

試してみる構成は、以下のようにしてみたいと思います。

今回はかなりシンプルなIoTシステムを作ってみます。

 

1NCE Plugin Datacakeを使った構成図

やりたいことは、我が家にある植木の土壌水分量をセンサーで定期的にチェックし、その水分量が閾値を下回った時に、メールを通知して水を上げるようにLINEで通知する、というIoTシステムです。

この構成でできること

  • 土壌の水分量をウェブからチェックできる

  • 適切なタイミングで水やり検知ができる

  • メールとLINEでユーザーに通知する

 

この構成を実現するにあたって、用意したものは以下です。

  • Raspberry Pi 3 B+

  • USB LTE モデム

  • GrovePi+

  • 温度センサー

  • 土壌水分センサー

そして構成のポイントとして、使用するプロトコルに敢えて、CoAP(Constrained Application Protocol)を使ってみました。

1NCE OSを使用することができるプロトコルには、UDP/CoAP/LwM2Mの3つがあるのですが、基本的にはどれもIoTデバイスによく使用される比較的に軽量なUDPベースのプロトコルになります。

因みにTCPベースのプロトコルには、TCP/HTTP/MQTTなどがあります。

UDPベースのプロトコルでは、到達確実性というものが担保されていないので、基本的にはデータを送りっぱなしという形になります。TCPベースの場合には、3-wayハンドシェイクという仕組みを使って、一旦通信間のコネクションを確立してからデータを送るという仕組み上、データの到達性という意味では高いのですが、その代わりにデータ量が多いという特徴があります。

CoAPというプロトコルは、UDPベースでありつつも、HTTPと同じようにREST(GET/POST/PUT/DELETE)のように操作することができ、非同期処理のサポートやヘッダーの簡略化によって、軽量さと操作性を両立させています。さらに上位レイヤ部分の実装が必要ですが、使用するライブラリによっては、TCPのように再送処理を組み込むことができ、これによって、到達性という部分もカバーできます。

今回は1NCE OSで受信したデータを1NCE Pluginを使って、Datacakeというデータ可視化サービスと連携させてみます。

Datacakeについて

Datacakeとは、ドイツ発のローコードIoTプラットフォームで、誰でも簡単にデータの可視化やルールエンジンを使った自動化、例えばメール通知、SMS送信、Webhook、デバイスへのデータ送信、自動スクリプトの実行などができるようになります。

1NCE Pluginでは、このDatacakeのIoTプラットフォームと、ワンクリックで接続できるようになっており、1NCE OSに送られたセンサーデータを一瞬で可視化することが可能です。

Datacakeの全体図

一般的にデータ可視化サービスの場合、デバイスとの接続、データの解析、DBとのマッピングなどなど単純に可視化するだけにも関わらず、結構な手間暇を掛けて設定する必要がありました。

さらに可視化サービスも、初期費用100万円+月額費用のような請求形態で、小規模なIoTシステムには向かないという欠点がありました。

Datacakeの場合は、ローコードでほぼコードを書くことなく接続でき、ダッシュボードについてもメーカーに依頼することなく、自分自身で表示を編集することが可能です。

Datacakeで表示ができるウィジェットの一覧は、こんな感じです。

Datacakeのコンポーネント

数値の表示や、ゲージの見た目も出来ますし、テーブル、スライダー、地図、さらにはiframeなんかも表示できるので、おそらく外部でHTML/Javascriptで1NCE SIM残量を表示するページを作れば、これ一つでダッシュボード可視化ができてしまいます。

さらにすごいのは、表示する値を調整できる機能です。

一般的に格安なダッシュボードサービスになると、「受信したデータを単に表示するだけ」、「グラフ化するだけ」のようなものが多いのですが、なんとDatacakeの場合は受信したデータを計算して、指定した期間の最小・最大・平均・合計、変化量、変化率を表示することができます

Datacaleの設定

このレベルができるダッシュボードサービスは比較的高額になることが多いのですが、これを安価に実現しているというのがすごいと思います。

さらにはルールエンジンという仕組みを使って、モニターしている値に応じたアクションを設定可能です。

メール送信・SMS送信・Webhook、データ送信など、おそらく小規模なIoTシステムであれば、これだけで完結できると思います。

Datacakeのルールエンジン

Webhookにも対応しているので、今回はLINEのMessage APIと連携して、水が切れたらメールとLINEで通知するというところまでやってみたいと思います。

Datacakeの料金プラン

因みに、1NCE Pluginとしてはサードパーティーシステムに接続する機能ということになっているので、Datacake自体の課金については、個別に契約するような形になります。

但し、1アカウント当たり5台までは無料で使用できるようになっているので、ごく小規模なIoTシステムや、PoC用途であれば、このダッシュボードでほとんどことができるかと思います。

因みに契約体系としては、ボリュームでの契約かもしくは1台ごとに課金していく2種類の方式が選択することが可能です。

Datacakeの料金表

10台ぐらいまでであれば、実質 10 € (月1,400円)程度で利用できるので、比較的に安価にIoTデバイスからのデータの可視化および通知の仕組みを作ることができます。

Datacakeの料金プラン

設定手順

ここからは実際の構築手順になります。

1NCEポータルでCoAPエンドポイントを有効化する

先ずは1NCEポータルから、CoAPのエンドポイントを有効化していきます。

この機能はDevice Integratorという名前で記載されています。

1NCEポータルにログイン後、1NCE OS > Device Integratorをクリックしてください。

※初回利用の場合には、データ保管に関して、同意する必要があります。

1NCE OSの設定画面

Device Integratorをクリックすると、以下のような画面が出てくるので、右上の “+ New Integration”をクリックしましょう。

※画像ではUDPを有効化済み。

1NCE OS Device Integratorの設定画面

あとは、次の画面で ”Use this Protocol”をクリックして終了です。

この画面で表示されている、coap://coap.os.1nce.com:5683が送信先になります。

1NCE OSの設定画面

因みに、エンドポイントにはcoapとcoapsがありますが、前者が非暗号化のcoapになり、後者がDTLSというUDP層を用いたTLS認証方式になります。

そもそも1NCEプラットフォームまではキャリア閉域網と呼ばれる閉じたネットワークではありますが、それでもデバイスのマイコンとモジュールもしくはIoTデバイスとLTEルータ間でのセキュリティを高めたいということであれば、CoAP over DTLSが利用できます。

またDTLSを使用することで、UDPで対応できなかった「ステートフル」「再送処理」などがDTLS層でTLSっぽく対応することが可能です。因みにCoAPだけでも使用するライブラリによっては再送処理も一部対応が可能になっています。

IoTデバイスから1NCE OSにデータを送信する

これで、送信先(エンドポイント)が設定できたので、ここからはデバイス側から1NCE OSにデータを送信していきたいと思います。

今回はRasberry PiにPythonのコードを作成して、送信していきます。

以下はGrovePiを使ったサンプルコードになるので、PCではGrovePi部分が動作しないので、ご注意ください。


import asyncio
import struct
import aiocoap.resource as resource
from aiocoap.message import Message
from aiocoap.transports.generic_udp import GenericMessageSocketTransport
from aiocoap import Context, Code
import grovepi
import logging

# サーバーエンドポイント、ポート、トピックの設定
ENDPOINT = 'coap.os.1nce.com'
PORT = 5683
TOPIC = '<SIM ICCID>'  # お持ちのSIMに書き換える

# データの定義とパッケージング 
temp, humi = grovepi.dht(6, 0)
moisture = grovepi.analogRead(1)
cpu_temp = float(tempf.read()) / 1000.0


# ロガーの設定
logger = logging.getLogger(__name__)

# データ送信用のバイト列データ作成
payload = (bytearray(struct.pack('f', temp)) +
           bytearray(struct.pack('f', humi)) +
           bytearray(struct.pack('f', cpu_temp)) +
           bytearray(struct.pack('f', moisture)))

url = 'coap://{}:{}/?t={}'.format(ENDPOINT, PORT, TOPIC)

async def send_coap_message(protocol, url, payload):
    request = Message(code=Code.POST, payload=payload, uri=url, mtype=0) # Message type CON (0)
    try:
        response = await protocol.request(request).response
        if response.code.is_successful():
            logger.info("CoAP message sent successfully")
        else:
            logger.error("Failed to send CoAP message. Error code: %s", response.code)
    except asyncio.TimeoutError:
        logger.error("Request timed out")
    except Exception as e:
        logger.error("Exception occurred while sending CoAP message: %s", e)

async def main():
    protocol = await Context.create_client_context()
    await send_coap_message(protocol, url, payload)

if __name__ == "__main__":
    asyncio.run(main())

これで、あとはこのファイルを起動させればデバイス側の準備は完了です。

EnergySaverでバイナリ変換テンプレートを作成する

前項で作成したコードは、平文ではなく、バイナリでデータを送っているので、このままだと変な文字化けをしたデータのみが、表示されてしまいます。

なので、次は1NCE OS側でバイナリ変換のためのテンプレートを作成していきます。

ポータルから1NCE OSタブを開いて頂き、左側のタブからEnergySaverを選択し、+New Templateをクリックします。

1NCE OS EnergySaverの設定画面

適当な名前をつけて、適用するプロトコルを選択していきます。

このテンプレートは、1プロトコル:1テンプレートの関係になっているので、もしUDPとCoAPで送信形式を変えたい場合は、それぞれ適切なプロトコルを選択してください。

今回はCoAPだけですが、UDPも一応クリックしておきます。

1NCE OSの設定画面

Template部分に実際の変換テンプレートを作成していきます。

1NCE OS EnergySaverのテンプレート

今回のテンプレートは、シンプルに4 byte (Temperature) + 4 byte(humidity) + 4 byte(cpu_temperature) + 4 byte(moisture)の形式にしました。


{
  "sense": [
    {
      "asset": "temperature",
      "value": {
        "byte": 0,
        "bytelength": 4,
        "type": "float",
        "byteorder": "little"
      }
    },
    {
      "asset": "humidity",
      "value": {
        "byte": 4,
        "bytelength": 4,
        "type": "float",
        "byteorder": "little"
      }
    },
    {
      "asset": "cpu_temperature",
      "value": {
        "byte": 8,
        "bytelength": 4,
        "type": "float",
        "byteorder": "little"
      }
    },
    {
      "asset": "moisture",
      "value": {
        "byte": 12,
        "bytelength": 4,
        "type": "float",
        "byteorder": "little"
      }
    }
  ]
}

これで一旦保存してください。

EnergySaver部分の設定に関しては以下の記事を参照ください。

1NCE PluginでDatacakeと接続する

次にデータ可視化とメール送信、Web Hookを行うDatacake側の設定を行っていきます。

先ずは、Datacakeのサイトにアクセスし、アカウントの作成をしてください。

https://datacake.co/

アカウントの作成が完了したら、次はDevicesのタブから、+Add Devicesをクリックします。

Datacakeの設定画面

Datacake側では、既に1NCEテンプレートが準備されているので、このまま”1NCE”を選択し、次に進みます。

Datacakeの設定画面

すると、次の画面でWorkspace IDが表示されますので、これをコピーして保存しておいてください。

Datacakeの設定画面

次に、1NCE ポータルに移動し、1NCE OS > PluginからDatacake “Data Visualization”をクリックしてください。

1NCE Pluginの設定画面

プラグインの説明が表示されますので、Install Pluginで進めてください。

1NCE Pluginの設定画面

その次の画面で、先ほどDatacakeで表示されたWorkspace IDを入れるところがあるので、ここで入力し、Proceedをクリックしてください。

1NCE Pluginの設定画面

これで、1NCE OSとDatacakeの接続が完了しました。

 

Datacake側でデバイスを追加する

次はDatacake側でデバイスを追加していきます。

正しく1NCE OSとDatacakeが接続ができていれば、+Add Deviceをクリックすると、1NCE OS側に接続されているデバイス一覧が表示されるはずです。

Datacakeで表示したいデバイスを選択し、先に進めてください。

Datacakeの設定画面

次の画面で、Datacake側で登録されている製品テンプレートを選択する部分がありますが、New Product Template > 1NCE OS Base Device Templateを選択して、先に進めてください。

Datacakeの設定画面

ここで、料金プランを選択する部分が出てきますが、今回は~5台以下なので、”Free”を選択します。

Datacakeの設定画面

これでDatacakeにもデバイスが登録されました。

Datacake側でデータをマッピング

次にDatacakeに登録されたデバイスに、1NCE OSで送られたデータとDatacake上で表示する項目のマッピングをしていきます。

先ずはちゃんとデータが届いているかどうか確認したいので、Device > Debugを選択してください。

Datacakeの設定画面

正しくデータが届いていれば、Received 1NCE payloadという部分で何かしらデータが見えるはずです。

ここでデータが文字化けしている場合には、EnergySaverのテンプレートに何か間違いがあるはずです。

Datacakeの設定画面

Debugにて、データが到達していることがわかれば、次はマッピングの設定をしていきます。

Configrationのタブをクリックしてください。

Datacakeの設定画面

そのまま画面をスクロールしてしていくと、Configuration Fieldsという部分があると思います。

以下の画面では既に追加済みなのですが、正しくEnergySaverが設定できていれば、ワンクリックで追加ができるはずです。

因みに、1NCE OS側でDevice LocatorはONにしている場合には、頻度は少ないですが、Cell IDをベースとした位置情報が数日に1回取得されます。

精度はそこまで高くはないですが、何もしなくても緯度経度情報が取れるので、とりあえず使っておきます。

Datacakeの設定画面

これで、Datacake側のマッピングは完了です。

Historyタブでは、無料版であれば最大7日間のデータが保管されるので、以下のような感じでデータ履歴が表示されます。

DatacakeのHistory画面

またDashboardでは、色々な形式でのデータ表示が可能なので、かなり自由度高くダッシュボードが作成可能です。

Datacakeのコンポーネント

今回は温度・湿度・水分量をセンサーを使って取得しているので、湿度と水分量だけ、水が溜まっていくように見た目にしています。

どの値で、どの色にするかも含めて設定可能です。

Datacakeのダッシュボード画面

これで、データの可視化は完了です。

 

ルールエンジンを使ってメール送信を設定

最後は、センサーデータを監視して、閾値を超えたときにメール送信するように設定していきます。

Datacake画面から、Rulesタブから、+Add Ruleをクリックします。

Datacakeの設定画面

ここでルールを作成していきます。

Datacakeの設定画面

今回は、植木の水分センサーを監視していきたいと思いますので、Moistureが600を超えたときに、メールを飛ばすというように設定してみます。

またチェックする間隔、600秒(10分)毎にチェックするように設定しておきます。

Datacakeのメール設定画面

因みに、hysteresis(応差)というのは、一度閾値を超えたときに、ここまで数字が落ちたら、再度トリガーをかけるように設定できます。

今回のケースだと、水分量600でメール発報するようにし、水を注ぐと500以下まで下がるので、水を注ぐまでは600以上になっても何もしないようになります。

Datacakeの閾値(応差)の説明

LINE Message APIを設定してチャネルを作成

次にLINE Message APIを使って、メールだけでなく、スマホのLINEアプリにも通知が来るように設定してみます。

先ずは、LINE Developperのサイトに行って、アカウントを作成してください。

https://developers.line.biz/ja/

アカウント作成完了後ですが、先ずはプロバイダを作成していきます。

LINE Message APIの設定画面

プロバイダは、適当な名前で作っておきます。今回はIoTDevにしておきました。

LINE Message APIの設定画面

プロバイダを作成したら、次はチャネルを作ります。

LINE Message APIの設定画面

LINE APIは、いくつかあるのですが、今回は単純に通知チャネルを作りたいので、Messaging APIを設定しておきます。

LINE Message APIの設定画面

チャネルを作成できたら、Messaing API設定のタブをクリックして、自分のスマホのLINEアプリからQRコードを読み込んでください。

これで、自分のスマホから今回作成したチャネルが見えるようになります。

LINE Message APIの設定画面

さらに、Messaging APIタブを一番下にいくと、「チャネルアクセストークン」という部分があるので、ここでトークンを発行して、コピーしておいてください。

LINE Message APIのアクセストークン

ルールエンジンを使ってLINE通知

次は、Datacake側のRules設定を使って、LINEチャネルに通知します。

+Add rulesから、ThenのアクションをCall a webhookに設定してください。

Datacakeルールエンジンの設定画面

ここから、LINE APIのフォーマットに従って、APIを書いていきます。

Message APIは、色々なことができるのですが、今回は一番シンプルに、チャネルの全登録者に向けて、ブロードキャストするように設定しておきます。

細かい設定方法は以下のページを参照ください。

LINE Developer APIリファレンス

https://developers.line.biz/ja/reference/messaging-api/

今回は一番シンプルに以下で進めていきます。YOUR_KEYの部分が、前項でコピーしておいたチャネルアクセストークンの部分になります。

  • URL https://api.line.me/v2/bot/message/broadcast
  • Content-Type application/json;
  • Authorization Bearer YOUR_KEY
DatacakeルールエンジンのWeb Hook設定画面

そしてメッセージ部分関しては、APIリファレンスに従い、単純にテキストメッセージを送るようにします。

一応、Datacake側の制限として、送信するテキストに日本語が使えないということになっているので、仕方がなく「植木(ウンベラタ)の水が切れているようです。水をあげてもらえますか?」みたいな英語を書いておきます。

また文章の途中で、現在の水分量を間に入れる方法もわからなかったので、2行に数値だけを出力するようにしました。


{
    "messages": [
        {
            "type":"text",
            "text":"Hey, our Umbellata's getting really thirsty. Can we give it some water, please? Current Moisture level is below;"
        },
        {
            "type":"text",
            "text":{{ devices["INSERT_PLACEHOLDER_DEVICE"]["measurements"]["MOISTURE"] }}
        }
    ]
}

これで全ての設定は完了になります。

実際に使ってみる

このまま1週間程度運用してみて、その時を待ちます。

そして、ついにその時がきました。

 

Datacakeからのメール通知例

こんな感じでちゃんと設定した通り、メールが通知されました。

メールの場合は、日本語で送信ですが、その代わりセンサーの値を送信することができません。

一方で、Web Hookの場合はDatacake側の仕様なのか英語でしか送信できませんが、センサーデータをこんな感じで送ることができます。

DatacakeからのLINE通知例

これで、もう植木の水やりタイミングを間違えることはありませんね!

因みにセンサーの値がたまに異常値を出すことがありましたので、実際の運用、コードについては今回のコードから少々修正する必要はありそうです。

最後に

今回は1NCE PluginのDatacakeを使って、植木の水分量を可視化し、そして適切な水やりのタイミングで、メール送信さらにはLINE通知までを実装してみました。

正直、ここまでの機能をこんなに簡単にこれだけの金額でできるって結構すごいと思います。

今回の記事のポイントとしては、以下の点になります。

  • 1NCE OSを使うことで、データ送信を簡素化さらにはデータサイズの圧縮が簡単に

  • 1NCE PluginでワンクリックでDatacakeと接続

  • Datacakeを使えば、データの可視化およびメール送信、Webhookが簡単に実装できる

 

1NCE(ワンス)SIMカードでは法人ユーザーであれば、どなたでも1枚からWEBで購入が可能で、今回紹介した1NCE SIM管理プラットフォームの機能は、アカウントユーザーであればであれば誰でも無料で試すことができますので、先ずは是非触ってみてください。

▶ 1NCEショップ

 

おすすめの記事

条件に該当するページがございません