ABB Knowledge Manager Connector — User Guide¶
How to deploy, configure, and verify the VirtualForge ABB Knowledge Manager connector. For what the connector is and why it is shaped this way, start with ABB Knowledge Manager Connector for Seeq.
Overview¶
The connector is a Seeq datasource connector that brings ABB Knowledge Manager (ABB KM) content
into Seeq: the tag catalog, the signals, and their time-series history. It runs inside a Seeq Link
remote agent and reads from Knowledge Manager over ABB's ExtDataAccess WebAPI.
It is a pull connector, and one connection maps to one Seeq datasource. Sample data is served from Knowledge Manager on demand as users trend and analyze, so Seeq never becomes a second copy of the historian.
Seeq Server
│
Seeq Link remote agent ← on your infrastructure
│
ABB KM connector ← one connection per KM server
│
ABB KM ExtDataAccess WebAPI ← your Knowledge Manager installation
Indexing is full-only. ABB Knowledge Manager has no change feed — nothing in the source can tell the connector what changed since last time — so each index run rebuilds the catalog rather than applying a delta. The incremental hook that other VirtualForge connectors use is present but inert here, which is a property of the source rather than a gap in the connector. Plan the index schedule accordingly: weekly is the shipped default, and daily is common.
Installation¶
Prerequisites¶
- A Seeq Server with a Seeq Link remote agent
- Java 21+ on the remote agent host
- Network reachability from the agent host to the ABB KM
ExtDataAccessWebAPI endpoint - A Knowledge Manager account the connector can authenticate as, with read access to the tag catalog and tag data
- A license file issued for the agent host (see Licensing)
Which Seeq version a given release was validated against is stated with that release — see Versions & Seeq Compatibility.
Deployment steps¶
-
Obtain the connector ZIP from your Endeavor Engineering contact.
-
Deploy it to the remote agent — either copy the ZIP to the agent machine and extract it into the agent's connector plugins directory, or use Seeq Admin → Remote Agents → Upload Connector.
-
Create the configuration file at
<agent data folder>/configuration/link/ABB KM Connector V3.json. The connector ships a template at that name with placeholder values; see Configuration file structure. -
Install the license. On its first start the connector creates the license folder and writes a host-fingerprint file. Send that file to Endeavor Engineering, then place the license you receive back at the path named in the agent log.
-
Restart the remote agent.
-
Verify:
- The agent log shows the connector loading, and a license line reading
state=LICENSED - In Seeq, under Administration → Datasources, the datasource appears and reports connected
- After the first index run completes, the asset tree and its signals appear in Workbench
Licensing¶
The connector is licensed per host, and the license is bound to a fingerprint of that host — a copied license file fails rather than working somewhere else.
Until a license issued for that host is installed, the connector starts normally, logs its state, and registers zero active datasources. There is no grace window. So an empty asset tree on an otherwise healthy-looking agent is the expected appearance of a missing license, not a fault — check the log before looking anywhere else.
The license is never stored in the configuration file, and its path is resolved outside config. A Seeq configuration reset therefore cannot remove your license.
Configuration file structure¶
The connector is configured through ABB KM Connector V3.json. The shipped template, with
placeholders where your values go:
Leave the
Versionline exactly as it is. It identifies the file's format, not a product version, and is the same value the legacy connector wrote. Seeq ignores a file whoseVersionit does not recognize and starts the connector with an empty configuration.
{
"Version": "com.abbkmv4.seeq.link.connector.ABBKMConnectorConfigV4",
"VForge": {
"VirtualForgeEnabled": false
},
"Connections": [
{
"Name": "ABBKM-Default Connection",
"Id": "d1c4dade-947e-433b-8187-c31e0500acfd",
"Enabled": false,
"Indexing": {
"Frequency": "1w",
"OnStartupAndConfigChange": false,
"Next": null
},
"WebServiceMethod": "http",
"WebServiceIP": "your-abb-km-server",
"WebServicePort": 80,
"WebServiceURL": "/ExtDataAccess/api",
"WebServiceTimeout": 180000,
"UserName": "VFORGE_SECRETS",
"Password": "VFORGE_SECRETS",
"Domain": "VFORGE_SECRETS",
"HierarchyMode": "tagid",
"UserTimeZone": "GMT+00:00",
"VForge": {
"Http": {
"MaxRetries": 3,
"BackoffBaseMs": 200,
"BackoffMaxMs": 20000,
"RequestsPerSecond": 0,
"CircuitBreakerEnabled": true,
"AdaptiveConcurrency": true,
"Tls": {
"Trust": "Any",
"TrustStore": null
}
},
"Indexing": {
"IncrementalIndexingFrequency": null,
"MaxIndexingDuration": "2h",
"PostFlushSettle": "2s"
},
"Monitoring": {
"Enabled": false,
"SignalLocation": "FILE_SIGNAL_STORAGE"
}
}
}
]
}
The file name and the
V3/V4strings in it are on-disk identifiers, not the product version. They are the literal names Seeq and the connector use to find each other, so renaming them breaks an existing configuration. Leave them as they are. Likewise keep the generatedId— it is what ties this connection to its Seeq datasource across restarts.
Two fields to change first: Enabled ships as false so a freshly deployed connector does
nothing until configured, and WebServiceIP is a placeholder. Nothing indexes until both are set.
Then give the connection its Knowledge Manager account with vf-agent secrets set (see
Credentials); the configuration itself keeps VFORGE_SECRETS.
Configuration parameters¶
Connection¶
| Parameter | Type | Required | Description |
|---|---|---|---|
Name |
String | Yes | Display name for the connection, and the Seeq datasource name |
Id |
String | Yes | Unique identifier — keep the generated value |
Enabled |
Boolean | Yes | Enable or disable this connection. Ships false |
ABB Knowledge Manager endpoint¶
| Parameter | Type | Required | Description |
|---|---|---|---|
WebServiceMethod |
String | Yes | "http" or "https" |
WebServiceIP |
String | Yes | Hostname or address of the Knowledge Manager server |
WebServicePort |
Integer | Yes | Port the ExtDataAccess WebAPI listens on |
WebServiceURL |
String | Yes | API path — "/ExtDataAccess/api" unless your installation differs |
WebServiceTimeout |
Integer | No | Per-request timeout in milliseconds. Default 180000 |
UserName |
String | Yes | VFORGE_SECRETS (the default): take the account from the secrets store. See Credentials |
Password |
String | Yes | VFORGE_SECRETS (the default). A password written here still works but is deprecated |
Domain |
String | No | VFORGE_SECRETS (the default). The account's Windows domain is kept in the store with it |
Authentication is NTLM / Kerberos, which is what Knowledge Manager expects. Use https wherever
your installation offers it, and see TLS certificate validation for
whether the connector checks the server's certificate.
Catalog shape and time¶
| Parameter | Type | Required | Description |
|---|---|---|---|
HierarchyMode |
String | No | How the tag catalog is arranged into an asset tree. Default and recommended: "tagid". See Hierarchy modes |
UserTimeZone |
String | No | Time zone applied when converting Knowledge Manager timestamps, e.g. "GMT+00:00". Set this to the zone your KM data is recorded in |
Indexing¶
| Parameter | Type | Required | Description |
|---|---|---|---|
Indexing.Frequency |
String | Yes | Full index interval. "1w" weekly, "1d" daily |
Indexing.OnStartupAndConfigChange |
Boolean | No | Index immediately on agent start and after a config change. false is recommended for large catalogs, so a restart does not trigger a long run |
Indexing.Next |
String | Auto | Next scheduled run — managed by the connector |
VForge.Indexing.MaxIndexingDuration |
String | No | Ceiling on a single run, after which it stops cleanly rather than running indefinitely. Default "2h" |
VForge.Indexing.IncrementalIndexingFrequency |
String | — | Not used by this connector. Leave null — ABB KM has no change feed |
Frequency format: s seconds · m minutes · h hours · d days · w weeks · mo months
HTTP resilience¶
These govern how the connector behaves when Knowledge Manager is slow, throttling, or briefly unavailable. The defaults are sensible; change them when you know something specific about your server's capacity.
| Parameter | Type | Description |
|---|---|---|
VForge.Http.MaxRetries |
Integer | Retry attempts for a failed request. Default 3 |
VForge.Http.BackoffBaseMs |
Integer | Initial backoff before a retry, in ms. Default 200 |
VForge.Http.BackoffMaxMs |
Integer | Ceiling on backoff growth, in ms. Default 20000 |
VForge.Http.RequestsPerSecond |
Integer | Outbound rate limit. 0 means unlimited |
VForge.Http.CircuitBreakerEnabled |
Boolean | Stop hammering a failing endpoint and recover deliberately. Default true |
VForge.Http.AdaptiveConcurrency |
Boolean | Adjust in-flight request count to what the server is actually absorbing. Default true |
Leaving the last two enabled is strongly recommended: together they turn an overloaded historian into visible, recoverable throttling rather than silent gaps in an index run.
TLS¶
Used only when WebServiceMethod is "https". See
TLS certificate validation.
| Parameter | Type | Description |
|---|---|---|
VForge.Http.Tls.Trust |
String | Which server certificates to accept: "Any" (default), "System" or "File". Not case-sensitive. A missing block or null means "Any" |
VForge.Http.Tls.TrustStore |
String | Path to a PEM or DER certificate file on the agent host. Used by "File" only |
Monitoring and platform connectivity¶
| Parameter | Type | Description |
|---|---|---|
VForge.Monitoring.Enabled |
Boolean | Publish the connector's own health and indexing activity into Seeq as a monitoring asset tree, trendable in Workbench. See Connectors ++ |
VForge.VirtualForgeEnabled |
Boolean | Connector-level. The VirtualForge platform-connectivity switch, and disabled in the current release — the integration is architecture-present and runtime-off. See the optional VirtualForge connection |
Security¶
Credentials¶
The connector signs in to Knowledge Manager as a service account. From this release that account's user name, password and domain are kept in the VForge secrets store on the Seeq agent host, not in the connector configuration, so they are not part of the configuration that Seeq administrators can view.
How it works
- One file per agent host,
vforge/secrets/credentials.jsonin the agent's data folder, shared by every Endeavor Engineering connector on that agent. - Each connection's credential is found by the connection's
Id. Nothing is added to the configuration for this. VFORGE_SECRETSmeans "use the store". The shipped template setsUserName,PasswordandDomainto it. When the store has no credential for a connection yet, the connector adds an empty entry for it, logs what to do, and leaves that connection inactive until the entry is filled in.- One account for many connections. If several Knowledge Manager servers use the same service account, store it once as a shared credential and point each connection at it.
- Seeq's secrets-file references work too. A value such as
SECRETS_FILE:keys/abbkm-km.key, in the configuration or in the store, is read from that file on the agent host, as Seeq's own connectors do.
Managing credentials with vf-agent
vf-agent is the command-line tool for the store, included with the connector. How to run it, set it
up in PowerShell, Command Prompt or bash, and every command and option are on the
vf-agent reference; step-by-step tasks with
what you should see are on Using vf-agent.
This section gives what is specific to the ABB Knowledge Manager connector.
| For this connector | Value |
|---|---|
Product ID, in every secrets command |
seeq-connector-abbkm |
| A connection's ID | The Id of the connection in the configuration |
| Configuration file | configuration\link\ABB KM Connector V3.json in the agent's data folder |
| Credential fields that say "use the store" | UserName, Password, Domain, each set to VFORGE_SECRETS |
| Credential type | User name and password, with an optional Windows domain (NTLM or Kerberos) |
| Retire a connection | Set "Enabled": false on it before removing its credential |
Examples, with vfa set up as on the reference page:
vfa secrets verify --product seeq-connector-abbkm
vfa secrets set seeq-connector-abbkm <connection Id> --username svc-km --domain CORP
vfa secrets migrate --product seeq-connector-abbkm --all
Adding a connection. vf-agent adds it from this connector's own defaults, with no hand edit. Set
the connection's server with --set (the settings are those of a connection in the configuration, such
as WebServiceIP, WebServiceMethod, WebServicePort, HierarchyMode):
vfa datasources add seeq-connector-abbkm --name "KM Plant 2" --set WebServiceIP=km2.example.com --set WebServiceMethod=https --set WebServicePort=443 --apply --agent-stopped
It starts disabled, with VFORGE_SECRETS in UserName, Password and Domain, and prints the
vf-agent secrets set line for its credential. Then datasources enable it. See
Add a connection with vf-agent.
If you add a connection by hand instead, give it VFORGE_SECRETS in UserName, Password and
Domain, as in the shipped template, and run vfa config check seeq-connector-abbkm before starting the
agent. On its next start the connector adds an empty entry for it, keeps it inactive, and logs the
command to run, with the connection's Id already in it:
Fill it with: vf-agent secrets set seeq-connector-abbkm <connection Id> --username USER --domain DOMAIN
Retiring a connection. To remove it and its signals and assets, archive its datasource in Seeq
(Administration → Datasources → Archive, with its items). Seeq turns the connection off in
ABB KM Connector V3.json straight away, and removes it at the agent's next start; then remove its
credential with vfa secrets remove seeq-connector-abbkm --stale. Deleting the connection from the
configuration instead leaves its items in Seeq. To stop it but keep it, disable it: vfa datasources
disable seeq-connector-abbkm <connection Id> --apply --agent-stopped. See
Retire a connection.
Replacing a connection. Seeq keeps its own copy of this configuration and matches it to the file by
each connection's Id. Add the new connection, start the agent and check it connects, and only then
disable or delete the old one; never replace the whole file. See
Replace a connection.
Editing credentials.json by hand is possible, but not recommended. A formatting mistake, such as a
missing comma or quote, makes the file unreadable: the connector keeps using the last copy it could
read and logs an error, and connections that need a change wait until the file is fixed. A mistyped
connection Id leaves that connection without a credential. vf-agent writes the file safely, even
while the connector is running. If you do edit it, run vf-agent secrets verify afterwards.
Credentials in the configuration still work, for now. A connection whose configuration still holds
its password keeps connecting: the connector uses the password, logs a warning that this is deprecated,
and copies it into the store. vf-agent secrets migrate then replaces the configuration's values with
VFORGE_SECRETS (with --apply, which asks before writing, and the Seeq agent stopped). Support for passwords in the configuration will be
removed in a later release, announced in the release notes at least 30 days ahead.
Where the password exists, once moved
- The store file on the agent host. It is plain text, protected by file permissions. An
administrator of the agent host can read it, the same boundary as Seeq's own secrets file. Limit it
to the account that runs the Seeq agent and to administrators; on Linux the connector creates it
readable by its owner only.
vf-agent secrets verifyreports wider access. If an account has access on purpose, such as a backup or monitoring account, name it with--allow-access <account>(repeatable):verifythen accepts it and lists it in the result, so the record shows what was allowed. - Nowhere else on the host. The connector's configuration backups (in
vforge/config-backups/) never contain a password: values are replaced by********. Backups written by earlier versions are masked the next time the connector starts. - Not in Seeq. Seeq's view of the configuration (Administration, and the Seeq REST API) shows
VFORGE_SECRETS. Check this after moving an installation.
Where it does not go. The connector uses the password only to authenticate to your Knowledge Manager server, over NTLM or Kerberos. Neither protocol sends the password itself over the network. The connector does not write the password to its logs or reports, and it makes no calls to Endeavor Engineering.
What we recommend
- Use a dedicated service account with read-only access to the Knowledge Manager WebAPI, and no interactive sign-in. Do not use a person's account.
- Move every connection to the store with
vf-agent secrets migrate, and confirm withvf-agent secrets verify --require-store, which fails any connection whose password is still in the configuration. - Protect the agent data folder as you would the password. Limit it to the account that runs the
Seeq agent and to administrators. On Linux, run
vf-agentas that account. - Rotate the password on your normal schedule with
vf-agent secrets set(orset-shared); it asks before replacing the old one (--yesin a script). The connector picks up the change the next time the connection connects. - Use
httpswhere your Knowledge Manager server offers it.
Where this is heading. If your organization needs more, tell us. Endeavor Engineering will add it in collaboration with you, matched to your environment and security policies. Options we already have in mind:
| Option | What it would do | Notes |
|---|---|---|
| Integrated Windows authentication | The Seeq agent runs as a domain service account, ideally a group Managed Service Account, and the connector authenticates as that account | No password stored at all. Requires your Knowledge Manager server and Active Directory to accept the service account |
| Encrypted store | The store's values are encrypted for the agent host, for example with Windows Data Protection | Protects copies of the file. Does not protect against an administrator of the agent host |
| Operating-system credential store | The store's entry names an entry in Windows Credential Manager | Native on Windows agents; Linux agents would need an equivalent |
TLS certificate validation¶
With WebServiceMethod: "https", the connection to Knowledge Manager is encrypted. Whether the
connector also checks the server's certificate is set per connection by VForge.Http.Tls.Trust:
Trust |
Certificate check | Hostname check | When to use it |
|---|---|---|---|
Any (default) |
None: any certificate is accepted | None | The behavior of every earlier release. Knowledge Manager servers often use self-signed certificates, so this stays the default, and upgrading changes nothing |
System |
On a Windows agent: the Windows trust store and the Java trust store. On a Linux agent: the Java trust store | Yes | Your Knowledge Manager certificate is issued by a certificate authority your Windows machines already trust. Many sites distribute their internal CA this way |
File |
Only the certificates in the file named by TrustStore |
Yes | Your internal CA is not in the Windows trust store, the agent runs on Linux, or you want to pin one self-signed server certificate |
The hostname check is always on for System and File. The name in WebServiceIP must match a
name in the certificate. If WebServiceIP is an IP address, the certificate must list that address.
Otherwise the connection is refused even though the certificate is otherwise trusted: a valid
certificate for a different server proves nothing.
To pin a self-signed certificate: export the Knowledge Manager server's certificate (the public
part only, as a .cer or .pem file), copy it to the agent host, and set:
"Tls": { "Trust": "File", "TrustStore": "C:\\ProgramData\\Seeq\\data\\keys\\km-server.pem" }
A certificate file holds no secret, but keep it where only administrators can replace it: whoever can swap the file decides which server the connector trusts. Pinning also means that when the server's certificate is renewed, you replace the file.
What you will see in the log. Once per connection at startup, a connection on https with Any
logs a warning that certificate validation is off. A connection that validates logs which trust it
uses. A setting the connector cannot honor, such as an unknown Trust value, File without a
TrustStore, or a file it cannot read, is logged as an error, and that connection does not
connect. It never falls back to accepting any certificate. Other connections are unaffected.
If validation fails against a server that should be trusted, the log names the reason: an untrusted certificate chain, or a certificate that does not match the host name.
Hierarchy modes¶
HierarchyMode decides how the flat Knowledge Manager tag catalog is arranged into a Seeq asset
tree. All four modes produce the same item identities and the same signal names for a given tag —
only the tree position differs.
| Mode | Shape |
|---|---|
tagid |
Default and recommended. Organized by ABB TagId |
kmlogs |
Organized by Knowledge Manager log structure |
ptypes |
Organized by period type |
flat |
No hierarchy — every signal at one level |
Because identity does not change with the mode, switching modes re-shapes the tree without breaking existing worksheets that reference the signals in it. Changing mode does require a full index run to take effect.
What happens during an index run¶
Two phases, in order:
- Asset hierarchy, built sequentially from the Knowledge Manager tag catalog.
- Signals, created concurrently, arranged according to
HierarchyMode.
Group Number and Channel Number are attached to each signal as properties, so they are searchable and filterable in Seeq alongside the signal itself.
Sample data is not moved during indexing. It is fetched from Knowledge Manager on demand when a user
trends a signal, in bounded time chunks, with the connection's UserTimeZone applied.
Known behaviors¶
Worth knowing before they surprise you in an analysis:
- Conditions are not produced. The connector implements Seeq's condition interface but returns no capsules. Conditions from Knowledge Manager are a planned enhancement, not part of the current feature set.
- A null source value becomes a
0.0sample rather than a gap. This is deliberate parity with the behavior of the connector's production predecessor, held pending customer confirmation rather than changed unilaterally — because silently reinterpreting historical data is worse than a documented quirk. If this matters to your analysis, tell us; it is tracked. - Malformed tags are skipped. A tag whose name does not parse to a well-formed identity — one containing a backslash, for instance — is left out rather than admitted with a broken identity.
- Samples are ordered before they reach Seeq. Seeq rejects out-of-order samples, so the connector sorts ascending by timestamp first. This is what makes daylight-saving boundaries a non-event.
Troubleshooting¶
The connector does not appear in Seeq¶
Check that the ZIP was extracted into the agent's connector plugins directory and that the agent was restarted. The agent log states which connectors it loaded.
The datasource appears but nothing indexes¶
In order of likelihood:
Enabledis stillfalse— it ships that way.- No valid license for this host. The log states the license state; without one the connector registers zero active datasources by design. See Licensing.
WebServiceIPis still the placeholder, or the endpoint is unreachable from the agent host.- No index run has happened yet. With
OnStartupAndConfigChangeset tofalse, the first run waits for the schedule. Trigger one from Seeq if you do not want to wait.
Authentication failures¶
Confirm the account, and whether it needs Domain set. NTLM authentication is connection-bound, so a
misconfigured domain typically shows as consistent rejection rather than intermittent failure.
An https connection is refused after enabling certificate validation¶
The log line starting Cannot connect to ABB KM WebAPI server: gives the reason:
PKIX path building failed: the certificate is not trusted by the chosenTrust. WithSystem, check that the issuing CA is in the agent host's trust store; withFile, check that the file holds the CA (or the pinned server certificate) that actually signed it.doesn't match any of the subject alternative names: the certificate is trusted but was issued for a different name. SetWebServiceIPto a name the certificate lists (often the fully qualified host name rather than a short name or IP address), or have the certificate reissued.
Setting Trust back to "Any" restores the previous behavior while you sort it out.
Indexing is slow, or does not finish¶
Large catalogs take time, and MaxIndexingDuration stops a run cleanly at its ceiling — a run that
ends early is doing what it was told. If runs routinely hit the ceiling, either raise it or lengthen
Frequency. If the historian is the bottleneck, leave AdaptiveConcurrency on and consider
RequestsPerSecond to be a better citizen on a shared server.
Signals exist but return no data¶
Indexing and sample retrieval are separate operations against different Knowledge Manager calls, so
a catalog can index while data pulls fail. Check UserTimeZone first — a wrong zone puts samples
outside the window being trended — then the account's read access to tag data as distinct from the
tag list.
Support¶
Include your Seeq version, the connector version, the connection's HierarchyMode, and the relevant
agent log section. See Support for what EEI commits to and how to reach us — and note
that however you raise an issue, with us or with Seeq, we work it through with Seeq support rather
than handing it back to you.
Related¶
- ABB Knowledge Manager Connector for Seeq — what the connector is and what it provides.
- In Your OT Environment — where it sits in a Seeq deployment.
- Versions & Seeq Compatibility — how to read the version number and which Seeq version a release was validated against.
- Frequently asked questions
- Connectors ++ — the shared capability set this connector inherits.
- Seeq Connectivity — datasources, agents, and connectors, and how they relate.