Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
こちらは、2015年8月14日現在の状況をもとに書いています。
Windows Runtime API上のアプリでAzure Event Hubに接続する場合、3つの方法があります。
- Windows Azure Service Bus SDKを使う
- AMQL Liteを使う
- HTTPSでSASTokenを作成してヘッダーに埋め込むコードを書く
Windows系なら1番目が一番簡単ですが、8/14現在、まだ対応するSDKが公開されていないので使えません。
※ソリューションエクスプローラーで、参照フォルダーを右クリックし、NuGetパッケージの管理を選択し、”Windows Azure Service Bus SDK”を検索し、インストールしてみてください。インストールがうまくいったらこれ以上読む必要はありません。
2番目ですが、AMQP Liteは、Windows系だけでなく、.NET Micro Framework、Monoでも使えるので、マルチプラットフォームな組込み機器開発の場合でソースコードを共通化したい時などに便利です。こちらは現時点で使うことができます。
使い方は、ソリューションエクスプローラーで、参照フォルダーを右クリックし、NuGetパッケージの管理を選択し、”AMQP Lite”で検索し、インストールボタンをクリックすれば、インストール完了です。https://aka.ms/IoTKitHoL から公開中のハンズオンコンテンツのStep1接続編に具体的なコードが紹介しているのでそちらも参照してほしいのですが、この投稿でも基本的な使い方を紹介しておきます。
まず、Event Hubへの接続ですが、
conststring sensorName = "win10iotrpi2";
conststring ehName = "[event hub name]";
conststring accessKey = "[Access Key]";
conststring ehNamespace = "Service Bus Namespace]";
conststring policyName = "[Access Policy Name]";
conststring partitionId = "2";
string amqpAddress = "amqps://[PolicyName]:[Access Key]k=@[Service Bus Namespace].servicebus.windows.net";
privatevoid SetupAMQP()
{
amqpAddress = "amqps://" + policyName + ":" + accessKey + "@" + ehNamespace + ".servicebus.windows.net";
Address address = new Address(amqpAddress);
Connection connection = new Connection(address);
Session session = new Session(connection);
amqpSender = new SenderLink(session, "send-link" + ehName, ehName + "/Partitions/" + partitionId);
}
で、可能です。ここで作成したamqpSenderでデータの送信が可能。ただし、[Access Key]はAzureの管理ポータルから取得した文字列をURLエンコーディングした文字列に置き換える必要があるのでご注意。
送信は、
privatevoid SendData()
{
var now = DateTime.Now;
string payload = "{\"dspl\":\"" + sensorName + "\",\"Subject\":\"wthr\",\"temp\":" + lastPacket.Temperature + ",\"hmdt\":" + lastPacket.RelativeHumidity + ",\"pres\":" + lastPacket.Pressure + ",\"time\":\""
+ now.ToString("yyyy-MM-ddThh:mm:ss.fffZ") + "\"}";
var encodedTextData = System.Text.Encoding.UTF8.GetBytes(payload);
var message = new Message()
{
BodySection = new Data()
{
Binary = encodedTextData
},
Properties = new Properties()
{
CreationTime = now,
ContentType = "text/json"
}
};
message.ApplicationProperties = new ApplicationProperties();
message.MessageAnnotations = new MessageAnnotations();
amqpSender.Send(message, OutcomeCB, null);
Debug.WriteLine("send");
}
private void OutcomeCB(Message message, Outcome outcome, object state) { }
これで、Event Hubの指定したパーティションにデータをJSON形式で送信可能です。
さて、3番目ですが、https://gallery.azureml.net/Tutorial/6f95aeaca0fc43b3aec37ad3a0526a21 から公開されているSensor Data Analytics with ASA and PowerBIというサンプルのソースコード(https://github.com/Azure/azure-stream-analytics/tree/master/Samples/SensorDataAnalytics/SensorTagToEventHub/DeploymentFiles)内で、実際に行われているので、それを参照してください。SendDataToEHLibraryプロジェクトの、SendDataToEventhub.csというファイルの、SendMessageメソッドと、ServiceBusSASAuthenticationメソッドです。そちらみてくださいね。
Comments
- Anonymous
August 13, 2015
How to blog