#SORACOM LTE-M Button の簡易位置情報をローカルPC上のC#アプリで取得してみる

SORACOM LTE-M Button で簡易位置情報を取得できるようになりました。

https://blog.soracom.jp/blog/2019/08/01/location-function-release/

「それでは」ということで早速試してみます。

今回、位置情報を確認するための手順は以下の通り。

  • SORACOM ユーザーコンソールでの設定
  • SORACOM Harvest でデータの確認
  • Azure Functions のプロジェクトをローカルで作成
  • ngrok で localhost を公開
  • SORACOM Beam の設定
  • 動作確認

ローカルで Azure Functions を開発する環境としては、今回は Visual Studio Code を使います。

言い訳)本当は SORACOM Funk で Azure Functions に接続したかったんですが、まずは取得できるデータを見てみたいし、トレース実行もしてみたい。そうなると、ローカル PC で関数を実行したくなります。
が、Funk から呼べるのは Azure にデプロイした関数・・・ということで、まずは Beam でローカル PC に接続してみることにしました。


(前提) SORACOM アカウント作成、Button 登録

当然ながら、Button から位置情報を取得したい場合、

  • SORACOM アカウントを作成済み
  • Button 登録済み

であることは必須です。

まだという方は、公式ドキュメント をどうぞ。


SORACOM ユーザーコンソールでの設定

最初に SORACOM Air for Cellular を設定します。

SORACOM ユーザーコンソール の [SORACOM Air for Cellular 設定] で、以下の設定をします。

項目設定値
簡易位置測位機能ON
バイナリパーサー設定ON
フォーマット@button

Unified Endpoint 設定 は以下の通り。

項目設定値
フォーマットUnified

「”Unified” にしないと位置情報を取得できないよ」的な記述 がありますが、Harvest では “Auto” とか “Button” にしても位置情報が見えるようです。

今回は、SORACOM ユーザーコンソールの外で位置情報を取得するのが目的なので、きっちり “Unified” にします。

この状態で Harvest を見ると、ちゃんと Button のクリックの種類、タイムスタンプ、位置情報、電池レベルが取得できることが確認できます。

素晴らしい!いくつか設定しただけで面倒な作業は何もしていないのに。

Azure Functions プロジェクトをローカルで作成

今回は Visual Studio Code で Azure Functions プロジェクトを作ります。

Visual Studio Code 自体のインストールと “Azure Functions” 拡張機能 のインストールは前提条件。

プロジェクトを新規作成します。

Functions” の [Create New Project] をクリックします。プロジェクトを作成するフォルダーはご自由に。(私は今回は “ButtonSample” にしました)

ウィザードでは以下の選択・入力をします。

項目名選択・入力
Select a languageC#
Select a templateHttpTrigger
Function name任意(私は “ButtonLoc”)
Namespace任意 (私は “ButtonSample.ButtonApp”)
AccessRightsFunction
Select how to open project任意

“依存関係が見つからないので復元するか?” 聞かれるので [Restore] します。


少しだけソースコードを編集しておきます。
ただし必須ではないので、位置情報を取得できることを確認するだけであればソースコードの編集は不要はなず。

私は “ButtonLoc.cs” を開いて、”Run” メソッドを以下のようにしてみました。

[FunctionName("ButtonLoc")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
    ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    var body = await new StreamReader(req.Body).ReadToEndAsync();
    return (ActionResult)new OkObjectResult("Succeeded!!");
}

アプリケーションを実行します。

ターミナルに表示される

Http Functions:

        ButtonLoc: [GET,POST] http://localhost:7071/api/ButtonLoc

が大事です。

意味
7071ローカルでホストされているポート番号
/api/ButtonLocアプリケーションのパス(プロジェクト作成時の設定によっては別の名前になります)

アプリケーションを実行したままで、次の操作に進みます。


ngrok で localhost を公開

ローカルで動作しているアプリケーションをインターネットに公開します。

ngrok をまだインストールしていない場合は、公式サイト でダウンロード・設定をしてください。

ngrok の準備ができたら、コマンドプロンプトで ngrok を実行します。

ngrok http 7071

ここで “7071” とは、ローカルでホストされているポート番号です。

ngrok のステータスの [Web Interface] の値をコピーします。
http://127.0.0.1:4040” になっているはず。

ブラウザーでこの URL を開きます。

このあと SORACOM ユーザーコンソールで Beam の設定を行い Button を押すと、この画面で位置情報を含めた Button のデータが表示されます。


SORACOM Beam の設定

SORACOM Beam の設定を行います。

Beam の接続先(アプリケーションの実行場所)がクラウドの場合は、一度設定すればよいのですが、ngrok でアプリケーションを公開している場合は ngrok の実行のたびに URL が変わるので、毎回設定しなおす必要があります。

[+] をクリックして “UDP → HTTP/HTTPS エントリポイント” を選択します。

設定は以下の通り。最後に [保存] で設定を保存します。

項目入力・選択する値
ホスト名ngrok のステータスの “Forward” のホスト名。
<一意の値>.ngrok.io” の内容です。
パスローカルで実行中のアプリケーションのパス。
/api/ButtonLoc” です。
プロジェクト作成時の値によっては別の値になります。
IMSIヘッダON

Beam の設定は以上。これも簡単です。

動作確認

いよいよ LTE-M Button を操作してみます。
クリックなりダブルクリックなり長押しなりご自由にどうぞ。

送信に成功したら、ブラウザーの “http://127.0.0.1:4040&#8221; を見てみます。

素晴らしい!・・・はずが、位置情報が見当たりません。

答えは簡単で、Beam では位置情報をレスポンスヘッダーに入れるからです。(公式ドキュメント に書いてます・・・ちゃんと読まなかった私はここで悩みました /汗)

Beam 以外だとレスポンスの本体に入るようです。
Func だと “x-soramon-token” ヘッダーに JWT エンコードされた状態で渡されてきます。

今度こそ素晴らしい!位置情報が取れてますね。

Visual Studio Code でブレークポイントを設定しておけば、確かに値が取れています。
(今回のコードはヘッダーを拾っていないので、レスポンスの本体のみ確認できるだけですが・・・)

レスポンスヘッダーから位置情報を取得する方法と、関数を Azure にデプロイする方法は改めて。


LTE-M Button、簡単です。

あとはこのデータをどう使うか、アイデアの勝負ですね。

#SORACOM LTE-M Button の簡易位置情報をローカルPC上のC#アプリで取得してみる」への2件のフィードバック

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中