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 Type | Description |
|---|---|
| Raw satellite messages | SIN/MIN-addressed payloads sent to or received from the modem without MAPS application framing |
| MAPS messages | Application-level payloads routed via MAPS namespaces, schemas, and selectors |
Routing is determined by configuration, not payload inspection:
- Raw messages use
modemRawRequestandmodemRawResponse - 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 Message Handling via Links (Application Traffic)
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
Links: Namespace-Based Routing
The links section defines how local MAPS namespaces are bridged to remote namespaces over the satellite link.
Each link represents a directional integration.
Link Fields
| Field | Description |
|---|---|
direction | Message flow direction (push or pull) |
local_namespace | Local MAPS namespace to monitor |
remote_namespace | Namespace used on the remote side |
include_schema | Include schema information with messages |
selector | Expression used to filter messages |
namespaceFilters | Optional 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:
| Field | Description |
|---|---|
namespace | Namespace prefix the filter applies to |
selector | Optional condition applied under this namespace |
depth | Topic depth under the namespace to evaluate |
Evaluation Order
- The link-level selector is evaluated first.
- If it passes, matching namespaceFilters are evaluated.
- 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
| Field | Description |
|---|---|
incomingMessagePollInterval | Poll interval (seconds) for inbound modem messages |
outgoingMessagePollInterval | Flush interval (seconds) for outbound messages |
maxBufferSize | Maximum payload size before chunking |
compressionCutoffSize | Payload size threshold for compression |
messageLifeTimeInMinutes | Message TTL before expiry |
sharedSecret | Optional lightweight authentication |
sendHighPriorityMessages | Bypass queueing for urgent messages |
sinNumber | SIN used for MAPS messages (default 147) |
Modem-Specific Fields
| Field | Description |
|---|---|
serial | Serial port configuration |
modemResponseTimeout | Time to wait for modem responses (ms) |
initialSetup | Optional modem initialisation string |
locationPollInterval | GNSS/visibility polling interval (seconds) |
modemStatsTopic | Topic for publishing modem statistics |
modemRawRequest | Inbound topic template for raw satellite messages |
modemRawResponse | Outbound topic for raw satellite messages |