FUXA SCADA Integration (Status & Bridge)
June 2026 | ControlForge v1.0.1069
FUXA is an open-source web SCADA / HMI platform. ControlForge can run alongside it and reverse-proxy to a configured FUXA instance, so a FUXA front end built against ControlForge's tags is reachable through the same host. This integration is thin: it exposes a single read-only status probe that reports whether FUXA is configured and reachable. There are no FUXA_* ST functions.
The status endpoint
GET /api/fuxa/status (tag fuxa) is always registered — it answers whether the integration is on and, if so, whether the FUXA target is responding to a health check.
TOKEN=$(curl -s -X POST http://localhost:8302/api/auth/login \
-H 'Content-Type: application/json' \
-d '{"username":"goplc","password":"goplc"}' | python3 -c 'import sys,json;print(json.load(sys.stdin)["token"])')
curl -s http://localhost:8302/api/fuxa/status -H "Authorization: Bearer $TOKEN"
When FUXA isn't configured (the default), you get:
{"enabled":false,"reachable":false,"url":""}
When FUXA is configured, enabled is true, url is the proxied target, and reachable reflects a live health check against it. If the health check errors, an error field carries the reason.
| Field | Meaning |
|---|---|
enabled | true when FUXA is configured in the project |
reachable | true when the configured FUXA target answers its health check |
url | The FUXA target URL being proxied (empty when disabled) |
error | Present only when an enabled FUXA's health check failed |
Scope
That status probe is the entire HTTP surface this guide covers. The integration's other half is a reverse proxy to FUXA (so the FUXA UI is served through the ControlForge host once configured) — but the proxy is mounted as a pass-through, not a documented JSON API. There are no FUXA create/update/control endpoints to call, and no FUXA ST functions; ControlForge exposes its tags to FUXA the same way it exposes them to any northbound consumer.
If /api/fuxa/status returns enabled:false, FUXA simply isn't wired into this project's config — that's the expected default, not an error.