Juliet Oscar 30

DXCluster per REST/JSON

JO30.de bietet – versuchsweise – einen Service für Entwickler an.

Jeder der schon mal versucht hat einen DXCluster in seiner Software abzubilden, wird auf das Problem mit dem Streaming der Clusterdaten gestossen sein. Um einen Cluster einigermassen akkurat abzubilden, muss man sich per telnet/TCP auf den Cluster verbinden und dann werden einem die Informationen hereingespült.
Das ist auch vollkommen sinnvoll, das so zu machen, man möchte die Infos ja in Echtzeit haben.

Möchte man jedoch gezielt suchen wer bspw. auf welcher QRG gespottet wurde, wird es schon schwieriger. Für den Endanwender gibt es wirklich gute Seiten (bspw. dxheat.com oder dxfuncluster.com) wo man sich das ganze Anzeigen lassen kann.
Viele Logbücher arbeiten mit dem Cluster, in dem sie die Echtzeitinfos – ab Start des Logbuchprogramms – sammeln und durchsuchbar machen. Die Infos sind dann aber erst ab dem Zeitpunkt verfügbar, wo das Programm sich zum ersten mal mit dem Cluster verbunden hat.

Hier setzt unserer kleiner Webservice an. Er sammelt die letzten 1000 Spots ein und macht diese per REST/JSON verfügbar. Sobald der 1001e Spot kommt, wird der älteste aus dem Cache geworfen. Rollierendes Prinzip also.

Das ganze kann man auch selber Betreiben. Der Quellcode in node.js ist opensource und bei github verfügbar

Es gibt zwei Methoden den Cluster per REST abzufragen:

  1.  /spots –> Listet alle Spots auf, die im Cache sind.
  2.  /spot/[QRG] –> Gibt den letzten Spot auf eben jener QRG aus.

Basis-URL unseres Dienstes ist: dxc.jo30.de/dxcache – gefolgt von den beiden o.g. Methoden.
Beispieloutput von “/spots”:

[
  {
    spotter: "AB1CDE",
    spotted: "ZY9XWV",
    frequency: 7113,
    message: "tnx qso",
    when: "2023-07-16T09:19:11.457Z",
    add: {
      mode: "SSB",
      band: 40
    }
  },
  {
    spotter: "MM0MMM",
    spotted: "DL0L",
    frequency: 14193,
    message: "VY 73",
    when: "2023-07-16T09:19:18.710Z",
    add: {
      mode: "SSB",
      band: 20
  }
},
]

 

Beispielout von “/spot/50260”:

{
    spotter: "MM0MMM",
    spotted: "DL0L",
    frequency: 14193,
    message: "VY 73",
    when: "2023-07-16T09:19:18.710Z",
    add: {
      mode: "SSB",
      band: 20
  }
}

 


English:

JO30 provides – for testing – a small Webservice for Developers.
Everyone who tried using a DXCluster within his Software-project stumbled up on the following Problem:
To work with a cluster,  you have to subscribe to a telnet/TCP-Stream where latest spots are streamed.
That’s okay, because you want to have the Information in Realtime. So streaming is fine here.

But if you want to search who was spotted on a frequency last, you have to cache all of these informations given by storing them while streaming. For the normal User there are plenty of Websites, where you can easily search (like dxheat.com or dxfuncluster.com).
Many logbooks/tools work with the Cluster, in the following way: They store the streamcontens for their use locally and work with them. But the oldest spot will always be the one, when Software is started.

This is exactly our usecase. Provide a REST-API which is based on the RT-Stream. The last 1000 spots are cached here. it’s kind of a “rolling cache”. The amount of spots to be saved in memory is adjustable.
The Code for the service is opensource, so you’re able to run your own cache. Available at github

Currently there are two methods implemented:

  1.  /spots –> List all cached spots.
  2.  /spot/[QRG in kHz] –> Retrieve the youngest spot of [QRG in kHz] out of the cache

Base-URL of our service is: dxc.jo30.de/dxcache – followed by one of the methods

Exampleoutput of “/spots”:

[ {
    spotter: "AB1CDE", 
    spotted: "ZY9XWV", 
    frequency: 7113, 
    message: "tnx qso", 
    when: "2023-07-16T09:19:11.457Z", 
    add: { 
          mode: "SSB", 
          band: 40
    } 
  }, 
  { 
     spotter: "MM0MMM",
     spotted: "DL0L", 
     frequency: 14193, 
     message: "VY 73", 
     when: "2023-07-16T09:19:18.710Z", 
     add: { 
           mode: "SSB", 
           band: 20 
     } 
  }, 
]

 

Exampleoutput of “/spot/14193”:

{
    spotter: "MM0MMM",
    spotted: "DL0L",
    frequency: 14193,
    message: "VY 73",
    when: "2023-07-16T09:19:18.710Z",
    add: {
      mode: "SSB",
      band: 20
  }
}