M5 — AAS Server/API 구조 이해 및 기본 학습
09:00–12:00 · Demo Server 단일 exe · Port 5080 · BaSyx REST 패턴
M5
Demo Server 3계층 아키텍처
🌐 클라이언트 레이어
브라우저
/dashboard.html
curl / Postman
API 테스트
Python requests
자동화 스크립트
SignalR WS
Push 확장 옵션
⟳ 3초
폴링
HTTP/REST (JSON)
⚙️ API 레이어 — .NET 8 Minimal API (Port 5080)
AAS Repository
GET /shells/{id}
POST /shells
BaSyx v3 규격
Submodel Repository
GET /submodels/{id}
PUT /submodels/{id}
Base64Url ID
Registry
AAS Registry
SM Registry
Monitoring API
GET /monitoring/snapshot
PUT /db/equipment/{id}
Demo 전용
Dashboard
정적 HTML
GET /dashboard
Entity Framework
🗄️ 데이터 레이어 — SQLite (단일 파일)
equipment
id · asset_id · name · type · aas_id
14행 (조립 셀 S513 자산 14종)
equipment_property
equipment_id · submodel_id · id_short · value
AAS Property ↔ DB 1:1 매핑
equipment_state_log
equipment_id · timestamp · oee · cycle_time
100행 시드 로그 (5분 간격)
시드: OEEkpi=0.852 · CTkpi=42s · quality_score_avg=98.7%
Base64Url 인코딩 원리
AAS ID는 IRI — URL 경로에 직접 사용 불가 → Base64Url 인코딩 필수
예: https://example.com/shells/CellS513 를 경로 파라미터로 사용
원본 IRI:
https://example.com/shells/CellS513
↓
base64url_encode
인코딩:
aHR0cHM6Ly9leGFtcGxlLmNvbS9zaGVsbHMvQ1RfMTQy
API:
GET /api/v3.0/shells/aHR0cHM6Ly9leGFtcGxlLmNvbS9zaGVsbHMvQ1RfMTQy
⚠ Base64Url: '+' → '-', '/' → '_', 패딩 '=' 제거 (일반 Base64와 다름)
핵심 API 엔드포인트 맵
GET 조회
GET
/api/v3.0/shells
→ 전체 Shell 목록
GET
/api/v3.0/shells/{aasId}
→ 특정 Shell
GET
/api/v3.0/submodels/{smId}
→ Submodel 전체
GET
/api/monitoring/snapshot
→ 전체 상태 스냅샷
PUT 변경
PUT
/api/v3.0/submodels/{smId}
→ SM 전체 교체
PATCH
/submodels/{id}/.../$value
→ 단일 값 패치
PUT
/db/equipment/{id}/properties/{name}
→ DB 직접 패치
{aasId}, {smId} = Base64Url 인코딩된 IRI