Skip to content

berke/ais-bbm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AIS BinaryBroadcastMessage parser

TLDR: Parser for BinaryBroadcastMessage sub-messages, to be used with the ais crate.

Ships periodically broadcast their positions and other data using small packets over VHF using a protocol called AIS.

These packets can be easily received and decoded, for example using a VHF receiver and gnuais, or with an RTL-SDR dongle and rtl_ais.

The resulting datagrams can be decoded using many programs, and for Rust we have the ais crate.

The AIS protocol was designed to be somewhat extensible and allows application-specific data to be broadcast using "BinaryBroadcastMessage" packet types.

Besides their binary payload, these packets messages have so-called DAC and FID fields in their header, which allows the sub-protocol to be identified.

Unfortunately, the current ais crate does not decode these. On the other hand, it seems that the BBM messages are poorly standardized and basically a huge mess. (Not my opinion, but what I've read.)

This crate implements a BinaryBroadcastMessage decoder, currently only for the following packets:

BBM packet type DAC FID
Environmental 1 26
Meteorology and Hydrology 1 31
Inland ship and static voyage info 200 10

For example, environmental BMM packets (DAC=1, FID=26) are transmitted by the "air gap" (i.e. sea level height) sensor placed at the Lion's Gate bridge.

Usage

The file data/example1.txt contains an example with one BBM message (transmitted as two packets):

!AIVDM,2,1,2,A,8@30ojh0FQ1Si6HBNLW0>2`;111006?4Mk53F73Og;rBP02aPSAP0<D6,0*31
!AIVDM,2,2,2,A,001Sh00000,4*2A

You can decode it as follows:

% cargo run -- data/example1.txt
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/ais-bbm-tool data/example1.txt`
ENV Environmental {
    reports: [
        SensorReport {
            report_type: 1,
            day: 0,
            hour: 24,
            minute: 60,
            site_id: 35,
            sensor_data: StationId(
                StationId {
                    name: "LIONS GATE    ",
                },
            ),
        },
        SensorReport {
            report_type: 0,
            day: 0,
            hour: 24,
            minute: 60,
            site_id: 35,
            sensor_data: SiteLocation(
                SiteLocation {
                    longitude: -123.1387,
                    latitude: 49.31539,
                    altitude: NaN,
                    owner: 5,
                    data_timeout: 0,
                },
            ),
        },
        SensorReport {
            report_type: 10,
            day: 19,
            hour: 0,
            minute: 35,
            site_id: 35,
            sensor_data: AirGap(
                AirGap {
                    air_draught: NaN,
                    air_gap: 63.04,
                    air_gap_trend: 3,
                    fc_air_gap: NaN,
                    fc_day: 0,
                    fc_hour: 24,
                    fc_minute: 60,
                },
            ),
        },
    ],
}

Author: Berke DURAK bd@exhrd.fr

About

Parser for (some) AIS BinaryBroadcastMessage sub-messages

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages