PREVIEW초안이에요. 아직 실제로 쓸 수는 없고, 계약과 안전 심사에 따라 바뀔 수 있어요.
리소스Resources · v1 preview

머신 · 펌웨어 상태Machines

머신 객체는 모델·그룹 수·보고된 펌웨어 버전·마지막 체크인·OTA 잡 상태를 담아요. 전부 허브(Pi)가 30초마다 체크인하며 보고한 값이에요.

시리얼 형식

머신 시리얼은 VDAS-<MODEL>-<YYWW>-<NNNN> 이에요. 다중 그룹 머신은 그룹마다 장치 키 …-G<n> 를 가져요 (그룹 = 제어 보드 한 쌍 = 서버 행 하나).

모델 코드이름그룹 수
PRO1G프로 1그룹1
PROMINI프로 미니1
PRO2G프로 2그룹2
PRO3G프로 3그룹3
ECO2G에코 2그룹2
ECO3G에코 3그룹3

목록 · 조회

GET /v1/public/machines?cursor=…&limit=50
GET /v1/public/machines/{serial}

응답 예

{
  "serial": "VDAS-PRO2G-2644-9999",
  "model": "PRO2G",
  "groups": 2,
  "hw_rev": "rev_d",
  "status": "in_production",
  "units": [
    {
      "device_key": "VDAS-PRO2G-2644-9999-G1",
      "firmware": { "brew_ctrl": "3.11.0", "keypad": "3.4.20", "pi_bundle": "2026.10.24" },
      "last_checkin_at": "2026-10-29T12:03:41Z",
      "connected": true,
      "ota": { "expected_bundle": null, "active_job": null, "drift": false }
    },
    {
      "device_key": "VDAS-PRO2G-2644-9999-G2",
      "firmware": { "brew_ctrl": "3.10.1", "keypad": "3.4.19", "pi_bundle": "2026.10.17" },
      "last_checkin_at": "2026-10-29T12:03:12Z",
      "connected": true,
      "ota": { "expected_bundle": "2026.10.24", "active_job": "job_01JB…", "drift": true }
    }
  ]
}
필드의미
statusin_production · service(정비 중 — 캠페인 제외) · retired
units[].firmware허브가 각 보드에 버전을 실제로 질의해 올린 값 (보드 응답이 없으면 null)
units[].connected마지막 체크인이 5분 안이면 true
units[].ota.drift기대 번들과 보고 번들이 다르면 true — 현장 수동 조치·부분 실패를 드러냄
units[].identity_conflict같은 장치 키로 두 기기가 번갈아 체크인하는 상태 (15분 창). true 면 보고값을 믿지 말 것

OTA 잡 조회

GET /v1/public/machines/{serial}/ota/jobs?limit=20

잡은 읽기 전용이에요. 번들 적용 순서는 keypad → brew_ctrl → pi 로 고정돼 있고, 펌웨어 단계가 실패하면 pi 단계는 건너뛰어요. 잡 생성·취소·캠페인은 기술자 어드민 API 의 몫이며 공개 API 에는 없어요.

A machine object holds model, group count, reported firmware versions, last check-in and OTA job state — all values the hub (Pi) reported at its 30-second check-in.

Serials

VDAS-<MODEL>-<YYWW>-<NNNN>; multi-group machines have one device key per group, …-G<n>. Models: PRO1G, PROMINI, PRO2G, PRO3G, ECO2G, ECO3G.

Endpoints

GET /v1/public/machines
GET /v1/public/machines/{serial}
GET /v1/public/machines/{serial}/ota/jobs
FieldMeaning
statusin_production · service · retired
units[].firmwareversions the hub actually queried from each board (null if unanswered)
units[].ota.driftexpected bundle ≠ reported bundle
units[].identity_conflicttwo devices alternating on one key within 15 min — distrust the values

이 문서의 원본은 이 HTML 파일이에요 (빌드 없음).