AIS-catcher

AIS receiver for RTL SDR dongles, Airspy R2, Airspy Mini, Airspy HF+, HackRF, SDRplay and SoapySDR

GPL-3.0 License

Stars
482
Committers
11

Bot releases are hidden (Show)

AIS-catcher - v0.60 Latest Release

Published by jvde-github 2 months ago

  • Option to send fully decoded AIS messages in JSON format via UDP and TCP (similar to screen output with -o 5). Add JSON_FULL on to ~P/S/u.

  • Bug fix for connecting serial devices in macOS

  • Option to select columns in the table (and many more options added):

    image

  • Option to use text description in tables for ship type

  • Overlay in AIS-catcher webviewer that shows possibility of atmospheric ducting conditions enable long range AIS reception

    image

  • Added debian packages and installation script

AIS-catcher - v0.59

Published by jvde-github 5 months ago

  • Slowly improving the station page for feeders of aiscatcher.org. Color indicates number of stations covering area, opacity is linked to message count of station. To view your station statistics in this way, ensure you feed with a sharing key (UUID)
    Screenshot from 2024-05-02 21-23-24
  • Add a sharing key to -X via aiscatcher.org/addstation which will show the approximate station location in the map overlay and enable, in a few weeks, a station performance tracking dashboard.
  • TAR1090 can now visualize ship positions from AIS-catcher. See for an example here.
  • Additional option for -f-switch to either append NMEA lines to file (-f filename MODE APP for appending - default) or starting fresh with -f filename MODE OUT
  • History for range indicator can now be configured (24 hours default) with new option for 7 and 30 days history
  • Added a measure tool to measure distance and bearing between two points and/or ships. Start with CTRL-Click or activate the measure tool and press +
  • Added vessel count to web viewer title (visible once on the map tab)
  • Fix bug in display of icon for SARTE/EPIRB (red diamond)
  • Additional option for WebViewer to bind server to specific IP address. This allows you to make the browser only visible on the local PC, via -N IP_BIND localhost. By default the webviewer is visible by other machines on the network.
  • Bug fix to range rings in 'imperial' units
  • Webviewer - ships tab has now a filter function to quickly look for a ship. Has also been added to the ship overview in the map tab
  • Option to apply filter functionality (control message routing) to webviewer and added option to filter on station_id
  • '-M DT' set by default UNLESS running with -F (turbo boost mode and no webviewer) or when overwritten with -M
AIS-catcher - v0.58

Published by jvde-github 7 months ago

  • Fix RTLSDR v4 support in Docker image
  • Fix Postgres support for Windows
  • Added option to add UUID to -X to claim feeder on aiscatcher.org (more to come)
AIS-catcher - v0.57

Published by jvde-github 8 months ago

Main change is the introduction of a community feed. See vessels received by nearby stations in your webviewer. Feed the aiscatcher.org server by running with -X and enable a map layer in the webviewer with nearby vessels from a return feed.

Other changes:

  • Performance improvements when drawing a large number of vessels by switching from Leaflet to Openlayers (notice this might require re-working some plugins). In openlayers it is more straightforward to plot ship icons on the canvas.
  • option f that writes the NMEA lines to a specified file
  • smaller default icons and setting option to set icon size
  • setting option to define width of vesseltracks
  • performance improvements for TCP input and UDP output
  • Option to auto terminate the program if no messages received for a while, e.g. after 10 minutes -T 600 nomsg_ony. This will help cure network connections for input or devices going stale without an error
AIS-catcher - v0.56

Published by jvde-github 9 months ago

  • small performance improvements in map rendering
  • You can access geoJSON output of the current ship positions by visiting the web viewer at /geojson and for KML output, please navigate to /kml (enable with the
    switches -N geojson on and -N kml on). The KML feature facilitates the visualization of ship positions in Google Earth Pro. Be sure to add a network link and configure the auto-refresh rate in GE. A demonstration of the use of GeoJSON is plotting the vessels on the tar1090 map.
  • Bug fix in setting baud rate for serial devices
  • Experimentation mode for NMEA2000 via socketCAN on Linux. See documentation below.
  • Speed (moving/stationary) and Ship class now included as labels in Prometheus output
  • Map overlays will be stored as part of the settings, so wil automatically reopen when the browser is refreshed (separate storage for day and night mode)
  • Ship icon that unlocks the side table is now always visible. For narrow screens (<800px) the button will open the separate tab with the ship list
  • Pyssel blog post describes procedure to show offline mbtiles maps here
AIS-catcher - v0.55

Published by jvde-github 11 months ago

v0.55 is the latest version and introduces the following:

  • "Show all track" option and setting to dim maps
  • Added NOAA nautical charts as an overlay (link). These maps and the applications are not suitable for navigation (just to reiterate that).
  • I created aiscatcher.org and started sharing data from my own station here. The site also contains links to several
    dashboards for stations running AIS-catcher and links to interesting (open-source) projects related to AIS and AIS-catcher.
  • If you want a persistent dashboard available outside the local network, please reach out (jvde.github at gmail.com) and I will add it to aiscatcher.org. It requires a UDP stream from AIS-catcher, station name and, optionally, a rough approximation for the station location. Data is not aggregated and forwarded.
  • Addition of option -N CONTEXT yyyy which will store the settings in the web browser in yyyy. This will allow to separate setting storage when running multiple web clients.
  • GPS information (e.g. via serial -e ... or gpsd -t gpsd ...) is now included in HTTP client push
  • Introducing data feeds with user ID to reduce security issues with data feeds, -u x.x.x.x y UUID u. For future versions we are exploring adding HMAC authentication.
AIS-catcher - v0.54

Published by jvde-github 12 months ago

v0.54 is the latest version and adds:

  • A "Settings Menu" providing access to additional (styling) options for the webclient:
    image

  • Option to change the displayed units in the settings menu (metric system, imperial system and AIS native units)

  • Functionality to plot a list of all vessels on top of the map. This will only be visible for larger screens (click on ship icon on top right map)

  • retires the Curl library for HTTP message sending and directly uses a built-in TCP client leveraging openssl where needed for secure servers. This means that if you want to send data to a secure server, you have to build with the ssl development libraries:

sudo apt install libssl-dev
AIS-catcher - v0.53

Published by jvde-github about 1 year ago

New:

  • Tab that shows realtime NMEA data as it comes in, activate with -N REALTIME on.
  • Experimental "Fireworks" Mode, see this video for demonstration. Activate with -N REALTIME on and selecting the option in the context menu
  • Addition of Ship type as Icon to Ship table overview
  • GPS input is included in screen output as NMEA or JSON depending on the output switch (-o x). GPS output can be filtered out using FILTER ON GPS OFF directly after the -o x switch where x is the output mode. Also works for TCP and UDP output.
AIS-catcher - v0.52

Published by jvde-github about 1 year ago

Windows binaries support the RTL_SDR Blog V4 dongle

AIS-catcher - v0.51.b

Published by jvde-github about 1 year ago

  • Creation of an Edge Release where latest Windows binaries are stored: HERE
  • Addition of an offline webclient version. This should run as usual but offline map tiles are not stored so that might work only depending what is in the cache. Graphs and tables work. To run, first go to your home directory (say /home/jasper) and clone the necessary web assets:
git clone https://github.com/jvde-github/webassets.git

Next run AIS-catcher with the CDN argument to point the webserver to the created directory with web content:

AIS-catcher -x 192.168.1.120 4002 -N 8100 CDN /home/jasper/webassets
  • In case running with multiple dongles, the shipcard in the webclient now shows source (i.e. the SDR) of the last signal displayed. Also it will list all receivers that have received a message from the MMSI.
  • Increased the default RTL-SDR buffer, so running on a RPI Zero W only requires activating fast downsampling -F.
  • Option -ge print on to dump raw input from serial device to screen
  • Bug fix in reading from certain serial devices on Windows
  • Bug fix in properly closing when reading from TCP connection e.g. RTL-TCP
  • Fix to internal webserver to avoid one client blocking the server when sending
  • Accept VDO messages for NMEA input (-go VDO on/off)
  • New options -N use_gps on/off and -N own_mmsi xxxxx added. The former toggles the use of GPS NMEA input as location for the receiver station (default is on). The latter sets the station's location as the location of the vessel with the specified MMSI. The own mmsi will be highlighted.
  • Fix inclusion of libzmq in Windows auto builds
  • TCP listener for NMEA output, e.g. for port 5011 run with -S 5011. AIS-catcher can read from this TCP server at address raspberrypi, e.g. like:
AIS-catcher -t txt raspberrypi 5011

or use the tcp_listener keyword in the JSON configuration.

AIS-catcher - Edge

Published by jvde-github about 1 year ago

Edge version, home for the Windows Binaries for the latest build.

AIS-catcher - v0.50

Published by jvde-github about 1 year ago

  • bug fix to gain setting for RTL-TCP
  • -u has option BROADCAST on to enable sending to UDP broadcast addresses, e.g.
AIS-catcher -u 192.168.1.255 BROADCAST on
  • Add new database table (ais_vessel) that for each mmsi captures the last broadcasted data.
  • MAX_FAILS option for database writes
  • option to fade out vessel icons depending on signal age
  • some updates to the web UI, including improvements to dark mode

image

AIS-catcher - v0.49

Published by jvde-github over 1 year ago

Option to read from serial devices with the switch -e. Trialed succesfully with the dAISy hat but more testing needed:

AIS-catcher -e 38400 /dev/serial0

Furthermore:

  • Improvement in default settings for SDRplay and downsampler at 2304K
  • Accepts SDRangel generated WAV files as input
  • new settings -go ID xxx that sets the station_id which will automatically feed into the database
  • Decode a single channel with -c X, see here for an example.
AIS-catcher - v0.48

Published by jvde-github over 1 year ago

New additions in v0.48:

  • Tweaking the bandwidth setting for the SDRplay increasing message reception slightly
  • new model that is less sensitive to frequency drift. You can run this model using the switch -go AFC_WIDE on (which is now the default as well). Running the new model setting and the previous default model on a file with ~410 messages and artifically shifting the frequency to simulate dongle frequency instability, shows the following:

Initial observation is that the new model (orange) has a similar message count if the dongle has no frequency offset compared to the current default model (blue), i.e. for the case of zero shift. The new model hears a similar number of ships but, as hoped, seems less affected if the dongle is off by +/- 5 ppm and not corrected by the -p switch.

AIS-catcher - v0.47

Published by jvde-github over 1 year ago

  • Fixing sorting issue on table
  • Hover on flag gives full country name instead of ISO code
  • RTL-TCP switch -t allows setting protocol directly instead of via -gt: AIS-catcher -t txt 153.44.253.27 5631
  • Read station location from GPSD: AIS-catcher -t gpsd localhost 2947 -N 8100 share_loc on
  • JSON output for AIS Msg 6 (DAC 235, FID 10)
  • Migration from Fontawesome CDN icons to Material Design icons as Google font to deal with limit of free plan, update of plugins required
AIS-catcher - v0.46

Published by jvde-github over 1 year ago

What's new

The most recent update presents a modest reconfiguration of the menu items, introducing additional functionalities through the use of context-sensitive menus, accessible through a right-click or long press on iOS. These new options include a theme for dark mode, the display of the station range on the map, simplified adjustment of the map's center, the availability of text-only labels, and the optional decluttering of shiplabels, showing details on the last received messsage from a vessel, among others.

Additionally a new feature has been added that sends messages to (e.g.) MarineTraffic as a TCP client (with auto-reconnect) using the -P switch. For example:

AIS-catcher -P 5.9.207.224 6767 -P 192.168.1.239 2947 
AIS-catcher - v0.45

Published by jvde-github over 1 year ago

About page

the user can make a page in markdown format. The content will be shown in the About tab of the webserver:

AIS-catcher -N 8100 ABOUT about.md

Prometheus/Grafana interface

First functionality to output some metrics from AIS-catcher to Prometheus, see here.

JSON UDP input/output

JSON over UDP output: functionality to send NMEA messages packaged in a JSON object, e.g.:

AIS-catcher -u 192.168.1.235 4002 JSON on

JSON over UDP input: AIS-catcher accepts and parses this input when running as a UDP server, e.g.:

AIS-catcher -x 192.168.1.235 4002

Most external programs will not be able to accept this JSON packaged NMEA strings. It is a way to transfer received messages between AIS-catcher instances without losing meta data like the timestamp, ppm correction and signal level. These are not captured in the standard NMEA strings.

Writing AIS to PostgreSQL

The setup is fairly flexible and can be tailored to the particular needs. See READMEfor more details.

GPS, multiple receivers and plot station location on map

The latest version can run with multiple receivers in parallel. For example, one dongle for channel A+B and one dongle for channel C+D. To run with two receivers in parallel you can use a command like:

AIS-catcher -d serial1 -v -d serial2 -c CD -v -N 8100

There are a few other options that together can provide some interesting new functionality. Firstly, the webserver can share the location of the station with the front-end so it will be displayed on the map:

AIS-catcher -N 8100 share_loc on

This option is switched off by default for privacy reasons in case the webclient is shared externally. And secondly, the NMEA decoder accepts NMEA lines from a GPS device (NMEA lines GPRMC, GPGLL and GPGGA):

echo '$GPGGA, 161229.487, 3723.2475, N, 12158.3416, W, 1, 07, 1.0, 9.0, M, , , , 0000*18' | ./AIS-catcher -r txt .

These GPS coordinates will be used to set the location of the station. In this way the station can be visualized and tracked while on the move. This is useful if you use AIS-catcher to read from a hardware AIS receiver that has a built-in GPS.

All these new functions combined enables a command line like this:

AIS-catcher -r txt /dev/serial/by-id/usb-u-blox_AG_-_www.u-blox.com_u-blox_7_-_GPS_GNSS_Receiver-if00 -x 192.168.1.235 4002 -N 8100 share_loc on

The first receiver (-r txt ...) reads from a GPS device that is connected and emits NMEA lines. The second receiver (-x) reads AIS NMEA lines at port 4002 coming from another instance of AIS-catcher. The station is now plotted on the map with the location as provided by the GPS coordinates. The web-page has the ability to fix the center of the map on the location of the receiving station.

This functionality is new so reporting of bugs is appreciated.

AIS-catcher - v0.44

Published by jvde-github over 1 year ago

Improvements to the web-client and ability to read NMEA over TCP and UDP.

Functionally equivalent to v0.43 which has been removed as it was consuming too many CPU cycles. This has been fixed.

AIS-catcher - v0.42

Published by jvde-github almost 2 years ago

Simple webserver to view statistics of the system in action. Start the webserver as follows:

AIS-catcher -N 8100

where 8100 is the port number. If you go in your browser to the IP address of the machine running AIS-catcher and specify the port (e.g. if your machine is raspberrypi, enter raspberrypi:8100) you will see a few tabs providing insights into the reception of your station, including signal levels, ships seen, a simple map and message rate.

There are a few additional options. For example, you can use -N PORT_MIN 8100 PORT_MAX 8200 which will cause AIS-catcher to find an available port in the range 8100 to 8200. A further option is to provide the station name and a link to an external website which will be displayed on the Statistics page and :

AIS-catcher -N STATION Southwood STATION_LINK http://example.com

To display the distance to your station you need to provide the coordinates as follows:

AIS-catcher -N LAT 50 LON 3.141592

All these options can be captured in the configuration file (in a section with name server).

Please note that there was a problem with UDP output for the Windows version with this release. Recommendation is to use an earlier version or the Bleeding Edge.

AIS-catcher - v0.41

Published by jvde-github almost 2 years ago

  • AIS-catcher can now partially be configured from a configuration file in JSON format, see here.
  • Addition of a new decoder that allows to use the program as a command line utility to decode NMEA lines. There is also a new data format TXT, see this section which should make it easy to use AIS-catcher to process and forward data from a DaisyHat.
  • My home station feeds data to FleetMon, amongst others, and I noticed that in the FleetMon dashboard a decent portion of my messages were reported as error. My hypothesis is (and I think I am right) that this is just certain message types being classified as such.
    I created an experimental functionality to filter UDP, HTTP and screen output on message type, e.g. send only messages of type 1, 2, 3, 5, 18, 19, 24 and 27 over UDP:
AIS-catcher -u 127.0.0.1 10110 FILTER on ALLOW_TYPE 1,2,3,5,18,19,24,27

or remove message type 6 and 8:

AIS-catcher -u 127.0.0.1 10110 FILTER on BLOCK_TYPE 6,8

Do not use spaces in the comma separated message type list. Filtering will only take effect with the filter switched to ON (default OFF) and the filter needs to be defined per -u switch (or -H and -o).

And some smaller updates:

  • Addition of country field to JSON output (mapped from MMSI code), switch on with -M M.
  • Addition of option -gr BLOCK_COUNT for RTL-SDR to increase size of buffer.