Tarafları taklit etmek

Tüm döngüyü çalıştırmak

İki taklit ve Merkez bir arada — tam bir gidiş-dönüş, bir ölü mektup ve bir yeniden gönderim.

Her taklit tek başına da işe yarar. Merkez'le birlikteyse döngüyü kapatırlar: soldan bir mesaj gönderir, sağda gelişini izler, sağ tarafı bozar, Merkez'in bununla nasıl başa çıktığını görür ve düzeltirsiniz — hepsi tek makinede, birkaç dakikada.

Her şeyi başlatın

Depo kökünden:

./dev.sh

Bu; altyapıyı (Supabase yığını ve NATS) ve ardından API'yi, web uygulamasını ve bu dokümantasyon sitesini ayağa kaldırır. İki taklit ayrıdır — her birini kendi terminalinde başlatın:

cd source-test && npm run start:dev    # :3003
cd sink-test   && npm run start:dev    # :3004

Sonuçta çalışanlar:

PortNe
3000API — /api/v1, Swagger /docs
3001Web uygulaması
3002Bu dokümantasyon
3003Sahte kaynak — konsol /ui
3004Sahte hedef — konsol /ui
Taklitler Merkez'e ihtiyaç duyar, tersi değil
Sahte kaynak API'ye POST eder; Merkez de sahte hedefe iletir. Önce API'yi başlatın, yoksa ilk emit yalnızca bağlanamaz.

Merkez'i iki taklide bağlayın

Bir kez, uygulamada:

  1. Kaynak — taklidin taklit ettiği teknolojide sıradan bir kaynak (Sigfox modu için Sigfox, TTN modu için The Things Stack — bir "taklit" teknolojisi yoktur, bkz. Sahte kaynak). Uç nokta adresini ve webhook gizli anahtarını taklidin bağlantı paneline yapıştırın ya da source-test/.env içinde tanımlayın; curl -s localhost:3003/health ile doğrulayın ve bildirdiği ingestUrl değerine bakın. Gizli anahtar olmadan 401 bekleyin.
  2. Hedef — HEDEF entegrasyonunuzun uç nokta adresini http://localhost:3004/sink yapın ve Test et'e basın. Yeşile dönmelidir.
  3. YönlendirmeAkış → Yönlendirme'yi açın ve kaynağı hedefe bağlayın. Yönlendirme olmadan proje tüm aktif hedeflere yayın yapar; bu da çalışır ama açık hâle getirmeye değer.

İki konsolu yan yana açın — :3003/ui ve :3004/ui — ve açık bırakın.

Döngü 1 — mutlu yol

curl -X POST localhost:3004/control -H 'content-type: application/json' -d '{"mode":"ok"}'
curl -X POST localhost:3003/emit/bidir

Sırayla görmeniz gerekenler:

  1. Sahte kaynak konsolu gönderimi kaydeder.
  2. Merkez'de Analitik: Alınan +1, ardından İletilen +1.
  3. Sahte hedef konsolunda yeni bir satır belirir; DATA_BIDIR (0/3) etiketli ve awaits reply işaretli.

Merkez'in tam olarak ne kurduğunu görmek için hedef konsolundaki satıra tıklayın — bir çıktı yapısının istediğinizi yapıp yapmadığını kontrol etmenin en hızlı yolu budur.

Döngü 2 — bir ölü mektup ve yeniden gönderimi

Şimdi sağ tarafı bozun ve iletim sözleşmesinin işlediğini izleyin:

# Hedef her şeyi reddetmeye başlasın
curl -X POST localhost:3004/control -H 'content-type: application/json' \
     -d '{"mode":"fail","failStatus":503}'

curl -X POST localhost:3003/emit/bidir

Analitik, denemeler artan beklemeyle tekrarlandıkça Başarısız sayısının arttığını gösterir. Sekiz denemeden sonra iletim, deneme sayısıyla birlikte Ölü mektuplar'a düşer.

"Kesintiyi" düzeltip yeniden gönderin:

curl -X POST localhost:3004/control -H 'content-type: application/json' -d '{"mode":"ok"}'

Merkez'de Ölü mektuplar'ı açın ve Yeniden gönder'e basın. Hedef konsolu bu kez kabul edilerek geldiğini gösterir.

Sözleşmenin tamamı budur: en az bir kez, artan bekleme, ölü mektup, yeniden gönderim — ve yeniden gönderim bugünkü yapılandırmayı kullanır; sebebi önce düzeltmenin işe yaramasının nedeni de budur.

Bu, iki konsolu birden gerektiren döngüdür; çünkü hiçbiri tek başına yanıt veremez.

Hedefe döndüreceği bir yanıt verin, sonra yanıt isteyen bir uplink gönderin:

curl -X POST localhost:3004/control -H 'content-type: application/json' \
     -d '{"downlinkHex":"deadbeef00000001"}'

curl -X POST localhost:3003/emit/bidir

İki konsoldan birlikte okuyun:

NeredeNe söyler
Sahte hedefİletim geldi mi, awaits reply mi ve Merkez'e hangi hex döndü
Sahte kaynakO downlink gerçekten cihaza ulaştı mı — gidiş-dönüş paneli

Hedef konsolunda görünen bir downlink, Merkez'e teslim edilmiştir. Döngüyü yalnızca kaynak konsolu kapatır. Hedef yanıtladığını söylüyor ama kaynak geri bir şey gelmediğini söylüyorsa sorun ikisinin arasındadır — çoğu zaman çift yönlü olmayan bir sözleşme ya da tam 16 karakter olmayan bir hex değeri.

Döngü 4 — tekrarlar

Merkez en az bir kez iletir; yani gerçek hedefiniz bir tekrarı kaldırabilmelidir. Kaldırdığını kanıtlayın:

curl -X POST localhost:3003/emit/bidir -H 'content-type: application/json' -d '{"seqNumber": 77}'
curl -X POST localhost:3003/emit/bidir -H 'content-type: application/json' -d '{"seqNumber": 77}'

İkisi de aynı idempotencyKey taşır; hedef konsolu ikincisini DUP olarak işaretler. Temiz bir kabul olmayan diğer her şeyin arasında görmek için konsolu problems ile süzün.

Çalışmalar arasında sıfırlama

curl -X DELETE localhost:3003/log        # kaynağın gönderimlerini temizle
curl -X DELETE localhost:3004/log        # hedefin iletimlerini temizle
curl -X POST   localhost:3004/control -H 'content-type: application/json' -d '{"mode":"ok"}'
curl -X POST   localhost:3003/v2/_reset  # yalnızca sağlama test ediyorsanız

Bu neyi kanıtlar, neyi kanıtlamaz

Merkez'in gerçek uç nokta, çözme, kural, yönlendirme, dönüşüm ve iletim yollarını çalıştırır — üretimde çalışan kodun aynısını.

Gerçek cihazınızın doğru ilettiğini, gerçek ağınızın yapılandırıldığını ya da gerçek tüketici uygulamanızın taklit gibi davrandığını kanıtlamaz. Taklitlerin yerine geçtiği kısımlar tam olarak bunlardır. Buradaki yeşil bir döngüyü "Merkez doğru yapılandırılmış" olarak okuyun, "dağıtım tamam" olarak değil.

Sırada

Sahte kaynak
Tüm seçenekler: oturumlar, zamanlamalar, geçersiz kılmalar, sahte Sigfox API.
Sahte hedef
Tüm modlar ve çerçeveye göre karar veren downlink kuralları.
Copyright © 2026