Uygulamalı Eğitimler

Kendi MQTT Broker'ınızla OwnTracks: Kurulum, TLS ve ACL'ler

OwnTracks uygulamasını kendi MQTT broker'ınıza bağlayın: bağlantı ayarları, 8883 portunda TLS, topic'ler, arkadaşlar için kullanıcı bazlı ACL'ler, Recorder ve testler.

Güncellendi · 9 dk okuma

Kendi MQTT Broker'ınızla OwnTracks: Kurulum, TLS ve ACL'ler

OwnTracks, telefonunuzun konumunu doğrudan bir MQTT broker'a yayınlayabilen, Android ve iOS için açık kaynaklı bir konum uygulamasıdır. Kendi broker'ınızla verileri kimin göreceğine, ne kadar süre saklanacağına ve hangi sistemlerin (Home Assistant, Node-RED, bir veritabanı) kullanacağına siz karar verirsiniz. Kurulum için uygulamada dört değer (host, port, kullanıcı adı, parola), broker tarafında da TLS ve bir ACL gerekir.

Bu rehber uygulama ayarlarını, OwnTracks'in kullandığı topic'leri ve payload'ları, arkadaşlarla paylaşım için broker ACL'lerini, OwnTracks Recorder'ı ve her adımı terminalden nasıl doğrulayacağınızı anlatıyor.

Neye ihtiyacınız var

ÖğeNedenNotlar
İnternetten erişilebilen bir MQTT brokerTelefonlar mobil ağlardan yayın yaparSelf-hosted veya yönetilen, MQTT 3.1.1 yeterli
8883 portunda TLSKonumlar kişisel veridirHerkese açık güvenilir bir sertifika en kolayıdır
Kişi başına bir kullanıcı adıTopic ve ACL'ler buna göre belirlenirBir girişi asla aile üyeleri arasında paylaşmayın
OwnTracks uygulamasıKonumu yayınlarAndroid (Google Play / F-Droid) veya iOS
İsteğe bağlı: OwnTracks RecorderGeçmişi saklar, web haritası sunarDocker imajı owntracks/recorder

Herkese açık bir test broker'ı, uygulamanın bağlanıp bağlanmadığını kontrol etmek için yeterlidir; ancak gerçek bir konum akışını paylaşılan bir endpoint'te bırakmayın: orada owntracks/# topic'ine abone olan herkes onu görür.

Uygulamayı yapılandırın

Uygulamada Preferences → Connection (Android) veya Settings (iOS) bölümünü açın ve modu HTTP'den MQTT'ye çevirin. Alan adları platforma ve sürüme göre biraz farklıdır, ancak değerler aynıdır:

AyarDeğer
ModeMQTT
Hostbroker.connectmq.com (broker'ınızın hostname'i)
Port8883
TLSAçık
Username / PasswordBu kişinin broker'ınızdaki kimlik bilgileri
Device IDTelefon için kısa bir ad, ör. pixel veya iphone
Tracker IDHaritada gösterilen iki karakter, ör. AL
Client IDVarsayılanı bırakın; cihaz başına benzersiz olmalıdır

Kaydedin, ardından haritayı aşağı çekin veya yükleme düğmesine dokunarak elle bir konum yayınlayın. Durum ekranı bağlantının kurulduğunu göstermelidir. Broker'ın kimlik bilgilerini kabul ettiğinden emin değilseniz önce dizüstü bilgisayarınızdan online MQTT istemcisi ile test edin; böylece broker sorunlarını uygulama sorunlarından ayırırsınız.

Topic'ler ve payload'lar

Kullanıcı adı alice ve device ID pixel olduğunda uygulama şunları kullanır:

OwnTracks topic'leri
owntracks/alice/pixel          location messages (_type: location), retained by default
owntracks/alice/pixel/event    region enter/leave events (_type: transition)
owntracks/alice/pixel/info     card with name and avatar (_type: card)
owntracks/alice/pixel/cmd      commands TO the phone (_type: cmd)

Bir konum mesajı şöyle görünür (alanlar kısaltılmıştır; kesin alanlar platforma ve sürüme bağlıdır):

owntracks/alice/pixel
{
  "_type": "location",
  "tid": "AL",
  "lat": 48.856613,
  "lon": 2.352222,
  "acc": 12,
  "alt": 35,
  "batt": 78,
  "conn": "m",
  "t": "u",
  "tst": 1792236000
}

tst konumun UTC zamanı, acc metre cinsinden doğruluk, batt pil seviyesi, conn bağlantı türü (w Wi-Fi, m mobil) ve t tetikleyicidir (u kullanıcı, p ping, c bölge ve diğerleri). Uygulama ayrıca ana topic'e bir Last Will mesajı (_type: lwt) kaydeder; böylece telefon beklenmedik şekilde koptuğunda aboneler bundan haberdar olur.

İzleme modu telefonun ne sıklıkla bildirim yapacağını belirler: Significant (varsayılan, pil dostu, önemli konum değişikliklerine dayalı), Move (hareket halinde sık güncelleme, daha fazla pil tüketir), Manual ve Quiet. Significant ile başlayın.

Kendi donanım takip cihazınızı yaparsanız aynı JSON'u aynı topic düzeniyle yayınlayın; telefonların yanında görünür. GPS takip cihazı eğitimi bir ESP32 ile bunu yapıyor.

Terminalden doğrulayın

Alice'in topic'lerini okuyabilen bir kullanıcının kimlik bilgileriyle abone olun:

OwnTracks trafiğini izleyin
mosquitto_sub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
  -u "$MQTT_USER" -P "$MQTT_PASS" -t 'owntracks/#' -v

Uygulamada publish'e dokunun; JSON bir iki saniye içinde görünür. Ters yönü test etmek için uzak bir komutla telefondan konum isteyin. Uzak komutların uygulamanın gelişmiş ayarlarında açık olması gerekir ve iOS'ta arka planda teslim garanti edilmez:

Telefondan konum bildirmesini isteyin
mosquitto_pub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
  -u "$MQTT_USER" -P "$MQTT_PASS" \
  -t 'owntracks/alice/pixel/cmd' -q 1 \
  -m '{"_type":"cmd","action":"reportLocation"}'

Ortalıkta dolaşmadan Recorder'ı veya bir dashboard'u test etmek için bir telefonu taklit de edebilirsiniz:

Komut satırından sahte konum gönderin
mosquitto_pub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
  -u "$MQTT_USER" -P "$MQTT_PASS" -t 'owntracks/alice/pixel' -q 1 -r \
  -m "{\"_type\":\"location\",\"tid\":\"AL\",\"lat\":48.8584,\"lon\":2.2945,\"acc\":10,\"tst\":$(date +%s)}"

ACL'ler: kim kimi görür

Uygulama varsayılan olarak owntracks/+/+ topic'ine abone olur ve aldığı her konumu bir arkadaş olarak çizer. Bu da broker'ın ACL'ini gizlilik kontrolüne dönüştürür: bir kullanıcı tam olarak okumaya yetkili olduğu topic'leri görür. Mosquitto söz diziminde:

acl_file (Mosquitto)
# every user may publish and read under its own username
pattern readwrite owntracks/%u/#

# alice and bob share locations with each other
user alice
topic read owntracks/bob/#

user bob
topic read owntracks/alice/#

# the recorder reads everyone, publishes nothing
user recorder
topic read owntracks/#

Yönetilen bir broker'da aynı kuralları kullanıcı başına topic izinleri olarak tanımlarsınız. Unutulmaması gereken iki ayrıntı:

  • Uygulamadaki kullanıcı adı topic'in ikinci seviyesiyle aynı olmalıdır; aksi halde her yayın reddedilir. Birçok broker reddedilen bir yayını istemcinin bağlantısını kesmeden düşürür; telefon bağlı görünür ama hiçbir şey gelmez. Bkz. ACL'nin sessizce reddetmesi.
  • Kuralları dışarıdan test edin: Bob olarak giriş yapın ve onunla paylaşım yapmayan birini okumayı deneyin. Bunun için kısa bir script MQTT ACL izinlerini test etme yazısında var.

Recorder ile geçmişi saklayın

OwnTracks Recorder broker'a abone olur, her konumu diske kaydeder ve bir web haritası ile HTTP API sunar. Docker imajı ortam değişkenleriyle yapılandırılır:

OwnTracks Recorder'ı çalıştırın
docker run -d --name ot-recorder -p 8083:8083 \
  -e OTR_HOST=broker.connectmq.com \
  -e OTR_PORT=8883 \
  -e OTR_USER=recorder \
  -e OTR_PASS="$MQTT_PASS" \
  -e OTR_CAFILE=/etc/ssl/certs/ca-certificates.crt \
  -v ot-store:/store \
  owntracks/recorder

Recorder'ın kendi web arayüzü için http://localhost:8083 adresini açın. Recorder'a yukarıdaki ACL'deki gibi salt okunur ayrı bir kullanıcı verin ve geçmişi ne kadar süre tutacağınıza karar verin. Buradaki 8083 portu Recorder'ın makinenizdeki HTTP portudur; broker'ın WebSocket portuyla ilgisi yoktur.

Uçtan uca şifreleme (isteğe bağlı)

OwnTracks payload'ları paylaşılan gizli bir anahtarla (libsodium) şifreleyebilir. Bu durumda broker yalnızca {"_type":"encrypted","data":"…"} görür ve Recorder dahil her okuyucunun anahtara ihtiyacı olur. Bu, verileri broker operatörüne karşı korur, ancak mesajları olağan araçlarla inceleme imkânını kaybedersiniz. Çoğu kurulum için TLS ve sıkı ACL'ler yeterlidir; artı ve eksiler için MQTT payload şifreleme yazısına bakın.

Sorun giderme

BelirtiOlası nedenÇözüm
Uygulama bağlanır bağlanmaz hata gösteriyorYanlış kullanıcı adı veya parola ya da CONNACK "Not authorized"Aynı kimlik bilgilerini online istemcide test edin; kodu reason code aracıyla arayın
TLS veya sertifika hatasıKendinden imzalı sertifika veya eksik zincirHerkese açık güvenilir bir sertifika kullanın ya da CA'nızı uygulamaya yükleyin
Bağlı ama mosquitto_sub'da hiçbir şey yokACL yayını reddediyor ya da username ≠ topic kullanıcısıBroker loglarını ve ACL desenini kontrol edin
Haritada arkadaşlar görünmüyorOnların topic'leri için okuma izni yokread kuralları ekleyin, ardından uygulamayı yeniden bağlayın
Android'de güncellemeler bir süre sonra duruyorPil optimizasyonu arka plan servisini sonlandırıyorOwnTracks'i pil optimizasyonundan hariç tutun; bkz. Android arka plan bağlantı kopmaları

Kendi broker'ınızda OwnTracks, en basit ve işe yarar MQTT kurulumlarından biridir: bir telefon, cihaz başına bir topic ve bir avuç ACL kuralı. Önce TLS'i ve kullanıcı bazlı izinleri doğru kurun, her iki yönü mosquitto_sub ve mosquitto_pub ile doğrulayın ve ancak ondan sonra Recorder'ı veya ev otomasyonu entegrasyonlarını ekleyin.

Sıkça sorulan sorular

OwnTracks hangi topic'e yayın yapar?

Varsayılan olarak uygulama konumları owntracks/<username>/<deviceID> topic'ine yayınlar; username MQTT kullanıcı adı, device ID ise uygulamada ayarlanan değerdir. Olaylar, bilgi kartları ve komutlar /event, /info ve /cmd gibi alt topic'leri kullanır.

OwnTracks kendinden imzalı sertifika kullanabilir mi?

Evet, ancak telefonun ona güvenmesi gerekir: CA sertifikanızı uygulamanın TLS ayarlarına (Android) veya cihaza (iOS) yükleyin. Let's Encrypt gibi herkese açık bir CA'dan alınan sertifika bu adımı gereksiz kılar ve 8883 portunda doğrudan çalışır.

OwnTracks'te arkadaşlar birbirini nasıl görür?

Uygulama varsayılan olarak owntracks/+/+ topic'ine abone olur ve aldığı her konumu gösterir. Dolayısıyla hangi arkadaşların görüneceğine broker'ın ACL'leri karar verir: her kullanıcıya yalnızca onu görmesi gereken kişiler üzerinde okuma izni verin.