node-red-contrib-rosepetal-basler-camera
Basler camera support for Rosepetal via Dockerized services + Node-RED nodes, following the same architecture as the Irayple and Omron camera repositories:
- Discovery service (C++ / Docker) – enumerates Basler cameras via the pylon SDK, publishes inventory to NATS, and starts/stops per-camera publisher containers.
- Camera publisher (C++ / Docker) – grabs frames, writes them to POSIX shared memory (
/dev/shm), publishes per-frame metadata on NATS, and listens for trigger/config messages. - Node-RED package – three custom nodes that expose discovery, trigger, and configuration workflows inside Node-RED.
Prerequisites
- Docker Engine
- Local NATS server on
nats://127.0.0.1:4222(override by settingNATS_URL) - Node-RED running on the same host (collector reads
/dev/shm) - Basler pylon SDK archive present at
basler-driver/pylon-25.11.0_linux-x86_64.tar.gz(or provide a different path tobasler-driver/install.sh)
Repository Layout
.
├── install.sh
├── basler-driver/
│ ├── install.sh
│ └── pylon-sdk/ # extracted SDK (gitignored)
├── node-red/
│ ├── package.json
│ ├── basler-collector/
│ ├── basler-trigger/
│ └── basler-config/
└── rosepetal-basler-engine/
├── main/ # discovery service + Dockerfile
└── camera/ # publisher service + DockerfileInstall
bash
./install.shFor “Node-RED nodes only”:
bash
./install.sh --node-red-onlyNode-RED nodes
The Node-RED package registers:
basler-collector(0-in / 1-out): starts/stops services, subscribes tobasler/<MAC-HYPHEN>/notification, readssegmentfrom/dev/shm, outputs{payload.data: Buffer, width, height, ...}.basler-trigger(1-in / 0-out): publishes{}tobasler/<MAC-HYPHEN>/triggerfor each selected camera.basler-config(1-in / 1-out): publishes{params:{...}}tobasler/<MAC-HYPHEN>/config(supports presets + custom GenICam node names).
NATS subjects
basler/broadcast– request camera scanbasler/cameras– discovery publishes camera listbasler/up– start camera container ({mac,ninterface})basler/down– stop camera container ({mac})basler/fix– best-effort IP repair ({mac})basler/<MAC-HYPHEN>/notification– per-frame metadata (includessegmentandsize)basler/<MAC-HYPHEN>/trigger– software triggerbasler/<MAC-HYPHEN>/config– parameter updates ({params:{...}})