diff --git a/README.md b/README.md index 8d1790a..339d883 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ The final report may be found here: https://tinyurl.com/y53tjb2w The project is currently undergoing a redesign to: migrate to Spring Boot for the message listener module, shift to Hibernate/JPA from JDBC, improve the schema design with query performance in mind, enable PostGIS and pgRouting extensions, and possibly utilize GeoDjango for the front end. + # RAChLiN: Real-time AIS Caching Library for Nautical vessels The goal of this project is to collect vessel Automatic Identification System (AIS) message broadcasts using a special Very High Frequency (VHF) receiver, and store those messages in a relational database. @@ -13,32 +14,29 @@ Carriage of AIS equipment and broadcast of these messages are required by the In AIS messages are ASCII packets standardized and encoded according to National Marine Electronics Association NMEA-0183 format. Our software decodes the messages and stores the information in a database of our design. There are many possible use cases for AIS data. In this project, we demonstrate ship traffic visualization using our collected data. + +![](./daisy2.gif) + + ### Components Ordered by movement of data from source to end users: -dAISY 2+ - A dual channel AIS receiver that picks up marine broadcasts in the Boston Harbor using a TRAM 1600-HC VHF Antenna and sends the NMEA messages to the kplex multiplexer via a serial/usb connection. -http://www.wegmatt.com/ +[dAISY 2+](http://www.wegmatt.com/) - A dual channel AIS receiver that picks up marine broadcasts in the Boston Harbor using a TRAM 1600-HC VHF Antenna and sends the NMEA messages to the kplex multiplexer via a serial/usb connection. + -Kplex NMEA Multiplexer - Software running on a Raspberry Pi 3B+. Acts as a NMEA server, combining incoming NMEA-0183 messages into a stream that is accessed by our remote AWS server via TCP connection. Also stores messages locally in a textlog. http://www.stripydog.com/kplex/ +[Kplex NMEA Multiplexer](http://www.stripydog.com/kplex/) - Software running on a Raspberry Pi 3B+. Acts as a NMEA server, combining incoming NMEA-0183 messages into a stream that is accessed by our remote AWS server via TCP connection. Also stores messages locally in a textlog. -Autossh - A software tool that monitors SSH sessions and restarts dropped sessions as needed. Maintains an SSH tunnel between the AWS server and the Raspberry Pi, effectively creating a virtual private network for TCP communication. SSH tunneling is a method for transporting arbitrary networking data over an encrypted SSH connection. -https://www.harding.motd.ca/autossh/ +[Autossh](https://www.harding.motd.ca/autossh/) - A software tool that monitors SSH sessions and restarts dropped sessions as needed. Maintains an SSH tunnel between the AWS server and the Raspberry Pi, effectively creating a virtual private network for TCP communication. SSH tunneling is a method for transporting arbitrary networking data over an encrypted SSH connection. -Amazon Web Services Elastic Compute Cloud (EC2) - A scalable virtual computer that houses the message decoder and APIs written against the database. All components operate on the same EC2 instance to keep costs within the AWS free tier, but are divided between different Docker containers. This facilitates deployment from development to production, while allowing components to be deployed at different times and with different dependencies. -https://aws.amazon.com/ec2/ +[Amazon Web Services Elastic Compute Cloud (EC2)](https://aws.amazon.com/ec2/) - A scalable virtual computer that houses the message decoder and APIs written against the database. All components operate on the same EC2 instance to keep costs within the AWS free tier, but are divided between different Docker containers. This facilitates deployment from development to production, while allowing components to be deployed at different times and with different dependencies. -Amazon Web Services Relational Database Service (RDS) - A scalable virtual computer that houses the database. Automatically manages backups, software patching, failure detection, and recovery. -https://aws.amazon.com/rds/ +[Amazon Web Services Relational Database Service (RDS)](https://aws.amazon.com/rds/) - A scalable virtual computer that houses the database. Automatically manages backups, software patching, failure detection, and recovery. -AISmessages - An open source decoder library that converts AIS message streams to Java objects with human-readable attributes. The AWS server application receives a message stream via TCP connection with the Raspberry Pi and uses AISmessages to decode in real time. AISmessage objects are then used to update the database. -https://github.com/tbsalling/aismessages +[AISmessages](https://github.com/tbsalling/aismessages) - An open source decoder library that converts AIS message streams to Java objects with human-readable attributes. The AWS server application receives a message stream via TCP connection with the Raspberry Pi and uses AISmessages to decode in real time. AISmessage objects are then used to update the database. -PostgreSQL - Our database management system, operating on an RDS server. We chose PostgreSQL over MySQL due to Postgres’s support for the JSONB data type and storage of geographic information via the PostGIS extension. These features will support future enhancements to our design. -https://www.postgresql.org/ +[PostgreSQL](https://www.postgresql.org/) - Our database management system, operating on an RDS server. We chose PostgreSQL over MySQL due to Postgres’s support for the JSONB data type and storage of geographic information via the PostGIS extension. These features will support future enhancements to our design. -Apache Struts and Apache Tomcat - Struts is a Java-based web framework and Tomcat is a web container. Together, these deploy web applications that use our data. In this report, we demonstrate a simple website that plots ship traffic. A Java-based API accesses our database then displays a plotted map of the Boston Harbor using JavaScript. -https://struts.apache.org/ -http://tomcat.apache.org/ +[Apache Struts](https://struts.apache.org/) and [Apache Tomcat](http://tomcat.apache.org/) - Struts is a Java-based web framework and Tomcat is a web container. Together, these deploy web applications that use our data. In this report, we demonstrate a simple website that plots ship traffic. A Java-based API accesses our database then displays a plotted map of the Boston Harbor using JavaScript. ## Further Reading Other Decoder Libraries: