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.


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 applies
  • selector: (optional) condition to apply only under this namespace
  • depth: how many topic levels deep to evaluate under the namespace

Evaluation Model

  1. Link-level selector runs first.
  2. If it passes, namespaceFilters are applied.
  3. 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.

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.