AIS
Contents
AIS sources
build your own receiver
webSDR
Many stations allow AIS tuning, see Map of SDR Receivers. On Windows, virtual audio cable and AISmon works well.
- Bremerhaven, DE http://dl1bir.spdns.de:8073/#freq=161975000,mod=wfm,sql=-150
- Vlissingen, NL http://sdrpa3bbl.duckdns.org:1500/#freq=161975000,mod=wfm,sql=-150
- London, GB http://maritime.nkpa.co.uk:8073/#freq=161975000,mod=wfm,sql=-150
!AIVDM,1,1,,,8vjHWT@0Gh0TN1N>vCC0Qi0lnPAL`GFigwl?wnSwe7wvlOwwsAwwnSGmwvh0,0*57
{"class":"AIS","device":"stdin","type":8,"repeat":3,"mmsi":992356241,"scaled":true,"dac":1,"fid":31,"lat":51.4643,"lon":0.3112,"accuracy":false,"timestamp":"26T12:02Z","wspeed":14,"wgust":16,"wdir":105,"wgustdir":360,"humidity":74,"airtemp":13.9,"dewpoint":9.3,"pressure":1015,"pressuretend":"N/A","visgreater":false,"visibility":12.7,"waterlevel":30.0,"leveltrend":"N/A","cspeed":25.5,"cdir":360,"cspeed2":25.5,"cdir2":360,"cdepth2":31,"cspeed3":25.5,"cdir3":360,"cdepth3":31,"waveheight":25.5,"waveperiod":63,"wavedir":360,"swellheight":25.5,"swellperiod":63,"swelldir":360,"seastate":13,"watertemp":50.1,"preciptype":"N/A","salinity":51.0,"ice":"N/A"}
!AIVDM,1,1,,,8vjHWR00Gh05I1NBtkC0gwvlFR06EuOwgrVWwnSwe7wvlOwwsAwwnSGmwvh0,0*09 {"class":"AIS","device":"stdin","type":8,"repeat":3,"mmsi":992356232,"scaled":true,"dac":1,"fid":31,"lat":51.4982,"lon":0.0460,"accuracy":false,"timestamp":"26T12:02Z","wspeed":127,"wgust":127,"wdir":360,"wgustdir":360,"humidity":101,"airtemp":-102.4,"dewpoint":50.1,"pressure":1310,"pressuretend":"N/A","visgreater":false,"visibility":12.7,"waterlevel":3.3,"leveltrend":"N/A","cspeed":25.5,"cdir":360,"cspeed2":25.5,"cdir2":360,"cdepth2":31,"cspeed3":25.5,"cdir3":360,"cdepth3":31,"waveheight":25.5,"waveperiod":63,"wavedir":360,"swellheight":25.5,"swellperiod":63,"swelldir":360,"seastate":13,"watertemp":50.1,"preciptype":"N/A","salinity":51.0,"ice":"N/A"}
!AIVDM,1,1,,,8vjHWQ00GwwJlAN>g;C0gwvlFR06EuOwgquOwnSwe7wvlOwwsAwwnSGmwvh0,0*7F {"class":"AIS","device":"stdin","type":8,"repeat":3,"mmsi":992356228,"scaled":true,"dac":1,"fid":31,"lat":51.4623,"lon":-0.3173,"accuracy":false,"timestamp":"26T12:02Z","wspeed":127,"wgust":127,"wdir":360,"wgustdir":360,"humidity":101,"airtemp":-102.4,"dewpoint":50.1,"pressure":1310,"pressuretend":"N/A","visgreater":false,"visibility":12.7,"waterlevel":0.0,"leveltrend":"N/A","cspeed":25.5,"cdir":360,"cspeed2":25.5,"cdir2":360,"cdepth2":31,"cspeed3":25.5,"cdir3":360,"cdepth3":31,"waveheight":25.5,"waveperiod":63,"wavedir":360,"swellheight":25.5,"swellperiod":63,"swelldir":360,"seastate":13,"watertemp":50.1,"preciptype":"N/A","salinity":51.0,"ice":"N/A"}
!AIVDM,1,1,,,8vjHWPh0Gh0f1aN<:SC0wwvlFR06EuOwgreGwnSwe7wvlOwwsAwwnSGmwvh0,0*13 {"class":"AIS","device":"stdin","type":8,"repeat":3,"mmsi":992356227,"scaled":true,"dac":1,"fid":31,"lat":51.4403,"lon":0.3927,"accuracy":false,"timestamp":"26T12:03Z","wspeed":127,"wgust":127,"wdir":360,"wgustdir":360,"humidity":101,"airtemp":-102.4,"dewpoint":50.1,"pressure":1310,"pressuretend":"N/A","visgreater":false,"visibility":12.7,"waterlevel":3.9,"leveltrend":"N/A","cspeed":25.5,"cdir":360,"cspeed2":25.5,"cdir2":360,"cdepth2":31,"cspeed3":25.5,"cdir3":360,"cdepth3":31,"waveheight":25.5,"waveperiod":63,"wavedir":360,"swellheight":25.5,"swellperiod":63,"swelldir":360,"seastate":13,"watertemp":50.1,"preciptype":"N/A","salinity":51.0,"ice":"N/A"}
!AIVDM,2,1,7,A,8>jHE700Gwr7HIVSwS;JPwtqFPC3b2o;gwl>0Dt1R9@1`b0PSb0>:gB;wvv00000,0*77
!AIVDM,2,2,7,A,001,0*20
{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":992351516,"scaled":true,"dac":1,"fid":31,"lat":56.0127,"lon":-3.2138,"accuracy":false,"timestamp":"25T13:42Z","wspeed":7,"wgust":127,"wdir":114,"wgustdir":360,"humidity":58,"airtemp":15.2,"dewpoint":-50.1,"pressure":1028,"pressuretend":"N/A","visgreater":false,"visibility":12.7,"waterlevel":30.0,"leveltrend":"N/A","cspeed":0.0,"cdir":335,"cspeed2":0.1,"cdir2":273,"cdepth2":5,"cspeed3":0.0,"cdir3":209,"cdepth3":10,"waveheight":0.2,"waveperiod":2,"wavedir":117,"swellheight":0.0,"swellperiod":28,"swelldir":171,"seastate":13,"watertemp":13.9,"preciptype":"N/A","salinity":51.0,"ice":"N/A"}
- Malaga, ES http://ea7cl.duckdns.org:8073/#freq=161975000,mod=wfm,sql=-150
- Kalamata, GR http://sv3smg.ddns.net:8073/#freq=162025000,mod=wfm,sql=-150
- Mangalia, RO http://yo4cil.home.ro:8073/#freq=161975000,mod=wfm,sql=-150
- Sydney, AUS http://meryl.ddns.net:8073/#freq=161975000,mod=wfm,sql=-150
- ...
NMEA
AIShub used to offer a NMEA stream of all connected stations as a benefit for their contributors. From mid 2024 on, this service retired.
Norway
Stream is filtered. Missing message types: 4/...
- https://www.kystverket.no/en/sea-transport-and-ports/ais/access-to-ais-data/
- tcp://153.44.253.27:5631
Florida
Reception area is limited.
- http://ssia-ais.erau.edu/
- tcp://ssia-ais.erau.edu:4000
AIS-catcher sites
- https://kx1t.com/ais
-
curl -s https://kx1t.com/ais/api/sse |grep 'data:' | awk '{print $2}'
-
- https://mgoorman.nl
- http://anz-ais.ddns.net:8100
- https://www.aiscatcher.org/wageningen/
- https://big-g.co.uk/ais/
- ...
API
- https://www.aishub.net
- https://aisstream.io
-
wscat -c wss://stream.aisstream.io/v0/stream -w 300 -x '{"APIKey": "***", "BoundingBoxes": [[[-180, -90],[180, 90]]], "FilterMessageTypes":["SafetyBroadcastMessage","LongRangeAisBroadcastMessage","BinaryBroadcastMessage","GroupAssignmentCommand"]}'
-
Historic
- ...
AIS decoders
Ais Decoder
gpsdecode
- https://gpsd.gitlab.io/gpsd/gpsdecode.html
-
nc 153.44.253.27 5631 | gpsdecode | grep '"type":8'
{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":257057800,"scaled":true,
"dac":200,"fid":10,"vin":"00000000","length":215,"beam":60,"shiptype":8440,"shiptype_text":"Illegal ship type value.",
"hazard":5,"hazard_text":"Unknown","draught":0,"loaded":0,"loaded_text":"N/A (default)",
"speed_q":false,"course_q":false,"heading_q":false}
{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":215349000,"scaled":true,"dac":1,"fid":27,"linkage":90,"sender":0,"rtype":5,"rtype_text":"Ship route plan","start":"00-00T24:60Z","duration":262143,"waypoints":[{"lon":7.107972,"lat":62.844255},{"lon":7.112132,"lat":62.848032}]}
{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":215349000,"scaled":true,"dac":1,"fid":29,"linkage":90,"text":"LESSREMMAN - ELNES (VIA RORVIK; OUTSIDE) CAPT YURI"}
-
nc ssia-ais.erau.edu 4000 | gpsdecode | -e grep '"type":8' -e grep '"type":27'
{"class":"AIS","device":"stdin","type":27,"repeat":0,"mmsi":368429323,"scaled":true,"status":"Not defined","accuracy":true,"lon":-81.0,"lat":29.2,"speed":0,"course":511,"raim":true,"gnss":false}
{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":369493715,"scaled":true,"dac":366,"fid":56,"data":"256:a83746ce99bb9edbd3eebb88bb7dcecba01df41d94f9397136c0c97eb4af8d69"}
{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":369493715,"scaled":true,"dac":366,"fid":57,"data":"512:bf68e50cc47b8ae14771ed1a0c075bfb60f82bb9ffec80211e4aad32b4edac38b33a6b4280f403d0dff4069a452f9cd51dfc44285226e53d7f337377f15829d6"}
missing/problems
- Text Telegram does not decode!
{"class":"AIS","device":"stdin","type":6,"repeat":0,"mmsi":538007497,"scaled":true,"seqno":1,"dest_mmsi":212848000,"retransmit":false,"dac":1,"fid":0,"data":"96:8040494e05054d48120d612e"}
- also valid, 'Illegal ship type' decoded! see https://unece.org/fileadmin/DAM/trans/doc/2013/sc3wp3/ECE-TRANS-SC3-WP3-2013-05e.pdf
{"class":"AIS","device":"stdin","type":8,"repeat":0,"mmsi":257303700,"scaled":true,"dac":200,"fid":10,"vin":"00000000","length":114,"beam":36,"shiptype":8450,"shiptype_text":"Illegal ship type value.","hazard":5,"hazard_text":"Unknown","draught":150,"loaded":0,"loaded_text":"N/A (default)","speed_q":false,"course_q":false,"heading_q":false}
pyais
- https://github.com/M0r13n/pyais
-
pipx install pyais -
pipx ensurepath -
nc 153.44.253.27 5631 | ais-decode --json | grep '"msg_type": 8'
{"msg_type": 8, "repeat": 0, "mmsi": 257057800,
"dac": 200, "fid": 10, "vin": "00000000", "length": 21.5, "beam": 6.0, "shiptype": 8440,
"hazard": 5, "draught": 0.0, "loaded": 0,
"speed_q": false, "course_q": false, "heading_q": false}
{"msg_type": 8, "repeat": 0, "mmsi": 215349000, "dac": 1, "fid": 27,
"data": "FwFAGPP//3ggjnij9kTwQREIR+t9QIGPWI/RpYEAV0kfnN4B/oNCP0lbA/56ZH7oMAfMqQkAPXgPnOUSBujgIEAnJCF1QEOc0Uhdt0CLKQCQxYXBGjYZIXqkAkLbgkK4VwS3FHSHEE4JngLpEMz8"}
{"msg_type": 8, "repeat": 0, "mmsi": 215349000, "dac": 1, "fid": 29, "data": "FwUw4VOC2BYVIQEyChYkGAdIlCnI"}
aisdecode
- https://github.com/madpsy/aisdecode/
-
./aisdecode-linux-amd64 -log-all-decodes decoded
AIS-catcher
- input: https://docs.aiscatcher.org/configuration/input/tcp/
- output: https://docs.aiscatcher.org/configuration/output/console/
- web view: https://docs.aiscatcher.org/configuration/output/web-viewer/
-
AIS-catcher -t txt://153.44.253.27:5631 -o 5 -N 8101 GEOJSON false MESSAGE true REALTIME false