You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

286 lines
7.6 KiB

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://dpworld/schemas/device_v2.json",
"title": "Device configuration (schema v2 — flat 정규화)",
"description": "Web Configurator ↔ dpworldapp 합의 schema. 옵션 B (Medium): type 정규화 + naming 일관성 + enum 명시, flat 구조 유지. 본 schema 는 협의용 (안) — 채택 후 양측 동시 도입 예정.",
"type": "object",
"required": [
"schema_version",
"wifi_static",
"eth_ip",
"protocol_server_ip",
"protocol_server_port"
],
"additionalProperties": false,
"properties": {
"schema_version": {
"type": "integer",
"const": 2,
"description": "본 schema 버전. v1 (legacy on/off string) ↔ v2 호환 정책은 spec §5.1 참조."
},
"wifi_static": {
"type": "boolean",
"default": false,
"description": "WiFi 정적 IP 사용 여부. v1 의 \"on\"/\"off\" → v2 의 true/false. Reader 측 deserializer 는 v1 형식도 관용 수용."
},
"wifi_ip": {
"type": "string",
"format": "ipv4",
"description": "WiFi 인터페이스 IP 주소 (정적 모드 시 사용)."
},
"wifi_netmask": {
"type": "string",
"format": "ipv4",
"description": "WiFi 서브넷 마스크."
},
"wifi_gateway": {
"type": "string",
"format": "ipv4",
"description": "WiFi 게이트웨이."
},
"wifi_dns1": {
"type": "string",
"format": "ipv4",
"description": "WiFi DNS 1."
},
"wifi_dns2": {
"type": "string",
"format": "ipv4",
"description": "WiFi DNS 2."
},
"wifi_country_code": {
"type": "string",
"pattern": "^[A-Z]{2}$",
"default": "KR",
"description": "WiFi 국가 코드 (ISO 3166-1 alpha-2)."
},
"eth_ip": {
"type": "string",
"format": "ipv4",
"description": "Ethernet IP 주소 (관리 인터페이스)."
},
"eth_netmask": {
"type": "string",
"format": "ipv4",
"description": "Ethernet 서브넷 마스크."
},
"eth_gateway": {
"type": "string",
"format": "ipv4",
"description": "Ethernet 게이트웨이."
},
"lte_ip": {
"type": "string",
"format": "ipv4",
"description": "LTE 인터페이스 IP."
},
"lte_netmask": {
"type": "string",
"format": "ipv4",
"description": "LTE 서브넷 마스크."
},
"lte_gateway": {
"type": "string",
"format": "ipv4",
"description": "LTE 게이트웨이."
},
"lte_port": {
"type": "integer",
"minimum": 1,
"maximum": 65535,
"description": "LTE 모뎀 포트. v1 의 string \"534\" → v2 의 integer 534."
},
"lte_server_ip": {
"type": "string",
"format": "ipv4",
"description": "LTE 서버 IP."
},
"lte_server_port": {
"type": "integer",
"minimum": 1,
"maximum": 65535,
"description": "LTE 서버 포트. v1 의 string \"20111\" → v2 의 integer 20111."
},
"protocol_server_ip": {
"type": "string",
"format": "ipv4",
"description": "Protocol 서버 IP (RTLS 데이터 송신 대상)."
},
"protocol_server_port": {
"type": "integer",
"minimum": 1,
"maximum": 65535,
"description": "Protocol 서버 포트."
},
"update_server_ip": {
"type": "string",
"format": "ipv4",
"description": "Firmware/Config 업데이트 서버 IP."
},
"update_server_port": {
"type": "integer",
"minimum": 1,
"maximum": 65535,
"description": "업데이트 서버 포트."
},
"rtcm_server_ip": {
"type": "string",
"format": "ipv4",
"description": "RTCM 보정 서버 IP (GNSS RTK)."
},
"rtcm_server_port": {
"type": "integer",
"minimum": 1,
"maximum": 65535,
"description": "RTCM 서버 포트."
},
"opc_ua_server_ip": {
"type": "string",
"format": "ipv4",
"description": "OPC-UA 서버 IP."
},
"opc_ua_server_port": {
"type": "integer",
"minimum": 1,
"maximum": 65535,
"description": "OPC-UA 서버 포트."
},
"modbus_server_ip": {
"type": "string",
"format": "ipv4",
"description": "Modbus 서버 IP."
},
"modbus_server_port": {
"type": "integer",
"minimum": 1,
"maximum": 65535,
"description": "Modbus 서버 포트."
},
"can_bus_type": {
"type": "string",
"enum": ["extended", "standard"],
"default": "extended",
"description": "CAN bus 타입."
},
"can_baudrate": {
"type": "integer",
"enum": [100, 250, 500, 1000],
"description": "CAN 통신 속도 (kbps). 운영 ground truth 일치."
},
"rs485_mode": {
"type": "string",
"enum": ["half", "full"],
"default": "half",
"description": "RS-485 통신 모드."
},
"rs485_baudrate": {
"type": "integer",
"enum": [1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200],
"default": 9600,
"description": "RS-485 통신 속도 (bps)."
},
"rs485_databits": {
"type": "integer",
"enum": [5, 6, 7, 8, 9],
"default": 8,
"description": "RS-485 데이터 비트."
},
"rs485_parity": {
"type": "string",
"enum": ["no", "even", "odd"],
"default": "no",
"description": "RS-485 패리티."
},
"rs485_stopbits": {
"type": "integer",
"enum": [0, 1, 2],
"default": 1,
"description": "RS-485 정지 비트."
},
"imu_remap_x": {
"type": "string",
"enum": ["x", "y", "z"],
"default": "x",
"description": "IMU X 축 매핑."
},
"imu_remap_y": {
"type": "string",
"enum": ["x", "y", "z"],
"default": "y",
"description": "IMU Y 축 매핑."
},
"imu_remap_z": {
"type": "string",
"enum": ["x", "y", "z"],
"default": "z",
"description": "IMU Z 축 매핑."
},
"imu_remap_x_sign": {
"type": "string",
"enum": ["plus", "minus"],
"default": "plus",
"description": "IMU X 축 부호."
},
"imu_remap_y_sign": {
"type": "string",
"enum": ["plus", "minus"],
"default": "plus",
"description": "IMU Y 축 부호."
},
"imu_remap_z_sign": {
"type": "string",
"enum": ["plus", "minus"],
"default": "plus",
"description": "IMU Z 축 부호."
},
"log_save": {
"type": "boolean",
"default": true,
"description": "로그 저장 여부. v1 의 \"on\"/\"off\" → v2 의 true/false."
},
"log_max_size": {
"type": "integer",
"minimum": 1,
"description": "로그 파일 최대 크기 (MB)."
},
"log_max_duration": {
"type": "integer",
"minimum": 1,
"description": "로그 파일 최대 보관 기간 (일)."
},
"ssid_list": {
"type": "array",
"description": "WiFi 연결 후보 SSID 목록 (우선순위 순). v1 의 'WIFI_SSID' upper-case → v2 의 ssid_list snake_case.",
"items": {
"type": "object",
"required": ["wifi_ssid", "wifi_security"],
"additionalProperties": false,
"properties": {
"wifi_ssid": {
"type": "string",
"description": "SSID 이름."
},
"wifi_passwd": {
"type": "string",
"description": "WiFi 비밀번호. security 가 'none' 이면 빈 string 가능."
},
"wifi_security": {
"type": "string",
"enum": ["wpa/wpa2", "wpa3", "wep", "none"],
"description": "WiFi 보안 방식."
}
}
}
}
}
}