F wettersonde - API



API (Application Programming Interface)


Weather data upload


<
Field Type Description Example values
temperature float Temperature in degree celsius 20
humidity float Humidity in percent 60
pressure float Pressure in pascal 101300
callsign string Callsign NOCALL
wind_dir int Wind direction in degree 220
wind_avg float Wind average in m/s 2.5
wind_max float Wind maximal in m/s 2.5
rain_mmint Rain in mm 100
Example : http://api.wettersonde.net/weather.php?temperature=20&humidity=60&callsign=NOCALL&pressure=101300


Telemetry upload


Domain:

POST http://api.wettersonde.net/telemetrie.php

Headers:

Content-Type: application/json

Supported payload formats

The telemetry endpoint accepts the previous single-frame JSON format and the new batch format. Internally both formats are processed as a list of frames.

FormatDescription
Single frameOne JSON object containing one telemetry frame. Existing clients can continue to use this format.
Batch objectA JSON object with a frames array containing multiple telemetry frames, including frames from different sondes.
Direct arrayA JSON array containing multiple telemetry frame objects.

Required fields per frame

Field Type Description
timestamp string UTC time in format HHMMSS, for example 134501 = 13:45:01 UTC
frameintFrame number or uptime counter when available
latitudefloatLatitude
longitudefloatLongitude
altitudefloatAltitude in meters
speedfloatSpeed in km/h
directionintDirection in degrees, 0–360
frequencyfloatFrequency in MHz, 400–406
typestringSonde type, for example RS41, DFM17, M10, M20 or iMET
serialstringSerial number of the sonde
callsignstringReceiver or station callsign
climbfloatClimb rate in m/s

Optional fields per frame

Field Type Description
temperaturefloatTemperature in degree Celsius
pressurefloatPressure value from the sonde
humidityfloatHumidity in percent
voltagefloatBattery voltage
rssifloatReceiver signal strength
burstkilltimerintSeconds until or since burst-kill timer; stored as formatted duration in the database
killtimerintSeconds until transmitter shutdown; stored as formatted duration in the database
satintNumber of satellites
xdatastringExtended data string.
xdata1stringExtended data string.
xdata2stringExtended data string.
xdata3stringExtended data string.

Validation rules

  • timestamp must be in format HHMMSS and must represent UTC time.
  • direction must be between 0 and 360.
  • speed must be greater than or equal to 0.
  • frequency must be between 400 and 406 MHz.
  • serial must match [A-Za-z0-9-].
  • A maximum of 500 frames can be sent in one request.


Example request: single frame

{
  "timestamp": "134501",
  "frame": 1234,
  "latitude": 52.5200,
  "longitude": 13.4050,
  "altitude": 12000,
  "speed": 50,
  "direction": 180,
  "frequency": 403.5,
  "type": "RS41",
  "serial": "ABC-123",
  "callsign": "DL1XYZ",
  "climb": 5.2,
  "temperature": -40,
  "pressure": 300,
  "humidity": 20,
  "voltage": 3.3,
  "rssi": -91
}

Example request: batch object

{
  "frames": [
    {
      "timestamp": "134501",
      "frame": 1234,
      "latitude": 52.5200,
      "longitude": 13.4050,
      "altitude": 12000,
      "speed": 50,
      "direction": 180,
      "frequency": 403.5,
      "type": "RS41",
      "serial": "ABC-123",
      "callsign": "DL1XYZ",
      "climb": 5.2
    },
    {
      "timestamp": "134502",
      "frame": 889,
      "latitude": 48.1372,
      "longitude": 11.5756,
      "altitude": 8500,
      "speed": 42,
      "direction": 220,
      "frequency": 404.2,
      "type": "DFM17",
      "serial": "D21065622",
      "callsign": "DL1XYZ",
      "climb": -3.1,
      "xdata": "122..."
    }
  ]
}

Example request: direct array

[
  {
    "timestamp": "134501",
    "frame": 1234,
    "latitude": 52.5200,
    "longitude": 13.4050,
    "altitude": 12000,
    "speed": 50,
    "direction": 180,
    "frequency": 403.5,
    "type": "RS41",
    "serial": "ABC-123",
    "callsign": "DL1XYZ",
    "climb": 5.2
  },
  {
    "timestamp": "134502",
    "frame": 1235,
    "latitude": 52.5300,
    "longitude": 13.4150,
    "altitude": 12040,
    "speed": 51,
    "direction": 181,
    "frequency": 403.5,
    "type": "RS41",
    "serial": "ABC-123",
    "callsign": "DL1XYZ",
    "climb": 5.1
  }
]

Responses

✅ Success (200)
{
  "status": "ok",
  "mode": "batch",
  "message": "DB batch insert ok",
  "received": 100,
  "inserted": 94,
  "ignored": 6,
  "cleanup_deleted": 12,
  "xdata_written": 3
}
✅ Success without new database rows (200)
{
  "status": "ok",
  "mode": "single",
  "message": "No new frames to insert",
  "received": 1,
  "inserted": 0,
  "ignored": 1,
  "cleanup_deleted": 0,
  "xdata_written": 0
}
❌ Error
{
  "error": "Missing field: latitude",
  "frame_index": 0
}

Status codes

CodeDescription
200Success
400Bad request or invalid frame data
405Method not allowed
413Too many frames in one request
500Server error



Position upload


Domain:

POST http://api.wettersonde.net/position.php

Headers:

Content-Type: application/json

Required Fields

Field Type Description
latitudefloatLatitude
longitudefloatLongitude
callsignstringReceiver callsign
softwarestringSoftware name
versionstringSoftware version

Example Request

{
  "latitude": 52.5200,
  "longitude": 13.4050,
  "callsign": "DL1XYZ",
  "software": "dxlAPRS",
  "version": "1.37b"
}

Responses

✅ Success (200)
{
  "status": "ok",
  "message": "DB insert ok"
}
❌ Error
{
  "error": "Missing field: latitude"
}

Status Codes

CodeDescription
200Success
400Bad request
405Method not allowed
500Server error



© wettersonde.net - Jean-Michael (DO2JMG) 2026