.Net 으로 SmartThings 에 연결된 기기의 온도와 습도를 조회해서 저장하기 (3/6) – 데이터베이스 생성

Published May 6, 2025 | Updated May 18, 2025 | 0 comments

총 6개의 포스트로 이루어지며 아래 글목록을 보시면 확인이 가능합니다.

개요

MS SQL 은 SmartApp 토큰 정보를 저장하기 위한 용도 입니다.
간단하게 사용자 이메일과 Token 정보만 저장해서 사용합니다.

InfluxDB 는 제품별 온도 및 습도 데이터를 일정 시간 간격으로 저장하기 위한 용도입니다.
다음 포스트를 참고하시면 구축 과정을 확인할 수 있습니다.

MS SQL

소스 코드 내려 받기

다음 Github 에서 소스 코드를 다운로드해서 Visual Studio 에서 솔루션을 열어줍니다.


https://github.com/kkomzi7179/SmartThings-InfluxDB-.Net
0 forks.
0 stars.
0 open issues.

Recent commits:

소스 코드 수정

Migrations 폴더와 내부 파일들은 모두 삭제합니다.

appsettings.json 파일에서 데이터베이스 연결 정보를 수정합니다.
{{Host}}, {{Port}}, {{User}}, {{Password}}, {{Database}}

{
    "Logging": {
        "LogLevel": {
            "Default": "Information",
            "Microsoft.AspNetCore": "Warning"
        }
    },
    "AllowedHosts": "*",
    "ConnectionStrings": {
        "DefaultConnection": "Data Source={{Host}},{{Port}};User ID={{User}};Password={{Password}};Initial Catalog={{Database}};Integrated Security=False;MultipleActiveResultSets=True;TrustServerCertificate=True"
    }
}

ProductAppInfo.cs 파일에서 초기 사용자 이메일 주소를 수정합니다.

namespace Api.Environments;

public static class ProductAppInfo {
	public const string AppName = "SmartThingsData";
	public const string DeveloperName = "Jaeyong Park";

	public const string AdminEmail = "[email protected]";

	internal const string SwaggerRoute = "/Swagger";

	internal static readonly TimeSpan DelaySmartThingsTokenRefresh = TimeSpan.FromHours(1);
	internal static readonly TimeSpan DelaySmartThingsDataCollect = TimeSpan.FromMinutes(1);
}

데이터베이스 생성

패키지 관리자 콘솔에서 데이터베이스를 생성하겠습니다.
Ctrl + Q 키를 입력해서 기능 검색을 활성화 한 다음 패키지 관리자 콘솔을 검색해서 실행해 줍니다.

Add-Migration Init 입력 후 Enter 키를 누르면 다음과 같이 스크립트가 실행이 됩니다.

PM> Add-Migration Init
Build started...
Build succeeded.
To undo this action, use Remove-Migration.

update-databse 입력 후 Enter 키를 누르면 다음과 같이 스크립트가 실행이 됩니다.

PM> update-database
Build started...
Build succeeded.
Acquiring an exclusive lock for migration application. See https://aka.ms/efcore-docs-migrations-lock for more information if this takes too long.
Applying migration '20250428020819_Init'.
Done.

데이터베이스를 확인해 보면 지정된 데이터베이스에 Member 테이블이 생성된 것을 확인할 수 있습니다.

사용자 추가

Visual studio 에서 F5 를 눌러서 프로젝트를 실행한 다음 데이터베이스에서 Member 테이블을 조회해보면
ProductAppInfo 에서 지정한 이메일 주소로 사용자가 추가된 것을 확인할 수 있습니다.

Program.cs 파일에서 DB Initilize 부분에서 기본 사용자를 생성하는 코드를 확인할 수 있습니다.

using Api.Database;
using Microsoft.EntityFrameworkCore;

namespace Api
{
    public class Program
    {
        public static async Task Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);

			var dbConStr = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found.");

			// Add services to the container.

			#region DB DbContext
			builder.Services.AddDbContext<MyDbContext>(options => options.UseSqlServer(dbConStr)
#if DEBUG
			.EnableSensitiveDataLogging()
			.EnableDetailedErrors()
#endif
			, ServiceLifetime.Transient
			, ServiceLifetime.Transient);
#if DEBUG
			builder.Services.AddDatabaseDeveloperPageExceptionFilter();
#endif
			#endregion

			builder.Services.AddControllers();
            // Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi
            builder.Services.AddOpenApi();

            var app = builder.Build();

            // Configure the HTTP request pipeline.
            if (app.Environment.IsDevelopment())
            {
                app.MapOpenApi();
            }

            app.UseHttpsRedirection();

            app.UseAuthorization();

            app.MapControllers();

			#region DB Initilize
			using(var scope = app.Services.CreateScope()) {
				var services = scope.ServiceProvider;
				var context = services.GetRequiredService<MyDbContext>();

				if(context.Database.IsSqlServer()) {
					context.Database.Migrate();
				}
				await DbInitializer.Initialize(context);
			}
			#endregion

			app.Run();
        }
    }
}

InfluxDB

InfluxDB UI 에 접속해서 데이터가 저장될 Bucket 을 생성하겠습니다.

Bucket 생성

좌측 메뉴에서 Load Data – Buckets 를 클릭해서 접속합니다.
Bucket 이릅을 지정하고 CREATE 버튼을 클릭해서 생성합니다.

Token 생성

App 과 연동하기 위한 Token 이 필요합니다.
이 토큰을 미리 생성하겠습니다.

좌측메뉴 Local Data – API Tokens 를 클릭해서 접속합니다.
GENERATE API TOKEN 을 선택해서 Custom API Token 을 클릭합니다.

좀 전에 생성한 Bucket 의 Read Write 권한을 선택한 다음 GENERATE 버튼을 클릭합니다.

그러면 다음과 같이 생성된 Token 을 확인할 수 있습니다.
다시 확인이 불가능 하므로 미리 복사해서 저장해 둡니다.

Learn more on this topic

Related Blog Posts

Join in the conversation

Leave a Comment

0 Comments

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

무료 온라인 전광판

전광판

텍스트를 입력하고 텍스트 효과 및 배경효과 를 변경해서 전체화면으로 표시할 수 있는 전광판 용도로 사용하실 수 있습니다. 각종 스포츠 및 공연 관람시 응원 용도로 사용이 가능합니다.

Carousel

여러개의 슬라이드를 추가하여 프레젠테이션 및 이미지 슬라이드 용도로 사용하실 수 있습니다. 브라우저가 포함된 IT 기기로 큰 모니터에 연결하여 매장 내 공지사항 및 메뉴소개를 이미지로 표시할 수 있습니다.

Pin It on Pinterest

Shares
Share This

Share This

Share this post with your friends!

Shares