Skip to Content
This documentation is provided with the HEAT environment and describes this HEAT instance.

Configure HCP VBS

HCP VBS reads four JSON files from the same folder as the DLL (VBS4’s mycomponents/HCPVBS/) at startup. A missing or malformed file falls back to the compiled defaults shown below - the plugin never fails to load because of a bad configuration file.

🚫

HEAT Capture has no named-pipe listener. HCP VBS’s own committed HCPVBSConfig.json sets communication.type to "namedpipe", targeting \\.\pipe\HEATCollector - a leftover from an earlier “HEAT Collector” service that named pipes predate. Current HEAT Capture’s plugin interface is REST plus WebSocket only (see the HEAT Capture web API). With "namedpipe" selected, HCP VBS creates the pipe and waits for a client; nothing ever connects, so every publish attempt fails, and because autoReconnect is unconditionally forced on at startup regardless of what the file says, the plugin logs Write failed, attempting reconnection and recreates the pipe on every collection tick, indefinitely, without ever raising an error a log filtered to warnings or above would show. Set communication.type to "websocket" to use the interface HEAT Capture actually exposes.

HCPVBSConfig.json

Communication

SettingTypeDefaultEffectWhen to change
communication.typestring"namedpipe" as shipped; "websocket" if the key is absent or the file is missingSelects the transportAlways set to "websocket" against current HEAT Capture; see above

WebSocket

SettingTypeDefaultEffectWhen to change
websocket.hostnamestring"localhost"Host for the session HTTP calls (start-session, stop-session, current-session)HEAT Capture runs on a different machine
websocket.portstring"50001"Port for the session HTTP callsMust match HEAT Capture’s configured port - see below
websocket.addressstring"ws://localhost:50001/ws"Base WebSocket URL. Built independently of hostname/port above - changing one does not change the otherMust match HEAT Capture’s configured host and port
websocket.publishEndpointstring"/publish"Appended to address to form the publish URLLeave as /publish
🚫

The shipped port is wrong for current HEAT Capture. HEAT Capture’s own default HTTP/WebSocket port is 5005 (see Configure HEAT Capture), not 50001. Set websocket.port to 5005 (or whatever WebSettings:Port is set to on the target workstation), and update websocket.address to match, for example "ws://localhost:5005/ws". The resulting publish URL is address + publishEndpoint - here, ws://localhost:5005/ws/publish - which must equal the /ws/publish endpoint HEAT Capture documents.

Named pipe

Present for completeness; do not use this transport against current HEAT Capture (see above).

SettingTypeDefaultEffect
namedpipe.pipeNamestring"\\\\.\\pipe\\HEATCollector"Win32 named-pipe path HCP VBS creates and serves
namedpipe.bufferSizeinteger65536Pipe I/O buffer size in bytes
namedpipe.timeoutMsinteger5000Pipe connection timeout in milliseconds
namedpipe.autoReconnectbooleantrue in the file; has no effectSee below
⚠️

namedpipe.autoReconnect cannot be turned off. The plugin overwrites it to true unconditionally right after loading the file, regardless of what the JSON says.

Session

SettingTypeDefaultEffectWhen to change
session.startEndpointstring"/api/session/start-session"Appended to hostname:port for the session-start HTTP POSTLeave as shipped
session.stopEndpointstring"/api/session/stop-session"Appended to hostname:port for the session-stop HTTP POSTLeave as shipped

session.sessionEndpoint (the current-session GET) is not read from this file - it is fixed in the plugin at /api/session/current-session regardless of what a JSON file sets.

Collection

SettingTypeDefaultEffectWhen to change
collection.intervalSecondsnumber0Documented as the seconds between data collections; has no effect - see belowNot applicable
collection.captureEnabledbooleantrueMaster switch: false stops all frame preparation, transmission and event recordingTo pause capture without unloading the component
🚫

collection.intervalSeconds does nothing. The value is parsed from the file, but the code path that would apply it (HCPVBSEventManager::SetCollectionInterval) is never called from anywhere in the plugin. The actual collection cadence is a separate, hardcoded 0.1 second (10 Hz) interval inside the event manager that this setting cannot reach. There is currently no way to change how often HCP VBS collects entity data from HCPVBSConfig.json.

captureEnabled does work: it gates OnTick at the call site, so setting it to false stops frame preparation, transmission, and all tracking-event recording. It cannot be re-enabled while VBS4 is running - the plugin only reads it once, at Component_OnStart, before the mission is loaded.

DISMappings.json

Fallback mapping from a VBS ObjectType_v1 name to a DIS entity type pattern, used only when DISConfigNameMappings.json (below) has no entry for the entity’s config class name.

{ "mappings": [ { "vbsType": "tank", "disType": "1.1.*.1.*.*.*", "description": "Tank: Kind=1 (Platform), Domain=1 (Land), Category=1" } ] }
  • vbsType - a VBS ObjectType_v1 name, for example tank, car, human.
  • disType - kind.domain.country.category.subcategory.specific.extra; * resolves to 0. A string with fewer than seven parts has the remaining parts set to 0.
  • description - informational only.

DISConfigNameMappings.json

Primary lookup, keyed by the entity’s VBS model config class name. Checked before DISMappings.json; if no entry matches here, HCP VBS falls back to the type-based mapping above, then to "0.0.0.0.0.0.0" if neither matches.

[ { "disType": "1.1.0.7.0.0.0", "vbsModel": "vbs_civ_truck_light_transport_wht_x" } ]

Entries are typically generated with the scraper tool in build/vs2022/scraper/, which reads the VBS Gateway DIS mappings table.

EntityDenyList.json

Excludes entities from tracking entirely - they never generate a creation event, never appear in a SimulationFrame, and never generate tracking events.

{ "denyList": [ { "type": "ammunition", "configClassName": "" }, { "type": "", "configClassName": "Land_Cargo20_military_F" } ] }

An entity is denied if it matches any rule in the list. Within a rule, both fields must match for that rule to apply; an empty string in either field matches anything for that field.

FieldEmpty meansNon-empty means
typeMatch any VBS object typeEntity must have this VBS object type
configClassNameMatch any config classEntity’s config class name must equal this string exactly
Opens your browser's print dialog. Choose "Save as PDF" as the destination.