モノのインターネット向けのエコノミーソリューション。 Azure IoT Hub + Azure機能



Azureの標準IoTソリューションで最も高価なサービスの1つはStream Analyticです。 エンタープライズソリューションの開発により適したこの高価なサービスを回避するために、Azure Functionsの機能を利用できます。



IoTハブを作成してArduinoを接続する方法については、前書きました 。 次に、ソリューションのコストを削減しましょう。 Stream AnalyticをAzure Functionsに置き換えます。

カットの下には、How-Toマニュアルがあります。



まず、IoTハブのエンドポイントに移動し、Eventsというエンドポイントから、イベントハブと互換性のある名前を取得します。







コピーして保存します。 後で必要になります。

次に、新しい関数を作成します







関数の呼び出し回数がそれほど多くない場合、配置プランは「消費プラン」を選択する方が経済的です。 100万回の機能起動ごとに20セントの費用がかかります。



次に、IoT Hub(Event Hub)などのカスタム関数を作成します







言語としてC#を選択しましたが、より近い別の言語を選択できます







イベントハブ名の行に、IoT Hubからコピーした値を入力します。

「新規」をクリックして、接続値を設定します。







次のコードは、テンプレート関数コードとして自動的に生成されます。



using System; public static void Run(string myIoTHubMessage, TraceWriter log) { log.Info($"C# IoT Hub trigger function processed a message: {myIoTHubMessage}"); }
      
      





関数を実行し、前の記事のデバイスを有効にします。 すべてが正しく構成されている場合、ログウィンドウで次のログを取得します。

2017-12-17T16:20:40.486関数が開始されました(Id = 63b0dbda-1624-4e2c-b381-47442e69b853)

2017-12-17T16:20:40.486 C#IoT Hubトリガー関数がメッセージを処理しました:{"deviceId": "ArduinoAzureTwin"、 "iotdata":581}

2017-12-17T16:20:40.486機能完了(成功、ID = 63b0dbda-1624-4e2c-b381-47442e69b853、期間= 0ms)






関数は機能しますが、データベースにデータを保存する必要があります。 データベースとして、SQL Serverデータベースを使用します。 他の種類のデータベースを使用できます。 既存のデータベースに移動するか、新しいデータベースを作成しましょう。 メニュー項目「接続文字列」で、ADO.NETという行を使用します。







ここで、関数で「アプリケーション設定」に移動します。







接続文字列をC#コードに保存しませんか? ユーザー名とパスワードの変更を忘れずに、アプリケーションの接続ラインに保存します。







JSONからデータベースにデータを書き込むことができるように、関数を変更する必要があります。 コードのかなり標準的なバージョンは次のようになります。



 #r "System.Configuration" #r "System.Data" #r "Newtonsoft.Json" using System; using System.Configuration; using System.Data.SqlClient; using System.Threading.Tasks; using System.Net; using Newtonsoft.Json; public static async Task Run(string myIoTHubMessage, TraceWriter log) { log.Info($"Message: {myIoTHubMessage}"); var e = JsonConvert.DeserializeObject<EventData>(myIoTHubMessage); var str = ConfigurationManager.ConnectionStrings["SQLServerDB_connection"].ConnectionString; using (SqlConnection conn = new SqlConnection(str)) { conn.Open(); var text = "INSERT INTO [dbo].[SensorData] (DeviceName, SensorValue) Values (@deviceId, @iotdata);"; using (SqlCommand cmd = new SqlCommand(text, conn)) { cmd.Parameters.AddWithValue("@iotdata", e.iotdata); cmd.Parameters.AddWithValue("@deviceId", e.deviceId); var result = await cmd.ExecuteNonQueryAsync(); log.Info($"Inserted: {result.ToString()}"); } } } public class EventData { public string deviceId { get; set; } public int iotdata { get; set; } }
      
      





その結果、デバイスからデータを取得してクラウドデータベースに保存するクラウドベースのIoTソリューションがすぐに得られました。 さらに、データの視覚化のために無料のAzure Web Appアプリケーションを作成できます。



ソリューションの価格は、データベースのコストよりわずかに高くなります。 つまり、2 Gbベースを使用すると、1か月に5ドルを少し超える金額が得られます。 サーバー上にある他のクラウドデータベースやローカルデータベースの使用を妨げるものは何もありません。



All Articles