Mikrodáta do Azure (3.časť) - Ako sa zhovárať s IoT Hub-om ( krok za krokom )

V predchádzajúcej časti nášho seriálu sme vytvorili správcovskú aplikáciu na pridávanie (registráciu) zdrojov dát do IoT Hub-u. Zdroj dát môže byť nielen senzorická aplikácia, ale akákoľvek aplikácia na akejkoľvek platforme, ktorá produkuje frekventovane veľké množstvo malých dát. My sme sa od začiatku tohto seriálu zamerali na vytvorenie telemetrie zabudovanej do klasickej webovej aplikácie, a tak je čas pripraviť si kód, ktorý bude bežať na zdroji dát a bude simulovať posielanie mikrodát zaznamenaných v momente prihlásenia používateľa na web.

Nebudeme vytvárať celú webovú aplikáciu, vytvoríme iba krátky kód, ktorý spustíme v konzolovej aplikácii, a ktorý nebude problém vložiť do metódy vyvolanej v webovej aplikácii na pozadí “login” okna.

1. Vytvorte v Visual Studiu projekt typu "Console Application" v C# napr. s názvom „simulacia_zdroja“ .
2. V Solution Explorer-e vyberte kontextové menu nad projektom “simulacia_zdroja” a vyberte z neho “Manage NuGet Packages” .
3. V okne NuGet Package Manager povoľte voľbu “Include prerelease” a do položky na vyhľadavanie podľa názvu zadajte “Microsoft Azure Devices Client” . Po vyhľadaní balíčka “Microsoft.Azure.Devices.Client” potvrďte tlačidlo “Install” a následne akceptujte inštaláciu naviazaných knižníc tlačidlom "OK" a podmienky použitia tejto knižnice tlačidlom “I accept” .

obr1_nugetclient
4. V okne NuGet Package Manager pridajte do projektu aj nuget balíček "Microsoft.AspNet.WebApi.Client" pre načítanie knižnice potrebnej pre formátovanie HTTP správ. Po vyhľadaní balíčka potvrďte tlačidlo “Install” a následne akceptujte inštaláciu naviazaných knižníc tlačidlom "OK" a podmienky použitia tejto knižnice tlačidlom  “I accept” .

Poznámka: Nuget balíček "Microsoft.AspNet.WebApi.Client" má zmysel pridávať len vtedy, ak budete potrebovať, aby zdroj dát formátoval správy pre IoT Hub v HTTP. Senzorické aplikácie štandardne používajú na komunikáciu s "hub-mi" dát protokol AMQP.

5. Otvorte kód “Program.cs” a na jeho začiatok vložte referencie na naimportované knižnice:

 using Microsoft.Azure.Devices.Client;
using Newtonsoft.Json;
using System.Threading;

6. Pridajte do triedy Program člena, ktorý bude reprezentovať klienta IoT Hub-u:

 static DeviceClient zdrojKlient;

7. Zdroj dát odosielajúci telemetrické dáta potrebuje vedieť adresu IoT Hub-u. Prepnite sa do okna https://portal.azure.com, prejdite do IoT Hub-u a prekopírujte do clipboardu URI názov IoT Hub-u (hostname): obr2_hostnameIoThub

8. Pridajte do triedy Program člena, ktorý bude obsahovať URI názov IoTHub-u načítaný v predošlom kroku:

 static string iotHubUri = "sem vlozte URI nazov IoT Hub-u z Azureportalu";

9.  Prvý zdroj dát s identifikáciou „mojaWebAplikacia“ sa do IoT Hub-u autentifikuje menom a kľúčom, ktorý ste získali po jeho registrácii v kroku 10 predošlej časti nášho seriálu. Pridajte do triedy Program členov, ktorí budú obsahovať názov a kľúč zdroja dát:

 static string zdrojID = "mojaWebAplikacia";
static string zdrojKluc = "sem vlozte kluc zdroja ziskany v kroku 10 minulej casti";

10. Simuláciu nebudeme komplikovať geolokačnými služba (napr. prekladom aktuálnej IP adresy používateľa na mesto), jednoducho si Slovensko rozdelíme na západ, stred a východ a budeme náhodne generovať prihlásenie 10ich používateľov v niektorom z 3 geografických regiónov. Pridajte do triedy polia, z ktorých budete náhodne generovať dvojice telemetrických dát o prihlásení:

 static string[] geooblasti = new[] { "Zapad", "Stred", "Vychod" };
static string[] pouzivatelia = new[] { "Pat", "Mat", "Lolek", "Bolek", "Bob", "Bobek", "Matko", "Kubko","Amalka", "Emanuel"};

11. Pridajte do triedy Program metódu, ktorej úlohou bude posielať simulované dáta o prihlásení  – zdroj dát, prihlasovacie meno používateľa a lokalita pri prihlásení:

 private static async void PosliSpravuDoIotHubuAsync()
{
Random rand = new Random();
while (true)
{
//nahodny vyber pouzivatela
string pouzivatel = pouzivatelia [rand.Next(0, pouzivatelia.Length)];
//nahodny vyber geooblasti
string geooblast = geooblasti [rand.Next(0, geooblasti .Length)];

//vytvorenie datoveho objektu, ktory sa posle do IoT Hub-u
var telemetrickyDatovyObjekt = new
{
deviceId = zdrojID,
idPouzivatela = pouzivatel,
idOblasti= geooblast
};
//serializacia objektu do JSON pred odoslanim
var spravaString = JsonConvert.SerializeObject(telemetrickyDatovyObjekt);
var sprava = new Message(Encoding.ASCII.GetBytes(spravaString));
//odoslanie telemetrickych dat v JSON formate do IoT Hub-u
await zdrojKlient .SendEventAsync(sprava);
//kontrolny vypis odosielanych sprav na strane zdroja dat
Console.WriteLine("{0} > Odosielanie spravy: {1}", DateTime.Now, spravaString );
//simulovanie pozdrzania odoslania dalsej spravy 5 sekund. Pri poslednych testoch zmensite.
Thread.Sleep(5000);
}
}

Vložená metóda odošle zo zdroja dát na IoT Hub každých 5 sekúnd náhodne generovanú správu o prihlásení do webu.

12. Poslednou úpravou kódu bude vloženie volania metódy “PosliSpravuDoIotHubuAsync” do štartovacej metódy Main konzolovej aplikácie:

 zdrojKlient = DeviceClient.Create(iotHubUri, new DeviceAuthenticationWithRegistrySymmetricKey(zdrojID , zdrojKluc ), TransportType.Http1 );
PosliSpravuDoIotHubuAsync();
Console.ReadLine();

Poznámka: Metóda Create je prednastavená tak, že vytvorí objekt DeviceClient používajúci protokol AMQP vhodný pre senzorické aplikácie. Naša aplikácia simuluje telemetriu webu, kde je vhodnejším protokolom HTTP. Preto ste v metóde Create použili aj tretí parameter “TransportType.Http1” a na začiatku tvorby simulačnej aplikácie ste práve preto pridali do projektu aj nuget balíček Microsoft.AspNet.WebApi.Client NuGet, ktorý obsahuje aj triedy z System.Net.Http.Formatting.

12. Nakoniec aplikáciu na niekoľko minúť spustite.

obr3_vypissimulaciezdroj

13. To, že si aplikácia s IoT Hub-om rozumie, si overíte tak, že sa na Azure portále https://portal.azure.com v paneli IoT Hub-u bude postupne zvyšovať počet prijatých správ.

obr4_spravy_na_iothube

14. K detailom správ sa dostanete cez Device Explorer (viď predošlá časť seriálu) cez záložku "Data" , kde je potrebné tlačidlom "Monitor" zapnúť monitoring správ prichádzajúcich do IoT Hub-u.

obr5_device_explorer_monitor

Ak zosumarizujem prvé tri časti nášho seriálu, tak sme v nich postupne vytvorili IoT Hub, zaregistrovali zdroj dát a vytvorili simuláciu jeho komunikácie s IoT Hub-um. V ďalšej časti sa preto zameriame na "postspracovanie" prijatých dát na strane IoT Hub-u.

Miro

P.S. Ak ste členmi BizSpark programu pre začínajúce vývojárske “startupy” (firmy alebo živnostníkov) , alebo máte kúpené Visual Studio s MSDN, môžete si bezplatne aktivovať Azure benefit v týchto programoch (Microsoft Azure pre členov BizSpark , Microsoft  Azure pre MSDN predplatiteľov). Pri registrácii Azure benefitu v MSDN alebo BizSparku nie je požadované overenie platobnou kartou. Ak nie ste členmi týchto programov, môžete si Microsoft Azure bezplatne vyskúšať na dobu 30 dní cez Microsoft Azure Trial.