연동 규격
관제 PC와 현장 앱이 진열장 컨트롤러와 주고받는 명령·이벤트 규격입니다.
8-1. RS485 / Modbus RTU (관제 PC ↔ 컨트롤러)
19,200bps · 8N1 · 버스당 최대 32대 · 폴링 2.0초 · 응답 대기 300ms · 3회 연속 무응답 시 통신 끊김
| 주소 | 종류 | 이름 | 단위·값 |
|---|---|---|---|
| 30001 | 입력 | 온도 | 0.1℃ |
| 30002 | 입력 | 상대습도 | 0.1% |
| 30003 | 입력 | 조도 | lx |
| 30004 | 입력 | CO2 | ppm |
| 30005 | 입력 | 문 상태 | 0 닫힘 · 1 열림 · 2 움직이는 중 · 3 정지 |
| 30006 | 입력 | 잠금 상태 | 0 잠김 · 1 해제 |
| 30007 | 입력 | 이벤트 번호(최신) | 0~65535 |
| 30010~30029 | 입력 | 이벤트 버퍼(최근 4건) | 번호·시각·경로·사용자·동작 |
| 40001 | 보유 | 명령 | 1 열기 · 2 정지 · 3 닫기 · 4 잠금 · 5 해제 |
| 40002 | 보유 | 명령 사용자 번호 | 사용자 ID |
| 40003~40004 | 보유 | 명령 확인값 | 1회용 |
컨트롤러 이벤트 버퍼를 관제 PC가 읽어 감사로그와 대조합니다. 현장 앱이 BLE로 연 기록도 컨트롤러가 자체 보관하므로, 휴대폰을 잃어버리거나 동기화가 안 돼도 기록이 빠지지 않습니다.
8-2. BLE (현장 앱 ↔ 컨트롤러)
제어 가능 조건: 인증 성공 + 신호 -75dBm 이상 + 역할 권한
| 항목 | 내용 |
|---|---|
| 광고 이름 | VTR- + 진열장 번호 (예: VTR-2-03) |
| 서비스 | Showcase Control |
| STATUS (알림) | 문·잠금·환경 값, 1초 주기 |
| AUTH (쓰기·알림) | 도전값–응답 인증, 세션 키 |
| CMD (쓰기) | 명령 + 1회용 토큰 + 사용자 번호 |
| EVENT (알림) | 동작 결과, 컨트롤러 이벤트 번호 |
명령마다 1회용 토큰을 사용하므로, 다른 BLE 앱이나 같은 명령의 재전송으로는 진열장을 열 수 없습니다.
8-3. 가상 컨트롤러
위 규격 그대로 응답하는 가상 진열장 24대. 이 데모 화면이 이 가상 컨트롤러로 동작합니다. 실제 진열장이 나오기 전에도 관제·앱 개발과 테스트를 진행하고, 실물이 나오면 같은 규격으로 바꿔 끼웁니다.
8-4. 하드웨어·펌웨어 분담 2안
A안 · 소프트웨어만
발주사
진열장, IoT 모듈, ESP32 펌웨어 전체
저희
관제·앱·로컬 DB, 규격서, 가상 컨트롤러
맞는 경우
발주사에 펌웨어 개발자가 있을 때
연결 지점
규격서(8-1·8-2)
B안 · 펌웨어 통신부 포함
발주사
진열장, IoT 모듈, 센서·모터·잠금 제어
저희
A안 + ESP32 펌웨어의 BLE·Modbus 통신 계층
맞는 경우
통신 규격을 한쪽에서 끝까지 책임지게 하고 싶을 때
연결 지점
펌웨어 안 함수 경계(명령 실행·센서 읽기)