2024. 1. 24. 12:57ㆍSKKU DT
Node.js 설치
맞는 버전을 설치하기 위해서 LTS 버전이 아닌 14.15.4버전을 설치한다.
잘 설치가 되었다면 PowerShell을 관리자 권한으로 열었을 때 node -v를 입력하면 버전이 나온다.
아래의 샘플을 받아서 압축을 푼다.
압축 푼 경로로 들어가서 아래와 같은 순서를 밟는다. npm install을 치면 설치가 쭉 된다.
az login으로 azure에 로그인한다. 로그인이 잘 되었다면 웹페이지에 You have logged!라고 뜬다.
az account list --output table을 입력하면 정보를 볼 수 있다.
npm start run을 입력하고 되지 않는다면 아래의 코드를 입력한다.
$env:NODE_OPTIONS="--max-old-space-size=8192"
성공하면, 아래의 화면이 나온다.
호스트 이름 copy 해서 바로 위 사진의 Azure Digital Twins URL에 https://와 함께 입력한다.
Upload a Model을 누른 후 examples 아래의 모든 파일을 선택해서 올린다.
Import graph 버튼 클릭,
distributionGrid.xlsx 파일 열기
열면 아래의 그림이 나온다. 오른쪽 위 저장 버튼을 누르면 Import Successful 팝업이 뜬다.
Run Query 후 Model Graph 누르면 관계도를 볼 수 있다.
모델 생성하기 -Visual Studio
콘솔 앱 새 프로젝트 만들기
솔루션 탐색기에서 오른쪽 버튼, [NuGet 패키지 관리] 선택
솔루션 탐색기가 없다면 위쪽 탭에서 [보기]에서 솔루션 탐색기를 찾을 수 있다.
찾아보기 탭에서 검색하여 Azure.Identity 설치
-Azure ID용 Azure SDK 클라이언트 라이브러리의 구현이며 어플리케이션에서 Azure Digital Twins 인스턴스에 연결하는 데에 사용된다.
Azure.DigitalTwins.Core 설치
-Azure Digital Twins 서비스를 빌드한다.
새 폴더 추가, DigitalTwins로 이름 바꾸기
폴더에 클래스 추가, 이름은 DigitalTwinsManager
DigitalTwinsManager 코드 작성, "<Azure Digital Twins Instance URL>" 부분의 자신의 호스트 네임을 입력한다. 꺾쇠 지우고 URL 넣기
using Azure.DigitalTwins.Core;
using Azure.Identity;
using System;
using System.IO;
namespace SmartBuildingConsoleApp.DigitalTwins
{
public class DigitalTwinsManager
{
private static readonly string adtInstanceUrl = "<Azure Digital Twins Instance URL>";
private DigitalTwinsClient client;
public DigitalTwinsManager()
{
Connect();
}
public void Connect()
{
var cred = new DefaultAzureCredential();
client = new DigitalTwinsClient(new Uri(adtInstanceUrl), cred);
}
public void CreateModel(string path)
{
using var modelStreamReader = new StreamReader(path);
string dtdl = modelStreamReader.ReadToEnd();
string[] dtdls = new string[] { dtdl };
client.CreateModels(dtdls);
}
}
}
위 화면에서 호스트 이름을 볼 수 있다.
Programs.cs에는 아래의 코드를 넣는다.
using SmartBuildingConsoleApp.DigitalTwins;
using System;
namespace SmartBuildingConsoleApp
{
class Program
{
static void Main(string[] args)
{
DigitalTwinsManager dtHelper = new DigitalTwinsManager();
// TODO
string path = "Models/Chapter4/room.json";
dtHelper.CreateModel(path);
}
}
}
폴더 하나 더 추가, Models로 이름 변경
밑에 chapter4 이름의 폴더를 만들고, 그 안에 새 항목 추가. 이름은 room.json이다.
room.json 코드는 아래와 같고, 트리 구성도 아래를 참고하면 된다.
{
"@id": "dtmi:com:smartbuilding:Room;1",
"@type": "Interface",
"@context": "dtmi:dtdl:context;2",
"displayName": "Room"
}
room.json 파일에서 오른쪽 마우스를 누르고 [속성] 메뉴를 열면 [출력 디렉터리로 복사] 항목이 있는데, [항상 복사]로 바꾼다.
다시 Azure Digital Twin Explorer 웹페이지에서, 이미 넣었던 모델들을 지워야 한다.
다시 Visual Studio로 돌아와서 디버그하지 않고 시작을 누른다.
잘 되었다면 웹페이지 상에 Room 모델이 생긴다.
DigitalTwinsManager 스크립트의 CreateModel 함수 부분을 업데이트 한다.
using Azure;
using Azure.DigitalTwins.Core;
using Azure.Identity;
using System;
using System.IO;
namespace SmartBuildingConsoleApp.DigitalTwins
{
public class DigitalTwinsManager
{
private static readonly string adtInstanceUrl = "https://DTBDigitalTwins12.api.krc.digitaltwins.azure.net";
private DigitalTwinsClient client;
public DigitalTwinsManager()
{
Connect();
}
public void Connect()
{
var cred = new DefaultAzureCredential();
client = new DigitalTwinsClient(new Uri(adtInstanceUrl), cred);
}
public bool CreateModel(string path)
{
return CreateModels(new string[] { path });
}
public bool CreateModels(string[] path)
{
List<string> dtdls = new List<string>();
foreach (string p in path)
{
using var modelStreamReader = new StreamReader(p);
string dtdl = modelStreamReader.ReadToEnd();
dtdls.Add(dtdl);
}
try
{
DigitalTwinsModelData[] models = client.CreateModels(dtdls.ToArray());
}
catch (RequestFailedException)
{
return false;
}
return true;
}
}
}
아래의 링크에서 지난 글에서 받았던 zip파일이 있는데 없다면 다시 다운받고,
압축되어있는 chapter4 나머지 json도 끌어다가 프로젝트 폴더에 복사해서 넣는다.
Program.cs를 다음과 같이 업데이트,
using SmartBuildingConsoleApp.DigitalTwins;
using System;
namespace SmartBuildingConsoleApp
{
class Program
{
static void Main(string[] args)
{
DigitalTwinsManager dtHelper = new DigitalTwinsManager();
// TODO
string[] paths = new string[] {
"Models/chapter4/campus.json",
"Models/chapter4/building.json",
"Models/chapter4/floor.json",
"Models/chapter4/workarea.json",
"Models/chapter4/sensor.json",
"Models/chapter4/meetingroom.json"
};
dtHelper.CreateModels(paths);
}
}
}
추가된 json은 [항상 복사]로 수정한다.
디버그하지 않고 시작하면 Azure Digital Twin Explorer에 다른 모델도 뜬다.
DigitalTwinsManager 스크립트의 맨 아래에 DeleteModel() 함수를 추가하고,
using Azure;
using Azure.DigitalTwins.Core;
using Azure.Identity;
using System;
using System.IO;
namespace SmartBuildingConsoleApp.DigitalTwins
{
public class DigitalTwinsManager
{
private static readonly string adtInstanceUrl = "https://DTBDigitalTwins12.api.krc.digitaltwins.azure.net";
private DigitalTwinsClient client;
public DigitalTwinsManager()
{
Connect();
}
public void Connect()
{
var cred = new DefaultAzureCredential();
client = new DigitalTwinsClient(new Uri(adtInstanceUrl), cred);
}
public bool CreateModel(string path)
{
return CreateModels(new string[] { path });
}
public bool CreateModels(string[] path)
{
List<string> dtdls = new List<string>();
foreach (string p in path)
{
using var modelStreamReader = new StreamReader(p);
string dtdl = modelStreamReader.ReadToEnd();
dtdls.Add(dtdl);
}
try
{
DigitalTwinsModelData[] models = client.CreateModels(dtdls.ToArray());
}
catch (RequestFailedException)
{
return false;
}
return true;
}
public void DeleteModel(string modelId)
{
client.DeleteModel(modelId);
}
}
}
Program.cs 스크립트에는 이전 것을 주석처리하고 한 줄을 추가한다.
using SmartBuildingConsoleApp.DigitalTwins;
using System;
namespace SmartBuildingConsoleApp
{
class Program
{
static void Main(string[] args)
{
DigitalTwinsManager dtHelper = new DigitalTwinsManager();
// TODO
/*
string[] paths = new string[] {
"Models/chapter4/campus.json",
"Models/chapter4/building.json",
"Models/chapter4/floor.json",
"Models/chapter4/workarea.json",
"Models/chapter4/sensor.json",
"Models/chapter4/meetingroom.json"
};
dtHelper.CreateModels(paths);
*/
dtHelper.DeleteModel("dtmi:com:smartbuilding:Meetingroom;1");
}
}
}
실행하면, Meetingroom 모델이 Explorer 상에서 없어진다.
DigitalTwinsManager 스크립트에 GetModel 함수 추가
using Azure;
using Azure.DigitalTwins.Core;
using Azure.Identity;
using System;
using System.IO;
namespace SmartBuildingConsoleApp.DigitalTwins
{
public class DigitalTwinsManager
{
private static readonly string adtInstanceUrl = "https://DTBDigitalTwins12.api.krc.digitaltwins.azure.net";
private DigitalTwinsClient client;
public DigitalTwinsManager()
{
Connect();
}
public void Connect()
{
var cred = new DefaultAzureCredential();
client = new DigitalTwinsClient(new Uri(adtInstanceUrl), cred);
}
public bool CreateModel(string path)
{
return CreateModels(new string[] { path });
}
public bool CreateModels(string[] path)
{
List<string> dtdls = new List<string>();
foreach (string p in path)
{
using var modelStreamReader = new StreamReader(p);
string dtdl = modelStreamReader.ReadToEnd();
dtdls.Add(dtdl);
}
try
{
DigitalTwinsModelData[] models = client.CreateModels(dtdls.ToArray());
}
catch (RequestFailedException)
{
return false;
}
return true;
}
public void DeleteModel(string modelId)
{
client.DeleteModel(modelId);
}
public DigitalTwinsModelData GetModel(string modelId)
{
try
{
return client.GetModel(modelId);
}
catch (RequestFailedException)
{
return null;
}
}
}
}
Program.cs 스크립트에도 GetModel 관련 코드 추가
using Azure.DigitalTwins.Core;
using SmartBuildingConsoleApp.DigitalTwins;
using System;
namespace SmartBuildingConsoleApp
{
class Program
{
static void Main(string[] args)
{
DigitalTwinsManager dtHelper = new DigitalTwinsManager();
// TODO
/*
string[] paths = new string[] {
"Models/chapter4/campus.json",
"Models/chapter4/building.json",
"Models/chapter4/floor.json",
"Models/chapter4/workarea.json",
"Models/chapter4/sensor.json",
"Models/chapter4/meetingroom.json"
};
dtHelper.CreateModels(paths);
*/
//dtHelper.DeleteModel("dtmi:com:smartbuilding:Meetingroom;1");
DigitalTwinsModelData model = dtHelper.GetModel("dtmi:com:smartbuilding:Room;1");
Console.WriteLine(model.Id);
Console.WriteLine(model.LanguageDisplayNames["en"]);
}
}
}
실행하면 아래처럼 출력값이 뜬다.
DigitalTwinsManager 스크립트 맨 밑에 함수 추가
using Azure;
using Azure.DigitalTwins.Core;
using Azure.Identity;
using System;
using System.IO;
namespace SmartBuildingConsoleApp.DigitalTwins
{
public class DigitalTwinsManager
{
private static readonly string adtInstanceUrl = "https://DTBDigitalTwins12.api.krc.digitaltwins.azure.net";
private DigitalTwinsClient client;
public DigitalTwinsManager()
{
Connect();
}
public void Connect()
{
var cred = new DefaultAzureCredential();
client = new DigitalTwinsClient(new Uri(adtInstanceUrl), cred);
}
public bool CreateModel(string path)
{
return CreateModels(new string[] { path });
}
public bool CreateModels(string[] path)
{
List<string> dtdls = new List<string>();
foreach (string p in path)
{
using var modelStreamReader = new StreamReader(p);
string dtdl = modelStreamReader.ReadToEnd();
dtdls.Add(dtdl);
}
try
{
DigitalTwinsModelData[] models = client.CreateModels(dtdls.ToArray());
}
catch (RequestFailedException)
{
return false;
}
return true;
}
public void DeleteModel(string modelId)
{
client.DeleteModel(modelId);
}
public DigitalTwinsModelData GetModel(string modelId)
{
try
{
return client.GetModel(modelId);
}
catch (RequestFailedException)
{
return null;
}
}
public Pageable<DigitalTwinsModelData> GetModels()
{
GetModelsOptions options = new GetModelsOptions();
return client.GetModels(options);
}
}
}
Program.cs 스크립트에도 관련 코드 추가
using Azure.DigitalTwins.Core;
using SmartBuildingConsoleApp.DigitalTwins;
using System;
namespace SmartBuildingConsoleApp
{
class Program
{
static void Main(string[] args)
{
DigitalTwinsManager dtHelper = new DigitalTwinsManager();
// TODO
/*
string[] paths = new string[] {
"Models/chapter4/campus.json",
"Models/chapter4/building.json",
"Models/chapter4/floor.json",
"Models/chapter4/workarea.json",
"Models/chapter4/sensor.json",
"Models/chapter4/meetingroom.json"
};
dtHelper.CreateModels(paths);
*/
//dtHelper.DeleteModel("dtmi:com:smartbuilding:Meetingroom;1");
/*
DigitalTwinsModelData model = dtHelper.GetModel("dtmi:com:smartbuilding:Room;1");
Console.WriteLine(model.Id);
Console.WriteLine(model.LanguageDisplayNames["en"]);
*/
var models = dtHelper.GetModels();
foreach (DigitalTwinsModelData model in models)
{
Console.WriteLine(model.Id);
Console.WriteLine(model.LanguageDisplayNames["en"]);
}
}
}
}
결과값 출력
Digital Twin Instance 관리
DigitalTwinsManager 스크립트에서 맨 밑의 내용 추가
using Azure;
using Azure.DigitalTwins.Core;
using Azure.Identity;
using System;
using System.IO;
namespace SmartBuildingConsoleApp.DigitalTwins
{
public class DigitalTwinsManager
{
private static readonly string adtInstanceUrl = "https://DTBDigitalTwins12.api.krc.digitaltwins.azure.net";
private DigitalTwinsClient client;
public DigitalTwinsManager()
{
Connect();
}
public void Connect()
{
var cred = new DefaultAzureCredential();
client = new DigitalTwinsClient(new Uri(adtInstanceUrl), cred);
}
public bool CreateModel(string path)
{
return CreateModels(new string[] { path });
}
public bool CreateModels(string[] path)
{
List<string> dtdls = new List<string>();
foreach (string p in path)
{
using var modelStreamReader = new StreamReader(p);
string dtdl = modelStreamReader.ReadToEnd();
dtdls.Add(dtdl);
}
try
{
DigitalTwinsModelData[] models = client.CreateModels(dtdls.ToArray());
}
catch (RequestFailedException)
{
return false;
}
return true;
}
public void DeleteModel(string modelId)
{
client.DeleteModel(modelId);
}
public DigitalTwinsModelData GetModel(string modelId)
{
try
{
return client.GetModel(modelId);
}
catch (RequestFailedException)
{
return null;
}
}
public Pageable<DigitalTwinsModelData> GetModels()
{
GetModelsOptions options = new GetModelsOptions();
return client.GetModels(options);
}
public bool CreateDigitalTwin(string twinId, string modelId)
{
BasicDigitalTwin digitalTwin = new BasicDigitalTwin();
digitalTwin.Metadata = new DigitalTwinMetadata();
digitalTwin.Metadata.ModelId = modelId;
digitalTwin.Id = twinId;
try
{
client.CreateOrReplaceDigitalTwin<BasicDigitalTwin>(twinId, digitalTwin);
}
catch (RequestFailedException)
{
return false;
}
return true;
}
}
}
Programs 스크립트에서 맨 아래 내용 추가
using Azure.DigitalTwins.Core;
using SmartBuildingConsoleApp.DigitalTwins;
using System;
namespace SmartBuildingConsoleApp
{
class Program
{
static void Main(string[] args)
{
DigitalTwinsManager dtHelper = new DigitalTwinsManager();
// TODO
/*
string[] paths = new string[] {
"Models/chapter4/campus.json",
"Models/chapter4/building.json",
"Models/chapter4/floor.json",
"Models/chapter4/workarea.json",
"Models/chapter4/sensor.json",
"Models/chapter4/meetingroom.json"
};
dtHelper.CreateModels(paths);
*/
//dtHelper.DeleteModel("dtmi:com:smartbuilding:Meetingroom;1");
/*
DigitalTwinsModelData model = dtHelper.GetModel("dtmi:com:smartbuilding:Room;1");
Console.WriteLine(model.Id);
Console.WriteLine(model.LanguageDisplayNames["en"]);
*/
/*
var models = dtHelper.GetModels();
foreach (DigitalTwinsModelData model in models)
{
Console.WriteLine(model.Id);
Console.WriteLine(model.LanguageDisplayNames["en"]);
}
*/
dtHelper.CreateDigitalTwin("Campus", "dtmi:com:smartbuilding:Campus;1");
dtHelper.CreateDigitalTwin("MainBuilding", "dtmi:com:smartbuilding:Building;1");
dtHelper.CreateDigitalTwin("GroundFloor", "dtmi:com:smartbuilding:Floor;1");
dtHelper.CreateDigitalTwin("MeetingRoom1.01", "dtmi:com:smartbuilding:Meetingroom;1");
}
}
}
생성이 되었다면 Explorer에 생성된 개체들이 보인다.
'SKKU DT' 카테고리의 다른 글
[SKKU DT] 61일차 -Azure Digital Twin 실습(3), Postman (0) | 2024.01.26 |
---|---|
[SKKU DT] 60일차 -Azure Digital Twin 실습(2) (0) | 2024.01.25 |
[SKKU DT] 58일차 -Digital Twin의 활용 예시(2), Azure Digital Twin을 위한 설치 (1) | 2024.01.23 |
[SKKU DT] 57일차 -Azure Digital Twin 구성, Digital Twin의 활용 예시 (0) | 2024.01.22 |
[SKKU DT] 56일차 -유니티 VR 오큘러스 개인 프로젝트 만들기 (0) | 2024.01.19 |