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"
bridgeMode: false # if true, send raw byte[] with no modifications
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.
-
Bridge Mode
bridgeMode: true— send raw byte[] payloads with no transformation or schema handling.
-
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.