2024. 1. 26. 18:19ㆍSKKU DT
TAM-SAM-SOM
TAM : Total Addressable Market
전체시장으로 제품/서비스의 카테고리 영억을 포함하는 비즈니스 도메인 크기
SAM : Service Available Market
유효시장이라고 하며, TAM 내의 스타트업이 추구하는 비즈니스 시장 규모
SOM : Service Obtainable Market
SOM은 수익시장이라고 하며, 유효시장 내에서 초기 단계에 확보 가능한 시장 규모
이전 글에 이어서, DigitalTwinsManager 스크립트에 CreateDigitalTwin 함수를 주목한다. 아래와 같이 스크립트하고,
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 void CreateModel(string path)
{
using var modelStreamReader = new StreamReader(path);
string dtdl = modelStreamReader.ReadToEnd();
string[] dtdls = new string[] { dtdl };
client.CreateModels(dtdls);
}
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;
}
public bool UpdateDigitalTwin(string twinId, string property, object value)
{
try
{
BasicDigitalTwin digitalTwin = client.GetDigitalTwin<BasicDigitalTwin>(twinId);
digitalTwin.Contents[property] = value;
client.CreateOrReplaceDigitalTwin<BasicDigitalTwin>(twinId, digitalTwin);
}
catch (RequestFailedException)
{
return false;
}
return true;
}
public void UpdateDigitalTwinProperty(string twinId, string property, object value)
{
JsonPatchDocument patch = null;
try
{
patch = new JsonPatchDocument();
patch.AppendAdd("/" + property, value);
client.UpdateDigitalTwin(twinId, patch);
}
catch (RequestFailedException)
{
}
patch = new JsonPatchDocument();
patch.AppendReplace("/" + property, value);
client.UpdateDigitalTwin(twinId, patch);
}
}
}
Program.cs 스크립트를 아래처럼 작성하고,
using Azure.DigitalTwins.Core;
using SmartBuildingConsoleApp.DigitalTwins;
using System;
namespace SmartBuildingConsoleApp
{
class Program
{
static void Main(string[] args)
{
DigitalTwinsManager dtHelper = new DigitalTwinsManager();
dtHelper.UpdateDigitalTwinProperty("GroundFloor", "floornumber", 1);
dtHelper.UpdateDigitalTwinProperty("GroundFloor", "lightson", true);
}
}
}
Floor에 [Create a Twin]으로 GroundFloor를 하나 만들면, 위의 코드를 실행했을 때 floornumber와 lightson의 정보가 들어가게 된다. 그리고 chapter5안에 floor.json도 있어야 한다.
{
"@id": "dtmi:com:smartbuilding:Floor;1",
"@type": "Interface",
"@context": "dtmi:dtdl:context;2",
"displayName": "Floor",
"contents": [
{
"@type": "Property",
"name": "floornumber",
"schema": "integer",
"writable": false
},
{
"@type": "Property",
"name": "lightson",
"schema": "boolean",
"writable": true
}
]
}
chapter5에 building.json모델 추가
{
"@id": "dtmi:com:smartbuilding:Building;1",
"@type": "Interface",
"@context": "dtmi:dtdl:context;2",
"displayName": "Building",
"contents": [
{
"@type": "Property",
"name": "rooms",
"writable": true,
"schema": {
"@type": "Map",
"mapKey": {
"name": "roomname",
"schema": "string"
},
"mapValue": {
"name": "roomtemperature",
"schema": "float"
}
}
}
]
}
Program.cs 스크립트에서 이전 building.json 모델 지우고 chapter5에 넣은 새로운 building.json으로 create한다. 성공적으로 되었다면 Model updated가 출력된다.
using Azure.DigitalTwins.Core;
using SmartBuildingConsoleApp.DigitalTwins;
using System;
namespace SmartBuildingConsoleApp
{
class Program
{
static void Main(string[] args)
{
DigitalTwinsManager dtHelper = new DigitalTwinsManager();
string[] paths = new string[] {
"Models/chapter5/building.json"
};
dtHelper.DeleteModel("dtmi:com:smartbuilding:Building;1");
dtHelper.CreateModels(paths);
Console.WriteLine("Model updated");
}
}
}
그리고 Building 모델에 [Create a Twin]으로 MainBuilding이름의 Twin 생성
Program.cs 스크립트를 아래와 같이 작성하고 실행하면, Dictionary 정보들이 보이게 된다.
using Azure.DigitalTwins.Core;
using SmartBuildingConsoleApp.DigitalTwins;
using System;
namespace SmartBuildingConsoleApp
{
class Program
{
static void Main(string[] args)
{
DigitalTwinsManager dtHelper = new DigitalTwinsManager();
var map = new Dictionary<string, float>();
map.Add("MeetingRoom101", 21.3f);
map.Add("MeetingRoom102", 22.1f);
map.Add("MeetingRoom103", 20.9f);
dtHelper.UpdateDigitalTwinProperty("MainBuilding", "rooms", map);
}
}
}
Explorer 상단의 SELECT 부분은, SQL이기 때문에 해당 언어를 사용해서 데이터를 표시할 수 있다.
Azure Digital Twin Postman 활용
위의 링크에서 json을 다운로드 받는다.
이후 Postman을 열고 [New] 버튼으로 새 Workspace를 만들고, [Import]로 위에서 받은 json 파일을 드래그 앤 드랍 한다.
PowerShell을 관리자 권한으로 열 후 아래를 입력해서 key를 받는다.
az account get-access-token --resource https://management.azure.com/
Postman에서 [Authorization] - [Token] 부분에 토큰 입력
Azure Portal에서 아래의 경로로 들어간 후 구독 ID를 복사해서 Postman에 붙여넣는다.
아래의 resourceGroupName에는 리소스 그룹 이름을 넣는다.
그리고 Send 버튼을 누르면 json 결과물이 나온다.
밑에 json도 받아서 Postman에 import 한다.
토큰 받아오고, 출력된 토큰 값을 복사해 Postman에서 토큰 입력
az account get-access-token --resource 0b07f429-9f4b-4714-9392-cc5e8e80c8b0
호스트 이름 복사해서 Postman에 붙여넣기
Send를 눌렀지만 오류...
'SKKU DT' 카테고리의 다른 글
[SKKU DT] 63일차 -Stable Diffusion과 기능들 (2) | 2024.01.30 |
---|---|
[SKKU DT] 62일차 -AI 알아보기, 기업 특강, 챗봇 생성하기, 블렌더 스크립트 생성 (0) | 2024.01.29 |
[SKKU DT] 60일차 -Azure Digital Twin 실습(2) (0) | 2024.01.25 |
[SKKU DT] 59일차 -Azure Digital Twin 실습 (0) | 2024.01.24 |
[SKKU DT] 58일차 -Digital Twin의 활용 예시(2), Azure Digital Twin을 위한 설치 (1) | 2024.01.23 |