제7장: 4단계 - 시스템 통합

弘益人間 (홍익인간) - 널리 인간을 이롭게 하라

7.1 4단계의 목적

4단계 명세(PHASE-4-INTEGRATION, v1.0.0)는 청소 로봇을 스마트 홈 생태계, 로봇군(fleet) 관리 시스템, 클라우드 서비스, 서드파티 애플리케이션과 통합하는 방법을 정의한다. 1~3단계가 로봇 한 대와의 대화 방식을 정했다면, 4단계는 로봇을 더 큰 시스템의 일부로 만드는 방법을 다룬다.

통합 영역명세가 다루는 대상
스마트 홈 플랫폼Amazon Alexa, Google Assistant, Apple HomeKit, Samsung SmartThings
로봇군 관리다중 로봇 협조, 구역 할당, 부하 분산
클라우드 서비스AWS IoT Core, Google Cloud IoT, Azure IoT Hub
서드파티 통합IFTTT, Zapier, Home Assistant
분석·보고지표 수집, 기간별 보고서

7.2 스마트 홈 플랫폼

Amazon Alexa

Alexa 연동은 스마트 홈(SMART_HOME) 범주의 스킬로 구성한다. 스킬 매니페스트는 로캘별 이름과 설명, 스마트 홈 API 엔드포인트를 지정한다. 명세가 제시하는 지원 지시어(directive)는 다음과 같다.

Google Assistant

기기 유형은 VACUUM이며, 명세가 지정하는 트레잇은 다음 다섯 가지다.

{
  "traits": [
    "action.devices.traits.OnOff",
    "action.devices.traits.FanSpeed",
    "action.devices.traits.Dock",
    "action.devices.traits.EnergyStorage",
    "action.devices.traits.Locator"
  ]
}

Dock 트레잇은 도크 복귀(POST /robot/dock), EnergyStorage는 배터리 상태, Locator는 로봇 위치 알림(소리 등)에 대응한다.

Apple HomeKit

HomeKit 액세서리 프로토콜(HAP)에는 청소 로봇 전용 서비스 유형이 없으므로, 명세는 로봇을 Fan 범주의 액세서리로 노출한다.

HAP 서비스·특성로봇 기능
Fan 서비스 – On읽기: 청소 여부, 쓰기: 청소 시작·정지
Fan 서비스 – Rotation Speed읽기: 현재 흡입력, 쓰기: 흡입력 설정
Battery 서비스 – Battery Level배터리 잔량
Occupancy Sensor 서비스청소 상태 표시

Samsung SmartThings

SmartThings에서는 Robot Vacuum, Battery, Actuator, Sensor 기능(capability)을 가진 기기로 정의한다.

metadata {
  definition (name: "WIA Cleaning Robot", namespace: "wia", author: "WIA") {
    capability "Robot Vacuum"
    capability "Battery"
    capability "Actuator"
    capability "Sensor"
  }
}

Matter/Thread 매핑은 3단계 명세에 정의되어 있다(제6장 6.8절). 로봇 청소기의 Matter 기기 유형 번호는 0x0074이며, 명세 문서에 적힌 0x0073은 세탁기(Laundry Washer)의 번호를 잘못 적은 것이다. 클러스터는 명세의 비공식 명칭이 아니라 RVC Run Mode, RVC Clean Mode, RVC Operational State, Power Source를 기준으로 구현한다.

7.3 로봇군 관리

로봇군 API

메서드·경로기능
POST /fleet/robots로봇을 로봇군에 등록
GET /fleet/robots전체 로봇 목록
PUT /fleet/robots/{id}/assign로봇에 구역 할당
POST /fleet/schedule로봇군 청소 일정 등록
GET /fleet/status로봇군 전체 상태

구역 할당

{
  "fleetId": "UUID",
  "zones": [
    {
      "zoneId": "UUID",
      "name": "Building A - Floor 1",
      "assignedRobots": ["robot_id1", "robot_id2"],
      "schedule": { "frequency": "daily", "time": "02:00" },
      "priority": 1-10
    }
  ]
}

부하 분산

명세는 부하 분산 알고리즘의 단계를 다음과 같이 제시한다.

  1. 로봇별 작업량을 계산한다.
  2. 구역을 고르게 분배한다.
  3. 배터리 잔량을 고려한다.
  4. 이동 거리를 최소화한다.
  5. 고장에 대비해 작업을 재분배한다.

명세는 구체적인 계산식을 정하지 않으므로, 각 단계를 어떻게 구현할지는 로봇군 관리 시스템의 몫이다.

7.4 클라우드 서비스

AWS IoT Core

AWS에서는 기기 섀도(Device Shadow)로 로봇 상태를 동기화한다. 로봇이 보고한 상태(reported)와 사용자가 원하는 상태(desired)를 나누어 저장하며, 토픽은 $aws/things/{robot_id}/shadow/update와 $aws/things/{robot_id}/shadow/get을 사용한다.

{
  "state": {
    "reported": { "battery": 75, "cleaning": true, "position": {"x": 2.5, "y": 3.1} },
    "desired":  { "mode": "auto", "powerLevel": 80 }
  }
}

Google Cloud IoT

명세는 레지스트리 wia-cleaning-robots, 기기 ID ROB-2025-XXXX, Pub/Sub 토픽 robot-telemetry의 구성 예시를 제시한다. 다만 Google Cloud IoT Core 서비스는 2023년 8월 종료되었으므로, 새로 구축할 때는 MQTT 브로커와 Cloud Pub/Sub를 직접 연결하는 방식 등 대안을 검토해야 한다.

Azure IoT Hub

Azure에서는 연결 문자열(HostName, DeviceId, SharedAccessKey)로 접속하고, 기기 트윈(Device Twin)의 desired·reported 속성으로 청소 일정과 마지막 청소 시각 등을 동기화한다. 태그에는 건물이나 층 같은 위치 정보를 둔다.

7.5 서드파티 통합

IFTTT

트리거액션
청소 시작, 청소 완료, 배터리 부족, 끼임 감지, 정비 필요청소 시작, 도크 복귀, 청소 모드 설정

명세의 예시 애플릿은 "Google Calendar에서 '집 청소' 일정이 시작되면 로봇 청소를 시작한다"이다.

Zapier

명세는 청소 완료 시 Slack 알림, Google Sheets에 청소 세션 기록, 주간 청소 보고서 이메일 발송을 예로 든다.

Home Assistant

vacuum:
  - platform: wia_robot
    host: 192.168.1.100
    token: !secret robot_token
    name: Cleaning Robot

연동 후에는 vacuum.start, vacuum.stop, vacuum.return_to_base, vacuum.set_fan_speed, vacuum.send_command 서비스로 로봇을 제어한다. 위 설정에서 wia_robot은 명세가 제시하는 통합 이름으로, Home Assistant에 기본 포함된 통합이 아니므로 해당 통합 구성 요소를 별도로 설치해야 한다.

7.6 분석과 보고

명세는 수집할 지표로 청소 빈도, 커버리지 효율, 배터리 건강도 추이, 오류율, 사용자 참여도를 든다. 기간별 보고서는 다음 엔드포인트로 받는다.

GET /analytics/report?start=YYYY-MM-DD&end=YYYY-MM-DD

Response:
{
  "period":  { "start": "2025-01-01", "end": "2025-01-31" },
  "summary": { "totalCleanings": 62, "totalAreaCleaned": 1240.5,
               "avgDuration": 1800, "batteryHealthChange": -2 },
  "charts":  { "cleaningFrequency": ["data"], "areaTrend": ["data"], "batteryTrend": ["data"] }
}

보고서의 원자료는 1단계의 CleaningSession과 RobotState이므로, 제조사가 다른 로봇이 섞여 있어도 같은 방식으로 집계할 수 있다.

7.7 SDK

명세는 공식 SDK 대상 언어로 TypeScript/JavaScript, Python, Java, C#, Go, Rust 여섯 가지를 제시하고, 패키지 이름을 wia-rob-011로 정한다. 이 책을 쓰는 시점에 공개 패키지 저장소(npm, PyPI 등)에 배포된 패키지는 없으며, 이용할 수 있는 것은 WIA 공개 저장소의 TypeScript SDK 골격이다(제3장 3.9절, 제5장 5.10절 참조).

7.8 통합 시험과 인증

4단계 명세는 필수 적합성 시험으로 API 엔드포인트 적합성, 데이터 형식 유효성, 보안 감사, 상호운용성 시험, 성능 벤치마크 다섯 가지를 들고, 인증 절차를 신청 → 자동화 테스트(2~3일) → 수동 검토(1주) → 통합 테스트(1주) → 인증 부여의 다섯 단계로 정한다. 실무 준비는 제8장에서 다룬다.

핵심 요약

복습 문제

  1. HomeKit에서 청소 로봇을 Fan 액세서리로 노출하는 이유는 무엇인가?
  2. Google Assistant 연동에 쓰이는 다섯 가지 트레잇과 각 트레잇이 대응하는 로봇 기능을 설명하라.
  3. 로봇군 API로 두 대의 로봇에 한 층을 할당하는 과정을 설명하라.
  4. 명세의 부하 분산 알고리즘 다섯 단계를 설명하라.
  5. 기기 섀도(또는 기기 트윈)의 reported와 desired는 어떻게 다른가?
  6. IFTTT 트리거와 액션을 하나씩 골라 자동화 규칙을 만들어 보라.

📐 시뮬레이터 패널 1