Skip to main content

Ais message decoding

Project description

pyais

PyPI license codecov downloads

AIS message decoding. 100% pure Python. Supports AIVDM/AIVDO messages. Supports single messages, files and TCP/UDP sockets.

General

This module contains functions to decode and parse Automatic Identification System (AIS) serial messages. For detailed information about AIS refer to the AIS standard.

Usage

Using this module is easy. If you want to parse a file, that contains AIS messages, just copy the following code and replace filename with your desired filename.

from pyais import FileReaderStream

filename = "sample.ais"

for msg in FileReaderStream(filename):
    decoded_message = msg.decode()
    ais_content = decoded_message.content

It is possible to directly convert messages into JSON.

from pyais import TCPStream

for msg in TCPStream('ais.exploratorium.edu'):
    json_data = msg.decode().to_json()

You can also parse a single message encoded as bytes or from a string:

message = NMEAMessage(b"!AIVDM,1,1,,B,15M67FC000G?ufbE`FepT@3n00Sa,0*5C")
message = NMEAMessage.from_string("!AIVDM,1,1,,B,15M67FC000G?ufbE`FepT@3n00Sa,0*5C")

See the example folder for more examples.

Another common use case is the reception of messages via UDP. This lib comes with an UDPStream class that enables just that. This stream class also handles out-of-order delivery of messages, which can occur when using UDP.

from pyais.stream import UDPStream

host = "127.0.0.1"
port = 55555

for msg in UDPStream(host, port):
    msg.decode()
    # do something with it

Performance Considerations

You may refer to the Code Review Stack Exchange question. After a some research I decided to use the bitarray module as foundation. This module uses a C extension under the hood and has a nice user interface in Python. Performance is also great. Decoding this sample with roughly 85k messages takes less than 6 seconds on my machine. For comparison, the C++ based libais module parses the same file in ~ 2 seconds.

Disclaimer

This module is a private project of mine and does not claim to be complete. I try to improve and extend it, but there may be bugs. If you find such a bug feel free to submit an issue or even better create a pull-request. :-)

Coverage

Currently this module is able to decode most message types. There are only a few exceptions. These are messages that only occur in very rare cases and that you will probably never observe. The module was able to completely decode a 4 hour stream with real-time data from San Francisco Bay Area without any errors or problems. If you find a bug or missing feature, please create an issue.

For developers

After you cloned the repo head into the pyais base directory.

Then install all dependencies:

$ make init

Make sure that all tests pass and that there aren't any issues:

$ make test

Now you are ready to start developing on the project! Don't forget to add tests for every new change or feature!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyais-1.1.2.tar.gz (22.4 kB view details)

Uploaded Source

Built Distribution

pyais-1.1.2-py3-none-any.whl (28.1 kB view details)

Uploaded Python 3

File details

Details for the file pyais-1.1.2.tar.gz.

File metadata

  • Download URL: pyais-1.1.2.tar.gz
  • Upload date:
  • Size: 22.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.6.12

File hashes

Hashes for pyais-1.1.2.tar.gz
Algorithm Hash digest
SHA256 019ac7a87ac2fbb32736d8d7b372d2d19830695b1ce1dba8ee69b63adbb8dc6c
MD5 5a2f88c578c49ba01f67d48b6357fa50
BLAKE2b-256 6de955e34b63d46b31313a2ec0f2ce0356c42d5dc859553c77c246a7f295e102

See more details on using hashes here.

File details

Details for the file pyais-1.1.2-py3-none-any.whl.

File metadata

  • Download URL: pyais-1.1.2-py3-none-any.whl
  • Upload date:
  • Size: 28.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.6.12

File hashes

Hashes for pyais-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 4fb7e7141ddeec89f93505d69c94f6cc5c4ce1c8b2f1eab7309541184cf48143
MD5 09c26b504fadac8e43a5b71e4d6c3cde
BLAKE2b-256 1d3612ab114189ce4106a6233a15bb7c1faaa65f64ac18d24068aca4bfaa4675

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page