Synoptic Code: Decoding a Russian Navy Weather Report Sent in Morse

Bellingcat Maritime Mysteries. A Morse transmission from the Russian tanker Yelnya on the Black Sea. Morse gives five-digit groups, the call sign leads to an X post, and the WMO ship code turns the groups into weather, with one tempting wrong answer on the way.

Title: Synoptic Code (Bellingcat Challenge, Maritime Mysteries series, by Galen, Bellingcat)

Description: This is a morse code transmission received on the 13th October 2024. The sender is thought to be the Yelnya, a Russian ship operating on the Black Sea.

.-. -.-. ...- / -.. . / ..- -.-. - .- ..... / .---- ...-- .---- ---.. .---- / ----. ----. ...-- ....- ..... / .---- ----- ...-- ....- -.... / ....- .---- -.... ----. ---.. / ...-- ..--- ....- ----- ..... / .---- ----- ..--- ---.. ----- / ....- ----- .---- ..--- ----- / ..... ....- ----- ----- ----- / --... ----- ..--- ----- ----- / ---.. ...-- ..... ----- ----- / ..--- ..--- ..--- ..... ..--- / ----- ----- ..--- ---.. ----- / .---- ...-- ----- .---- ..--- / -... - / .- .-. / ..- -.-. - .- ..... / -.

Question: Can you decode the message? What was the reported air temperature in degrees Celsius? (give your answer to one decimal place i.e. “12.3”)

The answer, up front: the message is a standard WMO ship weather report (FM 13 SHIP) from call sign UCTA5. Its air-temperature group is 10280, so +28.0 °C. The obvious online answer, 34.6, is the ship’s longitude read as a temperature.

28.0

The route: Morse to text, the call sign to an X post with the same message, and a decoding guide for the ship code to check what each group means. That last step matters, because the decode offered in the X thread is wrong.

Step 1: Morse to text

The challenge hints at it (“A morse code lookup table. Is this the best way?”): don’t decode 380 dots and dashes by hand. I used the Russian Morse code translator at themorselab.com, which falls back to Latin letters. The message only contains Latin letters and digits, so any International Morse decoder gives the same result.

themorselab.com Russian Morse code translator: in the text field RCV DE UCTA5 13181 99345 10346 41698 32405 10280 40120 54000 70200 83500 22252 00280 13012 BT AR UCTA5 N, on the right the matching Morse

Twenty words. Five letters of radio procedure, then thirteen groups of five digits.

RCV DE UCTA5 13181 99345 10346 41698 32405 10280 40120 54000 70200 83500 22252 00280 13012 BT AR UCTA5 N

The structure gives most of it away:

  • DE UCTA5 is radio procedure: “from UCTA5”. UCTA5 is a call sign. Russian call signs start with U or R.
  • Five-digit groups starting with a fixed identifier (99…, 222…) are the shape of a synoptic weather report, the WMO format that ships and weather stations send every six hours. 13181 starts with 13 and 18: the 13th, 18 UTC, which matches the date in the brief and one of the standard reporting hours.
  • BT AR are prosigns: break, end of message.

Step 2: The call sign leads to an X post

A Google search for the call sign alone:

ucta5

Google results for ucta5: an itamilradar article titled Eventually, the Yelnya moved, and, boxed in red, a post on X: TJ on X: "Russian Navy Morse code weather from Altay … Russian Navy Morse code weather from Altay Class tanker Yelnya, 12464 Kilohertz CW, 1805 UTC RCV DE UCTA5 13181 99345 10346 41698 32405 …

The second result quotes the challenge’s groups word for word: “Russian Navy Morse code weather from Altay Class tanker Yelnya”.

The post on X from 13 October 2024, 18:28 UTC, is by a radio amateur who logged the transmission on 12464 kHz CW at 1805 UTC. It contains the identical message and a position: 34.5N 34.6E, heading south-west at 6–10 knots. A reply in the thread explains the call sign: the Yelnya still sent as RLA88 in March 2022, before its call sign changed to UCTA5.

The X post: Russian Navy Morse code weather from Altay Class tanker Yelnya, 12464 Kilohertz CW, 1805 UTC, the message in a red box, Breaks to 34.5N 34.6E Heading S West at 6-10 Knots, a Google Maps link to 34.500000, 34.600000, dated 8:28 PM Oct 13, 2024 (local time, 18:28 UTC). Replies below with authors pixelated: the RLA88 to UCTA5 call sign change, a reply from Jan 10, 2025 asking for the air temperature, and the answer 10346 = Air temperature 34.6 degrees, 00280 = Sea temperature 28.0 degrees, with links to a ship decode PDF at met.nps.edu and a land-station decode, all boxed in red

The post confirms the sender and gives the position. The reply asking about the air temperature gives a decode, and links the reference guide.

How sure? Sure about the source: same date, same call sign, same groups. The challenge message ends in N (-.), the X post in K (-.-, “over”), one dash apart, which is a typical copying difference and doesn’t change any data group.

Step 3: False lead, the decode in the thread

A reply from January 2025 asks for the air temperature, and the answer comes straight back:

10346 = Air temperature 34.6 degrees 00280 = Sea temperature 28.0 degrees

It looks plausible: 10346 starts with 1, and the air-temperature group in the ship code is 1snTTT. But it’s wrong twice:

  1. 10346 is not a temperature. In the ship code, the group after the latitude (99LaLaLa) is always the longitude, QcLoLoLoLo. 1 is the quadrant (north/east), 0346 is 034.6°. The X post itself gives the position as 34.5N 34.6E, so its own message contains that longitude.
  2. The actual air-temperature group, 10280, is skipped. The reply quotes 00280 instead. That’s the sea-water temperature group (0snTwTwTw), and it happens to hold the same value, 28.0. So the reply has the right number under the wrong label and the wrong number under the right one.

Lesson: a five-digit group means what its position says, not what its first digit looks like. A decode without the group order is a guess.

Step 4: Decoding with the ship code

The same reply links the guide that settles it: Decode Ship Observation Code from the Naval Postgraduate School, FM 13-IX SHIP. It gives the symbolic form, the order of the groups:

DDDD YYGGiw 99LaLaLa QcLoLoLoLo iRiXhVV Nddff (00fff) 1snTTT
2snTdTdTd 4PPPP 5appp 7wwW1W2 8NhCLCMCH 9GGgg
222DsVs (0snTwTwTw) (1PwaPwaHwaHwa) ...

and defines the air-temperature group:

Page 4 of the NPS ship code guide, with a red box around the definition: 1snTTT, Surface Air Temperature Group. 1, identifier for the air temperature group. sn, sign of the temperature; 0 = positive or zero; 1 = negative. TTT, surface air temperature in tenths of degrees Celsius

1snTTT: identifier 1, sign 0 = positive, temperature in tenths of a degree. 10280 = +28.0 °C.

Laid over the message, group by group:

The thirteen data groups as tiles: UCTA5 call sign, 13181 13th 18 UTC, 99345 34.5° N and 10346 034.6° E in blue, 41698 cloud and visibility, 32405 wind 240°/5, 10280 AIR +28.0 °C in green, 40120 1012.0 hPa, 54000 tendency 0, 70200 weather, 83500 clouds, 22252 SW 6-10 kn, 00280 SEA +28.0 °C in yellow; a legend explains that 10346 starts with 1 but is the longitude

Blue is the position, green the air temperature, yellow the sea temperature. The 1 at the start of 10346 is a quadrant code.

GroupSymbolic formDecoded
UCTA5DDDDcall sign (Yelnya)
13181YYGGiw13th of the month, 18 UTC; iw=1: wind from anemometer, in m/s
9934599LaLaLalatitude 34.5°
10346QcLoLoLoLoquadrant 1 = north/east; longitude 034.6°
41698iRiXhVVno precipitation group; manned, weather group included; cloud base 1000–1500 m; visibility 20 km
32405Nddff3/8 cloud cover; wind from 240° at 5 m/s
102801snTTTair temperature +28.0 °C
401204PPPPsea-level pressure 1012.0 hPa
540005appppressure steady, 0.0 hPa change in 3 hours
702007wwW1W2state of sky unchanged
835008NhCLCMCH3/8 low cloud, stratocumulus
22252222DsVssection 2: course south-west, 6–10 knots
002800snTwTwTwsea-water temperature +28.0 °C

The last group, 13012, would be the instrumental wave group (1PwaPwaHwaHwa), but a 30-second wind-wave period with 6 m height isn’t plausible for a calm Mediterranean evening. It plays no part in the answer either way. For cloud base, weather and cloud type the guide refers to the WMO land-station code tables; visibility (VV, table 4377) is printed in the guide itself.

Verification

  1. Position cross-check. Decoded as 99LaLaLa QcLoLoLoLo, the message puts the ship at 34.5° N, 34.6° E. That’s exactly the position the X post gives independently of any decoding, and it’s the eastern Mediterranean, between Cyprus and the Levant, on a route from the Black Sea area. If 10346 were the air temperature, the report would have no longitude at all.
  2. Course cross-check. 22252 decodes to south-west at 6–10 knots, word for word the “Heading S West at 6-10 Knots” in the post.
  3. Group order. 10280 sits where the guide puts 1snTTT, after Nddff and before 4PPPP. 00280 sits after 222DsVs, where the guide puts the sea temperature.

The moment of certainty is the position: the X post’s own “34.5N 34.6E” is 99345 10346. Once those two groups are the position, the only temperature group left in section 1 is 10280.

Answer

28.0

Takeaways

  • Five-digit groups are a format, so find the format. Repeated identifiers, a day-hour group and a call sign up front point to a synoptic report. Once you know the format, every group has a defined meaning.
  • Position decides meaning. In SYNOP and SHIP codes, a group’s first digit is often an identifier, but not always: after 99LaLaLa comes the longitude, whatever its first digit. Read the groups in order against the symbolic form.
  • A call sign is a search term. Radio amateurs log military transmissions publicly, with time, frequency and often position. One search turned a string of digits into a named ship at a known place.
  • Check a found answer against its own source. The wrong decode sat in the same thread as the position that disproves it.

Sources