Open‑source • Python

AISMixer — merge, deduplicate & forward AIS NMEA streams

AISMixer — обединяване, дедупликация и форуърд на AIS NMEA потоци

Ingest multiple AIS receivers & apps, remove duplicates, normalize or add meta headers, and forward a clean unified NMEA stream to platforms like AISHUB / MarineTraffic / VesselFinder — with planned secure station‑to‑mixer encryption and multi‑user isolation.

Приема потоци от няколко AIS приемника/софтуера, премахва дубликати, нормализира или добавя мета хедъри и изпраща чист обединен NMEA поток към платформи като AISHUB / MarineTraffic / VesselFinder — с планирана криптирана връзка станция→мултиплексор и изолация по потребители.

TL;DR

Накратко

  • UDP ingest from many AIS apps/devices
  • Zero‑copy parsing, multipart !AIVDM reassembly (g‑tags)
  • Deduplication and meta‑header cleaning/rewriting
  • Configurable c-tag time policy (preserve vs server time)
  • Forward to multiple targets (per user / per station)
  • Planned end‑to‑end signed handshake (ECDSA), anti‑replay
  • UDP вход от множество AIS приложения/устройства
  • Zero‑copy парсинг, сглобяване на multipart !AIVDM (g‑тагове)
  • Дедупликация и почистване/пренаписване на мета хедъри
  • Политика за времевия c-таг (запазване vs време на сървъра)
  • Форуърд към няколко дестинации (по потребител/станция)
  • Планиран подписан handshake (ECDSA), защита от повторение

Key features

Основни възможности

🔁

Multiplex & Deduplicate

Merge many inputs, strip vendor meta, resolve duplicates, and keep the freshest message per MMSI/timestamp.

Обединява входовете, премахва vendor мета, открива дубликати и запазва най-актуалното съобщение по MMSI/време.

⚙️

Smart tags

Control c-tag policy and reassemble multipart via g-tags; handles glued lines and out-of-band headers.

Контрол на политиката за c-таг и сглобяване на multipart чрез g-таг; справя се със „залепени“ редове и външни хедъри.

🧭

Forwarding

Fan-out to multiple UDP/TCP targets; per-user isolation (vhost-like model) and per-station mapping.

Изпраща към множество UDP/TCP цели; изолация по потребител (vhost‑подобен модел) и мапване по станции.

🛡️

Security by design (planned)

Signed handshake with ECDSA, prefixed context ("NMEA-AUTH-v1"), final hash, and anti‑replay (nonce/timestamp).

Подписан handshake с ECDSA, префикс за контекст ("NMEA-AUTH-v1"), финален хеш и anti‑replay (nonce/timestamp).

📦

Queues & performance

Independent queues per port (plain/secure), zero‑copy friendly parsing, and TTL cache tuning.

Отделни опашки по порт (plain/secure), zero‑copy парсинг и оптимизации на TTL кеш.

🌍

IPv4 + IPv6

Full dual‑stack UDP for ingress/egress; station naming station_private.pem/station_public.pem.

Пълен dual‑stack UDP за вход/изход; именуване на ключовете station_private.pem/station_public.pem.

🔍

Observability

Planned metrics/health endpoints and test harness with known duplicate sets.

Планирани metrics/health endpoints и тестови сет с известни дубликати.

🚀

Cloud control

Future per‑user cloud panel to manage local stations remotely.

Бъдещ cloud панел за управление на локални станции по потребител.

Architecture

Архитектура

High‑level flow

Общ поток

  1. UDP/secure‑UDP ingress from multiple stations/apps
  2. Tag parsing (c/g) and multipart reassembly
  3. Deduplication + meta cleaning (strip vendor headers)
  4. Optional meta add/normalize
  5. Fan‑out forwarding (per user / per target)

Roadmap

  • Hardened secure handshake (ECDSA + anti‑replay)
  • Per‑user cloud control panel (manage local stations remotely)
  • Docker images & systemd units
  • Metrics & health endpoints

Get started

Първи стъпки

Clone the repository and check the README for current modules and examples. The project is evolving; follow issues and commits for latest integration details.

Клонирай репозитория и прегледай README за текущите модули и примери. Проектът се развива; следи issues и комитите за най‑новите детайли.

$ git clone https://github.com/iliyan85/aismixer
$ cd aismixer
# create venv, install, run according to README
Have an AIS feed to contribute or a dataset with pre‑labeled duplicates? Open an Issue.
Имаш AIS фийд за тестове или набор с предварително отбелязани дубликати? Отвори Issue.

Contact

Project home: https://github.com/iliyan85/aismixer

Проектът в GitHub: https://github.com/iliyan85/aismixer

© 2025 AISMixer project