Skip to content

simhokyung/Capstone_Design_

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

133 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🏠가정용 공기질 관리 플랫폼 (Every Air)

AI 예측최적제어 알고리즘을 적용해

에너지 절감사전 대응 기능을 갖춘 가정용 공기질 관리 플랫폼을 개발한다.


📑 목차

  1. 개발 배경
  2. 주요 기능 (Features)
  3. 앱 기능 설명
  4. 나의 역할 (What I built)
  5. 기술 스택(Backend)
  6. 폴더 구조
  7. 시스템 구조 (Architecture)
  8. ERD 테이블
  9. API 문서
  10. 실행 방법
  11. 공기질 예측 성능
  12. 트러블 슈팅

1) 개발 배경

image

국립 환경 과학원에 따르면 한국인은

하루 중 86%의 시간을 실내 환경에서 생활

image

정부는 실내 공기질 관리법으로 다중 이용 시설에서 실내 공기질 관리를 의무화

2024년 그 기준강화

이에따라 실내 공기질 관리에 다방면으로 도움을 줄 수 있는

가정용 공기질 관리 플랫폼을 개발하게 되었습니다.


2) 주요 기능 (Features)

  • AI기반 공기질 예측: 운영 환경에서의 데이터를 수집하여 학습하고, 현재 상태를 바탕으로 1시간 내의 실내 공기질 상태를 1분 단위로 예측
  • 예측값 기반 사전 대응: 예측값을 바탕으로 공기청정기의 최적 제어 스케줄을 10분 단위로 제공
  • 필터 수명 계산: 필터 수명은 단순 시간 누적이 아니라, 공기청정기의 팬 속도와 공기질 지수(AQI)를 가중치로 반영해 실제 사용 환경을 고려해 계산
  • 맞춤형 공기질 관리 제공: 사용자에게 천식, 알러지 여부를 입력받아 공기질 관리 기준치를 설정하여 사용자 맞춤형 공기질 관리 서비스를 제공
  • 시각화 정보 제공(그래프, 히트맵): 다수의 IoT센서를 활용해 센서간 간격을 좁혀 해상도 높은 데이터를 사용, 사용자에게 실내 공기질 상태를 히트맵 형식으로 제공해 오염원을 한눈에 파악

3) 앱 설명

홈 화면

image

홈 화면에서는 실내외 공기질 상태공기질 예측 정보요약해서 볼 수 있다.

실외 화면

image image

(1)실외 화면에서는 실외 공기질 상태24시간 예측 그래프를 확인할 수 있으며,

(2)각 항목에 대한 설명 및 단계별 기준치를 확인할 수 있다.

실내 화면

image image image

(1)실내 화면에서는 실내 공기질 상태1시간 예측 그래프를 확인할 수 있으며,

(2)방별 예측 그래프도 확인할 수 있다.

(3)최근 24시간 내 실내 공기질 상태를 히트맵 형태로 볼 수 있어 오염원을 한눈에 파악할 수 있다.

사용자 스케줄 & 관리기준치 설정

image image

(1)스케줄 수정 화면에서는 사용자의 외출 시간을 입력해 불필요한 에너지 소비를 줄일 수 있다.

(2)관리 기준치 수정 화면에서는 사용자에게 맞춤형 공기질 관리 서비스를 제공하기 위해 관리 임계치를 입력받는다.

이때 알러지, 천식 여부에 따라 관리 임계치를 추천해주며, 필요시 세부 설정을 할 수 있다.

자동제어

image image

(1)사용자가 자동제어를 적용할 공간을 고른다.

(2)그 공간에서 적용할 공기질 기준치를 선택한다.

이 기준치의 초기값사용자가 위에서 셋팅한 관리 임계치 값이다.

이 기준치를 그대로 사용해도 되고, 공간에 따라 수정해서 사용해도 된다. ex) 방은 기준치를 엄격하게, 주방은 널널하게

기준치를 설정하면, 방의 정보와 임계치 값이 AI 서버로 넘어가고,

AI는 이 정보를 받아 방 별로 최적제어를 내려 공기청정기를 제어한다.

수동제어

image

수동 제어 상태에서는 관리 장치를 직접 제어할 수 있으며, 공기청정기의 경우 필터 소모율을 확인할 수 있다.

알림화면

image

알림 화면에서는 필터 교체 필요 알림, 공기질 이상 경고 등을 확인할 수 있다.

계정화면

image

계정 화면에서는 간단한 사용자 정보를 확인할 수 있으며, 알림 설정, 로그아웃, 비밀번호 변경 등 계정 설정을 할 수 있다.


4) 나의 역할 (What I built)

image
  • 팀장으로, 백엔드 역할을 맡았다.
  • 아키텍처 설계, 도메인 모델링, ERD 테이블, API 명세서 등을 작성하였다.
  • 1분마다 수신되는 센서&공기청정기 데이터 -> DB저장 -> 병합하여 AI 서버에 전송하는 흐름 완성.
  • SmartThings/대기질 API 연동, 필터 수명 로직, 사용자 맞춤 제어 정책 등을 구현.
  • 스프링 서버를 AWS EC2에 배포.

5) 기술 스택(백엔드) (Tech Stack)

  • Language/Build: Java 17, Gradle
  • Framework: Spring Boot, Spring Web, Spring Data JPA, Spring Security (JWT)
  • DB: MySQL
  • Libraries: jjwt, Lombok 등
  • External: SmartThings REST API, OpenWeatherMap/Weatherbit API
  • Infra: AWS EC2/RDS, S3, GitHub Actions

6) 폴더구조

backend/
├─ src/main/java/com/example/airqualityplatform
│  ├─ controller/  # REST 컨트롤러 (Auth, Device, Sensor, Measurement, ...)
│  ├─ service/     # 비즈니스 로직 (SmartThings, 필터수명, 스케줄러 포함)
│  ├─ domain/      # JPA 엔티티
│  ├─ repository/  # Spring Data JPA 리포지토리
│  ├─ dto/         # 요청/응답 DTO
│  ├─ security/    # JWT 필터/토큰/설정
│  └─ AirQualityPlatformApplication.java
└─ src/main/resources/
   └─ application.properties (또는 application.yml)

7) 시스템 구조 (Architecture)

image

8) ERD

diagram

9 ) API 문서

API 명세서 주소: https://solar-skate-88b.notion.site/API-1f31bcaecabd80ebb3aae45ffce4eaa4#2031bcaecabd80b1b0d8f06554be7522


10) 빠른 실행 (Local Quickstart)

(1) 환경 변수

KEY 예시 설명
DB_URL jdbc:mysql://localhost:3306/air?useSSL=false&serverTimezone=Asia/Seoul MySQL 연결 URL
DB_USERNAME root DB 계정
DB_PASSWORD ******** DB 비밀번호
JWT_SECRET 랜덤 64+ 바이트 JWT 서명 키
SMARTTHINGS_TOKEN st-*** SmartThings PAT
OWM_API_KEY owm-*** OpenWeatherMap 키
WEATHERBIT_API_KEY wb-*** Weatherbit 키

application.properties 예시(템플릿):

spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
spring.jpa.hibernate.ddl-auto=update  # 개발 환경에서만 권장
spring.jpa.show-sql=false
spring.jackson.time-zone=Asia/Seoul
jwt.secret=${JWT_SECRET}
external.smartthings.token=${SMARTTHINGS_TOKEN}
external.weather.owm.key=${OWM_API_KEY}
external.weather.weatherbit.key=${WEATHERBIT_API_KEY}

(2) MySQL 준비

# Docker 예시 (비밀번호는 반드시 안전한 값으로 변경)
docker run -d --name air-mysql \
  -e MYSQL_ROOT_PASSWORD=pass \
  -e MYSQL_DATABASE=air \
  -p 3306:3306 mysql:8

(3) 빌드 & 실행

cd backend
./gradlew clean build
java -jar build/libs/*-SNAPSHOT.jar
# 또는
./gradlew bootRun
  • 서버 기본 포트: 8080

11) 공기질 예측 성능

image

LSTM 기반 공기질 예측 모델의 성능을 평가한 결과,

예측값이 전체적으로 실제 측정값과 높은 유사도를 보이며 안정적인 성능을 나타냈다.


12) 트러블슈팅


🔝 위로 가기

About

실내 공기질 관리 플랫폼

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •