원문 캡처 · github.com
원문 캡처 · github.com

Codex 구독의 남은 사용량과 초기화까지 남은 시간을 Garmin Instinct 2X Solar에서 확인할 수 있는 워치페이스가 공개됐다. 저장소에 포함된 수집기는 Codex만 지원하며, 다른 제공자를 연결하려면 공통 데이터 형식에 맞는 별도 수집기가 필요하다.

워치페이스는 5시간 및 7일 사용량 구간과 24시간 시계, 배터리 잔량을 보여준다. 원형 게이지는 5시간 사용량을, 가로 막대는 7일 사용량을 나타낸다. 흰색으로 채워진 부분은 남은 할당량이고, 가는 테두리 표시는 해당 구간이 끝날 때까지 남은 시간이다. 채움이 표시선을 넘으면 균등한 사용 속도보다 할당량을 더 많이 남긴 상태다.

초기화까지 남은 시간은 일·시간·분 단위로 내림해 표시한다. 예를 들어 -4d는 최소 4일이 남았다는 뜻이다. SETUP은 할당량 URL이 설정되지 않은 상태, ...는 데이터를 사용할 수 없거나 초기화 후 새 측정값을 기다리는 상태를 뜻한다. !는 측정값이 15분 이상 지난 경우 표시된다.

데이터 수집과 조건

Mac에서 실행되는 Python 수집기가 로그인된 Codex CLI에서 사용량을 읽어 MantleDB에 스냅샷을 게시한다. 시계는 Garmin Connect 앱이 실행되는 휴대전화를 거쳐 스냅샷을 읽는다. 수집기와 시계는 각각 5분 간격으로 확인하지만, 정상 작동 중에도 측정값이 최대 10분가량 오래될 수 있으며 절전이나 연결 문제로 더 늦어질 수 있다.

수집하려면 Mac이 켜져 있고 로그인된 상태여야 한다. 시계는 인터넷에 연결된 휴대전화와 블루투스로 연결돼야 하며, Garmin Connect가 백그라운드에서 실행 중이어야 한다.

할당량 스냅샷은 공개 URL로 제공된다. URL을 아는 사람은 남은 할당량, 초기화 시각, 관측 시각을 읽을 수 있다. 수집기는 프롬프트와 대화 내용, Codex 인증 정보를 게시하지 않는다. MantleDB에는 스냅샷과 게시에 사용하는 쓰기 토큰이 전달된다. 토큰은 .local/collector.json에 로컬로 저장되며 시계에는 전송되지 않는다.

실물 Instinct 2X Solar에서 실시간 조회가 확인됐다. 다만 Garmin Connect가 백그라운드에서 실행되는 상태의 지속적인 작동은 아직 하드웨어 확인이 필요하다. 저장소에 포함된 빌드는 Instinct 2X용이며 다른 시계 모델은 검증되지 않았다.

설치

Garmin SDK 없이 macOS에서 설치하려면 Python 3, 로그인된 Codex CLI, 저장소에 포함된 Instinct 2X용 사전 빌드 파일 TokenQuota.prg가 필요하다. 이 파일을 설치하는 데 Garmin SDK나 Java, 개인 Garmin 개발자 키는 필요하지 않다. 아래 명령은 프로젝트 루트에서 실행한다.

  • 수집기를 설정한다.
bash
./collector/setup-collector.py

이 명령은 사용량을 게시하고 watchface/bin/TokenQuota.SET을 생성한 뒤 5분 간격 업데이트를 시작한다. 최초 설정에서는 고유한 MantleDB 네임스페이스를 확보하고, 이후 실행에서는 저장된 설정을 재사용한다. 프로젝트 폴더를 옮기면 설정을 다시 실행해야 한다. 로그와 사용자 지정 네임스페이스, 업데이트 일정 중지 방법은 수집기 설정 안내에 있다.

  • Instinct 2X를 USB로 연결해 드라이브로 나타날 때까지 기다린다. 필요하면 시계에서 MENU를 누른 뒤 System → USB Mode → Mass Storage를 선택한다. USB 모드 설명은 Instinct 2 Series 설명서를 참고할 수 있다.
  • 시계의 마운트 경로를 지정해 배포 스크립트를 실행한다.
bash
./watchface/scripts/deploy.sh /Volumes/GARMIN

/Volumes/GARMIN은 실제 시계의 마운트 경로로 바꿔야 한다. 스크립트는 기존 Token Quota 프로그램과 설정을 교체하고, .prg와 .SET 파일을 각각 시계의 앱 및 설정 폴더에 복사한 뒤 복사본을 확인하고 시계를 안전하게 꺼낸다. 원본 파일이 없으면 안내와 함께 중단한다. 케이블을 분리한 뒤 시계 페이스 선택 메뉴에서 Token Quota를 고른다. 첫 측정값이 표시되기까지 최소 5분이 걸릴 수 있으며 Garmin이 백그라운드 요청을 늦출 수 있다.

개발과 다른 수집기

다시 빌드하거나 시뮬레이터를 사용하려면 instinct2x 기기가 설치된 Connect IQ SDK와 Java, OpenSSL이 필요하다.

bash
./watchface/scripts/build.sh # watchface/bin/TokenQuota.prg
./watchface/scripts/run.sh # Build and launch the simulator
./watchface/scripts/run.sh --test # Run simulator tests

--test는 워치페이스 코드와 자동화 테스트를 포함한 별도 프로그램을 빌드한 뒤 테스트를 실행하고 종료하는 선택 기능이다. 테스트 범위와 출력은 시뮬레이터 테스트 안내에서 확인할 수 있다. 일반 빌드는 watchface/bin/TokenQuota.prg를 갱신하므로 워치페이스 소스를 바꿔 배포할 때는 갱신된 프로그램도 포함해야 한다.

다른 수집기도 공통 데이터 형식에 맞춰 데이터를 게시할 수 있다. 이미 공개 할당량 URL이 있다면 Codex 설정 스크립트 대신 독립 설정 파일 생성 방법을 사용한다. export-settings.py는 시뮬레이터에서 편집한 설정을 위한 선택적 개발 도구다.

개인 키와 수집기 설정, 로그는 저장소 루트의 .local/에 저장되며 .gitignore 대상이다. 이 디렉터리를 공개하지 말아야 한다. 생성된 설정과 기타 빌드 결과물은 watchface/bin/에서 무시되지만, 사전 빌드된 TokenQuota.prg는 저장소에 포함돼 있다. 프로젝트를 옮길 때는 기존 서명 키와 수집기 설정을 유지해야 한다.

프로젝트는 MIT License로 제공된다. 워치페이스에 포함된 비트맵 글꼴의 원본 글꼴과 별도 라이선스는 글꼴 안내에 기록돼 있다.