Skip to main content

Modem-Side Configuration (Remote Edge)

MAPS can integrate directly with ST2100 / IDP / OGx modems via serial.
This setup is best suited for remote or disconnected deployments where the modem is the only uplink.

On the modem side, MAPS primarily acts as a link endpoint: it bridges local MAPS namespaces to a remote satellite transport.


Modem-Side Message Routing Overview

On the modem side, MAPS handles two distinct classes of traffic:

Traffic TypeDescription
Raw satellite messagesSIN/MIN-addressed payloads sent to or received from the modem without MAPS application framing
MAPS messagesApplication-level payloads routed via MAPS namespaces, schemas, and selectors

Routing is determined by configuration, not payload inspection:

  • Raw messages use modemRawRequest and modemRawResponse
  • MAPS messages use links (namespace integrations)

This separation is intentional and enforced.


Raw Satellite Message Topics (Non-MAPS Traffic)

Raw satellite messages bypass MAPS namespace routing and schema handling.

modemRawRequest

Defines the topic template where inbound raw satellite messages are published after reception from the modem.

Default

/incoming/{sin}/{min}

Behaviour

  • Applies to all non-MAPS messages
  • {sin} and {min} are extracted from the modem frame
  • Payload is published as raw byte[]
  • No schema, selector, or namespace processing is applied

Typical uses include modem control responses, GNSS data, and provider-specific payloads.


modemRawResponse

Defines the topic MAPS monitors for outbound raw satellite messages to send directly to the modem.

Default

/outbound

Behaviour

  • Any message published here is sent directly to the modem
  • No MAPS packaging, schema, or selector logic is applied
  • SIN/MIN must be supplied by the publishing client

This is a direct pipe to the modem.


MAPS application messages are routed using links, the same integration mechanism used by MAPS servers.

A modem configuration is therefore a specialised link endpoint, not a separate routing system.

MAPS SIN Configuration

All MAPS messages sent via the modem use:

sinNumber (default: 147)
  • Applies only to MAPS messages routed via links
  • Ignored for raw satellite traffic
  • Must be greater than 128

The links section defines how local MAPS namespaces are bridged to remote namespaces over the satellite link.

Each link represents a directional integration.

FieldDescription
directionMessage flow direction (push or pull)
local_namespaceLocal MAPS namespace to monitor
remote_namespaceNamespace used on the remote side
include_schemaInclude schema information with messages
selectorExpression used to filter messages
namespaceFiltersOptional per-sub-namespace filtering rules

Links support the full MAPS selector and schema system.


Namespace Filters

namespaceFilters allow fine-grained control within a link by applying additional rules to sub-namespaces.

Each filter supports:

FieldDescription
namespaceNamespace prefix the filter applies to
selectorOptional condition applied under this namespace
depthTopic depth under the namespace to evaluate

Evaluation Order

  1. The link-level selector is evaluated first.
  2. If it passes, matching namespaceFilters are evaluated.
  3. Both must evaluate to true for the message to be forwarded.

Use selector: "TRUE" at the link level to delegate all filtering to namespace filters.


Relationship to Server Integrations

The modem-side links configuration is identical in concept to server-side integrations:

  • Same selector language
  • Same schema handling
  • Same namespace semantics

The only difference is the transport:

  • Server integrations route over TCP/REST/messaging protocols
  • Modem integrations route over a serial satellite link

This allows modem deployments to behave consistently with central MAPS servers.


Example Configuration

- name: "ST2100 Modem"
url: serial://localhost:0/
protocol: stogi

initialSetup: ""
incomingMessagePollInterval: 1
outgoingMessagePollInterval: 20
sharedSecret: "This is a shared secret to use"

modemResponseTimeout: 20000
locationPollInterval: 60

maxBufferSize: 4000
compressionCutoffSize: 128

modemStatsTopic: "/modem/stats"
modemRawRequest: "/incoming/{sin}/{min}"
modemRawResponse: "/outbound"

links:
- direction: push
local_namespace: "/vessel/+/engine/rpm"
remote_namespace: "/satellite/engine/rpm"
include_schema: true
selector: "rpm > 5000"

- direction: push
local_namespace: "/sensors/+/temperature"
remote_namespace: "/satellite/anomalies"
include_schema: false
selector: "random_forest(is_anomaly, model_rf.arff, temperature, humidity, pressure) = 1"
namespaceFilters:
- namespace: /sensors/mess/
selector: temperature > 30 OR temperature < 17
depth: 1
- namespace: /sensors/engineroom/
depth: 10

serial:
port: ttyusb0
baudRate: 9600
dataBits: 8
stopBits: 1
parity: n
flowControl: 0

Complete Configuration Reference

Base Satellite Fields

FieldDescription
incomingMessagePollIntervalPoll interval (seconds) for inbound modem messages
outgoingMessagePollIntervalFlush interval (seconds) for outbound messages
maxBufferSizeMaximum payload size before chunking
compressionCutoffSizePayload size threshold for compression
messageLifeTimeInMinutesMessage TTL before expiry
sharedSecretOptional lightweight authentication
sendHighPriorityMessagesBypass queueing for urgent messages
sinNumberSIN used for MAPS messages (default 147)

Modem-Specific Fields

FieldDescription
serialSerial port configuration
modemResponseTimeoutTime to wait for modem responses (ms)
initialSetupOptional modem initialisation string
locationPollIntervalGNSS/visibility polling interval (seconds)
modemStatsTopicTopic for publishing modem statistics
modemRawRequestInbound topic template for raw satellite messages
modemRawResponseOutbound topic for raw satellite messages