심박수 소스
설정 화면의 소스 탭에서 심박수를 받을 방법을 고릅니다. 선택지는 Pulsoid, Pulsoid (Legacy), Stromno, HTTP 네 가지입니다. 기본값은 Stromno입니다.
Pulsoid
Pulsoid 공식 API로 연결하는 소스입니다. 위젯 ID 대신 액세스 토큰을 씁니다. 토큰에는 심박수 읽기 권한(data:heart_rate:read)이 필요합니다. 이 권한이 없는 토큰은 거부됩니다.
로그인

- 소스를
Pulsoid로 고릅니다. Pulsoid로 로그인버튼을 누릅니다.- 브라우저에서 Pulsoid의 승인 페이지가 열립니다. 접근을 허용합니다. 페이지가 열리지 않았거나 닫았다면 앱의
다시 열기를 누릅니다. - 앱이 토큰을 저장하고 자동으로 연결합니다.
Pulsoid에 로그인됨이 표시됩니다.
승인을 기다리는 동안에는 브라우저에서 접근을 허용하세요가 표시되고 버튼이 취소로 바뀝니다. 설정 화면을 벗어나거나 소스를 바꿔도 로그인은 계속 진행됩니다. 취소를 누르거나 액세스 토큰 칸을 직접 고치면 로그인이 멈춥니다. Pulsoid가 알려 주는 시간이 지나도 멈춥니다. 현재 Pulsoid는 15분을 줍니다. 로그인이 실패했을 때는 문제 해결을 보세요.
토큰 직접 입력
로그인 대신 이미 가진 토큰을 액세스 토큰 칸에 붙여넣을 수도 있습니다. 입력하면 0.5초 뒤 자동으로 저장되고 다시 연결합니다. 칸 아래의 pulsoid.net에서 토큰 발급 링크는 pulsoid.net/ui/keys를 엽니다. Pulsoid 문서에 따르면 이 페이지에서 토큰을 직접 발급하는 기능은 유료 BRO 플랜 기능입니다. 로그인 방식은 이 페이지를 거치지 않습니다.
토큰 저장 위치
토큰은 config.json이 아니라 Windows 자격 증명 관리자(Credential Manager)에 저장됩니다. 액세스 토큰 칸을 비우면 저장된 토큰이 삭제됩니다.
토큰이 없으면 홈 화면에 Pulsoid 토큰이 설정되지 않음이 표시됩니다. 앱은 연결 전에 토큰을 Pulsoid에 확인하고, 거부되면 Pulsoid 토큰이 거부됨. 새 토큰을 발급하세요를 표시합니다. 토큰이 유효하면 실시간 연결을 열고, 연결이 끊기면 1초부터 최대 30초 간격으로 다시 시도합니다. 연결 제한 시간 동안 데이터가 없으면 연결 끊김으로 처리합니다. 수동으로 다시 접속하려면 홈 화면의 다시 연결 버튼을 누릅니다.
Pulsoid (Legacy) / Stromno 위젯 ID
두 소스 모두 위젯 ID로 연결합니다.

- 소스를
Pulsoid (Legacy)또는Stromno로 고릅니다. - 아래 페이지에서 위젯 ID를 확인합니다. 설정 화면의 안내 링크도 같은 주소로 연결됩니다.
- Pulsoid (Legacy):
pulsoid.net/ui/configuration - Stromno:
app.stromno.com/dashboard
- Pulsoid (Legacy):
위젯 ID칸에 붙여넣습니다. 입력하면 0.5초 뒤 자동으로 저장됩니다.
위젯 ID 칸은 두 소스가 함께 씁니다. 소스를 바꿔도 입력한 ID는 그대로 남으므로, 바꾼 소스에 맞는 ID인지 확인하세요.
위젯 ID를 입력하지 않으면 홈 화면에 위젯 ID가 설정되지 않음이 표시됩니다.
앱은 위젯 ID로 실시간 연결 주소를 받아 접속합니다. 주소를 받지 못하거나 연결이 끊기면 1초부터 최대 30초 간격으로 다시 시도합니다. 주소를 받지 못했을 때는 WebSocket URL을 가져오지 못함이 표시됩니다.
데이터를 받던 중 연결 제한 시간(기본 10초) 동안 새 데이터가 오지 않으면 연결 끊김으로 처리하고 다시 접속합니다. 수동으로 다시 접속하려면 홈 화면의 다시 연결 버튼을 누릅니다.
HTTP
직접 심박수를 보내고 싶을 때 쓰는 소스입니다. 앱이 HTTP 서버를 열고, 다른 프로그램이 심박수를 POST합니다.

- 소스를
HTTP로 고릅니다. HTTP 서버 포트를 확인합니다. 기본값은8080입니다.- 심박수를 숫자만 담아
/경로로 POST합니다.
curl -X POST -d 72 http://127.0.0.1:8080/
요청 본문은 72처럼 심박수 숫자 텍스트만 담습니다. 응답은 다음과 같습니다.
| 상태 | 본문 | 조건 |
|---|---|---|
200 | ok | 0~300 사이 정수를 받아 반영했습니다. |
400 | invalid heartrate | 본문이 정수가 아닙니다. 빈 본문, abc, 60.5, 너무 큰 숫자가 해당합니다. |
422 | heartrate out of range | 정수지만 0~300 범위를 벗어났습니다. |
오류 응답을 받은 값은 반영되지 않고 이전 값이 유지됩니다.
서버는 요청 하나를 처리하면 연결을 닫습니다. 연결한 뒤 5초 안에 요청을 끝내지 않으면 응답 없이 연결을 닫습니다.
서버가 떠 있는지 확인하려면 브라우저에서 http://127.0.0.1:8080/를 엽니다. hr-osc http server가 보이면 정상입니다.
연결 제한 시간 동안 POST가 없으면 연결 안 됨으로 바뀝니다. HTTP 소스에서는 홈 화면의 버튼이 서버 재시작입니다.
LAN에서 받기
기본적으로 서버는 이 PC(127.0.0.1)에서 오는 요청만 받습니다. 같은 네트워크의 다른 기기에서 보내려면 LAN에서 받기를 켜세요. 서버가 모든 네트워크 주소에서 요청을 받게 되며, 보내는 쪽에서는 이 PC의 LAN 주소와 포트로 POST합니다.
curl -X POST -d 72 http://192.168.0.10:8080/
192.168.0.10은 예시입니다. 이 PC의 실제 LAN 주소로 바꿔 쓰세요. 이 옵션을 켜면 같은 네트워크의 누구나 심박수를 보낼 수 있으므로 신뢰하는 네트워크에서만 사용하세요.
포트나 LAN에서 받기를 바꾸면 서버가 새 설정으로 다시 열립니다. 포트가 이미 사용 중이면 홈 화면에 HTTP 8080 포트를 열 수 없음처럼 표시됩니다. 해결 방법은 문제 해결을 보세요.