Put this in config.yaml: a connector identity, one Modbus source, and a default DSL
transform.
connector:
name: "shop-floor-pilot"
push_endpoint: "https://your-opexmx-app.example.com/api/inbound-webhooks/receive/${CONNECTOR_WEBHOOK_TOKEN}"
hmac_secret: "${CONNECTOR_HMAC_SECRET}"
health_check_port: 3000
adapters:
modbus:
enabled: true
devices:
- id: "fanuc-01"
host: "192.168.1.10"
port: 502
registers:
- { address: 100, name: "status", type: "uint16", mapping: "state" }
- { address: 103, name: "spindle_rpm", type: "uint16", mapping: "spindleSpeed" }
transform:
enabled: true
default:
backend: "dsl"
script_inline: |
when metadata.temp > 80 || metadata.vib > 5.0
set metadata.alert = metadata.temp > 80 || metadata.vib > 5.0export CONNECTOR_HMAC_SECRET=change-me
export CONNECTOR_WEBHOOK_TOKEN=your-webhook-token
./target/release/opex-flow config.yamlOpen the flow editor at http://localhost:3000. On first run the connector generates an API token (stored in <data_dir>/api_token, the path is logged) that the UI asks for; see Security. Every polled record now runs through the
DSL before fanning out to your sinks. On first start the transform: section above seeds the flow on the canvas (a banner says so); change it there and press Deploy, see the flow editor.
Next, press Examples at the foot of the palette: thirteen working flows for the plant and the business, each added to your draft as new tabs with a mock for whatever outside system it calls. See Example flows.