Skip to main content
Version: Next

Connections

A connection is a configured, named, credentialed endpoint. Everything else in QUBIQ refers to it by name: tag bindings, pipeline nodes, named queries, the historian, the audit journal.

Create it once. QUBIQ pools it, monitors it, encrypts its credentials, and gives every consumer the same shared, healthy client.

Supported connection types

TypeUsed forPage
OPC-UAPLCs, DCS, gateways speaking OPC Unified ArchitectureOPC-UA
MQTTBrokers, classic MQTT and Sparkplug BMQTT & Sparkplug B
ModbusModbus TCP/RTU devicesModbus
SNMPNetwork gear, UPS, environmental monitors; v1/v2c/v3SNMP
TCP/UDPSerial-over-Ethernet, scales, barcode readers, custom protocolsTCP/UDP
SQL databasePostgres, MySQL, SQL Server, SQLiteSQL databases
MongoDBDocument storesMongoDB
QuestDBTime-series storage; the historian's backing storeQuestDB
Media serverIP cameras and video streamsMedia servers
SMTP · Telegram · WhatsAppOutbound notification, referenced by the notification nodes and by alarmsNotification providers
QdrantThe vector store behind the assistant's knowledge baseVector store

Creating a connection

Connections → New connection, pick a type, fill the form, save. The dialog validates the form as you type and refuses to save until every required field is filled; there is no separate test step.

FieldEvery connection has it
NameThe identifier used everywhere else. Choose a stable, meaningful name — PLC-Filler-01, not conn1.
EnabledA disabled connection is not opened, not polled and not monitored. Use it to take a device out of service without deleting its configuration.

The rest of the form is protocol-specific.

Knowing whether it worked

Save an enabled connection and QUBIQ opens it. Its real state then shows in the Connections list and in the Status panel — which is the same signal that will tell you about it at 3am, rather than a one-off check that was true when you pressed it.

SymptomUsual cause
Never reaches connected; times outFirewall, wrong port, device off
Authentication rejectedWrong credentials, or the account lacks the right on the device
TLS/certificate errorUntrusted certificate, hostname mismatch, expired cert
Connects, then errorsRight host, wrong protocol or wrong security policy

If you are not ready for the connection to be live, save it disabled and enable it when you are.

Credentials and secrets

  • Secrets are encrypted at rest with key material derived from the installation's ENCRYPTION_KEY, and are decrypted only in the process that needs them.
  • Secrets are never returned to the browser. Edit forms show presence flags (has_credentials, has_auth_key, …) so you can see that a secret is set without it leaving the server.
  • Leaving a secret field blank on edit keeps the existing value. Clearing it requires the explicit "clear" action.
  • Protocol workers do not read the database. They ask CoreServer to resolve a connection over the bus and receive the decrypted detail there.
Backups and secrets

Only a passphrase-encrypted backup carries connection secrets. An unencrypted backup restores the configuration with credentials blank — deliberately, so an unprotected archive cannot leak plant access. → Backup & restore

AI-scoped credentials

SQL, MongoDB and QuestDB connections can carry a second, read-only credential used by the AI assistant instead of the primary one. If your assistant may explore a production database, give it an account that cannot write.

It has its own Test AI credential action on the connection form (needs Edit connections), which signs in with the credentials currently typed in the form. It is the only way to check an AI credential, because nothing else in the product ever uses it.

AI assistant

Pooling

Every protocol goes through a pool. A pool means:

  • One underlying client per connection, shared by every consumer — not one per tag, per pipeline node or per screen.
  • Reconnection, backoff and session re-establishment handled once.
  • Bounded resource use: maxConnections on database connections caps concurrency.

The practical rule: never bypass a connection. A pipeline node, a named query and a bound widget that all touch the same database share one pool.

Health monitoring

Connection health is primarily passive. QUBIQ uses each protocol library's own signals — broker connect/disconnect callbacks, driver errors, subscription notifications, database SDAM events — so healthy connections generate no probe traffic at all.

An active probe runs only for connections whose passive signal has gone stale, as a safety net.

Set LIVENESS_MODE to choose the behaviour:

ModeProbe cadenceWhen to use
passive (default)5 min safety-net probeNormal operation
hybrid30 sDiagnosing a flapping connection
active10 s, probe everythingLegacy behaviour; highest load

Status is visible in the Connections list and the Status panel, and available at the Status panel (needs View the status panel).

Health is not only an indicator — the store-and-forward forwarders use it to avoid retrying against a connection known to be down. → Store and forward

Browsing a connection

Where the protocol supports discovery, Browse walks the remote structure so you can pick addresses instead of typing them:

TypeBrowse shows
OPC-UAThe server's address space tree
SQL / QuestDBSchemas, tables, columns
MongoDBDatabases and collections
MQTT (Sparkplug)Discovered groups, edge nodes, devices and metrics
SNMPA walk of the agent, with symbolic names resolved from loaded MIBs
ModbusA one-shot register read for verification

Browse requires View connections.

Permissions

ActionPermission
List and browse connections, view healthView connections
CreateCreate connections
Edit, clear quarantine, manage historian designationEdit connections
DeleteDelete connections

Deleting a connection

Deleting a connection does not delete the tags bound to it. Their bindings are left without a connection, which shows up as a broken binding rather than a silent data loss. That is intentional: re-pointing bindings at a replacement connection is a normal migration, and losing the tag model because a device was swapped would not be.

Check the namespace's binding statistics before deleting, to see what depends on it.

When a delete is refused

Four guards can refuse the delete, and the dialog says which:

RefusalWhat it means
In usePipelines and Designer projects reference it. Both are listed by name, so you can go and re-point them.
This is the system historianThe connection is the designated history store. Change the designation first.
This holds a project's operator accountsIt is the runtime user database for a LiveView project. Those operators would lose their sign-in.
Undelivered writes are bufferedStore-and-forward is still holding data for it, and deleting discards that data.

The first shows a list; the other three are a sentence and a name, because there is nothing to enumerate. All four offer a force delete — take it only once you know what the refusal was protecting, particularly the buffered case, where the cost is data that has not been written yet.

Next

Pick your protocol from the list above, or start with OPC-UA.