이 프로젝트에는 다양한 모델의 GPS 추적기가 장착되고 다양한 브랜드로 알려진 어린이용 스마트워치 장치와 통신하도록 설계된 서버측 및 웹 애플리케이션이 모두 포함됩니다. 예를 들어 Q50, Q60, Q80, Q90, Q100, Q360, Q523, Q730, Q750, Q8, GW100, GW100S, GW200, GW200S, GW300, GW300S, GW400S, GW400X, GW500S, GW600S, GW700, GW800, GW900, GW900S, GW1000, GW1000S, EW100, EW100S, EW200, K911, W8, W9, W10, Y3, G36 안전 키퍼, DS18, T58, T100, I8, G10, G100, D99, D100, D100S 및 기타 여러 가지. 대략적으로 말하면 SeTracker, FindMyKids 등과 같은 응용 프로그램과 동일한 작업을 수행합니다. 가장 큰 차이점은 연락처, 직위, 통신 기록 등과 같은 모든 개인 데이터는 사용자가 제어하는 하드웨어에 저장되므로 완전히 비공개라는 것입니다.
해결된 또 다른 문제는 어린이용 스마트워치 통신 및 추적 애플리케이션의 보안 모델입니다. 기본적으로 기기 식별자가 알려지면 누구나 기기 소유자임을 추가로 확인하지 않고도 기기를 제어할 수 있습니다. 기기의 휴대폰 번호를 알고 있는 경우 기기에 문자 메시지를 보내면 식별자를 쉽게 얻을 수 있습니다. 물론 비밀번호가 있지만 모든 장치에는 동일한 공장 비밀번호가 있으며 비밀번호를 변경하라는 성가신 알림이 없으므로 아무도 그렇게 하지 않습니다.
이 애플리케이션에서는 다음 보안 시나리오가 구현되었습니다.
그리고 마지막으로 중요한 것은 무료이며 광고입니다 :).
프로젝트를 구축하는 것은 다음과 같이 간단합니다.
docker compose -f docker-builder.yml run --rm builder
빌드하는 동안 https
연결에 필요한 SSL 인증서가 생성됩니다. 환경 변수 DOMAIN
및 IP
사용하여 도메인 및/또는 IP 주소를 지정할 수 있습니다.
docker compose -f docker-builder.yml run --rm -e DOMAIN=example.com -e IP=123.45.67.89 builder
원하는 경우 애플리케이션을 다양한 데이터베이스로 백업할 수 있습니다. 가장 가벼운 시나리오는 임베디드 H2 데이터베이스를 사용하는 것입니다. 이 경우 명령을 사용하여 애플리케이션을 시작할 수 있습니다.
docker compose --profile h2 up -d
컨테이너화되거나 독립형으로 PostreSQL을 사용할 수도 있습니다. 전자의 경우 명령을 사용하여 응용 프로그램을 시작할 수 있습니다
docker compose --profile pg up -d
후자의 경우 데이터베이스 URL 및 자격 증명으로 db.env
파일을 완성한 다음 명령을 실행해야 합니다.
docker compose --profile pg_ext up -d
사용 중인 Compose 버전이 프로필을 지원하지 않는 경우 각 시나리오에 전용 Compose 파일을 사용할 수 있습니다.
docker compose -f h2.yml up -d
docker compose -f pg.yml up -d
docker compose -f pg_ext.yml up -d
마지막 경우에도 데이터베이스 URL과 자격 증명을 사용하여 db.env
파일을 완성해야 합니다.
지루한 빌드 단계를 건너뛰고 릴리스에 첨부된 바이너리를 실행하는 것도 가능합니다(java 8 이상이 설치되어야 함).
java -jar kidtracker.jar
바이너리는 내장된 H2 데이터베이스를 사용하도록 구성됩니다. 작업 디렉터리에 처음 시작하면 세 개의 폴더가 생성됩니다.
data
에는 장치 위치, 전화번호 등에 대한 데이터베이스 기록이 포함되어 있습니다. 이 날짜는 기밀이므로 안전하게 보관하세요!logs
, 애플리케이션 자체 및 장치 디버깅이 활성화된 장치에 대한 로그를 포함합니다.media
이 폴더는 amr 형식의 수신 오디오를 mp3로 변환하는 데 사용됩니다. 웹 UI는 https://<hostname>:8003
에서 사용할 수 있습니다. 로그인하려면 기본 자격 증명 admin
/ password
사용하세요.
애플리케이션에 등록된 사용자에게 장치를 할당하려면 애플리케이션을 공용 네트워크에서 사용할 수 있어야 합니다. 즉, 공용 IP 주소와 연결된 도메인 이름이 있어야 합니다. 기본적으로 애플리케이션은 포트 8001
에서 장치를 수신합니다. 동일한 포트가 공용 네트워크에 매핑되어 있다고 가정합니다. 그런 다음 장치로 전송된 다음 문자 메시지를 통해 응용 프로그램에 연결되기 시작합니다.
pw,123456,ip,<public IP address or domain>,8001#
여기서 123456
기본 비밀번호이며, 아마도 장치에 설정되어 있을 것입니다. 알려진 다른 기본 비밀번호는 523681
, 54321
및 654321
입니다. 그러나 비밀번호가 변경된 경우에는 기본 비밀번호 대신 새 비밀번호를 사용해야 합니다.
기본 비밀번호를 변경하는 것이 좋습니다!
그런 다음 탐색 모음 오른쪽에 있는 버튼을 클릭한 다음 바닥글에 있는 버튼을 클릭합니다. 장치를 할당하려면 장치 식별자가 필요합니다. 장치가 애플리케이션에 연결되면 4자리 확인 토큰이 장치로 전송됩니다. 사용자가 장치를 소유하고 있는지 확인하려면 해당 토큰이 만료된 후 다음 5분 동안 팝업 양식에 이 토큰을 입력해야 합니다.
애플리케이션에 등록된 모든 사용자는 일반 사용자일 수도 있고 관리자일 수도 있습니다. 관리자는 다른 사용자를 등록할 수 있지만 일반 사용자는 등록할 수 없습니다. 이것이 유일한 차이점입니다. 관리자는 일반 사용자와 다른 관리자를 모두 생성할 수 있습니다. 기존 사용자의 경우 관리자 권한을 부여하거나 취소할 수 없으며, 수정하는 유일한 방법은 사용자 계정을 제거하고 새로 생성하는 것입니다.
보안상의 이유로 사용자 휴대폰 번호도 수정할 수 없습니다. 다시 한 번 변경하려면 사용자 계정을 제거하고 다시 만들어야 합니다. 사용자 계정을 제거하려면 해당 계정에서 모든 장치를 할당 해제해야 합니다.
처음 실행하면 로그인 admin
및 비밀번호 password
와 함께 관리자 권한을 가진 기본 사용자 계정이 있습니다. 다른 사용자 계정이 생성되면 이 계정을 제거하거나 기본 비밀번호를 변경하는 것이 좋습니다. 관리자 권한이 있는 계정이 하나만 있으면 제거할 수 없습니다. 기본 관리자 계정에는 유효한 휴대폰 번호가 없으며 장치를 할당할 수 없습니다.
장치는 메시지를 통해 애플리케이션과 통신합니다. 메시지에는 여러 유형이 있으며 일부는 장치 위치 및 경고에 대한 정보를 제공할 수 있고 다른 일부는 실제 배터리 충전량 및 만보계 값을 포함합니다.
일부 메시지는 애플리케이션에서 장치로 전송되어 여러 작업을 수행하거나 설정을 수정하도록 할 수도 있습니다. 장치가 메시지를 받았는지 확인하기 위해 응용 프로그램에 확인 메시지를 다시 보냅니다. 확인 메시지를 기다리는 동안 UI는 차단된 상태로 유지됩니다. 10초(구성 가능) 내에 확인이 수신되지 않으면 초기 메시지는 확인되지 않은 것으로 간주됩니다.
할당된 모든 장치의 위치 마커는 사용자 위치 마커와 함께 동일한 지도를 공유합니다. 장치 마커에는 마지막으로 알려진 위치 시간, 배터리 충전량, 보수계 값 및 최종 장치 이륙 경고, 배터리 부족 경고, 연결 끊김 경고 및 사용되지 않는 위치 경고에 대한 정보가 포함됩니다. 장치의 마지막 메시지가 수신된 지 15분 이상이면 장치는 분실된 것으로 간주됩니다.
장치는 사용 가능한 경우 직접 GPS 데이터를 기반으로 실제 위치를 제공할 수 있으며, 직접 GPS 관찰을 사용할 수 없는 경우(주로 건물 내부 또는 전자기 잡음이 있는 경우) 마지막으로 감지된 위치를 제공할 수 있습니다. 이러한 경우 GPS 데이터
쓸모없는 것으로 간주됩니다. 수신된 위치 데이터가 더 이상 사용되지 않는 경우 오래된 데이터 경고가 표시됩니다.
배터리 부족 경고와 실제 충전량은 서로 다른 유형의 메시지로 표시됩니다. 실제 요금이 부과되는 메시지는 몇 시간 동안 보낼 수 없는 위치 및 알림이 포함된 메시지보다 더 자주(각 5분) 도착합니다. 따라서 마커에 배터리 부족 경고와 함께 배터리 충전량이 100%로 표시되는 경우가 많습니다. 이 경우 우선순위는 배터리 충전 수치이며 배터리 부족 경고는 무시될 수 있습니다.
SOS 버튼을 누르면 장치가 알람 메시지를 보냅니다. 이 경우 장치 마커는 빨간색으로 변하며, 마커를 클릭할 때까지 사이렌 소리가 재생됩니다. 마커를 클릭하면 마커가 위로 이동되고 어린이 선택이 전환됩니다. 어린이 선택이 전환되면 선택한 장치 마커가 맨 위에 표시됩니다.
장치는 오디오 메시지와 (카메라가 장착된 경우) 스냅샷을 애플리케이션에 보낼 수 있습니다. 이런 종류의 새 메시지가 도착하면 장치 마커가 파란색으로 변하고 마커를 클릭할 때까지 빈티지 전화 벨 소리가 재생됩니다. 알람의 경우와 마찬가지로 마커를 클릭하면 상단으로 이동하고 어린이 선택이 전환됩니다.
UI 타임스탬프의 어느 곳에서나 클릭할 수 있으며 클릭 한 번으로 절대 날짜 및 시간 값과 지금부터 시간 간격 사이를 전환할 수 있습니다.
채워진 상태와 연결된 상태의 두 가지 아이콘이 있습니다. 첫 번째 항목은 지도 보기가 선택한 장치 마커를 따라갈 때 채워집니다. 해당 상태는 클릭하여 전환할 수 있습니다. 지도 보기가 사용자 위치 마커를 따라갈 때 또 다른 하나가 채워집니다. 해당 상태는 클릭하여 전환할 수도 있습니다. 하나의 아이콘이 채워지면 다른 아이콘이 연결되고 그 반대의 경우도 마찬가지입니다. 지도를 드래그하면 두 아이콘이 모두 연결됩니다.
GPS를 깨우고 제공하는 명령을 클릭하면 현재 위치가 장치로 전송됩니다. 지도 보기가 장치 마커를 따라 시작되고 장치 아이콘이 채워집니다.
기기와의 채팅이 비대칭입니다. 버튼을 사용하여 문자 채팅 메시지를 장치로 보낼 수 있으며, 장치는 짧은 오디오 메시지를 보낼 수 있으며, 장치에 카메라가 장착된 경우 스냅샷도 보낼 수 있습니다. 버튼을 사용하여 장치에서 강제로 스냅샷을 찍거나 버튼을 사용하여 15초 오디오 녹음을 만들 수도 있습니다.
기록 대화 상자에서는 자정부터 다음 자정까지의 날짜 모드와 간격의 시작과 끝을 모두 사용자가 선택할 수 있는 일반 모드의 두 가지 모드로 시간 간격을 선택할 수 있습니다. 모드 간에 전환하려면 날짜 및 시간 선택기 라벨을 클릭하세요.
시간 간격을 선택하면 채팅 기록이나 보수계 및 배터리 충전 그래프가 표시될 수 있습니다. 선택한 시간 간격에 대한 장치 트랙도 지도에 표시할 수 있습니다. 오른쪽 상단 모서리에 슬라이더가 나타나며, 트랙을 따라 장치 마커를 이동하는 데 사용됩니다. 히스토리 트랙을 검사하면 히스토리 대화상자 아이콘이 로 변경됩니다. 트랙을 제거하고 온라인 마커 위치로 돌아가려면 트랙을 클릭하세요.
연락처 대화 상자에서는 기본 및 보조 장치 관리자, SOS 번호, 장치 연락처, 장치에 전화를 걸 수 있는 번호, 장치 버튼에 할당된 빠른 통화 번호를 편집할 수 있습니다. 모든 연락처 카테고리에는 채울 수 있는 슬롯 수가 고정되어 있습니다. 기본적으로 빈 슬롯은 숨겨져 있지만 대화 상자 바닥글의 버튼을 클릭하면 표시될 수 있습니다.
어린이 대화 상자를 사용하면 사용자는 어린이 장치를 할당 및 할당 해제하고, 썸을 변경하고, 장치 및 실제 상태에 대한 몇 가지 일반 정보를 얻을 수 있습니다. 왼쪽 열에는 클릭 가능한 엄지손가락이 배치되어 있으며, 이를 클릭하면 어린이 편집 대화상자가 나타납니다. 중간 열에는 장치 식별자가 있습니다. 장치가 온라인 상태이면 해당 식별자는 녹색으로 표시되고, 그렇지 않으면 빨간색으로 표시됩니다. 장치 식별자 아래에는 장치에서 마지막 메시지가 수신된 시간이 있습니다. 장치에 액세스할 수 있는 모든 사용자는 휴대폰과 함께 가장 오른쪽 열에 나열됩니다.