Sahte kaynak
Bir uç noktayı test etmek genelde bir cihazın iletim yapmasını beklemek demektir. Sahte kaynak bu beklemeyi ortadan kaldırır: gerçek bir Sigfox arka ucunun göndereceği callback gövdelerinin aynısını, kaynağınızın uç noktasına, siz istediğinizde POST eder.
localhost:3003 üzerinde çalışır; konsolu
/ui adresindedir.
Merkez'de hangi kaynağa ihtiyaç duyar
Taklit, kendi başına bir teknoloji değildir: gerçek bir arka ucu — konsolda ilk seçilen Sigfox Backend, The Things Stack ya da ChirpStack — taklit eder ve o arka ucun göndereceği gövdelerin aynısını POST eder. Dolayısıyla Merkez'de beslediği kaynak, o teknolojide sıradan bir kaynaktır: taklit Sigfox modundayken Sigfox, TTN modundayken The Things Stack seçin. Callback'leri Merkez'in gerçek adaptörü ayrıştırır; amaç da zaten budur — bir "taklit" teknolojisi onu yalnızca atlardı. İkisini de denemek istiyorsanız her teknoloji için bir kaynak oluşturun ve taklidi test ettiğinize yöneltin.
Başlatın
cd source-test
npm install
cp .env.example .env
npm run secret # kaynağın webhook gizli anahtarını yazdırır
# çıktıyı .env içine WEBHOOK_SECRET olarak yapıştırın
npm run start:dev
npm run secret, test ettiğiniz kaynak entegrasyonunun paylaşılan gizli
anahtarını doğrudan yerel veritabanınızdan çözer. Hiçbir şey makineden çıkmaz.
WEBHOOK_SECRET olmadan callback'ler kimlik doğrulamasız gider ve Merkez 401
yanıtı verir — bu da kendi başına faydalı bir testtir, yalnızca genelde ilk
istediğiniz test değildir.
Bir şey göndermeden önce neye yöneltildiğini kontrol edin:
curl -s localhost:3003/health
Bu; POST edeceği uç nokta adresini, taklit edeceği cihazı, bir gizli anahtarın tanımlı olup olmadığını ve bildiği callback'leri döndürür.
Tek bir mesaj gönderin
curl -X POST localhost:3003/emit/bidir
Bu, kaynağınızın uç noktasına eksiksiz ve düzgün biçimli bir DATA_BIDIR
callback'i POST eder. Merkez'de Analitik'i izleyin — Alınan artar — ya da
sahte hedefin iletimi almasını izleyin.
Adres hem kısa adı hem de Sigfox messageType değerini kabul eder:
| Kısa ad | messageType | Sigfox anahtarı |
|---|---|---|
uplink | DATA_UPLINK | 0/2 |
bidir | DATA_BIDIR | 0/3 |
status | SERVICE_STATUS | 1/0 |
acknowledge | SERVICE_ACKNOWLEDGE | 1/4 |
repeater | SERVICE_REPEATER | 1/5 |
advanced | SERVICE_DATA_ADVANCED | 1/6 |
error | ERROR | 2 |
Yani POST /emit/DATA_BIDIR ile POST /emit/bidir aynı işi yapar.
Gerçekte ne POST ediliyor
Bir bidir çağrısı şu gövdeyi gönderir — Merkez'in gerçek Sigfox cihaz tipine
kaydettiği alanların aynısı, aynı sırayla:
{
"messageType": "DATA_BIDIR",
"device": "1A2B3C",
"deviceTypeId": "6a78e0b0ec27932950396541",
"time": 1755265665,
"seqNumber": 18,
"data": "00018d460000300040e12402",
"ack": true,
"rssi": -103.41,
"station": "0A1B"
}
Önemli olan ack: true: cihazın bir downlink istediği ve alım penceresini açık
tuttuğu anlamına gelir. Bkz.
Downlink ile yanıtlayın.
İstediğiniz alanı değiştirin
Denetim anahtarı olmayan her üst düzey anahtar callback gövdesine birleştirilir. Yani yük çerçevesini değiştirmek şu kadar basittir:
curl -X POST localhost:3003/emit/bidir \
-H 'content-type: application/json' \
-d '{"data": "00018d460000300040e12402"}'
Gövdeyi değil sahte kaynağı yöneten denetim anahtarları şunlardır:
| Anahtar | İşlevi |
|---|---|
types | Yalnızca POST /emit: bu iletimin ürettiği callback'ler |
delayScale | Gerçekçi gecikmeleri çarpar. 0 hepsini aynı anda gönderir |
wait | Geç gelen callback'ler de çıkana kadar bekler |
device | Farklı bir cihaz kimliğini taklit eder |
seqNumber | Sıra numarasını sabitler (0–4095) |
count | Bu kadar mesajı sırayla gönderir (en fazla 200) |
overrides | En son birleştirilir — bir alan adı denetim anahtarıyla çakışırsa |
omitSecret | Gizli anahtar başlığını atar; Merkez 401 vermelidir |
Denemeye değer üç test
Tekrar ayıklama çalışıyor mu?
Merkez en az bir kez iletir ve hedefinizin tekrarı tanıması beklenir. Bir sıra numarasını yeniden kullanarak zorlayın:
curl -X POST localhost:3003/emit/bidir -H 'content-type: application/json' -d '{"seqNumber": 42}'
curl -X POST localhost:3003/emit/bidir -H 'content-type: application/json' -d '{"seqNumber": 42}'
İkisi de aynı idempotencyKey ile gelir. Sahte hedef ikincisini DUP olarak
işaretler.
Uç nokta gerçekten korunuyor mu?
curl -X POST localhost:3003/emit/bidir -H 'content-type: application/json' -d '{"omitSecret": true}'
Merkez 401 vermelidir. 2xx veriyorsa kaynağınız kimlik doğrulamasız yükleri kabul ediyor demektir — bkz. Bir kaynak bağlayın.
Yük altında nasıl görünüyor?
curl -X POST localhost:3003/emit/bidir -H 'content-type: application/json' -d '{"count": 50}'
Elli mesaj, sırayla gönderilir. Analitik'i ve hedefin iletim listesini izleyin.
Gerçeği gibi zamanlanmış tam bir iletim
Bir cihaz iletimi birden fazla callback üretir ve bunlar birlikte gelmez.
POST /emit bunu yeniden üretir:
curl -X POST localhost:3003/emit \
-H 'content-type: application/json' \
-d '{"types": ["DATA_BIDIR", "SERVICE_ACKNOWLEDGE", "SERVICE_DATA_ADVANCED"]}'
Her biri gerçekte sahip olduğu gecikmeyle planlanır:
| Callback | Gelme süresi | Nedeni |
|---|---|---|
DATA_BIDIR | 0–1sn | Çerçeve anında çözülür |
ERROR | 1–3sn | Ağ mesajı neredeyse anında reddeder |
SERVICE_ACKNOWLEDGE | 20–25sn | Downlink penceresi uplink'ten ~20sn sonra açılır |
SERVICE_DATA_ADVANCED | 25–32sn | Çerçeveyi duyan tüm baz istasyonlarını bekler |
"delayScale": 0 kullanın ve
gerçeklikten daha kolay bir şeyi test ettiğinizi bilin.Türleri elle seçmek yerine canlı kaynağınızda etkin olanların aynısını oynatmak için:
curl -X POST localhost:3003/emit-enabled
Son gönderdiğinizi tekrarlamak için:
curl -X POST localhost:3003/replay-last
Konsol
localhost:3003/ui camın cihaz tarafıdır. Sahte
hedef uygulamanın ne aldığını gösterir; bu ise cihazın ne yaşadığını — bir hedefin
size asla söyleyemeyeceği tek şey dâhil: sunulan downlink gerçekten geri geldi mi?
Her oturum bir gidiş-dönüş paneli alır: cihaz downlink istedi, Merkez bir downlink ile yanıtladı ve ulaşıp ulaşmadığı burada yazar.

Üstte bir oturum kurarsınız — cihaz, çerçeve, hangi callback'ler, ne hızda — sonra
send session. Sağdaki panel, hiçbir hedefin size gösteremeyeceği kısımdır:
3. satır, downlinkAck: true taşıyan SERVICE_ACKNOWLEDGE'dir; yani downlink'in
cihaza ulaştığının bayt bayt onayı.
Ham günlük HTTP üzerinden de vardır:
curl -s localhost:3003/log # son gönderimler
curl -s localhost:3003/runs # oturumlar
curl -X DELETE localhost:3003/log # temizle
Sigfox'a dokunmadan sağlamayı test etmek
Sahte kaynak, Merkez'in sağlama sırasında çağırdığı Sigfox v2 REST API'sini de yanıtlar. Merkez'i buna yöneltin:
SIGFOX_API_BASE=http://localhost:3003/v2
SIGFOX_LIVE=true
SIGFOX_READONLY=true
Artık apply gerçekten çalışır — cihaz tipleri oluşturur, callback kaydeder,
cihaz yaratır — gerçek bir hesap yerine bellekteki bir taklide karşı. Cihaz
tipleri, callback'ler, cihazlar, gruplar, sözleşmeler ve api-user'ları
uygulanmıştır; bunların dışındakiler başarılı taklidi yapmak yerine 404 verir.
POST /v2/_reset cihazları ve callback'leri temizler; aynı sağlama akışını
sıfırdan tekrar çalıştırabilirsiniz.
SIGFOX_LIVE=true, Merkez'in bir Sigfox arka ucuna gerçekten yazmasını sağlayan
anahtardır. Burada güvenli olmasının tek sebebi temel adresin sahte kaynağa
bakmasıdır. SIGFOX_API_BASE değeri gerçek API olan bir Merkez'de, o yazmaları
bilerek istemiyorsanız ikisini birden açmayın.Bulutta
Aynı düzenek Dokploy üzerinde source.iot.una.center adresinde çalışır ve
gerçek bir arka ucun yapacağı gibi HTTPS üzerinden üretimdeki Merkez'e POST
eder. Bu sayfadaki her şey, ana makine adı değiştirilerek orada da geçerlidir —
konsol /ui adresindedir. Uç nokta adresi
ve webhook gizli anahtarı ortama yazılmak yerine konsolun bağlantı paneline
yapıştırılabilir; konsol bunları yeniden başlatmalarda korur. Herkese açık
adresi olan bir test aracıdır: kimse test etmiyorken uygulamayı durdurun.