iot

Device Creation MicroService

0

Bu uygulamamızda Cumulocity C# kütüphanesini kullanarak bir cihaz oluşturacağız. Bu dökümanda ilk dökümana referans veren adımlar olacaktır.

  1. Microservice Tutorial Part 1 dökümanındaki ilk 5 adımı uygulayalım. 
  2. https://www.nuget.org/packages/Cumulocity.SDK.Client/ adresinden Client kütüphanesini indirelim. İndirdiğimiz yerin bulunduğu adresi bir yere not edelim. Bir sonraki adımda kullanacağız.
  3. Client kütüphanesini projeye eklemek adına “Create.ps1” scriptinde değişiklikler yapalım. Öncelikle 239. Satırımıza aşağıdaki Copy-Item commandını ekliyoruz(bulunduğu klasörün yolunu yazarak) ve Client kütüphanemizi kopyalıyoruz. Bir de 256. Satırımıza bir tane daha elif statementı ekliyoruz aşağıdaki resimde olduğu gibi.
  1. $ ./create.ps1 (bu adımda projeniz oluşacaktır visual studio üzerinden kodları görüntüleyebilirsiniz)
  2. Projenizi visual studio ya da notepad++ (vb.) üzerinde açalım ve Controllers/ValuesController.cs dosyası içerisine aşağıdaki kodu yapıştıralım.
using Cumulocity.SDK.Microservices.Settings;
using Cumulocity.SDK.Client;
using Cumulocity.SDK.Client.Rest;
using Cumulocity.SDK.Client.Rest.Model.Authentication;
using Cumulocity.SDK.Client.Rest.API.Inventory;
using Cumulocity.SDK.Client.Rest.Representation.Inventory;
using Cumulocity.SDK.Client.Rest.Model.C8Y;
using Cumulocity.SDK.Client.Rest.Model;
using Microsoft.AspNetCore.Mvc;
using System;

namespace support.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        public Platform PlatformSettings { get; }

        IPlatform platform_RSET { get; set; }

private static (string userid, string password) DecodeUserIdAndPassword(string encodedAuth)
        {
            var userpass = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(encodedAuth));

            var separator = userpass.IndexOf(':');
            if (separator == -1) throw new InvalidOperationException("Invalid Authorization header: Missing separator character ':'. See RFC2617.");

return (userpass.Substring(0, separator), userpass.Substring(separator + 1));
        }

        public ValuesController(Platform platform)
        {
            PlatformSettings = platform;
        }

        // GET api/values/5
        [HttpGet("{id}")]
        public ActionResult<string> Get(int id)
        {
            string auth = Request.Headers["Authorization"];

            string encodedAuth = null;
            if (auth.StartsWith("Basic ", StringComparison.OrdinalIgnoreCase))
            {
                encodedAuth = auth.Substring("Basic ".Length).Trim();
            }
            string user = DecodeUserIdAndPassword(encodedAuth).userid;
            string pass = DecodeUserIdAndPassword(encodedAuth).password;

platform_RSET = new PlatformImpl(PlatformSettings.BASEURL, new CumulocityCredentials(user, pass));


            IInventoryApi inventory = platform_RSET.InventoryApi;

            //Accessing the inventory
            var mo_hw = new ManagedObjectRepresentation();
            mo_hw.Name = "Device : " + id;
            mo_hw.Set(new IsDevice());
            mo_hw.Set(new Position() { Alt = 0.2m, Lat = 40.0m, Lng = 500m });
            var mo_hw1 = inventory.Create(mo_hw);
            //Console.WriteLine($"Url: {mo_hw1.Self}");

return "open staging env: " + PlatformSettings.BASEURL + " and navigate to Device management -> Devices -> All devices  to check the newly created managed object with the name " + mo_hw.Name + " .";
        }
    }
}
  1. Dotnet versiyonu 2.2.110 için bu adımda “..microservicesdk-win-dev-latest/<your_solution_name>/src/<your_solution_api_name>” klasörü içerisinde bulunan “<your_api_name>.csproj” dosyası içerisinde “InProcess” texti “inprocess” olarak modifiye edilmelidir. 
  2. Uygulamamız inventory üzerinde create işlemi yaptığı için, gerekli izinleri uygulamamıza sağlamalıyız. Bunu yapabilmek için proje klasörümüzde images/multi klasörü altındaki “cumulocity.json dosyasını değiştirmemiz gerekiyor. Aşağıdaki satırı bu dosyaya ekleyelim.

“requiredRoles”: [“ROLE_INVENTORY_ADMIN”,”ROLE_IDENTITY_ADMIN”]

  1. Microservice çağırma yolunu değiştirmek için de “cumulocity.json” dosyası içerisindeki “contextPath” değişkenini “devices” olarak değiştirelim.
  2. $ ./build.ps1
  3. Bu adımda images/multi klasörü altında oluşan zip dosyamızın ismini değiştirirsek, platform üzerinde uygulamamızın adını değiştirmiş oluruz.
  4. Yukarıdaki adım sonucu images/multi klasörü altında oluşan images.zip dosyasını tenantınıza girip, administration uygulamasının applications bölümü altından “upload microservice” diyerek upload ediniz.

Test için https://<your_tenant>.iottest.turkcell.com.tr/service/devices/api/values/<herhangi bir sayı> adresine ulaşalım ve credentiallarımızı girelim. Bu işlem sonucunda girdiğimiz sayı ile referans edilmiş bir cihaz oluşacaktır. Device Management uygulamasından görebilirsiniz.

Comments

Yorum yapma kapatılmıştır