All Projects → ais-dotnet → Ais.net

ais-dotnet / Ais.net

Licence: agpl-3.0
.NET Standard, high performance, zero allocation AIS decoder, which can process millions of AIVDM/AIVDO sentences per second on a single core. Sponsored by endjin

Projects that are alternatives of or similar to Ais.net

Iotz
compile things easy 🚀
Stars: ✭ 39 (-20.41%)
Mutual labels:  iot
Ir Station
Infrared Remote Controller with ESP8266 WiFi-module. You can control your home appliances with your smartphone or laptop.
Stars: ✭ 45 (-8.16%)
Mutual labels:  iot
Node Red Contrib Knx Ultimate
Single Node KNX IN/OUT with optional ETS group address importer.
Stars: ✭ 48 (-2.04%)
Mutual labels:  iot
Kuzzle
Open-source Back-end, self-hostable & ready to use - Real-time, storage, advanced search - Web, Apps, Mobile, IoT -
Stars: ✭ 991 (+1922.45%)
Mutual labels:  iot
Utensor cgen
C++ code generator for uTensor https://utensor-cgen.readthedocs.io/en/latest/
Stars: ✭ 42 (-14.29%)
Mutual labels:  iot
Eipscanner
Free implementation of EtherNet/IP in C++
Stars: ✭ 46 (-6.12%)
Mutual labels:  iot
Crun
A fast and lightweight fully featured OCI runtime and C library for running containers
Stars: ✭ 990 (+1920.41%)
Mutual labels:  iot
Esp mqtt
MQTT client library for ESP8266
Stars: ✭ 1,047 (+2036.73%)
Mutual labels:  iot
Haskell Mqtt
An MQTT protocol implementation (client and server)
Stars: ✭ 42 (-14.29%)
Mutual labels:  iot
Tinderboxpedal
Bluetooth "Universal Remote" Footpedal for Digital Guitar Amps, on ESP32 or Pi Zero W
Stars: ✭ 48 (-2.04%)
Mutual labels:  iot
Raspberrysharp
A .NET/Mono IO Library for Raspberry Pi This library is a complete refactoring of Raspberry-Sharp libraries, merged into one library and updated to RB3, CM3 and RB3+
Stars: ✭ 41 (-16.33%)
Mutual labels:  iot
Aedes
Barebone MQTT broker that can run on any stream server, the node way
Stars: ✭ 1,007 (+1955.1%)
Mutual labels:  iot
Mqtt Mongo
A generic service that subscribes to MQQT broker and saves messages to MongoDB.
Stars: ✭ 46 (-6.12%)
Mutual labels:  iot
Platform
The main components of OSGP.
Stars: ✭ 39 (-20.41%)
Mutual labels:  iot
Qcbor
QCBOR -- a small CBOR encoder/decoder oriented around C and native data representations
Stars: ✭ 48 (-2.04%)
Mutual labels:  iot
Coaty Js
Collaborative IoT framework in JavaScript/TypeScript for Node.js and browsers.
Stars: ✭ 39 (-20.41%)
Mutual labels:  iot
Fiscalberry
[JSON ↔ HW] Connect things using JSON API with the fiscalberry websocket server interact easily with any kind of Hardware. Another IoT solution...
Stars: ✭ 44 (-10.2%)
Mutual labels:  iot
Homemirror
Web based home mirror, inspired by Hannah Mitt's project.
Stars: ✭ 49 (+0%)
Mutual labels:  iot
Tuyapi
🌧 An easy-to-use API for devices that use Tuya's cloud services. Documentation: https://codetheweb.github.io/tuyapi.
Stars: ✭ 1,043 (+2028.57%)
Mutual labels:  iot
Nightingale Core
A .NET Standard library containing models and functionality for managing, organizing, and sending a collection of HTTP requests using the Nightingale Collection Format. This library is the heart of Nightingale REST Client on Windows 10.
Stars: ✭ 47 (-4.08%)
Mutual labels:  dotnet-standard

Ais.Net

# Build Status GitHub license GitHub license IMM

.NET Standard, high performance, zero allocation AIS decoder, which can process millions of AIVDM/AIVDO sentences per second on a single core. Documentation is available at https://ais-dotnet.github.io/Ais.Net/

Supported Message Types

This library has been developed to support specific applications, so it only supports message types that have been needed to date in those applications. The following message types are currently supported.

ID(s) Name
1, 2, 3 Position Report Class A
5 Static Voyage Related Data
18 Standard Class B CS Position Report
19 Extended Class B CS Position Report
24 Static Data Report
27 Long Range AIS Broadcast message

See https://gpsd.gitlab.io/gpsd/AIVDM.html for a complete list of message types.

Performance

The benchmark suite is a work in progress, but it currently measures two basic scenarios: discovering message types, and extracting position data. Here are the results of executing these benchmarks on a system with an Intel Core i9-9900K CPU 3.60GHz CPU:

|                              Method |     Mean |    Error |   StdDev |     Gen 0 | Gen 1 | Gen 2 | Allocated |
|------------------------------------ |---------:|---------:|---------:|----------:|------:|------:|----------:|
| InspectMessageTypesFromNorwayFile1M | 347.5 ms | 3.960 ms | 3.704 ms | 1000.0000 |     - |     - |   3.57 KB |
|       ReadPositionsFromNorwayFile1M | 403.5 ms | 5.395 ms | 5.046 ms | 1000.0000 |     - |     - |   3.57 KB |

The test processes 1 million messages, so to get the per-message timings, we divide by 1 million (so ms in this table indicate ns per message). This demonstrates a per-message cost of 404ns to extract the position data, or 348ns just to inspect the message type. Note that these tests read data from a file, so this includes all the IO overhead involved in getting hold of the data to be processed. (These messages are in NMEA format by the way.)

Note that the 1000.0000 Gen 0 GCs is slightly misleading. BenchmarkDotNet reports the number of GCs per 1,000 executions of the benchmark. But in this case the benchmarks take long enough that it only executes them once each per iteration. The number it shows is the number of GCs multiplied by 1,000, then divided by the number of times it executed the benchmark (i.e. 1), so what this actually shows is that there was a single GC. We seem to see this whether we parse 1,000, 1,000,000, or 10,000,000 messages, so although we're not quite sure why we get an GC at all, the important point here is that the memory overhead is fixed, no matter how many messages you process.

Licenses

GitHub license

Ais.Net is available under the GNU Affero General Public License v3.0 (GNU AGPLv3) open source license. The AGPLv3 is a Copyleft license, and is ideal for use cases such as open source projects with open source distribution, student/academic purposes, hobby projects, internal research projects without external distribution, or other projects where all GNU Affero General Public License v3.0 obligations can be met.

Ais.Net is also available under a commercial license, which gives you the full rights to create and distribute software on your own terms without any open source license obligations. With the commercial license you also have access to official Ais.Net support and close strategic relationship with endjin to ensure your development goals are met.

For any licensing questions, please email [email protected]

GitHub license

The data used by the Ais.Net executable specifications and samples is licensed under the Norwegian license for public data (NLOD).

Project Sponsor

This project is sponsored by endjin, a UK based Microsoft Gold Partner for Cloud Platform, Data Platform, Data Analytics, DevOps, and a Power BI Partner.

For more information about our products and services, or for commercial support of this project, please contact us.

We produce two free weekly newsletters; Azure Weekly for all things about the Microsoft Azure Platform, and Power BI Weekly.

Keep up with everything that's going on at endjin via our blog, follow us on Twitter, or LinkedIn.

Our other Open Source projects can be found at https://endjin.com/open-source

Code of conduct

This project has adopted a code of conduct adapted from the Contributor Covenant to clarify expected behavior in our community. This code of conduct has been adopted by many other projects. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

IP Maturity Matrix (IMM)

The IMM is endjin's IP quality framework.

Shared Engineering Standards

Coding Standards

Executable Specifications

Code Coverage

Benchmarks

Reference Documentation

Design & Implementation Documentation

How-to Documentation

Date of Last IP Review

Framework Version

Associated Work Items

Source Code Availability

License

Production Use

Packaging

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].