組込み機器でもSignalRを使いたい - 位置情報を例にAzure Web Siteでホスティング


最近、組込み機器を含むいろんなデバイスとクラウドが連携するInternet Of Thingsに関する話を方々でしています。.NET Micro Framework/Gadgeteerを使えば、クラウドにつながる組込み機器のプロトタイプを簡単に作れるし、AzureのWebサイトは、SignalRというインターネット上の同報通信プロトコルが使えて、ゆるくフレキシブルにつインターネット上で通信しあえるデモを簡単に作れるので、気がつくと一杯やってしまっています。

SignalRの詳しい話は専門家(緑色のエバとか)に任せるとして、SignalRでデータ交換しあうサイトをさくっと作りたい方向けに、位置情報通知を例に、方法を紹介しておきます。

交換したい情報は、

  • UserId
    位置情報の主体の何らかのId
  • Latitude
    緯度。double型
  • Longitude
    経度。double型
  • Altitude
    高度。double型
  • TimeStamp
    位置計測した時間。string型
  • EventCode
    何をやっているときの位置情報かを区別するための情報。string型

とします。例えば、パーティーやイベントなど複数の人たちが一か所に集まる時に参加者個々人の集まってくる模様をトレースするとか、自分の軌跡を使って何かやる時など、色々と応用は多いはず。

早速、AzureでWebサイトを作りましょう。ダッシュボードを開いて

右端の”簡易作成”を選択して、URLを入れてください。入力文字列を仮に"position-notify"としておきます。

出来上がったWebサイトのURLは、http://position-notify.comとなります。これでAzure側の準備は終わりです。

次に、このWebサイト上で、位置情報通知用のSignalRのHubを作ります。

Visual Studio 2013を起動して、ASP.NETアプリを作成します。

SignalRに必要な機能を追加します。

Hub用のフォルダーを作ります。

 

出来上がったPositionHub.csを以下の様にコーディングします。

using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace PositionNotify.Hubs
{
    [HubName("positionhub")]
    public class PositionHub : Hub
    {
        [HubMethodName("Position")]
        public void Position(PositionModel model)
        {
            Clients.Others.Position(model);
        }

        [HubMethodName("EventCode")]
        public void EventCode(string eventCode)
        {
            Clients.Others.EventCode(eventCode);
        }

        [HubMethodName("Joined")]
        public void Joined(PositionModel model)
        {
            Clients.Others.Joined(model);
        }

        [HubMethodName("Leaved")]
        public void Leaved(PositionModel positionModel)
        {
            Clients.Others.Leaved(positionModel);
        }
    }

    public class PositionModel
    {
        [JsonProperty("userid")]
        public string UserId { get; set; }
        [JsonProperty("longitude")]
        public double Longitude { get; set; }
        [JsonProperty("latitude")]
        public double Latitude { get; set; }
        [JsonProperty("altitude")]
        public double? Altitude { get; set; }
        [JsonProperty("timestamp")]
        public string TimeStamp { get; set; }
        [JsonProperty("eventcode")]
        public string EventCode { get; set; }
    }
}

そして、Startup.csのConfigurationメソッドを

        public void Configuration(IAppBuilder app)
        {
            ConfigureAuth(app);
            app.MapSignalR();
        }

と、変更します。

出来上がったら、Azure上のWebサイトに発行します。

これでおしまいです。

 後は、http://blogs.msdn.com/b/hirosho/archive/2014/02/17/internetofthingshandson.aspx

を参考に、通信クライアントを試してみてください。

 

 

Comments (0)

Skip to main content