Files
UNITRONIX 1118fc2ba6 Anonymize operator infrastructure fingerprints from public repo.
Remove internal LAN IP, SSH user, and developer paths from docs and examples; move deploy runbook to gitignored docs/private with a public template; drop Cursor debug logging leftovers; add CI checks to prevent regression.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-28 19:07:42 +02:00

2.7 KiB

BetterDesk CDAP — Reference Bridges

This directory contains ready-to-use bridge implementations that connect external systems to BetterDesk via the CDAP protocol. Each bridge uses the Python SDK (sdks/python/) and can be deployed as a standalone service alongside BetterDesk server.

Available Bridges

Bridge Directory Protocol Use Case
Modbus modbus/ Modbus TCP / RTU PLCs, VFDs, power meters, industrial I/O
SNMP snmp/ SNMP v2c / v3 Network switches, routers, UPS, printers
REST Webhook rest-webhook/ HTTP REST Home automation (HA, OpenHAB), cloud APIs

Architecture

External Device/API
       │
       ▼
┌──────────────┐
│  Bridge      │ ← polls/subscribes to external system
│  (Python)    │ ← pushes state updates to CDAP
│              │ ← receives commands from CDAP → writes to external system
└──────┬───────┘
       │ WebSocket (CDAP)
       ▼
┌──────────────┐
│ BetterDesk   │
│ CDAP Gateway │
│ (:21122)     │
└──────────────┘

Quick Start

# 1. Install Python SDK
cd sdks/python
pip install -e .

# 2. Install bridge dependencies
cd bridges/modbus
pip install -r requirements.txt

# 3. Copy and edit config
cp config.example.json config.json
# edit config.json with your server URL, API key, and device addresses

# 4. Run
python bridge_modbus.py --config config.json

Creating a Custom Bridge

Use the Python SDK directly:

from betterdesk_cdap import CDAPBridge, gauge, toggle

bridge = CDAPBridge(
    server="ws://your-server:21122/cdap",
    api_key="YOUR_KEY",
    device_name="My Custom Bridge",
    device_type="bridge",
)

bridge.add_widget(gauge("sensor1", "Temperature", unit="°C", max_val=50))

@bridge.on_command("relay1")
async def handle_relay(action, value, **kw):
    # Write to your external system here
    return value

bridge.run()

See the Python SDK README and Node.js SDK README for full API reference.

Configuration

All bridges use a shared configuration pattern:

{
  "cdap": {
    "server": "ws://203.0.113.10:21122/cdap",
    "api_key": "YOUR_API_KEY",
    "device_name": "Bridge Name",
    "device_type": "bridge",
    "heartbeat_sec": 15
  },
  "bridge_specific_options": { }
}

Deployment

Each bridge can run as:

  • systemd service (Linux) — see install/ in each bridge directory
  • Docker containerdocker run with mounted config.json
  • Screen/tmux session — for testing

License

AGPL-3.0