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.
Example Configuration
- name: "ST2100 Modem"
url: serial://localhost:0/
protocol: stogi
transformation: "Message-Raw"
initialSetup: "" # optional init string sent at startup
incomingMessagePollInterval: 1 # seconds, minimum = 1
outgoingMessagePollInterval: 20 # seconds, minimum = 15 recommended
sharedSecret: "This is a shared secret to use"
sendHighPriorityMessages: false
modemResponseTimeout: 20000 # ms
locationPollInterval: 60 # seconds, GNSS/visibility state updates
maxBufferSize: 4000
compressionCutoffSize: 128
modemStatsTopic: "/modem/stats"
remote:
sessionId: <optional> # not required for this link
username: <optional>
password: <optional>
links:
- direction: push
local_namespace: "/vessel/+/engine/rpm"
remote_namespace: "/satellite/engine/rpm"
include_schema: true
selector: "rpm > 5000"
- direction: push
local_namespace: "/vessel/+/engine/vibration"
remote_namespace: "/satellite/engine/anomalies"
include_schema: true
selector: "isolation_forest(is_anomaly, model_engine_vibration.arff, vibration, load, temperature) = 1"
namespaceFilters:
- namespace: /vessel/
depth: 5
- 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: /dev/ttyUSB0
baudRate: 9600
dataBits: 8
stopBits: 1
parity: n
flowControl: 0
Key Sections
-
Polling
incomingMessagePollInterval
— how often MAPS checks the modem for downlink messages.outgoingMessagePollInterval
— how often MAPS flushes its data-dump for uplink.
-
Buffering & Compression
maxBufferSize
— bytes in a single dump before chunking.compressionCutoffSize
— payload size threshold for compression.
-
Security
sharedSecret
— optional lightweight authentication between modem and backend.
-
Location & Health
locationPollInterval
— GNSS/visibility updates.modemStatsTopic
— publishes modem health and session info to a MAPS topic.
-
Serial Block Standard serial parameters for ST2100 / IDP devices.
-
Links Defines namespace bridging. Multiple links can be defined with selectors and namespace filters.
Namespace Filters
namespaceFilters
refine a link by applying additional rules per sub-namespace.
Each filter supports:
namespace
: a prefix under the local namespace where the rule appliesselector
: (optional) condition to apply only under this namespacedepth
: how many topic levels deep to evaluate under the namespace
Evaluation Model
- Link-level selector runs first.
- If it passes, namespaceFilters are applied.
- Both must be true for the event to forward.
- Use
selector: "TRUE"
at the link level if you want only namespace filters to control forwarding.
- Use
Example
links:
- 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
This example forwards temperature anomalies, but with more precise handling for /sensors/mess/
and /sensors/engineroom/
topics.