Decoding P2000 messages from Linux

Written by Martijn Braam on 2015-08-28

P2000 is on of the messaging systems used by the dutch emergency services (mostly the fire department). All messages for the fire department are send over P2000. Some ambulance messages are send over P2000 and some over C2000. All police messages are send over C2000.

C2000 is the encrypted version of P2000 and is obviously not decodable but the P2000 messages are send in plain text on 169.65 MHz. The protocol is FLEX which is a POCSAG variant (pager messages). The most popular way to receive these messages is using PDW which is Windows-only.

Multimon-ng is a linux tool for decoding POCSAG-like protocols from audio. It works great combined with the rtl_fm tool that can receive on a specific frequency and demodulate the fm (and more) modulation and output audio. You can pipe the output of rtl_fm directly to multimon-ng to get a losless connection and decode messages.

$ rtl_fm -f 169.65M -M fm -s 22050 -l 250 | multimon-ng -a FLEX -a SCOPE -t raw /dev/stdin

The rtl_fm command tunes to the P2000 frequency with the -f option and demodulates smallband fm with the -M option. The -s option set the samplerate to 22050 Hz which is the only rate supported by multimon-ng.

To decode FLEX messages you need a very recent version of multimon. The code isn't even in the master branch yet but you can use the version from craigshelley which contains the FLEX decoding branch.

The result after running the command: