OwnTracks와Grafana를 사용하여 오픈소스, 자체 관리형 위치 추적

소개하다.


만약 스마트폰에서 어떤 유형의 구글 서비스를 사용한다면 구글은 당신의 위치를 지속적으로 추적하고 당신의 휴대전화Timeline를 업데이트할 가능성이 높다.

( Source )
이것은 매우 멋진 기능으로 나에게 있어서 과거에 내가 갔던 곳을 되돌아보는 것은 매우 재미있다.하지만 구글이 당신의 일상을 어떻게 정확하게 추적하는지도 걱정스럽다.이것이 바로 내가 위치 추적을 닫고 프라이버시를 더욱 중시하는 방법을 채택하기로 결정한 이유이다.

너의 설정


자체적으로 위탁 관리하는 위치 추적 시스템을 구축하려면 기술 전문 분야와 몇 개의 서로 다른 소스 소프트웨어 구성 요소와 작은 서버가 그것들을 위탁 관리해야 한다.

요구 사항 / 구성 요소

  • 안드로이드 또는 iOS 스마트폰
  • 네트워크 서버(Caddy,nginx,Apache 2 등)
  • PHP>=7.x
  • MySQL 또는 MariaDB
  • 그라파나
  • 자신의 발자국



    당신의 위치를 추적하는 첫걸음은 언제 어디서나 기록하는 것입니다.대부분의 사람들이 거의 항상 스마트폰을 휴대하고 있으며, 대부분의 스마트폰은 전 세계 내비게이션 위성 시스템의 센서를 가지고 있기 때문에 선택은 명백하다.유일하게 부족한 것은 적합한 응용 프로그램이다.이곳이 OwnTracks이 작용하는 곳이다.이것은 사용자의 위치를 기록하고 사용자 정의 설정의 MQTT 에이전트나 HTTP 노드에 보내는 모바일 프로그램입니다.안드로이드(Kotlin으로 작성)뿐만 아니라 iOS(Objective-C로 작성)에도 적용되며 개발자 중심documentation이 매우 상세하다.

    ( Source )
    그것은 서로 다른 추적 기능modes을 덧붙여서 기본적으로 발송 위치의 주파수를 지정할 수 있다.이상하게도 이 패턴들은 안드로이드와 iOS에서 다르게 나타난다.
    iOS에서 추적
    안드로이드에서 추적
    이동 모드xm(기본값: 100) 또는 t초(기본값: 300) 이후
    30초마다
    패턴의 중대한 변화
    >=500미터와 >=5분 후
    >=x미터와 >=t초 후
    수동 모드
    사용자 요청에 응하다
    사용자 요청에 응하다
    조용 모드
    여태껏... 한 적이 없다
    여태껏... 한 적이 없다
    사실상, 프로그램이 장치 센서에 요청한 위치의 주파수와 발송 위치의 주파수를 구분해야 하기 때문에, 이것은 이것보다 더 복잡하다.또한 필요한 정밀도에 대해 다른 옵션(예를 들어 GPS는 더 정확하지만 사용하는 출력은 더 크다)이 있다.이 밖에 iOS에는 지역 모니터링과 iBeacon 모니터링 모드도 있다.
    나는 네가 문서를 자세히 읽고 네 스마트폰 운영체제에 따라 어떤 모델이 너에게 가장 적합한지 결정하는 것을 건의한다.하나, 그러나 안드로이드에서 다음 사용자 정의 설정 변수를 사용하여 중대한 변경을 하기로 결정했습니다.
    {
        "locatorDisplacement": 25,
        "locatorInterval": 60,
        "locatorPriority": 2
    }
    
    이것은 기본적으로 응용 프로그램에 매번 내가 25미터를 넘게 이동하지만 최대 60초마다 블록급 정밀도(100미터)로 나의 위치를 요청한다는 것을 알려준다.이 설정들은 나에게 있어서 효과가 매우 좋아서, 나는 배터리 소모에 어떤 중대한 영향을 미치는지 의식하지 못했다.

    서버측 스크립트


    클라이언트를 설정한 후에도 OwnTracks 응용 프로그램의 요청을 받을 서버 측 구성 요소가 없습니다.OwnTracks는 itRecorder를 덧붙였습니다. 이것은 C로 작성된 작고 간단한 웹 응용 프로그램입니다. 그러나 저는 그것을 별로 좋아하지 않습니다. 왜냐하면 이것은 특별히 예뻐 보이지 않고 기능이 매우 제한되어 있기 때문입니다.나는 나의 데이터를 그라파나로 가시화하고 싶다.그러나 이를 실현하려면 우선 데이터베이스에 영구화해야 한다.
    업데이트: 나는 동시에 owntracks/frontend 를 발견했는데, 이것은 녹화기의 웹 UI보다 훨씬 고급스러운 것 같다.Grafana의 대체품으로 사용하기를 원할 수도 있습니다. 이것은 설정을 더욱 쉽게 할 수 있습니다.
    심장 박동 요청의 유효 부하는 다음과 같다.
    {
      "_type": "location",
      "acc": 13,
      "alt": 163,
      "batt": 91,
      "bs": 1,
      "conn": "w",
      "created_at": 1624607444,
      "lat": 48.9995682,
      "lon": 8.3940805,
      "t": "u",
      "tid": "l3",
      "tst": 1624607139,
      "vac": 3,
      "vel": 0
    }
    
    나는 내 위치의 심장 박동을 기록하고 MySQL 데이터베이스에 쓰기 위해 곧 a little PHP script를 썼다.PHP를 지원하는 모든 웹 서버에서 실행할 수 있습니다. (제가 사용하는 것은 Caddy2php-fpm.만약 그것이 https://my.server.tld/track.php 아래에 배치된다면, 이것은 OwnTracks 응용 프로그램에서 HTTP 목표 노드로 설정해야 하는 URL입니다.또는 웹 서버 구성에서 HTTP Basic auth를 구성할 수 있습니다.OwnTrack의 클라이언트 응용 프로그램은 이러한 내장 기능을 지원합니다.

    그라바나 계기판


    마지막으로 부족한 부분은 실제 위치 데이터를 시각화하는 것입니다.저는 Grafana의 충실한 팬입니다. 낮은 노력으로 아름다운 가시화 효과를 쉽게 구축할 수 있기 때문입니다.Grafana는 MySQL과 통합되어 데이터 원본으로 사용되기 때문에 이전에 상기 스크립트에서 받은 위치 데이터를 읽을 수 있습니다.grafana-map-panel 플러그인을 사용하여 대시보드에서 지리적 데이터를 시각화할 수 있습니다.그 밖에 나는 또 다른 두 개의 도표를 추가하여 나의 속도와 휴대전화의 배터리 전량이 시간에 따라 변화하는 것을 그리는 데 사용했다.이것이 바로 그것의 최종 모습이다.

    지리적 데이터 패널은 다음과 같은 기본 SQL 질의로 생성됩니다.
    SELECT
      tst AS "time",
      lat,
      lon,
      vel
    FROM recordings
    WHERE
      $__unixEpochFilter(tst) AND
      user = '$user' AND
      device = '$device'
    ORDER BY tst
    

    결론


    그렇지!너는 이제 구글의 무료 위치 시간표를 가지고 있다.즐겁게 놀아라!
    최초 발표muetsch.io.

    좋은 웹페이지 즐겨찾기