🌐

APRS-Agent

Kullanım Kılavuzu

APRS-Agent Nedir?

APRS-Agent, bir APRS-IS istemcisidir. Telsiz istasyonunuzun konumunu ve mesajlarını İnternete bağlayan APRS-IS ağına bilgisayar üzerinden bağlanır.

Kısaca şunları yapabilir:

📡 Bilgi: Radyo lisansınız gereklidir APRS-IS'e bağlanmak için geçerli bir amatör telsiz çağrı işareti ve buna ait APRS-IS parolası (passcode) gerekmektedir. Passcode otomatik hesaplanır — sizin bir şey yapmanız gerekmez.
🖥️ Web GUI mi, Masaüstü GUI mi? Program iki arayüzle gelir: tarayıcı tabanlı Web GUI (herhangi bir işletim sisteminde çalışır, telefondan da erişilebilir) ve Windows'a özel Masaüstü GUI (tkinter, sistem tepsisi ikonu). Masaüstü GUI v2.8.0'dan itibaren özellik olarak donduruldu — hâlâ çalışır ve paket ayrıştırma/istasyon veritabanı iyileştirmelerini otomatik alır, ama Harita, Sessizlik Haritası, Mesajlar sekmesi ve Herkese Açık İzleme Sayfası gibi yeni özellikler sadece Web GUI'de bulunur. Yeni kurulumlar için Web GUI (aprs-agent-web.exe veya python web_gui.py) önerilir.

Hızlı Başlangıç – Adım Adım

  1. Programı çalıştırın: python web_gui.py ya da aprs-agent-web.exe (önerilen) — tarayıcınız otomatik olarak http://localhost:8080 adresini açar. Masaüstü GUI'yi kullanmak isterseniz python gui.py ya da aprs-agent-gui.exe.
  2. Bağlantı sekmesine gidin. Çağrı işaretinizi girin (zorunlu).
  3. İstediğiniz eklentileri etkinleştirin (Logger, Sabit Konum vb.) ve ayarlarını doldurun.
  4. 💾 Ayarları Kaydet butonuna tıklayın.
  5. ▶ Başlat butonuna tıklayın. Log penceresinde "TA1ABC verified" gibi bir mesaj görürseniz bağlantı başarılıdır.
Kaydet, çalışan ajanı yeniden başlatmaz. Ajan zaten çalışırken bir ayarı değiştirip (ör. AI sağlayıcısı, bildirim kanalı) Kaydet'e basarsanız, değişiklik dosyaya yazılır ama çalışan ajan bunu görmez — devreye girmesi için ■ Durdur sonra ▶ Başlat gerekir. Web GUI çalışırken Kaydet'e basıldığında log penceresinde bu hatırlatmayı gösterir.

Bağlantı Sekmesi

🔌 Bağlantı
AlanAçıklamaDurum
APRS-IS Sunucusu Varsayılan değer (rotate.aprs2.net) genellikle en iyisidir. Değiştirmenize gerek yok. İsteğe bağlı
Port Standart filtreli bağlantı portu: 14580. Değiştirmeyin. İsteğe bağlı
Çağrı İşareti Kendi çağrı işaretinizi girin. Örnek: TA1ABC Zorunlu
İstasyon Filtresi Hangi istasyonlardan gelen paketleri görmek istediğinizi belirler. Joker karakter kullanılabilir: TA* (TA ile başlayan herkes, birden çok önek virgülle ayrılabilir: TA*, TB*, YM*). Zorunlu
Tüm Dünya Akışı Açılırsa İstasyon Filtresi yok sayılır ve dünyadaki tüm APRS-IS trafiği alınır (port 10152, ~50-100 paket/sn). Sessizlik Haritası'nı tek bir bölgeyle sınırlamak istemiyorsanız (örn. tüm dünyayı izlemek için) kullanılır. Açıksanız aşağıdaki hız sınırını ayarlamanız önerilir. İsteğe bağlı
Hız sınırı (pkt/sn) Eklentilere (Logger, AI Gateway, Sessizlik tespiti vb.) saniyede en fazla kaç paket iletileceği. Sadece Tüm Dünya Akışı ile birlikte önemlidir — ham APRS-IS bağlantısının kendisi hiçbir zaman kısıtlanmaz. 0 = sınırsız. İsteğe bağlı
Otomatik Başlat Program açılırken ▶ Başlat butonuna basmayı beklemeden APRS-IS'e otomatik bağlanır. Arka planda servis olarak çalıştırırken kullanışlıdır. İsteğe bağlı

Logger Sekmesi

📋 Logger

Gelen APRS paketlerini ekranın alt kısmındaki log penceresinde gösterir.

AlanAçıklamaDurum
Logger'ı Etkinleştir Log penceresini açar. Neyin geldiğini görmek için açık bırakın. İsteğe bağlı
Paket türü filtresi Sadece belirli tipteki paketleri göstermek için. Boş bırakırsanız her şey gösterilir. İsteğe bağlı
Anahtar kelime filtresi Sadece belirli bir kelime içeren paketleri göstermek için. Boş bırakırsanız her şey gösterilir. İsteğe bağlı

Sabit Konum (Fixed Beacon) Sekmesi

📍 Sabit Konum Yayını

Bu sekme, istasyonunuzun konumunu APRS-IS ağına düzenli aralıklarla gönderir. Böylece aprs.fi gibi haritalar üzerinde görünürsünüz.

AlanAçıklamaDurum
Sabit Konum Yayınını Etkinleştir Bu seçeneği işaretleyin. Zorunlu
QTH Locator Maidenhead grid karesi. Örnek: KM38nk
Girdiğinizde Enlem/Boylam otomatik doldurulur.
Kolay giriş
Enlem / Boylam QTH Locator girmek yerine doğrudan da yazabilirsiniz.
Format: 3826.25N / 02707.50E
Zorunlu
İstasyon SSID Çağrı işaretiniz + SSID. Örnek: TA1ABC-10
SSID -1 ile -15 arasında herhangi bir sayı olabilir.
Zorunlu
Sembol Sembol Seç… butonuyla haritada görünmek istediğiniz simgeyi seçin. Ev için -, araba için >, hava istasyonu için _ kullanılır. Zorunlu
Beacon açıklaması aprs.fi haritasında adınızın yanında görünecek kısa metin. Örnek: TA1ABC Home Station İsteğe bağlı
Gönderim aralığı (dakika) Kaç dakikada bir konum gönderileceği. Önerilen: 15 dakika. İsteğe bağlı
💡 QTH Locator'ınızı bilmiyor musunuz? levinecentral.com/ham/grid_square.php adresine gidin, haritada yerinize tıklayın.
ℹ️ Kendi beacon'ınız haritada Web GUI'nin Harita sekmesinde kendi istasyonunuz "your station" rozetiyle görünür, ama Sessizlik Haritası'nda bir sensör olarak sayılmaz — çünkü kendi beacon'ınız istasyonun bulunduğu yerdeki gerçek durumdan bağımsız olarak yayın yapmaya devam eder (agent farklı bir sunucuda çalışıyor olabilir).

İstasyonlar ve Harita Web GUI

📊 İstasyonlar Sekmesi

APRS-IS'ten duyulan her istasyonu canlı bir tablo olarak listeler — tür, konum, kuruluş, frekans, çevrimiçi/çevrimdışı durumu ve son duyulma zamanı. Bir satıra tıklayarak koordinatlar, ton, EchoLink, hava durumu ve AI analiz sonuçlarını gösteren bir detay paneli açabilirsiniz. Tür/durum/arama filtreleri ile listeyi daraltabilirsiniz.

🌍 Dünya modunda kırpma Tüm Dünya Akışı açıkken kayıt sayısı on binleri bulabilir; tablo ve liste bu durumda en yeni 4000 istasyonla sınırlanır (sayaç toplam sayıyı gösterir). Detay paneli her zaman güncel, eksiksiz kaydı çeker.
🗺️ Harita Sekmesi

Duyulan tüm istasyonların canlı konumunu, gerçek APRS sembol setiyle (aprs.fi ile aynı sprite'lar) bir Leaflet haritasında gösterir. Kırmızı kareler bir bölgede çok sayıda istasyonun aynı anda susmasını (olası elektrik kesintisi), amber kareler ise sadece o bölgenin igate'inin düştüğünü işaret eder — bkz. aşağıdaki Sessizlik Haritası.

Kesikli çizgiler alışılmadık uzunlukta gerçekleşmiş telsiz linkleridir — olası bant açılması (bkz. aşağıdaki RF Propagasyon Takibi). Renk mesafeyle koyulaşır: yeşil < 600 km, mavi < 1200 km, mor üzeri.

Haritanın altındaki zaman çizelgesi son 14 günün anlık görüntülerinde geriye gidip önceki uyarıları tekrar oynatmanızı sağlar; ▶ ile otomatik oynatma yapabilirsiniz. Kayıtlı bir açılmanın yakınına gelindiğinde o açılmanın linkleri de haritada belirir.

🌍 Dünya modunda kümeleme 2000'den fazla istasyon haritaya düşünce görünüm otomatik değişir: uzak zoom'da sayı rozetli kümeler (tıklayınca yakınlaşır), yakın zoom'da ise o an göründüğünüz bölgenin tüm istasyonları sunucudan çekilir. 2000'in altında (örn. sadece Türkiye izlerken) davranış eskisiyle birebir aynıdır.

Sessizlik Haritası ve İzleme

🔴 Sessizlik Tespiti

Her istasyonun kendi beacon aralığına göre bir "normal" temposu öğrenilir. Bir Maidenhead karesinde (4 karakter, örn. KM38) normalde aktif istasyonların büyük kısmı (aynı operatörün birden çok telsizi tek sayılır) aynı anda beklenenden çok daha uzun süre sessiz kalırsa, bu bölge olası elektrik kesintisi olarak işaretlenir. Eğer sessiz kalan tüm istasyonlar tek bir igate üzerinden geliyorsa ve o igate de sessizse, sebep igate arızası olarak ayırt edilir.

AI Gateway yapılandırılmışsa, her yeni uyarı için yapay zekadan kısa bir değerlendirme istenir (harita popup'larında ve Telegram/e-posta bildirimlerinde görünür). Aynı hücre 3 saat içinde tekrar susup tekrar alarm verirse (kararsız/"flapping" bölge), yeni bir AI çağrısı yapılmaz — önceki değerlendirme yeniden kullanılır; bu, geniş alan izlemede AI kullanımını gereksiz yere katlamaz. Olay/uyarı yayınları, hangi biçimde geldiklerine bakılmaksızın sessizlik sensörü olarak sayılmaz. APRS Object paketleri (örn. acil durum servislerinin yangın uyarıları) tasarım gereği süresi dolunca kaybolur; hava servisi uyarıları ise normal istasyon olarak gelir — uyarı yürürlükteyken yayın yapar, aradaki günlerde susar. Sessizlik tespiti tempoya dayanır, bu yayınların ise bir temposu yoktur.

AlanAçıklamaDurum
Sessizlik haritası bölgesi Sessizlik tespitinin sınırlandığı Maidenhead alanları (ilk 2 karakter). Bir önek filtresi (örn. TA*) yurt dışındaki çağrı işaretlerini de yakalayabilir; bu ayar olmadan onların kesintileri de uyarı üretir. Örnek: Türkiye için KM, KN, LM, LN. Boş bırakılırsa tüm dünya izlenir. İsteğe bağlı
Sessizlik uyarı özeti (dk) Sessizlik uyarılarını N dakikada bir tek birleşik bildirim olarak gönderir, her uyarı için ayrı mesaj atmak yerine. Bölge boş (tüm dünya) bırakıldığında kanalın uyarıya boğulmaması için önerilir. 0 = her uyarı anında gönderilir. İsteğe bağlı
🔔 Röle İzleyici

Aşağıdaki Türkiye Röle Veritabanı'ndaki röleleri izler; bir röle çevrimdışı olduğunda veya geri geldiğinde Telegram/e-posta ile bildirim gönderir. Röle DB Dosyası ayarının yapılmış olması gerekir.

AlanAçıklamaDurum
Röle İzleyiciBu özelliği etkinleştirir.Zorunlu
Bildirim kanalıtelegram veya smtp.Zorunlu
Kontrol aralığı (dk)Röle durumu kaç dakikada bir kontrol edilsin. Varsayılan: 10.İsteğe bağlı
İzlenecek çağrı işaretleriVirgülle ayrılmış çağrı işaretleri. Boş bırakılırsa veritabanındaki tüm röleler izlenir.İsteğe bağlı
Örnek bildirim 🔴 YM1ABC şu an ÇEVRİMDIŞI (son duyulma 1s 23dk önce)
Adana · 145.7000 MHz · FM

RF Propagasyon Takibi

📡 Bant Açılması Tespiti

Bir igate'in RF üzerinden duyup APRS-IS'e aktardığı her paket (qAR/qAO), uzunluğu tam olarak bilinen gerçekleşmiş bir telsiz linkidir: gönderenin paketteki konumu ile igate'in konumu arası mesafe. VHF/UHF'te normal menzil ~50–150 km'dir; aynı bölgede linkler topluca çok daha uzağa uzanmaya başlarsa bu, troposferik kanal veya Sporadik-E açılmasının doğrudan kanıtıdır.

Her gate için "normalde ne kadar uzaktan duyar" temposu otomatik öğrenilir — dağ tepesindeki bir LoRa gate'in rutin uzun linkleri alarm üretmez, ama aynı gate'in kendi normalinin çok üstüne çıkması üretir. Anormal linkler haritada kesikli çizgiler olarak görünür. Aynı Maidenhead alanında 30 dakika içinde en az iki FARKLI gönderenden anormal link gelirse bu bir açılma olayı olur: bildirim kanalına "📡 BAND OPENING" mesajı gider, AI Gateway ayarlıysa kısa bir değerlendirme eklenir (tropo / Sporadik-E / aurora — aynı bölge 3 saat içinde tekrar açılırsa yeni bir AI çağrısı yapılmadan önceki değerlendirme yeniden kullanılır) ve olay 14 gün boyunca zaman çizelgesinden tekrar oynatılabilir.

ℹ️ Neden tek uzun link olay sayılmaz? Yanlış yapılandırılmış tek bir GPS istediği mesafeyi "uydurabilirsiniz"; iki bağımsız istasyon aynı bölgede aynı anda uyduramaz. Ayrıca internet kaynaklı paketler (TCPIP), digipeat'li paketler, Object'ler, 3000 m üzerindeki balonlar (görüş hattı geometrisi, propagasyon değil) ve 5000 km üzeri veri hataları hiç sayılmaz. Ayrıca her seferinde aynı mesafeyi ölçen bir gate'in tekrarlanan linki açılma kuralına girmez — bu propagasyon değil, sabit bir konum hatasıdır.

Tespit her zaman açıktır ve haritada dünya çapında görünür. Ancak bildirimi kendi bölgenizle sınırlamak isterseniz Monitor bölümündeki Propagasyon bildirim bölgesi ayarını kullanın (örn. Türkiye için KM, KN, LM, LN) — açılmadaki linklerin herhangi bir ucu bu alanlara düşerse bildirim gelir, düşmezse harita yine gösterir ama Telegram/e-posta sessiz kalır. Kıtalar arası bir açılma (örn. Güney Afrika → Türkiye gate'i) bile, sizin bölgenizi içerdiği için yine bildirilir.

Türkiye Röle Veritabanı

🗄️ Röle DB Dosyası

İstasyonlar sekmesini şehir, ilçe, frekans, CTCSS tonu, bant ve mod bilgisiyle zenginleştirir — canlı bir paket gerekmeden, sadece çağrı işareti eşleşmesiyle çalışır. Güncel veritabanını Turkey Repeaters projesinden indirebilirsiniz. Röle İzleyici de bu dosyayı kullanır.

AlanAçıklamaDurum
Röle DB Dosyasıİndirdiğiniz JSON dosyasının tam yolu.İsteğe bağlı

AI İstasyon Analizi

🤖 AI İstasyon Analizi

Duyulan istasyonların beacon yorumlarını periyodik olarak yapay zekaya göndererek kulüp/kurum adını ve kısa bir açıklamayı otomatik çıkarır; sonuçlar İstasyonlar sekmesinin Organization sütununda ve detay panelinde görünür. AI Gateway'in yapılandırılmış olması gerekir (aynı sağlayıcı/API anahtarı tekrar kullanılır). Her istasyon oturum başına bir kez analiz edilir; tatil/bayram gibi geçici mesajlar token boşa harcamamak için otomatik atlanır.

AlanAçıklamaDurum
AI İstasyon AnaliziBu özelliği etkinleştirir.Zorunlu
Her (saat) çalışKaç saatte bir yeni bir tur çalışsın. Varsayılan: 24.İsteğe bağlı
Her turda maksimumBir turda en fazla kaç istasyonun analiz edileceği. Varsayılan: 20.İsteğe bağlı

Twitter / X Sekmesi

🐦 Twitter / X Entegrasyonu

Size gelen bir APRS mesajı (belirli bir takma ada — örn. TWSEND — gönderilmiş) otomatik olarak Twitter/X hesabınıza tweet atılır.

⚠️ Twitter API anahtarı gereklidir Bunun için Twitter/X Developer Portal'dan (developer.twitter.com) bir uygulama oluşturmanız ve dört adet anahtar/token almanız gerekir. Bu bir seferlik bir işlemdir.
AlanAçıklamaDurum
API Key / SecretTwitter uygulamanızın kimlik bilgileri.Zorunlu
Access Token / SecretHesabınızın erişim jetonları.Zorunlu
İzin verilen APRS alıcılarıHangi APRS takma ada (addressee) gönderildiğinde tweet atılacak. Varsayılan: TWSENDZorunlu
İzin verilen APRS göndericileriHangi çağrı işaretlerinden gelen mesajları işleyeceği. Kendi çağrı işaretinizi yazın.Zorunlu

Bluesky Sekmesi

🦋 Bluesky Entegrasyonu

Size gelen bir APRS mesajı (belirli bir takma ada — örn. BSKYSEND — gönderilmiş) otomatik olarak Bluesky hesabınıza post olarak atılır.

✅ Ücretsiz API — ödeme gerekmez Twitter/X'in aksine Bluesky API tamamen ücretsizdir. Sadece bir Uygulama Şifresi (App Password) oluşturmanız yeterlidir: bsky.app → Ayarlar → App Passwords
AlanAçıklamaDurum
Kullanıcı adıBluesky handle'ınız. Örnek: adiniz.bsky.socialZorunlu
Uygulama ŞifresiApp Password (ana şifreniz DEĞİL). bsky.app → Ayarlar → App Passwords'tan oluşturun.Zorunlu
İzin verilen APRS alıcılarıHangi APRS takma ada gönderildiğinde post atılacak. Varsayılan: BSKYSENDZorunlu
İzin verilen APRS göndericileriHangi çağrı işaretlerinden gelen mesajları işleyeceği. Kendi çağrı işaretinizi yazın.Zorunlu

WhatsApp Sekmesi

📱 WhatsApp Entegrasyonu

Meta Cloud API üzerinden çift yönlü APRS ↔ WhatsApp mesajlaşması sağlar. Size gelen bir APRS mesajı (belirli bir takma ada gönderilmiş) WhatsApp'a iletilir; WhatsApp'tan ÇAĞRI-İŞARETİ Mesaj formatında yazılan bir mesaj da APRS'e gönderilir.

⚠️ Meta Business hesabı gereklidir Meta Business panelinden bir WhatsApp uygulaması oluşturup Telefon Numarası ID ve Erişim Token almanız, ayrıca gelen mesajlar için webhook adresinizi (https://SUNUCUNUZ/webhook/whatsapp) Meta'ya kaydetmeniz gerekir.
AlanAçıklamaDurum
Telefon Numarası IDMeta Business panelinden.Zorunlu
Erişim TokenMeta Business panelinden.Zorunlu
Webhook Doğrulama TokenKendi belirlediğiniz bir dize — Meta webhook ayarıyla eşleşmeli.Zorunlu
Alıcı TelefonGiden mesajlar için varsayılan WhatsApp numarası.Zorunlu
İzin verilen APRS alıcıları / göndericileriAPRS → WhatsApp yönü için takma ad ve çağrı işareti filtreleri.Zorunlu
Gönderen çağrı işaretiWhatsApp → APRS yönünde kullanılacak SSID.İsteğe bağlı
İzin verilen telefon numaralarıSadece bu numaralar APRS'i tetikleyebilir. Boş = herkes.İsteğe bağlı

Telegram Sekmesi

💬 Telegram Entegrasyonu

Çift yönlü APRS ↔ Telegram mesajlaşması sağlar — tamamen ücretsiz, webhook gerekmez (Telegram'ın bot API'si yoklanarak/polling ile çalışır). Sessizlik Haritası uyarıları da bu kanaldan gönderilebilir (bkz. Monitor).

🤖 Bot Token nasıl alınır? Telegram'da @BotFather ile konuşup /newbot komutunu verin. Chat ID'nizi öğrenmek için @userinfobot ile konuşabilirsiniz.
AlanAçıklamaDurum
Bot Token@BotFather'dan alınır.Zorunlu
Chat IDTelegram kullanıcı veya grup ID'niz.Zorunlu
İzin verilen APRS alıcıları / göndericileriAPRS → Telegram yönü için takma ad ve çağrı işareti filtreleri. Varsayılan takma ad: TGSENDZorunlu
Telegram'ı yoklaTelegram → APRS yönünü açar: bot chat'ine ÇAĞRI-İŞARETİ Mesaj yazarak APRS'e gönderebilirsiniz.İsteğe bağlı
Yoklama aralığı (sn)Telegram'ın kaç saniyede bir kontrol edileceği. Varsayılan: 5.İsteğe bağlı
⚠️ Bir bot token'ı yalnızca tek bir agent tarafından dinlenebilir Aynı bot token'ıyla iki agent (örn. hem ev bilgisayarınız hem bir sunucu) aynı anda "Telegram'ı yokla" ile çalışırsa Telegram 409 Conflict hatası verir. Sadece birini polling modunda açık tutun.

AI Gateway Sekmesi

Başka istasyonlar hakkındaki sorular

Geçit, kendi kayıt defterinden cevap verebilir: en yakın igate, bir istasyonun son konumu, ne zaman duyulduğu ve sorana uzaklığı. APRS konumları görülmek üzere yayınlanır ve aprs.fi yıllardır aynı bilgiyi sunar; burada reddetmek kimseyi korumaz.

Cevabın sınırı şudur: tek bir gözlem. İsim yok, lisans kaydı yok, adres yok, geçmiş özeti yok. Çağrı işaretini bir kişiye çeviren adım atılmaz.

Çıkmak isteyen çıkar. Geçide NOLOOKUP yazan istasyon, başkalarının sorularında yer almaz; LOOKUP ile geri döner. Kendi konumunuzu sormanız her zaman çalışır ve beacon'larınız aprs.fi'de zaten herkese açık kalır.

Kimlik ve sorumluluk

Geçit alıcı adı bir çağrı işareti değildir. Bir istasyonu değil, bir yazılımı tanımlar; hiçbir otorite tarafından verilmez ve verilmesi gerekmez. Çağrı işaretiyle karıştırılması da mümkün değildir: tahsisli bir çağrı işareti rakam içerir, bu servis adları içermez.

Ajan verici sürmez. APRS-IS ağına TCP üzerinden bağlanan bir istemcidir; oturum operatörün kendi çağrı işareti ve erişim koduyla kimliklendirilir, ürettiği paketler internet kaynağını belirten TCPIP* yolunu taşır. Bir cevap RF'e ulaşıyorsa onu yayınlayan istasyon bir igate'tir; kendi lisansı ve kendi çağrı işaretiyle yayın yapar ve o yayından o operatör sorumludur. Bu, APRS mesajlaşmasının olağan üçüncü taraf trafiği modelidir.

Geçidi işleten kişiye kalan üç şey:

Yapay zekâyı amatör telsizde çalıştırmak yeni bir uygulamadır, kuralsız bir alan değil. Mevcut kurallar içeriği kaynağından bağımsız olarak kapsar ve istasyondan operatör sorumludur. Hedefte deneysel, uyumda alışıldık olun.

⚠️ Yazdığınız her şey herkese açıktır Amatör telsizde haberleşme açık yapılır; şifreleme veya anlamı gizleme amaçlı kodlama yasaktır (ITU Radyo Tüzüğü, amatör servise ayrılmış 25. Madde; Amatör Telsizcilik Yönetmeliği). Bu, AI Gateway için şu anlama gelir: gelen soru da gönderilen cevap da RF'de açık olarak yayılır ve APRS-IS üzerinden internete geçer. aprs.fi gibi siteler bu trafiği toplar, aranabilir hâlde saklar ve yıllarca tutar. Yani geçidinizle yazışan herkesin yazdığı her şey halka açık, aranabilir ve pratikte silinemezdir.
🤖 AI Gateway

Gelen APRS mesajlarına yapay zeka ile otomatik yanıt verir. Mesaj yapılandırılmış çağrı işaretine gönderildiğinde AI sağlayıcıya sorulur ve cevap APRS mesajı olarak geri gönderilir. Aynı sağlayıcı/API anahtarı AI İstasyon Analizi ve Sessizlik Haritası değerlendirmeleri tarafından da kullanılır.

✅ Ücretsiz seçenekler mevcut Puter tamamen ücretsiz bir AI sağlayıcıdır. Groq ve OpenRouter'da da ücretsiz modeller bulunmaktadır.
AlanAçıklamaDurum
AI Çağrı İşaretiBu çağrı işaretine gönderilen mesajlar AI yanıtı tetikler. SSID dikkate alınmadan eşleştirilir; TA1ABC olarak ayarlanmış bir geçide TA1ABC-1 adresine yazan da ulaşır.Zorunlu
Tetikleme Takma AdlarıBu geçidin ayrıca cevapladığı ek alıcı adları, virgülle ayrılır. APRS alıcı alanı her hâlükârda sabit 9 karakterdir; kısa bir takma ad havada bayt kazandırmaz, el telsizi tuş takımında basış kazandırır — orada bir rakam dört basışa mal olur. Emin değilseniz boş bırakın: APRS-IS tek bir dünya akışıdır, alıcı adı kimseye tahsis edilmez, ilk yazan kullanır. Başkasının seçmeyeceği bir ad seçin ve başka yerde gördüğünüz bir adı asla kullanmayın — aynı alıcı adına cevap veren iki geçit, yabancı birine iki ayrı cevap gönderir ve iki operatör de bunun olduğunu fark edemez.İsteğe bağlı
SağlayıcıAI sağlayıcı: ChatGPT (OpenAI), Claude (Anthropic), DeepSeek, Groq, OpenRouter, Puter (ücretsiz) veya özel endpoint.Zorunlu
API AnahtarıHer sağlayıcı için ayrı saklanır — sağlayıcı değiştirilince o sağlayıcının kendi anahtarı otomatik gelir, tek bir alanın üzerine yazılmaz.Zorunlu
Ek SMS Parçası0 = tek 64 karakterlik yanıt. 1-5 = uzun yanıtlar için çok parçalı mesaj.İsteğe bağlı
WhitelistEtkinleştirilirse sadece listedeki çağrı işaretlerinden gelen mesajlar yanıtlanır. Liste boşken açık bırakılırsa hiç kimseye yanıt verilmez — listeyi boşaltmak kapıyı açmaz, kapatır. Değişiklik yeniden başlatma gerektirmez: Kaydet dedikten ~5 saniye sonra geçerli olur.İsteğe bağlı
Art arda soruBir gönderenin beklemeden art arda sorabileceği soru sayısı (varsayılan 4). Hakkı biten kişiye ne kadar bekleyeceğini söyleyen tek bir mesaj gönderilir; ısrarla soranlara tekrar tekrar yazılmaz. 0 = sınır yok.İsteğe bağlı
Dolum (saniye)Bu kadar saniyede bir soru hakkı geri gelir (varsayılan 180). Boşta kalan gönderen hakkını tam sayıya kadar biriktirir. 0 = sınır yok.İsteğe bağlı
Günlük tavanTüm gönderenler için günde yanıtlanan toplam soru (varsayılan 0 = tavan yok). Kişi başı sınır, çok sayıda yabancının birer soru sormasına karşı korumaz — sunucuyu kendi donanımında çalıştıran ve ücretli bir AI sağlayıcı kullananlar için önemlidir.İsteğe bağlı

IMAP Alma Sekmesi

📥 IMAP E-posta Alıcı

E-posta gelen kutunuzu belirli aralıklarla yoklar ve yeni e-postaları APRS mesajı olarak telsize iletir. SMTP ile birlikte çift yönlü e-posta iletişimi sağlar.

📧 E-posta konu formatı TA1ABC-7 Merhaba, beacon calisiyor!
İlk kelime = hedef çağrı işareti, geri kalanı = mesaj metni.
AlanAçıklamaDurum
IMAP SunucusuIMAP sunucu adresi ve portu. Örnek: imap.gmail.com:993Zorunlu
Kullanıcı adı / ŞifreE-posta hesap bilgileri. Gmail için Uygulama Şifresi kullanın.Zorunlu
Gönderen çağrı işaretiİletilen e-postaların APRS'deki gönderen adı. Örnek: EMAIL-5Zorunlu
Yoklama aralığıGelen kutusu kaç dakikada bir kontrol edilsin. Varsayılan: 5 dakika.İsteğe bağlı
İzin verilen gönderenlerSadece bu e-posta adreslerinden gelenler iletilir. Boş = hepsi kabul.İsteğe bağlı

SMTP E-posta Sekmesi

✉️ E-posta Yönlendirme

Size gelen bir APRS mesajında (örn. EMAIL arkadas@mail.com Merhaba! formatında) belirtilen adrese otomatik e-posta gönderir.

AlanAçıklamaDurum
SMTP SunucusuE-posta sunucusu adresi ve portu. Örnek: smtp.gmail.com:587Zorunlu
Kullanıcı adı / ŞifreE-posta hesabı bilgileri. Gmail kullanıyorsanız "Uygulama Şifresi" oluşturmanız gerekir.Zorunlu
İzin verilen APRS göndericileriHangi çağrı işaretlerinden gelen isteği kabul edeceği.Zorunlu
İzin verilen APRS alıcılarıHangi APRS takma ada gönderilmiş mesajları işleyeceği. Varsayılan: EMAILZorunlu
Gönderen adresiE-postanın "Kimden" alanında görünecek adres. Örnek: APRS-Agent <aprs@gmail.com>Zorunlu

Mesajlar Sekmesi Web GUI

💬 Mesajlar

Ajanın duyduğu veya gönderdiği her APRS mesajını tek bir panelde listeler: saat, yön, gönderen, alıcı, metin ve mesajın ait olduğu köprü (AI / Telegram / WhatsApp / E-posta / …). Giden mesajlar gönderim döngüsünden yakalanır, çünkü APRS-IS kendi trafiğinizi size geri göstermez. Son 400 mesajlık kayan bir tampon tutulur; ack/telemetri trafiği otomatik filtrelenir. Sadece admin panelde görünür — Herkese Açık İzleme Sayfası'nda bulunmaz (özel köprü içeriklerini korumak için).

Herkese Açık İzleme Sayfası Web GUI

👁️ Public View

Admin panelinizi (ayarlar, API anahtarları, Başlat/Durdur) hiç açığa çıkarmadan, sadece Canlı Log / İstasyonlar / Harita görünümlerini internete güvenle açmanızı sağlar. Ayrı bir port üzerinde çalışır ve bu port dışarıya açılabilir; admin portu (varsayılan 8080) ise her zaman yerel ağınızda kalmalıdır.

Sekme çubuğunun altında, hangi özelliklerin şu an gerçekten aktif olduğunu gösteren küçük bir rozet satırı bulunur (AI Gateway, İstasyon AI, Röle İzleyici, Dünya Akışı, mesajlaşma eklentileri) — hem admin panelde hem bu sayfada görünür; Başlat/Durdur/Kaydet gibi komutları içermez, sadece salt-okunur bir durum özetidir.

AlanAçıklamaDurum
Halka Açık İzleme PortuBu portta salt-okunur sayfa sunulur. 0 = kapalı.İsteğe bağlı
Başlık / Alt başlıkSayfa üstünde çağrı işaretinizin yanında görünecek metin. Boş bırakılırsa "APRS-Agent · ÇAĞRI-İŞARETİNİZ" ve dile göre bir açıklama gösterilir.İsteğe bağlı
⚠️ Sadece bu portu dışarı açın Admin portunun (8080) kendi kimlik doğrulaması yoktur — dışarıya açık bırakılırsa herkes ayarlarınızı değiştirebilir ve API anahtarlarınızı görebilir. Uzaktan erişim için reverse proxy (nginx/Apache) + Basic Auth arkasına almanız önerilir; Public View portu bu korumaya gerek duymaz.

Extension Sunucu Sekmesi

🔗 Extension Sunucu

Bu sekme ileri düzey kullanıcılar içindir. Aynı bilgisayarda çalışan başka bir yazılımın (örn. kendi yazdığınız bir betik) canlı APRS paket akışına TCP üzerinden bağlanmasını sağlar.

Düz APRS kullanıyorsanız bu sekmeye dokunmanıza gerek yoktur.

Sık Sorulan Sorular

Log penceresinde "Login by user not allowed" görüyorum.

Çağrı işareti alanında gerçek bir çağrı işareti girilmemiş demektir. N0CALL varsayılan değerini silip kendi çağrı işaretinizi yazın.

Konumum aprs.fi'de görünmüyor.

Sabit Konum (Fixed Beacon) sekmesinin etkin olduğundan ve Enlem/Boylam değerlerinin doğru formatta girildiğinden emin olun. QTH Locator alanını kullanmak en kolay yoldur.

Web GUI mi kullanmalıyım, Masaüstü GUI mi?

Yeni bir kurulum yapıyorsanız Web GUI'yi kullanın — Harita, Sessizlik Haritası, Mesajlar sekmesi ve Herkese Açık İzleme Sayfası sadece orada bulunur, ve Linux sunucular/telefonlar dahil her yerde çalışır. Masaüstü GUI hâlâ çalışır ama v2.8.0'dan itibaren yeni özellik almıyor (bkz. yukarıdaki not).

Sessizlik Haritası'ndaki bir uyarı ne anlama gelir?

Bir Maidenhead karesindeki normalde aktif istasyonların çoğu aynı anda, beklenenden çok daha uzun süre sessiz kaldı — bu genellikle bölgesel bir elektrik kesintisine işaret eder. Tek bir igate'in düşmesinden kaynaklanıyorsa "IGate arızası" olarak ayrı gösterilir. Bölgeyi sınırlamak için Monitor ayarlarındaki silence_grids'i kullanabilirsiniz.

Haritadaki kesikli çizgiler ne anlama gelir?

Alışılmadık uzunlukta gerçekleşmiş bir telsiz linki — bir istasyonun sinyali, o bölgedeki igate'lerin normalde duyduğundan çok daha uzaktan duyuldu. Aynı bölgede birden fazla istasyondan gelirse bu bir bant açılmasıdır (tropo/Sporadik-E); "📡 BAND OPENING" bildirimi de gönderilir. Renk mesafeyle koyulaşır: yeşil < 600 km, mavi < 1200 km, mor üzeri.

Program kapatıldığında çalışmaya devam ediyor mu?

Hayır. Bilgisayar açıldığında otomatik başlaması için Windows Görev Zamanlayıcısı'na kaydetmeniz veya Linux'ta systemd servisi olarak çalıştırmanız gerekir. Ayrıntılı açıklama için README.md dosyasına bakın.

Ayarlar nerede saklanıyor?

Varsayılan olarak programın yanındaki aprsconfig.toml dosyasında saklanır. İstediğiniz bir konuma taşıyabilir ve üst bardaki Gözat… butonu ile seçebilirsiniz.


APRS-Agent · MIT Lisansı · TA3HX & TA3PKS · aprsagent.com · github.com/TA3HRJ/aprs-agent

APRS-Agent

User Guide

What is APRS-Agent?

APRS-Agent is an APRS-IS client. It connects your station to the worldwide APRS-IS network over the Internet — no radio hardware required.

What it can do:

📡 Note: An amateur radio licence is required You need a valid amateur radio callsign and its corresponding APRS-IS passcode to connect. The passcode is calculated automatically — you don't need to do anything special.
🖥️ Web GUI or Desktop GUI? The program ships with two interfaces: the browser-based Web GUI (runs on any OS, reachable from a phone too) and the Windows-only Desktop GUI (tkinter, system tray icon). The Desktop GUI has been feature-frozen since v2.8.0 — it still works and automatically inherits packet-parsing/station-database improvements, but new features like the Map, Silence Map, Messages tab and Public View are Web GUI only. New installs should use the Web GUI (aprs-agent-web.exe or python web_gui.py).

Quick Start – Step by Step

  1. Run the program: python web_gui.py or aprs-agent-web.exe (recommended) — your browser opens automatically to http://localhost:8080. For the Desktop GUI instead, use python gui.py or aprs-agent-gui.exe.
  2. Go to the Connection tab and enter your callsign (required).
  3. Enable the extensions you want (Logger, Fixed Beacon, etc.) and fill in their settings.
  4. Click 💾 Save Config.
  5. Click ▶ Start. If you see "TA1ABC verified" (your callsign) in the log, you're connected.
Save writes the file, it doesn't restart the agent. If you change a setting (a different AI provider, a new notify channel, …) while the agent is already running and click Save, the change is written to disk but the running agent doesn't see it — it only takes effect after ■ Stop then ▶ Start. The Web GUI shows this reminder in the log whenever you Save while running.

Connection Tab

🔌 Connection
FieldDescriptionStatus
APRS-IS Server The default (rotate.aprs2.net) works worldwide. No need to change it. Optional
Port Standard filtered port: 14580. Leave it as-is. Optional
Callsign Your amateur radio callsign. Example: TA1ABC Required
Station Filter Which stations' packets to receive. Wildcards are supported: TA* = all callsigns starting with TA (multiple prefixes can be comma-separated: TA*, TB*, YM*). Required
Full World Feed When on, the Station Filter is ignored and all worldwide APRS-IS traffic is received (port 10152, ~50-100 packets/sec). Used to run the Silence Map worldwide instead of one region. Setting a rate limit below is strongly recommended when enabled. Optional
Rate limit (pkt/s) Maximum packets dispatched to extensions (Logger, AI Gateway, silence detection, ...) per second. Only matters with the Full World Feed — the raw APRS-IS connection itself is never throttled. 0 = unlimited. Optional
Auto-start Connects to APRS-IS automatically on launch, without waiting for you to click Start. Useful when running as a background service. Optional

Logger Tab

📋 Logger

Displays incoming APRS packets in the log panel at the bottom of the window.

FieldDescriptionStatus
Enable Logger Turns on the log display. Recommended to keep enabled so you can see activity. Optional
Filter by packet type Show only specific packet types. Leave blank to see everything. Optional
Keyword filter Show only packets containing a keyword. Leave blank to see everything. Optional

Fixed Beacon Tab

📍 Fixed Beacon

This tab sends your station's position to the APRS network at regular intervals, making you visible on maps like aprs.fi.

FieldDescriptionStatus
Enable Fixed Beacon Check this box to enable position beaconing. Required
QTH Locator Your Maidenhead grid square. Example: KM38nk
Enter this and Latitude/Longitude fill in automatically.
Easy entry
Latitude / Longitude You can enter these directly instead of using QTH Locator.
Format: 3826.25N / 02707.50E
Required
Station SSID Your callsign with SSID suffix. Example: TA1ABC-10
Any number from -1 to -15 is valid.
Required
Symbol Click Choose Symbol… to pick an icon for the map. Common choices: House (-), Car (>), Weather Station (_). Required
Beacon comment Short text shown next to your callsign on maps. Example: TA1ABC Home Station Optional
Interval (minutes) How often to transmit the beacon. Recommended: 15 minutes. Optional
💡 Don't know your QTH Locator? Visit levinecentral.com/ham/grid_square.php and click your location on the map.
ℹ️ Your own beacon on the map Your station shows on the Web GUI's Map tab with a "your station" badge, but it is never counted as a Silence Map sensor — it keeps beaconing regardless of the real situation at the claimed location (the agent may even run on a server in another country).

Stations and Map Web GUI

📊 Stations Tab

Lists every station heard from APRS-IS as a live table — type, location, organisation, frequency, online/offline status and last heard time. Click any row for a detail panel showing coordinates, tone, EchoLink, weather data and AI analysis results. Type/status/search filters let you narrow the list.

🌍 Capping in world mode With the Full World Feed on, the registry can reach tens of thousands of stations; the list is then capped at the 4000 most recently heard (the counter still shows the true total). The detail panel always fetches the full, current record regardless of the cap.
🗺️ Map Tab

Shows the live position of every heard station on a Leaflet map, using the real APRS symbol set (same sprites as aprs.fi). Red squares mark a region where many stations fell silent together (possible power outage); amber squares mean only that region's igate itself went down — see Silence Map below.

Dashed lines are unusually long realised radio links — a possible band opening (see RF Propagation Tracking below). Colour deepens with distance: green < 600 km, blue < 1200 km, purple beyond.

The timeline below the map lets you scrub back through the last 14 days of recorded snapshots and replay past alerts; use ▶ for automatic playback. Scrubbing near a recorded opening also replays its links on the map.

🌍 Clustering in world mode Once more than 2000 stations would be plotted, the map switches behaviour automatically: numbered cluster badges at low zoom (click to zoom in), and every station of the currently visible area fetched from the server at high zoom. Below that threshold (e.g. watching only Turkey) behaviour is exactly as before.

Silence Map and Monitor

🔴 Silence Detection

Each station's "normal" beacon cadence is learned automatically. When most of the normally-active stations (several radios of one operator count once) in a Maidenhead cell (4 characters, e.g. KM38) fall silent for far longer than expected at the same time, that cell is flagged as a possible power outage. If every silent station in the cell shares one igate and that igate is itself silent, the cause is reported as an igate failure instead.

If the AI Gateway is configured, each new alert gets a short AI assessment (shown in map popups and in Telegram/email notifications). If the same cell clears and re-alerts again within 3 hours (a flapping region), no new AI call is made — the previous assessment is reused, so wide-area monitoring doesn't multiply AI usage unnecessarily. Event advisories are never counted as silence sensors, whichever form they arrive in. APRS Object packets (e.g. fire warnings from emergency services) expire by design when the event closes; weather-service warnings arrive as ordinary stations instead, transmitting while a warning is in force and silent for the days between. Silence detection rests on cadence, and neither has one.

FieldDescriptionStatus
Silence map region Maidenhead fields (first 2 characters) that silence detection is limited to. A prefix station filter (e.g. TA*) also matches callsigns abroad, whose outages would otherwise raise alerts too. Example: KM, KN, LM, LN for Turkey. Empty = worldwide. Optional
Silence alert digest (min) Batch silence alerts into one combined notification every N minutes, instead of one message per alert. Recommended once the region is left empty (worldwide), where individual alerts would flood the channel. 0 = send each alert immediately. Optional
🔔 Repeater Monitor

Watches the repeaters listed in the Turkey Repeaters database below and sends a Telegram/email notification when one goes offline or comes back. Requires the Repeater DB Path setting.

FieldDescriptionStatus
Repeater MonitorEnables this feature.Required
Notify viatelegram or smtp.Required
Check interval (min)How often repeater status is checked. Default: 10.Optional
Watch callsignsComma-separated base callsigns. Empty = watch every repeater in the database.Optional
Notification example 🔴 YM1ABC is now OFFLINE (last heard 1h 23m ago)
Adana · 145.7000 MHz · FM

RF Propagation Tracking

📡 Band-Opening Detection

Every packet an igate hears on RF and forwards to APRS-IS (qAR/qAO) is a realised radio link whose length is known exactly: the sender's in-packet position to the igate's position. Normal VHF/UHF range is ~50–150 km; when links in an area collectively start reaching much further, that is direct evidence of a tropospheric duct or sporadic-E opening.

Each gate's "how far does it normally hear" baseline is learned automatically — a mountain-top LoRa gate's routine long links never alert, but the same gate exceeding its own normal does. Anomalous links appear on the map as dashed lines. When anomalous links arrive from at least two DIFFERENT senders in the same Maidenhead field within 30 minutes, that becomes an opening event: a "📡 BAND OPENING" notification is sent, an AI assessment is attached when the AI Gateway is configured (tropo / sporadic-E / aurora — if the same region opens again within 3 hours, the previous assessment is reused instead of making a new AI call), and the event replays from the timeline for 14 days.

ℹ️ Why is a single long link never an event? One misconfigured GPS can fake any distance; two independent stations in the same area at the same time cannot. Internet-origin packets (TCPIP), digipeated packets, Objects, balloons above 3000 m (line-of-sight geometry, not propagation) and links over 5000 km (data errors) are never counted at all. A link sitting on the repeated distance of a gate that measures the same value every time is kept out of the opening rule as well: that is a fixed coordinate error, not propagation.

Detection is always on and the map always shows every opening worldwide. To scope the notification to your own region, use the Monitor section's Propagation notify region setting (e.g. KM, KN, LM, LN for Turkey) — a notification is sent if either end of any link in the opening falls in those fields; otherwise the map still shows it, but Telegram/email stays quiet. A cross-continent opening (e.g. South Africa reaching a Turkish gate) still notifies, since it involves your region.

Turkey Repeaters DB

🗄️ Repeater DB Path

Enriches the Stations tab with city, district, frequency, CTCSS tone, band and mode — matched by callsign alone, no live packet needed. Download the latest database from the Turkey Repeaters project. The Repeater Monitor above also relies on this file.

FieldDescriptionStatus
Repeater DB PathFull path to the downloaded JSON file.Optional

AI Station Analysis

🤖 AI Station Analysis

Periodically sends heard stations' beacon comments to AI to extract an organisation name and short description; results appear in the Stations tab's Organization column and detail panel. Requires the AI Gateway to be configured first (same provider/API key is reused). Each station is analysed once per session; transient comments (holiday greetings, seasonal messages) are skipped automatically to avoid wasting tokens.

FieldDescriptionStatus
AI Station AnalysisEnables this feature.Required
Run every (hours)How often a new pass runs. Default: 24.Optional
Max per runMaximum stations analysed per pass. Default: 20.Optional

Twitter / X Tab

🐦 Twitter / X Integration

When an APRS message is addressed to a configured alias (e.g. TWSEND) from an allowed sender, it is automatically posted as a tweet.

⚠️ Twitter API credentials are required You must create an application at the Twitter/X Developer Portal (developer.twitter.com) and obtain four keys/tokens. This is a one-time setup.
FieldDescriptionStatus
API Key / SecretYour Twitter app credentials.Required
Access Token / SecretYour account access tokens.Required
Allowed APRS recipientsWhich APRS addressee triggers a tweet. Default: TWSENDRequired
Allowed APRS sendersOnly messages from these callsigns are processed. Enter your own callsign.Required

Bluesky Tab

🦋 Bluesky Integration

When an APRS message is addressed to a configured alias (e.g. BSKYSEND) from an allowed sender, it is automatically posted to your Bluesky account.

✅ Free API — no payment required Unlike Twitter/X, the Bluesky API is completely free. You only need to create an App Password: bsky.app → Settings → App Passwords
FieldDescriptionStatus
UsernameYour Bluesky handle. Example: yourname.bsky.socialRequired
App PasswordApp Password (NOT your main password). Create at bsky.app → Settings → App Passwords.Required
Allowed APRS recipientsWhich APRS addressee triggers a post. Default: BSKYSENDRequired
Allowed APRS sendersOnly messages from these callsigns are processed. Enter your own callsign.Required

WhatsApp Tab

📱 WhatsApp Integration

Bidirectional APRS ↔ WhatsApp messaging via the Meta Cloud API. An APRS message addressed to a configured alias is forwarded to WhatsApp; a message typed as CALLSIGN Message text on WhatsApp is forwarded to APRS.

⚠️ A Meta Business account is required Create a WhatsApp app in the Meta Business dashboard to get a Phone Number ID and Access Token, and register your webhook URL (https://YOUR_SERVER/webhook/whatsapp) with Meta for incoming messages.
FieldDescriptionStatus
Phone Number IDFrom the Meta Business dashboard.Required
Access TokenFrom the Meta Business dashboard.Required
Webhook Verify TokenA string you choose — must match your Meta webhook configuration.Required
Recipient PhoneDefault WhatsApp number for outgoing messages.Required
Allowed APRS recipients / sendersAddressee and callsign filters for the APRS → WhatsApp direction.Required
From callsignSSID used for the WhatsApp → APRS direction.Optional
Allowed phone numbersOnly these numbers can trigger APRS. Empty = anyone.Optional

Telegram Tab

💬 Telegram Integration

Bidirectional APRS ↔ Telegram messaging — completely free, no webhook needed (the Telegram bot API is polled). Silence Map alerts can also be sent through this channel (see Monitor above).

🤖 Getting a Bot Token Talk to @BotFather on Telegram and use /newbot. To find your Chat ID, talk to @userinfobot.
FieldDescriptionStatus
Bot TokenFrom @BotFather.Required
Chat IDYour Telegram user or group ID.Required
Allowed APRS recipients / sendersAddressee and callsign filters for the APRS → Telegram direction. Default addressee: TGSENDRequired
Poll TelegramEnables the Telegram → APRS direction: type CALLSIGN Message in the bot chat to send to APRS.Optional
Poll interval (sec)How often Telegram is checked. Default: 5.Optional
⚠️ A bot token can only be polled by one agent at a time If the same bot token is polled by two agents at once (e.g. your home PC and a server), Telegram returns a 409 Conflict error. Keep polling enabled on only one of them.

AI Gateway Tab

Questions about other stations

The gateway answers these from its own registry: the nearest igate, a station's last position, when it was heard, and how far it is from the asker. APRS positions are broadcast to be seen and aprs.fi has served the same beacons for years, so refusing here protects nobody.

What an answer may contain is bounded: one observation. No name, no licence record, no address, no history. The step that turns a callsign into a person is not taken.

A station can opt out. Send NOLOOKUP to the gateway and it will not appear in other people's answers; LOOKUP undoes it. Asking about your own station always works, and your beacons stay public on aprs.fi either way.

Identification and responsibility

A gateway addressee is not a callsign. It identifies a piece of software, not a station: no authority issues it and none needs to. Nor can it be mistaken for one — an allocated callsign carries a digit, and these service addressees do not.

The agent operates no transmitter. It is an APRS-IS client over TCP; the session is authenticated with the operator's own callsign and passcode, and its packets carry the TCPIP* path that marks internet origin. Where a reply reaches RF, the transmitting station is an igate, keying up under its own licence and its own callsign, and that operator is responsible for that emission — the ordinary third-party model of APRS messaging.

What that leaves with the person running a gateway:

Running an AI over amateur radio is a new application, not an unregulated one. The existing rules cover content whatever composed it, and the operator is answerable for what the station emits. Experimental in ambition, conventional in compliance.

⚠️ Everything you send is public Amateur radio is conducted in the clear; encoding a transmission to obscure its meaning is not permitted (ITU Radio Regulations, Article 25, which governs the amateur service). For the AI Gateway that means both the incoming question and the reply go out in the clear over RF and onto the internet through APRS-IS. Sites like aprs.fi aggregate that traffic, keep it searchable and retain it for years. So everything anyone sends your gateway is public, searchable and effectively impossible to delete.
🤖 AI Gateway

Auto-responds to incoming APRS messages using AI. When a message is addressed to the configured callsign, it is sent to the AI provider and the response is returned as an APRS message. The same provider/API key is also used by AI Station Analysis and Silence Map assessments.

✅ Free options available Puter is a completely free AI provider. Groq and OpenRouter also offer free-tier models.
FieldDescriptionStatus
AI CallsignMessages addressed to this callsign trigger an AI response. Matched with the SSID ignored, so a message to TA1ABC-1 reaches a gateway configured as TA1ABC.Required
Trigger AliasesExtra addressees this gateway also answers to, comma-separated. The APRS addressee field is a fixed 9 characters either way, so a shorter alias saves nothing on air — it saves key presses on a handheld keypad, where a digit costs four presses. Leave empty unless you mean it: APRS-IS is one worldwide feed and an addressee is first-come and unenforced. Choose a name nobody else would plausibly pick, and never reuse one you saw somewhere else — two gateways answering the same addressee send a stranger two answers, and neither operator can tell it is happening.Optional
ProviderAI provider: ChatGPT (OpenAI), Claude (Anthropic), DeepSeek, Groq, OpenRouter, Puter (free), or a custom endpoint.Required
API KeyStored separately per provider — switching providers recalls that provider's own key automatically instead of overwriting one shared field.Required
Extra SMS Parts0 = single 64-char reply. 1-5 = multi-part messages for longer responses.Optional
WhitelistIf enabled, only messages from listed callsigns are answered. Enabled with an empty list answers nobody — clearing the list closes the gate, it does not open it. Changes need no restart: they take effect about 5 seconds after Save.Optional
Questions in a rowHow many a sender may ask back to back before being asked to wait (default 4). Someone who runs out is told once, with the wait in minutes — not once per message, which would answer a hammering sender with hammering of our own. 0 = no limit.Optional
Refill (seconds)One more question per this many seconds (default 180), building back up to the full burst once idle. 0 = no limit.Optional
Daily ceilingTotal questions answered per day across all senders (default 0 = no ceiling). Per-sender limits do nothing against many strangers asking once each, which matters most if you run this on your own hardware against a paid AI provider.Optional

IMAP Receive Tab

📥 IMAP Email Receiver

Polls your email inbox at a configurable interval and forwards new emails as APRS messages to the radio. Together with SMTP, this enables bidirectional email communication.

📧 Email subject format TA1ABC-7 Hello, your beacon is working!
First word = destination callsign, rest = message text.
FieldDescriptionStatus
IMAP ServerIMAP server address and port. Example: imap.gmail.com:993Required
Username / PasswordEmail account credentials. For Gmail, use an App Password.Required
From callsignAPRS sender callsign for forwarded emails. Example: EMAIL-5Required
Poll intervalHow often to check the inbox, in minutes. Default: 5.Optional
Allowed sendersOnly forward emails from these addresses. Empty = allow all.Optional

SMTP Email Tab

✉️ SMTP Email Forwarding

Automatically sends an email when an APRS message in the format EMAIL recipient@example.com Message text here is received and addressed to the configured alias (default: EMAIL).

FieldDescriptionStatus
SMTP ServerYour mail server address and port. Example: smtp.gmail.com:587Required
Username / PasswordEmail account credentials. For Gmail, generate an App Password.Required
Allowed APRS sendersOnly messages from these callsigns trigger emails.Required
Allowed APRS recipientsWhich APRS addressee triggers email forwarding. Default: EMAILRequired
From addressThe "From" field in the sent email. Example: APRS-Agent <aprs@gmail.com>Required

Messages Tab Web GUI

💬 Messages

Lists every APRS message the agent hears or sends in one panel — time, direction, from, to, text, and which bridge it belongs to (AI / Telegram / WhatsApp / Email / …). Outgoing messages are captured from the send loop, since APRS-IS never echoes your own traffic back to you. A rolling buffer of the last 400 messages is kept; ack/telemetry chatter is filtered out automatically. Admin only — not exposed on the Public View, to keep bridge content private.

Public View Web GUI

👁️ Public View

Lets you safely expose just the Live Log / Stations / Map views to the internet, without ever exposing your admin panel (settings, API keys, Start/Stop). It runs on a separate port that is safe to forward — the admin port (default 8080) must always stay on your local network.

Below the tab bar, a small badge row shows which features are actually active right now (AI Gateway, Station AI, Repeater Monitor, World Feed, messaging extensions) — shown on both the admin panel and this page; it carries no Start/Stop/Save commands, just a read-only status summary.

FieldDescriptionStatus
Public View PortRead-only page served on this port. 0 = disabled.Optional
Title / SubtitleText shown at the top of the page next to your callsign. Leave empty for the defaults: "APRS-Agent · YOUR_CALLSIGN" and a language-aware description.Optional
⚠️ Only forward this port The admin port (8080) has no authentication of its own — if left exposed, anyone can change your settings and see your API keys. For remote access, put it behind a reverse proxy (nginx/Apache) with Basic Auth; the Public View port needs no such protection.

Extension Server Tab

🔗 Extension Server

This is an advanced feature. It opens a local TCP port so that other programs on your computer can subscribe to the live APRS packet stream.

If you just want basic APRS operation, you don't need this tab.

Frequently Asked Questions

The log says "Login by user not allowed".

Your callsign field contains the default placeholder N0CALL. Replace it with your real amateur radio callsign.

My position isn't showing on aprs.fi.

Make sure the Fixed Beacon tab is enabled and that your Latitude/Longitude values are in the correct format. Using the QTH Locator field is the easiest way to set them.

Should I use the Web GUI or the Desktop GUI?

For a new install, use the Web GUI — the Map, Silence Map, Messages tab and Public View exist only there, and it runs anywhere, including Linux servers and phones. The Desktop GUI still works but has received no new features since v2.8.0 (see the note above).

What does a Silence Map alert mean?

Most of the normally-active stations in a Maidenhead cell fell silent at the same time, for far longer than expected — usually a sign of a regional power outage. If it's caused by a single igate going down, it's shown separately as an "IGate failure". You can scope the region with silence_grids in the Monitor settings.

What do the dashed lines on the map mean?

An unusually long realised radio link — a station was heard from far beyond what that area's igates normally reach. Multiple stations in the same area means a band opening (tropo/sporadic-E) and a "📡 BAND OPENING" notification is sent. Colour deepens with distance: green < 600 km, blue < 1200 km, purple beyond.

Does the agent keep running when I close the window?

No. To start automatically at boot, add it to Windows Task Scheduler, or run it as a systemd service on Linux. See README.md for details.

Where are my settings stored?

By default in aprsconfig.toml next to the program. You can move it anywhere and point to it with the Browse… button in the top bar.


APRS-Agent · MIT License · TA3HX & TA3PKS · aprsagent.com · github.com/TA3HRJ/aprs-agent