SORACOM Beamを活用したIoTデバイスの識別

January 30, 2016 Sato Yoshihisa
皆さん、こんにちは。前回のテックブログでご紹介いたしましたが、弊社は1月27日に開催されたSORACOM Conference “Connected.”に出展し、IoTデモソリューションをご紹介しました。
当日は大変多くの方々に弊社ブースへお立ち寄りいただき、IoTへの注目度や期待感を強く感じることができました。
 
当日行ったデモでは、自動販売機をIoTデバイスとして、その売上情報をSORACOMとAWSを経由してSalesforceに送信し、Salesforce上で売上・在庫を管理するというものでした。このデモでは自動販売機の個体識別をSORACOM Beamの機能を活用して行ったので、今回はこの識別をどのように実装したかについてご紹介します。
 

まず結論から述べると、自動販売機の識別には、送信元端末に設置されたSIMのIMSIを使用しました。
SORACOM Beamのグループ定義は、プロトコル変換や認証などの機能をサポートしていますが、MQTT→MQTTSへの変換場合、オプション指定でMQTTトピックの末尾に送信元デバイスのSIMのIMSIを付与する機能があります。設定も簡単で、グループ設定のオプションを「ON」にするだけです。
グループ設定 IMSIオプション
IMSIはSIMを一意に識別するIDであり、自動販売機1台にSIM1つを割り当てることで、どの自動販売機から送信されたデータかはIMSIによって識別することが可能となります。このため、売上情報の送信プログラムではメッセージに自動販売機のIDを設定する必要はなくなります。
 

 では、実際の売上情報の変化を説明していきます。データの流れは下図のとおりです。
SORACOM Beamを使った自動販売機識別
 
①自動販売機→SORACOM Beam
自動販売機から売上情報をSORACOM Beamのエントリポイントに対してMQTTで送信します。
送信するデータは下記のようにどの商品がいつ売れたかのみであり、自動販売機の識別に関連する情報は付加しません。
 
トピック名: 「selling」
メッセージ:
{
     "drink": "商品A",
     "sold_hour": "09"
}

 

②SORACOM Beam→AWS IoT
前述の設定により、SORACOM BeamからAWS IoTへ送信される際にMQTTトピックが「selling」から「selling/<(送信元SIMの)IMSI>」となります。ここで、どの自動販売機から送られてきたデータかを判別する情報が付与されます。

メッセージ本文は変更されず、下記のようになります。
トピック名: 「selling/<IMSI>」
メッセージ:

{
     "drink": "商品A",
     "sold_hour": "09"
}

 

③AWS IoT→AWS Lambda
AWS IoTに定義したルールは下記の2つです。
 1) トピックからIMSI情報を取得し、メッセージに付加する
 2) Salesforce送信用のAWS Lambda function「vender_sell」を呼び出し、メッセージを渡す
今回のデモでは下記のルールを定義しています。

{
    "rule": {
        "ruleDisabled": false,
        "sql": "SELECT *, topic(2) AS imsi FROM 'selling/#'",
        "description": "自販機からの売上情報の処理。トピック名からIMSIを取得し、メッセージに付加する。",
        "actions": [
            {
                "lambda": {
                    "functionArn": "arn:aws:lambda:ap-northeast-1:xxxxxxxxxxxx:function:vender_sell"
                }
            }
        ],
        "ruleName": "selling"
    }
}

「sql」部分で、どの場合にルール適用するか(FROM, WHEREで指定)、アクションに渡すメッセージ(SELECTで指定)を定義しています。
ここで、SELECT句の「*」で元々送られてくるメッセージと「topic(2) AS imsi」でIMSIの情報を合わせた下記のメッセージが作られ、Lambdaのfunctionに渡されます。

 
メッセージ:
{
     "drink": "商品A",
     "sold_hour": "09",
     "imsi": "<(送信元SIMの)IMSI>"
}

 

④AWS Lambda→Salesforce API
AWS Lambdaのfunctionでは、Salesforceの登録するオブジェクトに合わせてデータの整形をしてAPIを呼び出す処理のみをしています。
Salesforce側の売上情報のカスタムオブジェクトは下記のとおりとなっており、AWS Lambdaからの情報では自動販売機の情報がまだ不足しています。

売上情報構成

SORACOM IMSIと自動販売機の紐付き情報はSalesforce側で管理しており、APIでデータを受け取り、登録する際のトリガの中で下記のように自動販売機オブジェクトの参照を設定して、自動販売機の情報を与えています。

 

VendingMachine__c vend = [select Id from VendingMachine__c where SORACOM_SIM__r.imsi__c=l.SORACOM_imsi];

 

売上情報がSalesforceに登録されたのち、さらに自動販売機の在庫情報をトリガで更新します。在庫が少なくなった場合、スマートフォンへのPush通知およびパトランプ点灯の処理を行います。

 

Stock__c stock = [select Id, NumberOfStock__c, VendingMachine__r.Name, Drink__r.AlertLimit__c from Stock__c
             where VendingMachine__c=:l.VendingMachine__c
             and Drink__r.Name=:l.DrinkName__c 
                      limit 1];
    stock.NumberOfStock__c = stock.NumberOfStock__c - 1;
    update stock;

 

 

いかがだったでしょうか。ソラコムさんのWebサイトでは、SORACOM Beamは「IoT デバイスにかかる暗号化等の高負荷処理や接続先の設定を、クラウドにオフロードできるサービス」という書き出しで紹介されていますが、こういった細かいオプションを活用することでさらに便利に使うことができます。
 
今回のブログではIoTデバイスをSIMのIMSIを使って識別する方法を通して、デモアプリの売上情報の連動と在庫管理について、一通りの流れをご説明しました。デモアプリには在庫が少なくなった場合にパトランプを点灯する機能もありますが、この部分はAWS IoTのデバイスシャドウの仕組みを使用しました。この部分はまた次のブログでご紹介したいと思います。
  

弊社では、今回のIoTのような今後求められるであろう新しい分野への挑戦を今後も続けていきます。その一環として採用活動も積極的に行っており、最近はオフィスのある東京近郊に限らず、リモートワークをしていただけるような採用も始めております。興味を持たれた方はぜひ応募いただければと思います。

 

著者について

外資系SIベンダーでの経験を経て、2015年11月にアピリオへJoin。2017年10月より山形県鶴岡市に移住すると共に、リモートワークを開始。東京在住時とほぼ変わらない仕事内容で日々業務を実践。日々進化するクラウド技術、次々と生まれる新しい技術を学びつつ、お客様にデリバリーを行なっている。

Follow on Linkedin Sato Yoshihisa のコンテンツをもっと見る
戻る
AWS IoTのShadowを使ったデバイス管理
AWS IoTのShadowを使ったデバイス管理

みなさん、こんにちは。前回のテックブログでは、SORACOM Conference “Connected.”で展示したデモアプリの在庫管理部分についてご説明しました。今回はその続編として、AWS IoTを用いてパト...

次へ
SORACOM Conference “Connected.”に出展します
SORACOM Conference “Connected.”に出展します

    皆さん、こんにちは。以前こちらのブログで紹介しましたが、アピリオは昨年のSalesforce World Tour TokyoでIoTのデモソリューションを発表しました。このデモはフィールドサービスの効率化...

アピリオまでお気軽にお問合せください

ご質問はこちら