Skip to content

Sentech Cams Node

Overview

The Sentech Cams node provides hardware integration with Sentech camera devices. It manages Docker containers that interface with Sentech cameras, handling automatic startup, cleanup, and multi-camera coordination through shared memory communication.

Key Features

  • Multi-camera support: Control multiple Sentech cameras simultaneously
  • Docker-based: Isolated containers per camera
  • Auto-start: Optional automatic startup on deployment
  • Shared memory: Fast inter-process communication via /dev/shm
  • Driver management: Ensures Sentech driver container is running
  • Color mode selection: RGB or BGR output
  • Device ID configuration: Specify cameras by MAC address

Hardware Requirements

  • Sentech camera hardware
  • Sentech camera driver installed
  • Docker and Docker Compose
  • Root/sudo access for Docker operations
  • /opt/rosepetal-sentech directory with Docker Compose config
  • /opt/rosepetal-sentech-driver directory with driver setup

Configuration

Properties

Auto Start

  • Type: Checkbox
  • Default: false
  • Description: Automatically start cameras on node deployment

Auto Start Delay (seconds)

  • Type: Number
  • Default: 6
  • Description: Delay before starting cameras (allows system initialization)

Device IDs

  • Type: Array of strings
  • Default:
    javascript
    [
      "d4:7c:44:31:5f:62",
      "d4:7c:44:31:5f:61",
      "d4:7c:44:31:5f:68",
      "d4:7c:44:31:5f:bb"
    ]
  • Description: MAC addresses of Sentech cameras to control

Color Mode

  • Type: Select
  • Options: BGR, RGB
  • Default: BGR
  • Description: Output color format for captured images

Input

Control Messages

Start Cameras

javascript
msg.payload = { action: "start" };

Starts Docker containers for all configured cameras.

Stop Cameras

javascript
msg.payload = { action: "stop" };

Stops and removes all camera Docker containers.

Cleanup

javascript
msg.payload = { action: "cleanup" };

Performs full cleanup:

  • Kills SaveAnd processes
  • Stops Docker containers
  • Cleans shared memory
  • Resets permissions

Operations

Startup Sequence

  1. Cleanup existing: Remove old processes and containers
  2. Verify driver: Ensure driver container is running
  3. Start driver: Launch driver container if needed (5s wait)
  4. Start cameras: Launch container for each device ID
  5. Set status: Update node status indicators

Container Management

Each camera gets a dedicated Docker container:

  • Container name: sentech-app-{device-id}
  • Environment variables: DEVICE_ID, COLOR_MODE
  • Shared memory: /dev/shm for inter-process communication

Cleanup Process

Cleanup involves:

  1. Kill all SaveAnd processes
  2. Stop Docker Compose services
  3. Remove shared memory files (/dev/shm/S_*, /dev/shm/LOG_*)
  4. Set proper permissions (chmod 1777 /dev/shm)

Node Status

StatusMeaning
Grey dot - "idle"Node ready, cameras not started
Yellow dot - "starting..."Cameras starting up
Green dot - "running: N camera(s)"N cameras running successfully
Red ring - "startup error"Error during startup
Orange dot - "stopping..."Cameras shutting down
Blue dot - "stopped"Cameras stopped successfully

Usage Examples

Example 1: Auto-Start on Deploy

Configuration:

  • Auto Start: Enabled
  • Auto Start Delay: 6 seconds

Behavior: Cameras automatically start 6 seconds after flow deployment

Example 2: Manual Control

[Inject: Start Button] → [Sentech Cams]
[Inject: Stop Button] → [Sentech Cams]

Start button:

javascript
msg.payload = { action: "start" };
return msg;

Stop button:

javascript
msg.payload = { action: "stop" };
return msg;

Example 3: Scheduled Operation

[Inject: Daily 8AM] → [Function: Start] → [Sentech Cams]
[Inject: Daily 6PM] → [Function: Stop] → [Sentech Cams]

Automatically start cameras at 8AM and stop at 6PM.

Example 4: Cleanup Before Restart

javascript
// Function node
// Send cleanup first
node.send([{ payload: { action: "cleanup" } }, null]);

// Wait 5 seconds, then start
setTimeout(() => {
  node.send([null, { payload: { action: "start" } }]);
}, 5000);

Docker Requirements

Required Docker Compose Files

/opt/rosepetal-sentech/docker-compose.yml:

yaml
version: '3'
services:
  app:
    image: sentech-app:latest
    container_name: ${dockerName}
    environment:
      - DEVICE_ID=${DEVICE_ID}
      - COLOR_MODE=${COLOR_MODE}
    volumes:
      - /dev/shm:/dev/shm
    network_mode: host

/opt/rosepetal-sentech-driver/docker-compose.yml:

yaml
version: '3'
services:
  driver:
    image: sentech-driver:latest
    container_name: sentech-driver
    privileged: true
    network_mode: host

Docker Images

Required images:

  • sentech-app:latest - Camera application
  • sentech-driver:latest - Sentech camera driver

Build and tag appropriately before use.

Shared Memory

Purpose

Shared memory (/dev/shm) enables fast communication between:

  • Camera driver
  • Camera application containers
  • Node-RED (via Camera Manager node)

Files

Pattern: /dev/shm/S_{device-id}, /dev/shm/LOG_{device-id}

Example:

  • /dev/shm/S_d4-7c-44-31-5f-62
  • /dev/shm/LOG_d4-7c-44-31-5f-62

Permissions

Must have permissions: 1777 (chmod 1777 /dev/shm)

Integration with Camera Manager

The Sentech Cams node starts camera processes, while Camera Manager node captures images:

[Sentech Cams: Start] → [Wait 10s] → [Camera Manager: Capture]

Flow:

  1. Sentech Cams: Start camera containers
  2. Wait: Allow cameras to initialize
  3. Camera Manager: Read from shared memory and capture

Error Handling

Common Errors

"Failed to start container"

Causes:

  • Docker image not available
  • Port conflict
  • Insufficient permissions

Solutions:

  • Verify Docker images exist
  • Check no conflicting containers
  • Run with sudo/root permissions

"Driver container not running"

Causes:

  • Driver image not available
  • Driver failed to start

Solutions:

  • Check driver image exists
  • Review driver logs
  • Manually start driver container

"SHM cleanup error"

Causes:

  • Files locked by processes
  • Permission denied

Solutions:

  • Kill all camera processes
  • Run cleanup with sudo
  • Reboot system if persistent

Debugging

View container logs:

bash
docker logs sentech-app-d4-7c-44-31-5f-62
docker logs sentech-driver

Check shared memory:

bash
ls -la /dev/shm/S_*
ls -la /dev/shm/LOG_*

Check running containers:

bash
docker ps | grep sentech

Best Practices

  1. Auto-start delay: Use at least 5-6 seconds for system initialization
  2. Cleanup regularly: Run cleanup before major changes
  3. Monitor logs: Check Docker logs for errors
  4. Proper shutdown: Always use stop action before redeployment
  5. Device IDs: Verify MAC addresses match actual hardware
  6. Permissions: Ensure proper /dev/shm permissions

Security Considerations

  • Root access: Node requires sudo for Docker operations
  • Network mode host: Containers use host networking
  • Shared memory: Accessible to all processes
  • Production: Review security implications for production deployments

Troubleshooting

Cameras not starting

Check:

  1. Docker service running
  2. Images exist locally
  3. Device IDs correct
  4. No port conflicts
  5. Sufficient system resources

Intermittent failures

Check:

  1. Shared memory not full
  2. No zombie processes
  3. Driver container healthy
  4. Network connectivity

Performance issues

Check:

  1. System CPU/memory usage
  2. Number of concurrent cameras
  3. Shared memory throughput
  4. Docker container resources

See Also