SWIM Demo Server-AMQP Data Subscriptions

Data Subscriptions using AMQP

You will need an AMQP 1.0 client that can connect using SSL.

  1. Only SSL connections are allowed on ports 5671 and 5672.
  2. amqp.swim.iblsoft.com:5672 – does not verify the client's certificate. However, clients can verify the server's authenticity using the HARICA testing certificate.
  3. amqp.swim.iblsoft.com:5671 – same as above, but verifies also the client certificates.
    1. In this case you need to get a client certificate signed by the HARICA root testing certificate.

Please see also Working with Certificates for more details. The connection to 5672 will work even without the HARICA certificate, in which case the server authenticity verification will be bypassed.

Note
Under normal circumstances, the AMQP port 5672 is reserved for unencrypted connections. While the Artemis ActiveMQ broker supports such an unencrypted connection mode, we have chosen to disable it and only allow SSL connections. As explained above, the connection to 5672 requires SSL but does not require client or server certificate verification and can work without either.


Table of Contents:

AMQP Clients 

Python Client Example

A Python example client that connects to amqp.swim.iblsoft.com  is on Github, licensed under Apache License, Version 2.0:
https://github.com/iblsoft/swimdemo

  1. Uses the qpid-proton  module to connect to amqp.swim.iblsoft.com:5672 using SSL
  2. It attempts to verify the server's authenticity using the HARICA root testing certificate
  3. If this fails, then the peer verification will be turned off, but the link is still going to be encrypted using SSL.
    1. A failure to verify the server can happen, for example, when the HARICA certificate is not known to the operating system on Windows.
  4. The client subscribes to one of the topics.
  5. When an IWXXM report is received in the AMQP notification, the script:
    1. dumps the AMQP message and application properties,
    2. uncompresses the gzipped payload
    3. extracts important identification information from the IWXXM (report type, IWXXM version, issue time, observation time, validity period).

IBL Moving Weather (Message/File Switching System)

IBL's Moving Weather can connect to amqp.swim.iblsoft.com  and download the IWXXM reports, so the users who have a license for Moving Weather can set up the data download using a communication channel.

Topics for subscription

Topic Old name Description
origin.a.wis2.com-ibl.data.core.weather.aviation.metar

amqp-delivery-queue-metar

IWXXM METAR and SPECI
origin.a.wis2.com-ibl.data.core.weather.aviation.taf amqp-delivery-queue-taf IWXXM TAF
origin.a.wis2.com-ibl.data.core.weather.aviation.sigmet amqp-delivery-queue-sigmet IWXXM SIGMET
Note
For now, we are following the WIS 2.0 Topic Hierarchy, with slashes replaced with dots because AMQP can not have / (slash) characters in the topic name. Also note that the WIS 2.0 Topic Hierarchy for aviation weather does not include SIGMET as of April 2025, but hopefully, further aviation report types will be added.

Message Properties

Please see  the OASIS AMQP 1.0 Part 3: Messaging (Properties section) for the precise definition of the AMQP Message Properties.

Subject

According to the AMQP specification, the message subject is:

A common field for summary information about the message content and purpose.

Currently, our subject fields look like this:

Subject example Note
TAF_LOWS_NORMAL_20250401051500  Original TAF for Salzburg with iwxxm:issueTime at 05:15Z
TAF_LOWS_AMENDMENT_20250401064500 TAF amendment for Salzburg issued at 06:45Z
SPECI_LOWS_CORRECTION_20250401064500 SPECI correction

The structure of the subject field is:

  • Report type: METAR , SPECI , TAF , SIGMET 
  • Location indicator: ICAO code of aerodrome or airspace.
  • Report status: Extracted from the iwxxm:reportStatus attribute of the iwxxm:METAR/SPECI/TAF/SIGMET, one of:
    • NORMAL
    • AMENDMENT
    • CORRECTION
  • Issue time: Issue time from iwxxm:issueTime element of the IWXXM report as ISO8601 UTC datetime but with all characters except digits removed.

absolute-expiry-time

We are setting the absolute-expiry-time  property to the current UTC time + the ttl (time-to-live) field from the AMQP heading.

content-type

The RFC2046 MIME type for the message's application-data section. For IWXXM data this is application/xml .

content-encoding

We are using a content-encoding  of type gzip (RFC1952) for IWXXM data, because:

address

Includes the original topic of the message distributed such as origin.a.wis2.com-ibl.data.core.weather.aviation.metar.

This is useful if the user subscribes with a wildcard topic such as #.core.weather.aviation.#.

Application Properties

The AMQP application properties for the standard aviation reports are based on data extraction from the IWXXM data model. The table below explains the relationship between each property and the source element or attribute in the IWXXM report.

The paths to IWXXM elements and attributes follow a simplified XPath 1.0 syntax.

TODO: Boris Burger (sk.ibl) Update application properties to match the current slides for MET3SG

Date and time properties

Property properties.datetime  properties.issue-datetime 
Meaning Base date & time of observation of product (aka reference time). Datetime of issue of the report. Used to determine the correct sequence of multiple updates (see “links.ref”) for the same “subject” in the Message Properties.
METAR

iwxxm:METAR/iwxxm:observationTime

  • Will contain elements gml:TimeInstant/gml:timePosition with the UTC date and time of the observation (the measurement time).
  • Alternatively the iwxxm:observationTime can have an xlink.href attribute pointing to the gml:id of the iwxxm:issueTime/gml:timeInstant . In this case the observation time and the issue time are considered equal.

iwxxm:METAR/iwxxm:issueTime

  • Will contain elements gml:TimeInstant/gml:timePosition with the UTC date and time of issue of the report.
  • Alternatively the iwxxm:issueTime element can have an xlink:href attribute pointing to the gml:id of  iwxxm:observationTime/gml:TimeInstant , in which case the observation and issue time are equal.
TAF issueTime as well?

iwxxm:TAF/iwxxm:issueTime

  • Contains elements gml:TimeInstant/gml:timePosition with the UTC date and time of issue of the TAF.
SIGMET issueTime ?

iwxxm:SIGMET/iwxxm:issueTime

  • Contains a subelement gml:TimeInstant/gml:timePosition  with the UTC date and time of issue of the report.

Link properties

Property links.ref  links.type 
Meaning One of "canonical"  or "update". Used to distinguish between the initial report and its further corrections and amendments. MIME type of the reports. 
METAR

Based on iwxxm:METAR/@reportStatus which can be one of

  • "NORMAL" → "canonical"
  • "CORRECTION" → "update"
application/xml
TAF

Based on iwxxm:TAF/@reportStatus which can be one of

  • "NORMAL" → "canonical"
  • "AMENDED" → "update"
  • "CORRECTION" → "update"
application/xml
SIGMET iwxxm:SIGMET/@reportStatus should always be "NORMAL" which translates to "canonical". application/xml

Geometric properties - Type and Location

Property geometry.type 

geometry.locationid 

Meaning

Distinguishes between point-based (e.g. METAR, TAF) and area-based reports (e.g. SIGMET, AIRMET).

  • point-based reports have aditional properties geometry.coordinate.longitude  and geometry.coordinate.latitude .
  • area-based reports have additional properties geometry.coordinate.(longitude|latitude).(min|max) 
Identifies Airport/FIR/Center of the message, such as “EBBR" 4-letter ICAO code.
METAR

Point 

Simplified XPath with recursive search: iwxxm:METAR/iwxxm:aerodrome//aixm:locationIndicatorICAO 

The full path in the XML is:

  • iwxxm:METAR
    • iwxxm:aerodrome
      • aixm:AirportHeliport
        • aixm:timeSlice
          • aixm:AirportHeliportTimeSlice
            • aixm:locationIndicatorICAO
TAF Point  Analogous to METAR, but the iwxxm:aerodrome  is under iwxxm:TAF .
SIGMET Bounding-box 

This will be the FIR/UIR/CTA affected by the SIGMET warning. It is stored in iwxxm:issuingAirTrafficServicesRegion where you need to do a search for aixm:designator.

An example XPath (and analogously for iwxxm:VolcanicAshSIGMET  and iwxxm:TropicalCycloneSIGMET ):

iwxxm:SIGMET/iwxxm:issuingAirTrafficServicesRegion//aixm:designator 

Geometric properties - Points and Bounding Boxes

Property

geometry.coordinate.longitude 
geometry.coordinate.latitude 

geometry.coordinate.longitude-min
geometry.coordinate.longitude-max
geometry.coordinate.latitude-min
geometry.coordinate.latitude-max

Meaning The longitude and latitude coordinate components of the location of an airport or a reported event for point-based reports. To be used with area-based reports: SIGMET, AIRMET, and other FIR/polygonal/area reports. Defines the longitude and latitude range of the bounding-box around the weather area.
METAR

The coordinates might not be included in IWXXM for NIL METAR, however they should be present for the initial METARs and their corrections.

Simplified XPath with recursive search: iwxxm:METAR/iwxxm:aerodrome//aixm:ARP//gml:pos

The full path is:

  • iwxxm:METAR
    • iwxxm:aerodrome
      • aixm:AirportHeliport
        • aixm:timeSlice
          • aixm:AirportHeliportTimeSlice
            • aixm:ARP
              • aixm:ElevatedPoint
                • gml:pos
Not applicable.
TAF

The coordinates might not be included in IWXXM for CNL TAF or NIL TAF, however they should be present for the initial TAFs and regular amendments or corrections.

Simplified XPath with recursive search: iwxxm:TAF/iwxxm:aerodrome//aixm:ARP//gml:pos

The full path is:

  • iwxxm:TAF
    • iwxxm:aerodrome
      • aixm:AirportHeliport
        • aixm:timeSlice
          • aixm:AirportHeliportTimeSlice
            • aixm:ARP
              • aixm:ElevatedPoint
                • gml:pos

Not applicable.

SIGMET Not applicable.

There are 3 types of IWXXM SIGMET warnings:

  • iwxxm:SIGMET  
  • iwxxm:VolcanicAshSIGMET
  • iwxxm:TropicalCycloneSIGMET 

There is an element iwxxm:analysisCollection directly under the parent SIGMET element which deeper in its structure will contain one or more  aixm:AirspaceVolume  elements. Under the aixm:airspaceVolume the coordinates are stored in:

  • one or more <gml:CircleByCenterPoint>  elements for point locations. The GML circle has a <gml:pos>  for latitude/longitude of its center and <gml:radius>  that is either zero (e.g. turbulence reported by airplanes) but can be also a distance of 200km or more (for tropical cyclones), which then has to be accounted for in the bounding box calculation, or
  • one or more <gml:LinearRing>  elements for polygon locations, than contain the polygon coordinates in <gml:posList>  sub-element.

The XPath relative to the parent SIGMET (or TC SIGMET, VA SIGMET) element  is iwxxm:analysisCollection//aixm:AirspaceVolume//gml:CircleByCenterPoint  and iwxxm:analysisCollection//aixm:AirspaceVolume//gml:LinearRing and will often result in multiple geometries.

Specifically for iwxxm:VolcanicAshSIGMET  the bounding-box calculation needs to include the volcano coordinates from iwxxm:TropicalCycloneSIGMET/iwxxm:eruptingVolcano  and search for any gml:Point/gml:pos under it.

Specifically for iwxxm:TropicalCycloneSIGMET  the bounding-box needs to take into account also any iwxxm:tropicalCyclonePosition  elements nested deeply under iwxxm:analysisCollection , that will contain a gml:Point with the forecast of TC center position at the end of SIGMETs validity interval.