ESF-551 체중계가 Home Assistant에서 계속 연결이 끊기는 이유: 일본의 측정법
요약
Home Assistant에 BLE 체중계(ESF-551)를 연결하는 과정에서 데이터 수신 문제를 겪었으며, Claude Code의 도움으로 로그 분석을 통해 단위 쓰기 명령 단계를 건너뛰는 로컬 패치를 적용하여 해결했다. 나아가 일본 시장 특유의 측정법 제9조 때문에 제조사들이 단위 전환 기능을 제거한 시장 변형임을 조사하며 IoT 기기의 법적 배경 지식을 얻었다.
핵심 포인트
- Claude Code를 활용한 로그 분석을 통해 BLE 연결 끊김 원인을 추적했다.
- 단위 쓰기 명령(unit write command) 단계를 건너뛰는 로컬 패치로 데이터 수신 문제를 해결했다.
- 일본 버전은 측정법 제9조에 따라 법정 단위 외 표시 기능이 제거된 시장 변형이다.
- IoT 기기의 동작 방식은 국가별 법규 및 시장 특성에 의해 결정될 수 있다.
저는 BLE(Bluetooth Low Energy) 바디 스케일인 Etekcity ESF-551을 Home Assistant에 연결했지만, 단 하나의 측정값도 도착하지 않았습니다. 저는 Claude Code에게 원인을 추적하게 했고, 그 끝은 일본의 측정법 제9조에서 멈췄습니다. 이 법 때문에 일본에서 판매되는 제품들은 단위 스위치가 제거되었습니다.
저는 펌웨어(firmware)나 법에 대해서는 아무것도 모릅니다. 제가 한 일은 체중계 위를 밟아보고 다음에 무엇을 조사할지 결정하는 것이었습니다. AI가 없었다면 이 조사를 할 수 없었을 겁니다.
발을 디뎌도 아무것도 돌아오지 않는다
저는 HACS 통합(integration)인 etekcity_fitness_scale_ble를 사용했는데, 이는 etekcity_esf551_ble==0.8.4로 감싸져 있습니다. Claude Code가 로그를 읽어보니, 통합이 연결되고 HW/SW 버전을 읽고 단위 명령(a5220305002b0163a10000, 단위 0, kg)을 작성한 후 약 0.4초 후에 연결이 끊기는 것을 보여주었습니다. 그리고 다시 연결하고 같은 과정을 반복했습니다. 체중계 위를 밟아도 알림은 전혀 오지 않았고, 모든 센서는 unavailable 상태로 남아 있었습니다.
명령어가 아무 변화가 없을 때(kg에서 kg으로)에도 이런 현상이 발생했습니다.
명령 하나만 건너뛰면 작동한다
그래서 Claude Code는 display_unit=None을 전달하고 쓰기(write) 과정을 건너뛰는 로컬 패치(local patch)를 작성했습니다. 모든 14개 센서가 채워졌습니다. 저는 또한 상위 문제점도 기록하게 했고, 이를 etekcity_esf551_ble #15에 제출했습니다.
여기까지는 라이브러리 버그를 수정하는 이야기였습니다.
단위 설정이 있는 것은 미국 매뉴얼뿐이다
저는 왜 일본 버전만 단위 스위치가 없는지 조사하게 했습니다. VeSync 앱에는 단위 설정이 없지만, 미국 매뉴얼에는 그 단계가 나와 있습니다.
뒷면 라벨을 미국 사양과 나란히 놓고 보니, 이것은 단순히 펌웨어 개정판(revision)이 아니라 다른 시장 변형(market variant)이라는 것을 알게 되었습니다. 일본의 기기와 IoT 제품에 대해 다시 한번 생각하게 되었습니다.
| US ESF-551 | 일본에서 구매한 기기 |
|---|---|
| 용량 (Capacity) | 400 lb / 180 kg |
| ... |
클로드 코드는 또한 e-Gov 법률 API에서 측정법(Measurement Act)을 가져와 읽었습니다. 제9조는 비법정 단위로 표시된 계측기(measuring instrument)의 판매 또는 판매용 전시를 금지합니다. 파운드(lb)나 스톤(st)을 표시할 수 있는 체중계는 일본에서 판매될 수 없기 때문에 제조사들은 일본 펌웨어(firmware)에서 단위 전환 기능(unit-switch feature)을 제거했습니다. 저의 체중 측정은 거래나 인증이 아니므로 제8조는 사용자에게 적용되지 않습니다. 오직 판매자만이 구속됩니다.
심지어 경제산업성(Ministry of Economy, Trade and Industry)의 2015 회계연도(FY2015) 테스트 구매 보고서에는 실제 사례가 있습니다. 파운드와 스톤이 금지되어 있다는 사실을 알지 못했던 판매자에게는 장치를 밀봉하여 전환할 수 없도록 조치하라는 지시가 내려졌습니다.
연결 끊김이 의도적인 것인지는 모릅니다
제가 아는 것은 일본 버전에서 단위 전환 기능이 없는 이유입니다. 연결 끊김 자체가 의도된 것인지, 아니면 단순히 명령을 알지 못해 링크를 부실하게 끊는 펌웨어 때문인지는 알 수 없습니다. 기능을 제거하는 것은 괜찮습니다. 단지 부주의하게 제거된 것 같다고 의심할 뿐입니다. 저는 장치가 하나뿐이라 제조사 데이터에 있는 모델 식별자(model identifier) 12가 일본 버전을 나타낸다고 말할 수는 없습니다. 상위 시스템(upstream)에 대해서는 쓰기 작업이 건너뛰어지도록 식별자 12를 display_unit_settable=False로 등록할 것을 제안하고, 그 요청은 유지보수 담당자에게 맡겼습니다.
연결이 어떻게 끊어지는지 알아보기 위해 알 수 없는 오프코드(opcode)를 보내는 실험은 아직 완료되지 않았습니다.
다음 날 수정됨
제가 문제를 제기한 다음 날, 유지보수 담당자가 답장했습니다.
일본 규정에 대해서는 흥미롭네요. 그것이 이유일 것 같습니다. 그리고 옵션 자체가 앱에 표시되지 않는 것으로 보아 거의 확신합니다.
라이브러리 v0.8.8과 HA 통합(HA integration) 0.8.3이 같은 날 출시되었습니다. 저는 통합을 0.8.3으로 업데이트하고, 로컬 패치(local patch)를 제거한 후, 체중계에 올라섰고 측정값이 들어왔습니다. 놀라울 정도로 빨랐으며, 감사하게 생각합니다.
Home Assistant를 직접 호스팅하는 것은 번거로운 일이다. 하지만 이처럼 욕실 체중계부터 조각상에 이르기까지 배울 점들을 가져다주며, 나는 그것을 하게 되어 기쁘다.
이 게시물은 AI의 도움을 받아 작성되었으며 저자가 검토했습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기