Skip to main content

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.

FieldMeaning
enabledtrue when FUXA is configured in the project
reachabletrue when the configured FUXA target answers its health check
urlThe FUXA target URL being proxied (empty when disabled)
errorPresent 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.