Jump to content

SimTX API/Packets/StationList

From SimTX Wiki
StationList
Frame ServerFrame, field 30
Member station_list
Direction Server → client
Session Control, moderation
Roles ROLE_CONTROL, ROLE_MODERATION.
Permission None
Answered by
Answers ListStations
Defined in control.proto

StationList lists the stations on the server: every persistent station with live sessions, every visible satellite (with or without sessions), and every ad-hoc session. Each live receiver or transmitter appears as a LiveSession under its station.

Definition[edit | edit source]

message StationList {
  int64 request_id = 1;
  int64 captured_at_ms = 2;
  repeated Station stations = 3;
}

Fields[edit | edit source]

# Field Type Description
1 request_id int64 The ListStations request_id.
2 captured_at_ms int64 Simulation time of the snapshot, Unix ms.
3 stations repeated Station Persistent stations with live sessions, every visible satellite, and ad-hoc sessions.

Station[edit | edit source]

message Station {
  StationCore core = 1;
  repeated LiveSession sessions = 2;
}
# Field Type Description
1 core StationCore The station. For ad-hoc entries kind is ADHOC and station_id is empty. For satellites location is the sub-satellite point at captured_at_ms.
2 sessions repeated LiveSession Live sessions attached to the station. Exactly one for ad-hoc entries; may be empty for satellites.

LiveSession[edit | edit source]

message LiveSession {
  bytes session_id = 1;
  SessionRole role = 2;
  bytes antenna_id = 3;
  string callsign = 4;
  double frequency_hz = 5;
  string modulation = 6;       // string enum (common.proto); empty for receivers
  float power_watts = 7;
  float bandwidth_hz = 8;
  string address = 9;          // moderation sessions only
  GeoPoint location = 10;      // where the session's antenna is right now
}
# Field Type Description
1 session_id bytes 16-byte session id, as in the session's SessionStatus.
2 role SessionRole SESSION_ROLE_TX or SESSION_ROLE_RX.
3 antenna_id bytes 16-byte UUID of the station antenna in use. Empty for ad-hoc sessions.
4 callsign string Callsign of the session.
5 frequency_hz double Transmitter: carrier frequency. Receiver: centre frequency.
6 modulation string Transmitter: Modulation name. Empty for receivers.
7 power_watts float Transmitter: requested power. Receiver: 0.
8 bandwidth_hz float Transmitter: occupied bandwidth as measured by the server. Receiver: filter bandwidth.
9 address string Client address. Moderation sessions only; empty on control sessions.
10 location GeoPoint Where the session's antenna is now. For a satellite, the sub-satellite point, which moves.

Contents[edit | edit source]

  • Persistent stations appear with their live sessions. core carries the station's id, revision, kind, name, callsign, owner, visibility and placement.
  • Satellites: every ACTIVE or DEORBITING PUBLIC satellite is listed even with nobody attached. core.location is the sub-satellite point at captured_at_ms; core.orbit and core.attitude let a client propagate it. A satellite with core.deorbit set disappears at reentry_at_ms.
  • Ad-hoc sessions appear as entries with kind = STATION_KIND_ADHOC, an empty station_id and exactly one session.
  • UNLISTED stations of other accounts appear only as ad-hoc-style entries with the callsign; their id and placement are hidden.

Usage[edit | edit source]

  • The list is a snapshot. Poll ListStations to follow changes, every few seconds at most.
  • Do not rely on the order of the entries.
  • Use LiveSession.location for map markers. For a satellite it is the satellite's position, and it moves.
  • A session's id changes every time it reconnects. Callsigns are not unique.
  • Client addresses are filled in only on moderation sessions.

Examples[edit | edit source]

Complete frames, including the varint length prefix.

station_list (server to client, 560 bytes):

AE 04 F2 01 AA 04 08 05 10 E8 9B 83 B9 97 34 1A
90 02 0A 50 0A 10 11 11 11 11 22 22 43 33 84 44
55 55 55 55 55 55 10 04 18 01 22 08 42 75 64 61
70 65 73 74 2A 05 48 41 35 47 53 32 08 6F 70 65
72 61 74 6F 72 38 01 42 1B 09 00 00 00 00 00 C0
47 40 11 00 00 00 00 00 00 33 40 19 00 00 00 00
00 00 5E 40 12 62 0A 10 AA AA AA AA BB BB 4C CC
8D DD EE EE EE EE EE EE 10 01 1A 10 11 11 11 11
22 22 43 33 84 44 66 66 66 66 66 66 22 05 48 41
35 47 53 29 00 00 00 00 12 D8 6A 41 32 03 55 53
42 3D 00 00 48 42 45 00 C0 28 45 52 1B 09 00 00
00 00 00 C0 47 40 11 00 00 00 00 00 00 33 40 19
00 00 00 00 00 00 5E 40 12 58 0A 10 AA AA AA AA
BB BB 4C CC 8D DD FF FF FF FF FF FF 10 02 1A 10
11 11 11 11 22 22 43 33 84 44 66 66 66 66 66 66
22 05 48 41 35 47 53 29 00 00 00 00 34 FC 5A 41
45 00 80 3B 46 52 1B 09 00 00 00 00 00 C0 47 40
11 00 00 00 00 00 00 33 40 19 00 00 00 00 00 00
5E 40 1A A2 01 0A 9F 01 0A 10 99 99 99 99 88 88
47 77 86 66 55 55 55 55 55 55 10 03 18 02 22 08
53 69 6D 53 61 74 2D 31 2A 05 53 53 41 54 31 32
08 6F 70 65 72 61 74 6F 72 38 01 42 1B 09 00 00
00 00 00 00 24 40 11 00 00 00 00 00 00 34 40 19
00 00 00 00 E0 C8 20 41 4A 49 0A 0B 73 69 6D 74
78 2D 6A 32 2D 76 31 10 C0 BB F2 D6 06 21 00 00
00 00 00 09 BB 40 29 FC A9 F1 D2 4D 62 50 3F 31
66 66 66 66 66 66 58 40 39 00 00 00 00 00 00 5E
40 41 00 00 00 00 00 80 56 40 49 00 00 00 00 00
00 24 40 52 02 0A 00 1A 67 0A 1C 2A 06 4E 30 43
41 4C 4C 42 12 09 33 33 33 33 33 F3 40 C0 11 66
66 66 66 66 E6 62 40 12 47 0A 10 12 34 56 78 9A
BC 4D EF 81 23 45 67 89 AB CD EF 10 01 22 06 4E
30 43 41 4C 4C 29 00 00 00 00 84 42 4B 41 32 02
43 57 3D 00 00 A0 40 45 00 00 FA 43 52 12 09 33
33 33 33 33 F3 40 C0 11 66 66 66 66 66 E6 62 40

In protobuf text form:

station_list { request_id: 5 captured_at_ms: 1793000001000 stations { core { station_id: "\021\021\021\021\"\"C3\204DUUUUUU" revision: 4 kind: STATION_KIND_GROUND name: "Budapest" callsign: "HA5GS" owner_handle: "operator" visibility: STATION_VISIBILITY_PUBLIC location { latitude_deg: 47.5 longitude_deg: 19.0 altitude_meters: 120.0 } } sessions { session_id: "\252\252\252\252\273\273L\314\215\335\356\356\356\356\356\356" role: SESSION_ROLE_TX antenna_id: "\021\021\021\021\"\"C3\204Dffffff" callsign: "HA5GS" frequency_hz: 1.4074E7 modulation: "USB" power_watts: 50.0 bandwidth_hz: 2700.0 location { latitude_deg: 47.5 longitude_deg: 19.0 altitude_meters: 120.0 } } sessions { session_id: "\252\252\252\252\273\273L\314\215\335\377\377\377\377\377\377" role: SESSION_ROLE_RX antenna_id: "\021\021\021\021\"\"C3\204Dffffff" callsign: "HA5GS" frequency_hz: 7074000.0 bandwidth_hz: 12000.0 location { latitude_deg: 47.5 longitude_deg: 19.0 altitude_meters: 120.0 } } } stations { core { station_id: "\231\231\231\231\210\210Gw\206fUUUUUU" revision: 3 kind: STATION_KIND_SATELLITE name: "SimSat-1" callsign: "SSAT1" owner_handle: "operator" visibility: STATION_VISIBILITY_PUBLIC location { latitude_deg: 10.0 longitude_deg: 20.0 altitude_meters: 550000.0 } orbit { model: "simtx-j2-v1" epoch_seconds: 1792843200 semi_major_axis_km: 6921.0 eccentricity: 0.001 inclination_deg: 97.6 raan_deg: 120.0 argument_of_perigee_deg: 90.0 mean_anomaly_deg: 10.0 } attitude { nadir { } } } } stations { core { callsign: "N0CALL" location { latitude_deg: -33.9 longitude_deg: 151.2 } } sessions { session_id: "\0224Vx\232\274M\357\201#Eg\211\253\315\357" role: SESSION_ROLE_TX callsign: "N0CALL" frequency_hz: 3573000.0 modulation: "CW" power_watts: 5.0 bandwidth_hz: 500.0 location { latitude_deg: -33.9 longitude_deg: 151.2 } } } }

station_list_deorbiting_satellite (server to client, 225 bytes):

DF 01                                           frame length 223
F2 01 DB 01                                     station_list (StationList), 219 bytes
  08 06                                         request_id = 6
  10 D0 A3 83 B9 97 34                          captured_at_ms = 1793000002000
  1A CF 01                                      stations (Station), 207 bytes
    0A CC 01                                    core (StationCore), 204 bytes
      0A 10 99 99 99 99 …                       station_id = 99999999-8888-4777-8666-555555555555
      10 04                                     revision = 4
      18 02                                     kind = 2 (STATION_KIND_SATELLITE)
      22 08 53 69 6D 53 61 74 2D 31             name = "SimSat-1"
      2A 05 53 53 41 54 31                      callsign = "SSAT1"
      32 08 6F 70 65 72 61 74 6F 72             owner_handle = "operator"
      38 01                                     visibility = 1 (STATION_VISIBILITY_PUBLIC)
      42 1B                                     location (GeoPoint), 27 bytes
        09 00 00 00 00 00 00 29 C0              latitude_deg = -12.5
        11 00 00 00 00 00 80 40 40              longitude_deg = 33.0
        19 00 00 00 00 40 06 19 41              altitude_meters = 410000.0
      4A 49                                     orbit (OrbitalElements), 73 bytes
        0A 0B 73 69 6D 74 78 2D 6A 32 2D 76 31  model = "simtx-j2-v1"
        10 D0 D7 F2 D6 06                       epoch_seconds = 1792846800
        21 00 00 00 00 00 23 BA 40              semi_major_axis_km = 6691.0
        29 22 FD F6 75 E0 9C 91 3F              eccentricity = 0.0172
        31 66 66 66 66 66 66 58 40              inclination_deg = 97.6
        39 00 00 00 00 00 00 5E 40              raan_deg = 120.0
        41 00 00 00 00 00 80 56 40              argument_of_perigee_deg = 90.0
        49 00 00 00 00 00 00 69 40              mean_anomaly_deg = 200.0
      52 02                                     attitude (Attitude), 2 bytes
        0A 00                                   nadir (Nadir), 0 bytes
      5A 2B                                     deorbit (Deorbit), 43 bytes
        08 80 C9 FC EF 96 34                    burn_at_ms = 1792846800000
        10 90 C6 94 F1 96 34                    reentry_at_ms = 1792849290000
        1A 12                                   reentry_point (GeoPoint), 18 bytes
          09 00 00 00 00 00 20 43 C0            latitude_deg = -38.25
          11 00 00 00 00 00 70 62 40            longitude_deg = 147.5
        21 00 00 00 00 00 E0 4E 40              delta_v_mps = 61.75

See also[edit | edit source]

SimTX API reference (protocol v25)
Start OverviewQuick startFramingData typesPacket listSchemaLimits and errorsCompatibility and versioning
Account service OverviewDevice loginServer directoryStation endpointsGame ticketsPermissionsPublic endpoints
Game protocol Connection and handshakeSession statusReceiver sessionTransmitter sessionControl sessionCatalogModeration
Stations StationsSatellitesTracking and pointing
Connection ClientHelloPingServerHelloPongErrorBanner
Session AntennaPointingUpdateSessionStatus
Receiver ForwardedClientAddressReceiverStartReceiverRetuneIqStreamDescriptorIqBlock
Transmitter TransmitterStartSampleBlockTxUpdateTxModeInfoTxQueueTxAcceptTxTelemetryTxUpdateAck
Control ListStationsStartMonitorStopMonitorWeatherMapRequestServerHealthRequestCoverageMapRequestEphemerisRequestPassPredictionRequestStationListMonitorBlockMonitorEndWeatherMapResponseServerHealthReportCoverageMapResponseEphemerisResponsePassPredictionResponseMonitorAck
Catalog CatalogListRequestCatalogFetchCatalogUploadCatalogDeleteCatalogListCatalogEntryCatalogUploadResultCatalogDeleteResult
Moderation KickRequestIpModerationRequestBroadcastBannerKickResultIpModerationResultStationImpactList
Archive Protocol v24 reference