Version History
This page records the version update history of ThingsGatewayRuntime.
v2.2.35 (2026-09-18)
Added
- Resizable variable-table columns
- Collection Configuration and Memory Calculation now support dragging variable-table column edges to resize them. Each page saves its own widths, and double-clicking a column edge restores its default width.
Optimized
- IEC 104 collection scheduling (Professional Edition)
- Initial connections and reconnections perform one general interrogation per common address. Variable addresses now accept
group=1through16: when every collected variable has a group, group interrogations follow the packing interval; if any variable omits its group, the entire device uses periodic general interrogation at the packing interval. - Removed the previous collection-mode and interrogation-calibration-interval settings. Interrogation scheduling now uses the variable packing interval, or the device interval when the variable interval is empty. Spontaneous reports continue updating values.
- Initial connections and reconnections perform one general interrogation per common address. Variable addresses now accept
- IEC 61850 connection keepalive and error messages (Professional Edition)
- Periodic online checks now send MMS Status heartbeats, keeping connections active even without collection variables. Failed association recovery or heartbeats close the affected connection so it can reconnect.
- File-service errors now include standard error names and Chinese descriptions, making causes such as a busy file, a missing file, or denied access easier to identify.
- Linux host restarts
- Host restarts are now scheduled one minute later, allowing time to return the operation receipt. Privilege escalation uses a non-interactive command to avoid waiting for a password prompt.
Fixed
- Application restarts
- Restarts now preserve the original startup arguments, fixing the missing application path when hosted by
dotnet. Repeated restart requests create only one successor process, which waits for the original process to exit fully before starting services, avoiding port and database access conflicts.
- Restarts now preserve the original startup arguments, fixing the missing application path when hosted by
- Collection communication stability (Standard and Professional Editions)
- Fixed response data being overwritten by later frames or losing its request association when consecutive frames, spontaneous reports, and request responses interleave. Timeout and cancellation handling is now isolated per request to avoid affecting subsequent collection.
- Fixed packet buffers being released before asynchronous UDP sends complete and messages being released prematurely when shared-channel callbacks change.
- IEC 104 master acknowledgement delays (Professional Edition)
- The master now sends an S-frame acknowledgement for every received I-frame before processing point values. Acknowledgements bypass the business send delay and no longer wait for a receive threshold or acknowledgement timer.
- IEC 104 server group interrogation and multiple common addresses (Professional Edition)
- Server variables now support interrogation-group assignments, and group interrogations return only points matching the requested common address and group. Fixed requests being rejected for non-default common addresses already configured in the point table.
v2.2.33 (2026-09-15)
Added
- IEC 61850 debug negotiation display (Professional Edition)
- The debug connection status now shows the negotiated COTP TPDU size, maximum outstanding called, maximum nesting level, and the actual local/peer socket addresses.
- The file service page adds last-download statistics: transfer time, average speed, read block count, and average block size, together with the MMS PDU and COTP TPDU negotiated for that download connection, making download-speed bottlenecks easier to identify.
- Theme configuration
- Added appearance mode (light/dark/system), display density (normal/compact), and primary-color foreground text color (white/dark/auto contrast) settings; the custom brand color input now validates its format.
Optimized
- IEC 61850 debug download logging (Professional Edition)
- The dedicated download connection now writes its raw packets and its start/complete/failure logs into the device log; completion logs include size, duration, block count, and average speed.
- Successful COTP and MMS association establishment now logs the negotiated values, including the local proposals for comparison.
- Historical data forwarding
- Leaving the string history table name empty now skips creating, writing, and cleaning that table, so only the numeric history table can be kept.
- UI
- Unified the 404 page style.
v2.2.30 (2026-09-11)
This rule engine update is incompatible with the previous rule-flow format and node contracts. Existing flows cannot be reused directly, and no automatic conversion is provided. Back up configurations and custom-node source code before upgrading, then reconfigure flows using the new node parameters and ports, validate them, and enable them only after validation succeeds. Custom nodes must be adapted to the new contracts and recompiled.
Flow definitions are now separate from canvas layouts, with strict distinctions between configuration parameters, state ports, and event ports. Configuration parameters no longer act as connection inputs; explicit conversion nodes are required between events and states or different data types. Flow exchange now uses the new JSON rule package; old CSV files cannot be imported as rule packages.
Added
- Rule-flow validation, exchange, and runtime diagnostics
- Semantic validation locates affected nodes and connections. JSON packages include flow definitions, layouts, and node dependencies, with explicit create, replace, or skip choices for name conflicts. Sensitive fields are cleared during export and must be filled in again after import.
- The runtime panel adds execution results, timeout, retry, queue, and duration metrics, while logs can be traced by flow instance and node. Nodes support total execution timeouts and bounded retries; non-idempotent side effects are not retried automatically.
Optimized
- Rule editing and node configuration
- Added node usage guidance, undo/redo, copy/paste, and connection management, with separate configuration and runtime views. Saving now explicitly reports whether the runtime instance was successfully reloaded.
- Physical dual-node redundancy connection security
- Physical dual-node operation now requires a local certificate and root CA for the mTLS control link. Link mode without a shared arbitration file does not protect against split-brain during network partitions; review certificate and arbitration settings before deployment.
- IEC 61850 file downloads (professional edition)
- Debug downloads use a separate MMS connection so large transfers do not occupy the collection connection's request queue for extended periods.
Fixed
- IEC 104 receive sequence after reconnecting (professional edition)
- A new session synchronizes its receive sequence from the peer's first I-frame and strictly checks continuity thereafter, avoiding reconnect failures when the peer retains its send sequence.
v2.2.21 (2026-09-04)
Added
- Unified special-method calls for devices and forwarding targets
- The debug workspace adds a parameterized special-method panel for data-forward targets with JSON parameters, result display, and bounded upload payloads. Rule flows add device and forwarding-target special-method nodes that can address a device or target by name or ID and invoke plugin-exposed read/write, diagnostic, control, or upload methods.
- Collection drivers now expose a shared address-based read/write entry point, and public methods from standard and professional plugins can be discovered and invoked through the same catalog. The professional IEC 61850 driver also supports downloading a remote file to a specified path on the Gateway host.
Optimized
- IEC 61850 file-service browsing
- Remote files are now shown in a lazily loaded path tree with size and modification metadata, directory filtering, and per-file downloads. Large files and slow links use a dedicated extended download timeout.
Fixed
- Collection resource navigation consistency
- Channels are returned independently, so an empty channel remains visible after its last device is removed. Refreshes cancel stale requests so older responses cannot overwrite the current filtered resource tree, and the resource action bar now keeps a stable layout on narrow and mobile screens.
v2.2.18 (2026-09-03)
Added
- Allen-Bradley ControlLogix tag browsing and batch variable mapping (professional edition)
- The debug page can refresh controller and Program Scope tag directories, filter, paginate, and lazy-load tags, show Symbolic, Physical, and Symbol Instance addresses, types, External Access, and project snapshots, and export selected tags or import them into variable configuration behind a permission check. The driver supports Symbolic and non-blocking/blocking Logical modes, negotiated connection sizes, automatic fragmentation for arrays and BOOL/STRING values, and idle-connection cleanup.
- Batch management for data-forward targets
- Forwarding groups now support selecting targets for batch deletion or clearing all targets. The service validates redundancy relationships, removes related variable properties in a transaction, and restarts the affected group runtime.
Optimized
- IEC 61850 model browsing and MMS request scheduling (professional edition)
- Batch reads are split by the negotiated MMS PDU limit and concurrency budget, while logical-node model snapshots are shared by device and connection generation. Debug browsing supports cancellation and targeted logical-device/node selection to avoid repeated directory requests.
- Real-time channel online-status synchronization
- The status WebSocket now includes channel online data, so the gateway resource navigation updates channel and the selected channel's online/offline state in real time.
Fixed
- Device and channel status-system-variable lifecycle
- Read-only status variables generated by the Memory device now use the device or channel name with
_DS/_TSsuffixes. Renaming or reloading a resource removes stale bindings and prevents leftover variables or name conflicts.
- Read-only status variables generated by the Memory device now use the device or channel name with
- IEC 61850/MMS encoding and reverse-file interoperability
- Corrected BER tags, lengths, and field ordering for InformationReport, file-close, and confirmed-error responses. When no local file source is configured, the client now explicitly rejects reverse file requests, improving interoperability across devices.
- Collection online-state detection
- Variables without a bound collection source or write-only variables no longer make a device appear online, so device status reflects the actual collection link.
v2.2.17 (2026-09-02)
Added
- Time-series history logic scripts
- QuestDB, TDengine, and IoTDB history targets now support dedicated logic scripts that can create tables, write variable history, and clean up expired data through a controlled database context. Relational dynamic SQL, time-series scripts, and custom wide-table templates are validated against database capabilities, and conflicting configurations fail explicitly.
- Webhook platform protocols
- Webhook notifications and data forwarding now provide DingTalk, WeCom, and custom HTTP platform modes, generate platform-specific Text/Markdown payloads, support DingTalk HMAC signing, and validate vendor business error codes. Debug requests follow the same protocol handling, while logs omit URL query credentials.
Optimized
- Data-forward target recovery and diagnostics
- Recoverable initialization, startup, or connection failures now retain the target instance and retry with backoff. Targets with durable caches can continue accepting data while offline, and the detail page shows lifecycle state, cache readiness, recovery attempts, and the next retry time. MQTT, ThingsBoard, Webhook, ZeroMQ, and other targets can rebuild their own connection resources.
- IEC 61850 association interoperability (professional edition)
- Expanded X.225 Session, Presentation, ACSE, and MMS Initiate negotiation with optional session parameters, negotiated Presentation Context IDs, valid BER field ordering, and extended-length authentication, while strictly validating protocol versions, functional units, diagnostics, and permanent/transient rejection responses.
- Pending-data capacity diagnostics
- SyncBridge Edge adds a limit and dropped-value counter for unacknowledged real-time values, preventing unbounded growth during link failures. IEC 104 and IEC 61850 server debug pages also show the cumulative number of variable updates rejected by their bounded queues.
- License status and import UI
- The license page now brings gateway identity, installation details, licensed capabilities, and channel/device/variable quotas into one view, with usage progress and over-limit status. Saved license fields are restored automatically, and the layout remains usable on desktop and mobile screens.
Fixed
- Rule-flow editing
- The editor now applies the flow version returned by each save, so consecutive saves retain optimistic conflict detection. Enum input and input/output properties use constrained selectors and preserve enum defaults correctly.
- Runtime scripts and expression parameters
- Corrected dynamic SQL starter method signatures, full-source assembly naming,
usingparsing, and failed-output cleanup. Variable expression parameters accept plain text and isolate individual conversion errors so one invalid parameter cannot block runtime initialization.
- Corrected dynamic SQL starter method signatures, full-source assembly naming,
- Data-forward cache and service-target lifecycle
- Serialized CacheDB admission, spooling, replay, and disposal so late work cannot access closed resources during stop or reload. Send failures now enter degraded recovery correctly, while IEC 61850 Journal or service-channel failures no longer discard the target instance or its pending queue.
- Collection resource editing and status display
- The collection-variable editor once again lists all selectable collection devices and restores the current device when it is outside the first result batch. Channel and device status indicators again use distinct online, offline, paused, and disabled colors.
v2.2.15 (2026-09-01)
Added
- Collection device and channel status variables
- The Memory device now creates read-only
<DeviceName>_DSand<ChannelName>_TSvariables that refresh from runtime state; they follow device or channel lifecycles and cannot be claimed by regular memory variables.
- The Memory device now creates read-only
- SyncBridge multi-Hub redundancy and failover
- Edge nodes can configure up to 16 Hub endpoints in priority order. Actual heartbeat, real-time acknowledgement, configuration-sync, or transport failures trigger failover, while the debug page shows the active Hub, endpoint status, failure counts, and failover count.
- Rule-node output propagation control
- Custom rule nodes now expose an option that controls whether downstream propagation occurs only when an output value changes. Change-only propagation is enabled by default, and disabling it propagates every assignment.
Optimized
- IoTDB historical-target configuration
- The Tree/Table physical model is now determined solely by
Model,RootPath, orDatabasein the connection string, removing the duplicate target-model field. Table mode still supports custom SQL, and model/namespace mismatches fail validation immediately.
- The Tree/Table physical model is now determined solely by
- Plugin-property and SyncBridge configuration UI
- Nullable enum properties are consistently rendered as enum selectors, and SyncBridge Edge endpoints use a structured list editor to reduce address, TLS-host, and priority mistakes.
- Downloads, authorization, and operations documentation
- The downloads page distinguishes the .NET runtimes required by GatewayRuntime, Watchdog, and Studio, while the authorization page shows entry points by product license type. Reworked the custom-packet, Gateway MQTT, SyncBridge, and memory-variable manuals with additional configuration and verification guidance.
Fixed
- Data-forward Excel configuration import and export
- Variable device names are now resolved directly from variable runtime data, so data-forward variable relations remain correct even when a device runtime is not bound.
v2.2.11 (2026-08-31)
Added
- Apache IoTDB historical data target
- Added IoTDB support to historical data forwarding, with explicit Tree (device path and measurement) and Table (TIME, TAG, and FIELD) models. Table mode supports custom wide-table templates, historical queries, and connection tests.
- Historical numeric aggregation queries
- Added Web API, script helper, and rule-node entry points for Average, Minimum, Maximum, First, and Last values over a variable and UTC time window. Relational, IoTDB, QuestDB, and TDengine targets return aggregate results or explicit capability errors.
- OPC UA method invocation
- OPC UA clients can now invoke server methods by object node ID and method node ID through dynamic methods/RPC, with JSON input and output arguments.
Optimized
- Historical forwarding and queries
- Historical trigger mode, interval, online filtering, and batching are now controlled by the forwarding group while targets focus on storage. IoTDB, QuestDB, and TDengine support storage-side curve aggregation, complete pagination totals, and truncation metadata.
- Native time-series writes and custom SQL templates now use batched writes, precompiled templates, connection reuse, and cached column mappings to reduce large-write and historical-query overhead.
- Plugin configuration and licensing information
- The data-forward plugin catalog now reports whether a target supports variable properties, and the configuration page shows that entry only when applicable. The plugin catalog adds a professional-license filter and complete plugin list, while the commercial-license page documents standard/professional plugin coverage.
Fixed
- Foundation channel reconnect and status
- Reconnect checks now validate device, channel, and closed states together and synchronize device and variable offline status when reconnecting fails, avoiding stale online status after a channel disconnects.
- OPC AE event deduplication
- Event keys now include subcondition, category, severity, quality, acknowledgement, message, and related fields so distinct events are not merged incorrectly.
- Dynamic method arguments and memory variables
- Method variables now handle parameter arrays, optional arguments, and missing required arguments correctly. Write-only memory variables and memory variables with configured initial values remain initialized after reloads.
- Time-series database connection tests
- QuestDB, TDengine, and IoTDB connection tests now use real client or query checks and report connection failures accurately.
- Historical target switching
- Switching historical targets clears stale sorting and table state so fields from the previous target are not reused in the new query.
v2.2.8 (2026-08-28)
Added
- IEC 104 master and server (professional edition)
- Reworked the IEC 104 master/server protocol implementation and debug APIs. The master workspace now covers link state (STARTDT, K/W windows, sequence numbers, frame counters, and errors), general/counter interrogation and single-point reads, paged spontaneous-report monitoring, the complete control-type select/execute flow, and clock synchronization, application tests, process reset, and delay-acquisition commands.
- The server workspace adds an operational overview, client sessions, a paged point table, variable-mapping statistics, and real interrogation test publishing. Test publishing is limited to clients that have completed STARTDT, preventing I frames from being sent to connections that have not entered data transfer.
- Improved the I/S/U frame state machine, sequence windows, and CP56Time2a timestamp codec. Report monitoring distinguishes spontaneous reports from interrogation responses and displays decoded points, quality, and timestamps by CA, TypeId, and IOA.
- IEC 61850 managed master (professional edition)
- Expanded the COTP/ACSE/MMS client with association, model browsing, batch Read/Write, RCB/report, GOOSE-status, and control-block operations; the debug page now exposes connection generation, maximum PDU/concurrent requests, recent reports, data references, and report DataSet, sequence, Reason, and MMS type fields.
- Improved dataset read/create/delete and model read/write interaction, and added paged file-directory browsing with download/delete/rename/ObtainFile, Journal time-range queries, control-block field read/write, and control operations. File downloads are streamed to a bounded backend temporary file instead of allocating the entire file in memory.
- IEC 61850 managed server (professional edition)
- Reworked the server debug workspace with a unified overview, model/value read-write workspace, paged client Associations, logical-device/variable/dataset/Journal/file catalogs, Journal queries, control-block reads, and report/GOOSE/SV test publishing, with mapping coverage, unmapped variables, connection capacity, and periodic-service errors visible in the workspace. The server SOE query entry was removed; Journal is now the server-side event-tracing surface.
- IEC 61850 Layer 2 diagnostics and protocol event storage (professional edition)
- Supports bounded capture on a selected network interface and decodes GOOSE, Sampled Values (SV), and R-Session traffic, including MAC, VLAN, APPID, control-block references, StNum/SqNum, sample data, verification status, and raw hexadecimal frames.
- Spontaneous reports from IEC 104 and IEC 61850 masters are converted into protocol-specific SOE records in the current master-instance relational store, with event-key deduplication, retention, paging, sorting, and export. IEC 61850 server Journal supports in-memory records and configurable relational persistence. IEC 104 interrogation responses are excluded from SOE to prevent duplicate events.
- OPC AE event database storage
- Added optional relational event storage to the OPC AE master, with database type, connection string, event table, split-table policy, retention days, time zone, queue, and CacheDB failed-delivery settings. Storage is disabled by default and initializes the
opcAeEventLogtable when enabled. - Records retain the device, event source, mapped variable, event/alarm times, message, conditions, severity, quality, attribute JSON, acknowledgement state, and event key. Records are deduplicated by device and event key and expired data is cleaned automatically; the debug page adds a separate persistent-history tab with keyword filtering, paging, sorting, and Excel export.
- Added optional relational event storage to the OPC AE master, with database type, connection string, event table, split-table policy, retention days, time zone, queue, and CacheDB failed-delivery settings. Storage is disabled by default and initializes the
- Bulk collection-configuration cleanup
- Added permission-controlled actions to clear channels, collection devices, or collection variables with an impact preview. Clearing channels only unbinds devices, while clearing collection devices or variables preserves channels and memory variables.
Optimized
- Large-configuration workspace
- Collection resources now use lightweight snapshots and virtual lists. Data-forward variable relations, scripts, custom nodes, simulator clients, and debug clients use paged queries; data-forward configuration supports incremental saves, and the debug workspace can be placed below or to the right.
- Collection and data-forward startup
- Channels and their devices, as well as multiple data-forward targets, now start concurrently while preserving failover and rollback handling, reducing startup and restart time for large projects.
- Memory variables and forwarding scope
- The memory workspace now separates regular and system memory variables. The data-forward
Allscope excludes system memory variables by default and forwards them only when explicitly added, preventing unintended upload of system runtime data.
- The memory workspace now separates regular and system memory variables. The data-forward
- IEC 104/IEC 61850 time and pagination behavior
- Protocol results, reports, Journals, file directories, and client sessions now use server-side paging and consistent UTC/project-time-zone display rules. Switching devices or connection generations cancels stale requests and clears old snapshots so data cannot bleed across devices.
Fixed
- Excel configuration import and export
- Empty collection or data-forward exports now retain complete worksheets and headers. Imports validate empty and oversized files and consistently clean up backend temporary files.
- Communication and runtime lifecycle
- Coalesced concurrent connection attempts for the same channel, completed pooled-message and asynchronous-wait cleanup for DDP and DLT645, and routed device restarts through managed scheduling to reduce duplicate reconnects, long-running resource buildup, and restart races.
- Permissions and navigation state
- Completed the query permissions required to edit data-forward groups and target variable properties. A failed background menu refresh now keeps the last valid navigation instead of removing the workspace menu after a transient network error.
v2.2.7 (2026-08-24)
Optimized
- Documentation site and plugin manuals
- Restructured the GatewayRuntime documentation home page and navigation, added collection/data-forward plugin manuals with configuration, address or template, debugging, and verification guidance, and expanded inspection and workflow screenshots.
Fixed
- MQTT and ThingsBoard RPC
- Added exception isolation around client, server, and ThingsBoard RPC handling so one malformed or failed message does not stop subsequent message processing.
- Gateway startup and export data
- Web API startup failures are now propagated instead of leaving the Gateway apparently started. Device exports preserve their column shape when channel or redundant-device associations are missing.
v2.2.6 (2026-08-21)
Optimized
- Data-forward upload templates
- Variable, device, alarm, and plugin-event payloads now support Text/JSON templates with nested fields, complex values, and date/number formatting. The configuration editor can insert fields, preview output, and validate templates before saving while preserving list/dictionary upload shapes.
Fixed
- Dynamic-property configuration restore
- Fixed PascalCase JSON values not being restored correctly by frontend editors. Custom packet, MQTT remote-source, historical SQL template, SOE, and client-permission configurations now reopen with their saved values intact.
v2.2.5 (2026-08-21)
Optimized
- SECS-I serial protocol (professional edition)
- The SECS-I driver, configuration, debug panel, and API now consistently use
SECS Serial; SECS-II data trees written to variables are converted to XML text, making serial protocol identification and structured payload inspection clearer.
- The SECS-I driver, configuration, debug panel, and API now consistently use
Fixed
- Device redundancy switching
- Switching now follows the device that actually takes over; if the standby device fails to start, the roles are rolled back and the original device is restored, preventing inconsistent redundancy state and communication tasks.
- Data-forward target redundancy
- A failed target switch or startup now stops the failed target and restores the former active target and redundancy state, preventing forwarding from being interrupted by a failed transition.
- PostgreSQL custom SQL historical forwarding
- Corrected JSON/JSONB parameter type binding so JSON text is not sent as an ordinary text value that causes inserts to fail.
- Push and mirror device status
- Devices with a healthy connection and no polling variables are no longer incorrectly marked offline by the generic health check.
v2.2.4 (2026-08-20)
Optimized
- IEC 60870-5-104 master acquisition scheduling (professional edition)
ThingsGatewayRuntimePROprovides report-plus-periodic-calibration and per-variable interrogation modes, grouping interrogation plans by common address and collection interval.- Adds dedicated interrogation completion timeout and calibration-interval settings. Quality-invalid flags from spontaneous reports or interrogations now propagate to the variable offline state, reducing drift between point status and device quality.
v2.2.3 (2026-08-20)
Added
- ThingsGateway V12 software licensing
- The Docs licensing center can now generate ThingsGateway V12 authorization codes in batches from machine UUIDs, an authorization name, and channel, device, and variable limits. Generated codes can be copied directly.
Optimized
- Plugin configuration and address guidance
- Plugin properties for collection channels, devices, and data-forward targets are now grouped by purpose, including connection settings, runtime parameters, data format, cache, and storage, making configuration and review easier to navigate.
- Expanded plugin-property and collection-address guidance covers common protocol address formats, data types, and configuration notes.
Fixed
- Protocol-specific debugging
- Corrected response parsing for protocol-specific debugging APIs, including IEC 104, FANUC, and Yaskawa, so read/write, remote-control, and diagnostic results display correctly in the debug workspace.
Documentation Site Update (2026-07-03)
Operation Manuals
- Improved the GatewayRuntime Web, Studio Web, and Watchdog Web operation manuals for login, overview, collection configuration, data forwarding, debugging, alarms, rules, scripts, nodes, certificates, logs, users, roles, and system settings.
- Added user-facing descriptions for configuration dialogs, configuration drawers, parameters, screenshots, and common troubleshooting.
- Added Studio project management, Watchdog connection, project upload and download, backup, tunnel, and runtime parameter instructions.
v2.2.2 (2026-08-19)
Added
- Gateway offline software licensing
- System Settings now includes Software Licensing, where users can view the Gateway code, installation identity, current resource counts, and licensed limits, and import a signed license under a dedicated permission. Unlicensed installations can use 50 channels, 50 devices, and 1,000 variables; a commercial license is required beyond those limits.
- Docs now provides GitHub sign-in and a software-licensing page that generates a permanent offline license bound to a Gateway code.
- Runtime prerequisites in the Docs download center
- The download center now highlights the required .NET 10 ASP.NET Core Runtime and provides official direct links for multiple Windows, Linux, and macOS architectures.
Optimized
- Protocol simulator lifecycle
- The protocol simulator now participates in Gateway's main business lifecycle and redundancy orchestration, giving automatic startup, configuration reloads, failover transitions, and host shutdown one deterministic sequence with an additional stop-state and business-permission check at startup boundaries.
- OPC UA Server variable synchronization
- Runtime updates and client writes now locate nodes by stable variable ID, reuse write callbacks, and update leaf-node status and timestamps directly, improving high-frequency synchronization stability with less overhead.
Fixed
- Rule-engine asynchronous triggers and timer nodes
- Each consecutive output is now bound to its matching input immediately before the target node runs, preventing later values from overwriting earlier inputs under asynchronous or no-debounce scheduling. Delay nodes capture the input and delay at invocation, while interval timers emit a complete high-low pulse so reset and edge-triggered actions are not lost.
v2.1.44 (2026-08-17)
Optimized
- Rule-engine aggregate nodes
- Average, Sum, and MinMax now publish the current result during each statistics period. Reset switches periods on the rising edge, so a reset held high does not submit the same period repeatedly.
- Web API dependency injection
- Web API plugin API controllers now use the host's shared service container, allowing stable resolution of host services and improving Gateway management API startup and runtime stability.
- Watchdog runtime defaults
- The default Gateway health-check port is now
6100. Tunnel clients are no longer activated during startup when tunneling is disabled, reducing unnecessary connections and startup log noise.
- The default Gateway health-check port is now
Fixed
- Expression output propagation
- Output callbacks are no longer raised when an output value has not changed, reducing redundant updates from rule nodes and script expressions.
v2.1.43 (2026-08-15)
Added
-
Unified debug workspace and protocol diagnostics
- Collection devices and data-forward targets now share one debug workspace with 12 composable general-purpose modules and 56 protocol-specific panels for robots, PLCs, instruments, IEC protocols, barcode/RFID devices, messaging platforms, and related services.
- Configuration and diagnostic information remains available while a device is offline, disabled, paused, on standby, or failed to initialize, while operations that require a live runtime instance are disabled.
-
OPC UA Server certificate and trust management
- The default endpoint is now
opc.tcp://127.0.0.1:48410. X509 user-certificate login, manual trust-list/specified-CA modes, a trusted client CA, and a server issuing CA are configurable, while five client certificate stores can be maintained from the debug workspace under separate permissions.
- The default endpoint is now
-
Plugin and protocol support
- The complete list of new collection plugins is below: one plugin in the standard runtime and 74 plugins in the
ThingsGatewayRuntimePROproject (plugin assembly:ThingsGatewayRuntime.NOAOTPROPlugin), 75 in total.
Source New collection plugin (search name) ThingsGatewayRuntime.PluginDlt645_1997MasterThingsGatewayRuntimePROA3CMasterThingsGatewayRuntimePROAbbWebApiMasterThingsGatewayRuntimePROAiBusMasterThingsGatewayRuntimePROBarcodeIngressMasterThingsGatewayRuntimePROBeckhoffAdsMasterThingsGatewayRuntimePROCimonHmiMasterThingsGatewayRuntimePROCjt188MasterThingsGatewayRuntimePRODam3601MasterThingsGatewayRuntimePRODeltaMasterThingsGatewayRuntimePRODf1MasterThingsGatewayRuntimePRODigitronCplMasterThingsGatewayRuntimePRODlt698MasterThingsGatewayRuntimePRODtsu6606MasterThingsGatewayRuntimePROEcFanMasterThingsGatewayRuntimePROEfortRobotMasterThingsGatewayRuntimePROEstunRobotMasterThingsGatewayRuntimePROFanucCnc0iMasterThingsGatewayRuntimePROFanucRobotInterfaceMasterThingsGatewayRuntimePROFatekProgramMasterThingsGatewayRuntimePROFujiCommandMasterThingsGatewayRuntimePROFujiSpbMasterThingsGatewayRuntimePROFujiSphMasterThingsGatewayRuntimePROFxLinksMasterThingsGatewayRuntimePROFxSerialMasterThingsGatewayRuntimePROGeSrtpMasterThingsGatewayRuntimePROHyundaiTrackingMasterThingsGatewayRuntimePROIec104MasterThingsGatewayRuntimePROInovanceComputerLinkMasterThingsGatewayRuntimePROInovanceConnectedCipMasterThingsGatewayRuntimePROInovanceEasyNetMasterThingsGatewayRuntimePROKeyenceDlen1MasterThingsGatewayRuntimePROKeyenceKvOldMasterThingsGatewayRuntimePROKeyenceMcAsciiMasterThingsGatewayRuntimePROKeyenceMcBinaryMasterThingsGatewayRuntimePROKeyenceNanoMasterThingsGatewayRuntimePROKeyenceSr2000MasterThingsGatewayRuntimePROKnxMasterThingsGatewayRuntimePROKukaControllerTcpMasterThingsGatewayRuntimePROKukaVariableProxyMasterThingsGatewayRuntimePROLogixCipMasterThingsGatewayRuntimePROLsisMasterThingsGatewayRuntimePROMc1E_AsciiMasterThingsGatewayRuntimePROMc3E_AsciiMasterThingsGatewayRuntimePROMcR_BinaryMasterThingsGatewayRuntimePROMegMeetMasterThingsGatewayRuntimePROMicroCipMasterThingsGatewayRuntimePROMitsubishiCipMasterThingsGatewayRuntimePRONanjingDcsMasterThingsGatewayRuntimePROOmronCipMasterThingsGatewayRuntimePROOmronConnectedCipMasterThingsGatewayRuntimePROOmronHostLinkCModeMasterThingsGatewayRuntimePROOmronHostLinkMasterThingsGatewayRuntimePROOpenProtocolMasterThingsGatewayRuntimePROOrientalMotorMasterThingsGatewayRuntimePROPanasonicMcMasterThingsGatewayRuntimePROPanasonicMewtocolMasterThingsGatewayRuntimePRORkcMasterThingsGatewayRuntimePROSamCardMasterThingsGatewayRuntimePROScaleStreamMasterThingsGatewayRuntimePROSecsSerialMasterThingsGatewayRuntimePROShineInMasterThingsGatewayRuntimePROSiemensFetchWriteMasterThingsGatewayRuntimePROSiemensPpiMasterThingsGatewayRuntimePROSlcEthernetMasterThingsGatewayRuntimePROToyoPucMasterThingsGatewayRuntimePROTurckRfidMasterThingsGatewayRuntimePROVibrationStreamMasterThingsGatewayRuntimePROXinJeInternalMasterThingsGatewayRuntimePROXinJeModbusMasterThingsGatewayRuntimePROYamahaRcxMasterThingsGatewayRuntimePROYaskawaMemobusMasterThingsGatewayRuntimePROYokogawaLinkMasterThingsGatewayRuntimePROYrc1000MasterThingsGatewayRuntimePROYrcHighEthernetMaster- Modbus ASCII master frame handling is also included. ASCII master mode is limited to serial, TCP client, and streaming TCP service channels; UDP is not supported, and Modbus slave mode remains limited to TCP and RTU.
- The complete list of new collection plugins is below: one plugin in the standard runtime and 74 plugins in the
Optimized
-
Plugin catalog and filtering
- Plugin management is now organized by vendor and ecosystem, with filters for vendor, type, status, license, platform requirements, and protocol keywords. Entries also show purpose, class, assembly, version, license, and platform restrictions, while official-plugin status is supplied consistently by the server.
-
Debug messages and runtime diagnostics
- Debug messages are separated from the public status channel and connections use short-lived, single-use tickets. Bounded queues, message-length limits, sensitive-content masking, and subscription-target validation reduce resource exhaustion and sensitive-data exposure risks.
Fixed
- Debug permissions and high-risk operations
- Debug access is now split into view, query, standard write, dangerous control, and sensitive-data levels. The default user role receives only view and read-only debug access, and debug tabs and action controls are hidden or disabled according to permission.
- High-risk operations such as arbitrary Keyence commands, reset and lock actions, and IEC 61850 dataset deletion now require separate authorization. Dataset deletion also requires confirmation to prevent accidental execution by standard write roles.
v2.1.41 (2026-08-11)
Added
-
OPC UA Server historical alarm reads
- OPC UA Server can bind a separate historical alarm target and expose alarm, acknowledgement, and recovery events through standard
ReadEventDetailsreads on the Server, Gateway root, or device notifier nodes. Reads support node-scoped filtering, paging, continuation, and stableEventId,ConditionId, and standard alarm fields. - Configuration saving now verifies that historical data and alarm targets support the required query capabilities and lists valid targets when a selection is invalid. Real-time and historical alarms share stable Condition identities derived from the variable and alarm type.
- OPC UA Server can bind a separate historical alarm target and expose alarm, acknowledgement, and recovery events through standard
-
Variable real-time decimal places
- The variable editor now supports 0 to 28 decimal places, rounding final scalar values after collection or expression processing to the effective precision of the runtime numeric type while preserving raw-value precision. System-variable updates and batch editing apply the same setting.
Fixed
-
Alarm acknowledgement and recovery state
- Fixed confirmed alarms losing their acknowledgement state on recovery. Recovery events now retain the combined acknowledged-and-finished state so history and OPC UA clients do not report them as unacknowledged.
-
GatewayRuntime Web configuration guidance
- Data-forward target details now resolve enum display text from either stored names or numeric values, and content-template help renders
${...}placeholder syntax literally instead of treating it as an i18n interpolation expression.
- Data-forward target details now resolve enum display text from either stored names or numeric values, and content-template help renders
v2.1.40 (2026-08-10)
Optimized
- Data-forward target details
- Target details now show plugin property settings with readable enum and Boolean values, and refresh property definitions when the selected target changes for easier configuration review.
Fixed
- OPC UA Server history capability advertisement
- Fixed
HistorizingandHistoryReadattributes not matching the actual history-read routing. Valid history targets now register history services per node, while invalid targets disable history advertisement and report the currently available targets.
- Fixed
v2.1.39 (2026-08-09)
Added
-
OPC UA 2.0 collection and server capabilities
- Upgraded the OPC UA Client and Server to the 2.0 stack. Collection now handles built-in scalar, array, matrix, and structured-value encoding, and restores sessions and subscriptions after reconnecting; these capabilities are also available on the Native AOT runtime path.
- OPC UA Server now supports raw historical reads from a selected history target with paging, continuation points, and release handling. It also exposes real-time alarm activation, acknowledgement, recovery events, and
ConditionRefresh, allowing standard OPC UA clients to consume variables, history, and alarms through one server.
-
Variable state-value alarms
- Variables can define multiple exact numeric state mappings with independent alarm text, level, delay, and suppression expressions. The Web editor supports adding and removing mappings, validates duplicates and parameters, and preserves state-alarm settings during variable import and export.
Optimized
-
Backend log queries and exports
- All-source log queries now use bounded merged pagination and stable sorting, with explicit errors when a source cannot be read. CSV exports stream each source and support filters, request cancellation, and timeout termination to reduce memory use and avoid unbounded work on large log sets.
-
Long variable and OPC UA value display
- Current values, raw values, and OPC UA debug values use fixed-width previews in tables, while tooltips and detail drawers show complete arrays and structured content without expanding rows or squeezing the page.
Fixed
-
Memory-variable write types
- Fixed JSON/RPC writes and initial-value loading degrading numeric values to
Int64. Values are now converted using each variable's declared data type and reported individually, so one conversion failure does not block other variables in the same batch.
- Fixed JSON/RPC writes and initial-value loading degrading numeric values to
-
Real-time alarm counts and confirmation state
- The unconfirmed-alarm badge now uses a server-side global count instead of the current page or filter. Rows update only after the server confirms the operation, followed by a silent refresh to reconcile concurrent confirmations.
-
System overview list filtering
- Fixed channel, device, and variable detail lists in the overview not fully applying dynamic filters and sorting.
v2.1.38 (2026-08-04)
Added
-
Structured GatewayRuntime Web property editors
- Added visual editors for Gateway MQTT Client/Server remote sources, custom SQL historical wide-table templates, and CAN hardware filter IDs. Editors cover source authentication, QoS, grouping and column mappings, custom SQL, and validated CAN ID add/remove flows without manual JSON.
-
Richer system resource overview
- Overview now shows used/total system memory and disk capacity, process memory, GC memory, thread count, named disk, and all-fixed-disk totals with clearer capacity units.
Fixed
-
Cancelled requests and channel logs
- Cancelled Web requests no longer trigger global network error notifications, and channel-scoped log pages avoid their duplicate initial load, reducing unnecessary requests and false network alerts.
-
Client permission list persistence
- Fixed empty or invalid client permission lists for server-side plugins such as ModbusSlave being saved as
null; they are now saved as empty lists to keep dynamic property values consistent.
- Fixed empty or invalid client permission lists for server-side plugins such as ModbusSlave being saved as
v2.1.37 (2026-08-03)
Added
-
Dedicated Gateway MQTT collection for multiple gateways
- Added
GatewayMqttCollectClientandGatewayMqttCollectServerto aggregate multiple remote Gateways through one shared MQTT Broker session or one local Broker listener. StableRemoteKeyvalues isolate real-time values, online state, full snapshots, variable catalogs, and RPC writes for each source. - A dedicated debug page shows per-source state and diagnostics, requests snapshots, tests RPC, and creates variable synchronization plans for one or all remotes. Synchronization only adds variables or updates data type, unit, and description; local names, expressions, alarms, history, and write permissions are preserved, and remotely missing variables are not deleted automatically.
- Added
-
SyncBridge public aggregation and real-time synchronization (upgrade notice)
- SyncBridge now has explicit
HubServerandEdgePublisherroles. One public Hub can aggregate multiple edge Gateways with stablePeerIdvalues over a single mutually authenticated TLS port. Configuration uses revisions, checksums, staged chunks, and atomic commits; real-time values use Epoch, Sequence, application acknowledgements, and full-snapshot recovery after reconnecting. - A dedicated debug page reports peer connections, configuration revisions, queues, acknowledgement latency, and errors, and can start configuration synchronization, full-value snapshots, managed reconnects, disconnects, and diagnostic exports. The old
IsServerandIsMasterconfiguration contract has been removed; after upgrading, configure the role, peer identity, handshake token, certificate, CA, and target host name again.
- SyncBridge now has explicit
-
DL/T 645-2007 relay control
- The DL/T 645-2007 master now provides dynamic write methods for trip and close-permit commands using the default meter address, with validation for the level-02 plaintext password, operator code, and configurable command validity period.
Optimized
-
Protocol simulator and ModbusSlave hot paths
- New Modbus simulator instances now cover 65,535 holding registers by default. TCP PDU handling, address parsing, bit converters, and raw-memory writes are reused, while data generators use event-driven scheduling to reduce allocation and scheduling overhead with large point tables, continuous generation, and frequent requests.
-
Variable runtime and data-forward scheduling
- Variables on the same device share their runtime context, variable changes create forwarding snapshots only when enabled routes exist, and target indexes, batch dispatch, and protocol observations use leaner representations to reduce resident memory and unnecessary work for large variable sets and multiple targets.
-
Data-forward runtime logs
- Forwarding-group and forwarding-target logs now use
Logs/DataForwardGroupandLogs/DataForwardTarget. If SQLite logging is unavailable, startup falls back to the shared backend log instead of blocking the forwarding group or target.
- Forwarding-group and forwarding-target logs now use
Fixed
-
Data-forward shutdown and reliable writes
- Fixed reliable history writes accessing a database after disposal had started. Shutdown now waits for in-flight writes and rejects late writes, avoiding data loss and resource races during stop and reload boundaries.
-
Protocol simulator event and request lifecycle
- Fixed late operations recreating an event database after an instance was deleted or the service was closed, and made shutdown wait for in-flight event operations. Modbus request cancellation, concurrent admission release, and stable response handling were also hardened.
-
MQTT snapshot and RPC protocol boundaries
- MQTT Client and Server Producers now apply the same canonical request-ID validation, report snapshot completion as successful only when every snapshot fragment was published, and retain an independent message copy before asynchronous processing so temporary receive buffers cannot invalidate snapshot or write responses.
-
Web log and date filters
- Fixed query and reset errors after clearing the time range in channel, runtime, and rule logs. Required date values in time synchronization and simulator generators can no longer be cleared.
v2.1.36 (2026-07-31)
Added
-
Modbus and Siemens S7 protocol simulator
- GatewayRuntime now includes a protocol simulator that can host Modbus TCP, Modbus RTU, or Siemens S7 slaves with TCP/serial transports, simulated points, read/write permissions, deterministic data generators, fault injection, raw memory, client diagnostics, and persistent events.
- Channel profiles can be imported or exported as JSON, and variable point tables as Excel, for protocol integration, point-list validation, fault reproduction, training, and automated testing without a separate simulator application.
-
Fully configurable custom-packet collection
- Added the
CustomPacketMastercollection plugin for TCP client, TCP server, UDP session, and serial transports. It supports fixed-header, start/end range, delimiter, and fixed-length framing, plus request templates, response ownership, success conditions, payload extraction, and common checksum algorithms. - Device debugging can send raw Hex or text packets in send-only or send-and-wait mode and create a protocol draft from actual exchanges. Before it is applied, the sample is validated through the production framing, checksum, and response rules to reduce invalid runtime configurations.
- Added the
-
MQTT collection control writes and RPC acknowledgements
- MQTT Collection Client and Server variables can publish control messages with JSON or raw UTF-8 string payloads and Retain while using the device QoS. Read-only, write-only, and read/write variables share one validated eight-part address editor and contract.
- Optional
{RequestId}request/response Topics and a timeout let Gateway treat onlysuccess=truefrom the exact non-retained response Topic as device acknowledgement. Timeouts, disconnects, route reloads, and invalid responses return explicit failures, and potentially non-idempotent commands are not retried automatically.
-
Static variable information for database targets
- SqlServer, MySql, Sqlite, and PostgreSql historical-data targets now maintain a separate variable-information table with variable, device, channel, unit, data type, access, and custom-field metadata. Dual-database mirrors synchronize this table to both databases.
- Real-time database targets now initialize every in-scope variable with its static information and current state, then update only dynamic value columns. Offline variables retain their static information even when offline-value filtering is enabled.
Optimized
-
GatewayRuntime Web code-editor resources
- Monaco now loads only the C# language support and general worker used by Runtime. Script and custom-node pages retain Studio Roslyn completion while unused languages, workers, and bundled static assets are reduced.
-
Chinese and English operation documentation
- Added protocol-simulator, custom-packet, DTU-service, and end-to-end collection-to-MQTT/SQLite/rule-engine guides, and completed the current English GatewayRuntime, Studio, Watchdog, plugin, script, and custom-node documentation with workflow screenshots.
Fixed
-
ModbusSlave variable-mapping boundary
- Fixed unconfigured target variables falling back to their collection address. A Modbus slave register is now created only when the target variable has an explicit slave service address, preventing ordinary collection variables from being exposed unintentionally.
-
Collection-form defaults and channel editing
- Fixed missing round-trip fields such as the backup remote address when editing a channel from the device dialog, and aligned new-channel, TCP-service, and variable-filter defaults with the backend definitions.
v2.1.34 (2026-07-27)
Added
- MQTT collection JSON field mapping and message condition context
- MQTT Collection Client and Server variable addresses now support a practical single-value JSONPath subset, including the
$root, object properties,[0]and.0array indexes, and special property names such as$['a.b']. One variable can define ordered fallback fields withpath1||path2. - Condition scripts can read the complete Payload and the actual published Topic. MQTT Collection Server conditions can also read the publisher ClientId, which enables device filtering when wildcard Topics are used.
- MQTT Collection Client and Server variable addresses now support a practical single-value JSONPath subset, including the
Optimized
- MQTT collection message processing and configuration guidance
- Field paths are compiled when variables load, each message parses JSON once, and a condition with the same name runs once per message. Payload strings, intermediate collections, and repeated path splitting are reduced; the Chinese and English plugin references now include field-path, fallback-field, condition-script, and wildcard-Topic examples.
Fixed
-
Missing MQTT fields and failed conditions
- Missing fields, out-of-range array indexes, and invalid paths no longer overwrite variables with null. A missing condition script, script exception, or non-Boolean result now rejects the update and logs a warning instead of allowing the message through.
-
GatewayRuntime, Studio, and Watchdog time display
- Unified the boundary between backend UTC values and storage wall-clock values. Real-time and historical alarms, historical data, logs, redundancy status, variable details, backups, and projects no longer risk double conversion, timezone offsets, or inconsistent display across timezones.
-
Collection configuration dialog layout
- Fixed shared styles not reaching split child components in channel, device, variable, and quick-expression dialogs, which could cause incorrect number-input and text-input widths or squeeze batch-edit markers.
-
Runtime indexes after renaming copied variables
- Fixed stale indexes left by renaming a copied variable back to its original name, which could cause the same variable to enter collection packing under both the old and new names.
v2.1.33 (2026-07-24)
Added
- Studio and Watchdog remote management over HTTP IP
- The packaged Studio and Watchdog configurations can listen on all network interfaces and can be opened directly at
http://device-IP:5100andhttp://device-IP:6200. Remote bootstrap, Watchdog project deployment, and process control are also available when remote management is enabled. - Plain HTTP still provides no TLS transport protection. Continue to use HTTPS on public or untrusted networks and restrict network access to management ports.
- The packaged Studio and Watchdog configurations can listen on all network interfaces and can be opened directly at
Optimized
-
Current Studio and Watchdog authentication protocol
- Login and bootstrap passwords now use a two-minute, one-time RSA-OAEP-SHA256 public-key challenge. Watchdog management APIs now use an eight-hour opaque Bearer session that is invalidated by logout or a Watchdog restart.
- Studio-to-Watchdog connections use the same one-time password challenge and Bearer session, with automatic re-login and one retry when a Watchdog restart invalidates the session.
-
Deployment, operation, and API documentation
- The Chinese and English documentation now covers Studio/Watchdog HTTP IP configuration, authentication endpoints, session behavior, security boundaries, and troubleshooting for
importKey, 401, 403, and expired challenges.
- The Chinese and English documentation now covers Studio/Watchdog HTTP IP configuration, authentication endpoints, session behavior, security boundaries, and troubleshooting for
Fixed
- Login from plain HTTP IP pages
- Fixed GatewayRuntime, Studio, and Watchdog login failures caused by unavailable
SubtleCryptoand an undefinedimportKeyon plain HTTP IP pages. The current frontends can use browser-provided strong randomness to perform RSA-OAEP-SHA256 password encryption.
- Fixed GatewayRuntime, Studio, and Watchdog login failures caused by unavailable
v2.1.32 (2026-07-23)
Added
-
Hot-standby identity, secure transport, and shared arbitration (upgrade notice)
- Hot standby now validates the redundancy group, local node, and expected peer identity, and supports optional mutual TLS plus work authorization through a SQLite file shared by both gateways. The page also reports local role, peer identity, collection, data forwarding, alarm, rule-engine, link, and arbitration state.
- After upgrading, enabled hot-standby pairs must use the same cluster name, different local node names, and matching expected peer names. Leaving the shared arbitration file empty keeps link-only failover and can allow split-brain during a network partition. The local transport certificate, trusted root certificate, and peer certificate host name must either all be configured or all be empty.
-
Dual-database mirroring for historical data and alarms
- Historical data and historical alarm targets can write to primary and secondary databases, with Journal/backlog status, time-range comparison, bidirectional repair, scheduled consistency checks, and automatic repair.
- Mirroring supports only the standard SqlServer, MySql, Sqlite, and PostgreSql table paths. QuestDB, TDengine, custom SQL, historical table scripts, and historical alarm table scripts are unsupported. The two databases must be different physical targets, and this feature is independent of hot-standby historical compensation.
-
Historical queries and MQTT history RPC
- Added typed historical queries with UTC time ranges, variable sets, pagination, allow-listed sorting, and numeric series modes including Auto, Raw, Average, Minimum, Maximum, First, and Last with point limits.
- MQTT Client and MQTT Server producers now support the
RpcHistorytopic for target, record, numeric-series, alarm, confirmation, and cancellation requests, with gzip/Base64 chunking plus request, response, and concurrency limits.
Optimized
-
Modbus Master packing rules (upgrade notice)
- The former single Max Pack Length setting has been replaced by separate FC1, FC2, FC3, FC4, FC15, and FC16 quantity limits. Reads or batch writes that exceed the applicable limit now fail validation before a frame is built. After upgrading, open every Modbus Master device and review all six rules; do not assume the old
MaxPackvalue is mapped automatically.
- The former single Max Pack Length setting has been replaced by separate FC1, FC2, FC3, FC4, FC15, and FC16 quantity limits. Reads or batch writes that exceed the applicable limit now fail validation before a frame is built. After upgrading, open every Modbus Master device and review all six rules; do not assume the old
-
Unified certificate management APIs (upgrade notice)
- Certificate management moved to the shared TAdmin module while the Web entry remains unchanged. The old
/api/gatewaycertificatecontroller/...routes have been replaced by/api/certificatecontroller/..., with corresponding action and permission-code changes. External API integrations must migrate.
- Certificate management moved to the shared TAdmin module while the Web entry remains unchanged. The old
-
Data-forwarding and rule-flow configuration reliability
- Strengthened validation for forwarding groups, targets, variable ranges, plugin properties, and primary/standby target topology. Configuration changes can restart only affected objects, while stale backlog delivery and loss of authoritative failover state are prevented.
- Rule-flow names now validate length, invalid characters, reserved names, and case-insensitive uniqueness. Version checks prevent a later save from silently overwriting another user's concurrent edit.
-
Real-time status and Web interaction
- Real-time status and debug messages now group equivalent subscriptions and add subscription caps, bounded queues, re-entry protection, reconnect backoff, and stale-response protection for more stable large-point and frequently changing views.
Fixed
-
SQLite configuration database backup
- Fixed WAL-mode backups that could miss committed records or depend on companion
-waland-shmfiles. Backups are now consistent, standalone database snapshots that include committed WAL data.
- Fixed WAL-mode backups that could miss committed records or depend on companion
-
History, forwarding, and failover recovery
- Fixed incomplete status, incorrect backlog ownership, or inconsistent task recovery during target restarts, cache replay, failover, and runtime recovery.
v2.1.22 (2026-07-14)
Added
-
Historical reliable-sync diagnostics
- Gateway redundancy in System Settings now includes historical reliable-sync diagnostics for target support, Journal state, Epoch leases, and Journal events, with filters for target key, source node, record type, record key, pending peer, and pending DB state.
-
TCP Client backup remote address
- Collection channels now support a backup remote address for TCP Client channels. If the primary remote address fails to connect, disconnects, or times out, the same channel can try the backup address before device-level redundancy is needed.
Optimized
-
Historical data and alarm redundancy reliability
- Standard SQL historical data and historical alarm write paths now coordinate Journal records, peer acknowledgment, DB Epoch leases, and record keys to improve replay and de-duplication after failover, short link outages, temporary database outages, or runtime restarts.
-
Data forwarding runtime observability
- Data forwarding details now expose plugin runtime state, online state, Reliable History tags, Journal target keys, unsupported reasons, and CacheDB outbox diagnostics to help locate target startup failures, offline-cache backlog, and historical reliable-sync status.
-
Offline cache and retry recovery
- CacheDB outbox, memory queues, retained retries, and resend recovery were improved. Runtime details now show model count, pending counts, oldest pending time, and errors directly.
Fixed
-
Historical write consistency
- Fixed cases where historical data or historical alarms could be duplicated or missed during failover, restart recovery, or short offline periods. Supported standard SQL targets now use record keys for idempotent writes.
-
Target runtime recovery status
- Fixed unclear data forwarding status after cache resend, retry, or runtime refresh, making it easier to confirm whether a target has actually recovered.
v2.1.20 (2026-07-12)
Added
-
Variable reference tracking
- Variable details now include a references view that summarizes usage in data forwarding groups/targets, rule flows, scripts, and variable expressions, with navigation to the related forwarding group, forwarding target, or rule flow before changing or deleting a point.
-
Secondary-development documentation
- Added detailed documentation for collect plugin development, business plugin development, script development, and custom node development, plus plugin property references, lifecycle notes, parameter models, examples, and troubleshooting checklists.
Optimized
-
Data forwarding configuration experience
- The Data Forwarding page now uses a resizable split layout, denser group/target cards, and query-based locating for specific groups or targets so reference navigation opens the relevant configuration directly.
-
Gateway system-setting safety
- Network, system time, and NTP configuration now execute system commands through argument lists with validation, timeouts, and safer privileged file writes, reducing failures caused by special characters or command formatting.
-
Permissions and debugging APIs
- Gateway, plugin, and NOAOT plugin debugging APIs now use centralized permission constants and seed data, reducing cases where a page action is visible but the API is still unauthorized after upgrade.
-
Studio and Watchdog delivery reliability
- Watchdog now supports disabling health checks, hashed password storage, safer project package extraction, temporary-file downloads, and GatewayApp rollback snapshots after failed apply operations. Studio project upload/download and startup security checks were strengthened as well.
-
Documentation site
- Reworked the current manuals into an entry index and common task routes, added clearer topic references for collection, memory, forwarding, rules, scripts, plugins, and permissions, and refreshed GatewayRuntime screenshots.
Fixed
-
Network and time configuration
- Fixed unreliable Linux DNS/default-route/subnet-mask handling and improved Windows/Linux time synchronization configuration to reduce failures from command formatting, invalid input, or service state.
-
Project package handling
- Fixed Studio/Watchdog project package upload and extraction risks around unsafe paths, oversized entries, and leftover temporary files.
v2.1.9 (2026-07-08)
Added
- Unified TAdmin management module
- GatewayRuntime now integrates the shared TAdmin management module. Users, roles, menus, button permissions, and audit logs are handled by the shared module, while Gateway provides the default menu, role, and button-permission seed data.
- Gateway Web now uses the TAdmin frontend plugin and mounts management menus under
/gateway-workspace, keeping system management features aligned with Gateway workspace routing.
Optimized
-
Gateway permissions and log configuration
- Backend startup now registers Gateway menu placement, menu routes, roles, and button permissions, and syncs the WebApi permission catalog to reduce missing authorization after upgrades.
GatewayLogOptionsnow focuses on Gateway runtime logs. Backend, operation, SQL, and audit log retention settings are split intoAdminLogOptions, making log configuration boundaries clearer.
-
Data forwarding runtime recovery
- Data forwarding targets that fail during initialization or startup are retried automatically every 30 seconds, prioritizing the target that has waited longest. After recovery, the group-level data producer is restarted to reduce manual recovery after temporary failures.
Fixed
-
Redundant-device variable configuration
- Channel/device variable saves, variable imports, and batch variable edits now normalize variable configuration to the primary configuration device, avoiding inconsistent collection, forwarding, or query results when variables are accidentally attached to standby devices.
-
Debugging and forwarding permissions
- Added default permissions for CAN, OPC, IEC61850, SOE, ZeroMQ, and SyncBridge forced-sync debugging/forwarding maintenance APIs, avoiding cases where a role can open the page action but the API call is still blocked.
v2.1.5 (2026-07-05)
Optimized
- Collection configuration resource list
- The left device list in Collection Configuration is now grouped by channel, with plugin name, plugin tip, and channel address summary shown under the channel title. Device rows now show primary/standby role and online status directly, without showing an empty redundancy placeholder when redundancy is not configured.
- When editing a channel, available channel types are filtered by the first device plugin under the current channel. New channels, or plugins without matching channel types, still show all channel types to reduce wrong selections.
Fixed
-
Redundant devices and variable queries
- Fixed an issue where the redundant device selector could be empty when editing an existing redundant device. The standby device already configured for the current device now remains available in the dropdown.
- Fixed variable queries by device, channel, or plugin so standby-device data is resolved through the primary configuration device, making collection configuration and variable status queries consistent in redundant setups.
-
Plugins and channel types
- Fixed channel type lookup when plugin names contain extra spaces or when the plugin cannot be found. The query now falls back to all channel types when plugin-specific channel types are unavailable.
v2.1.3 (2026-07-04)
Added
-
Data forwarding batch mode
- Added a batch mode that treats the whole forwarding group as one batch, making periodic snapshots easier to organize by group.
-
IEC61850 debugging capability
- Added IEC61850 master and server capability detection so the frontend can show the matching debugging entry for those plugins.
-
Current operation manuals
- Added current GatewayRuntime Web, Studio Web, and Watchdog Web manual entries, with refreshed screenshots for data query, memory, data forwarding, and operations workflows.
Optimized
-
Data forwarding offline cache and replay
- MQTT, Kafka, RabbitMQ, ThingsBoard, and other TopicArray forwarding targets can cache unconfirmed uploads after failures and replay them before new data after recovery; when offline cache is disabled, failed data is now explicitly reported as not retried.
- ThingsBoard device-connect uploads can move into offline cache when the queue exceeds its limit, is canceled, or fails to send, reducing missed uploads after recovery.
-
Data forwarding startup and validation
- Forward target saves now validate plugin properties and variable properties earlier, reducing configuration errors that only appear after runtime startup.
- Improved cleanup and redundant target switching when batch target startup fails, avoiding half-initialized targets receiving new data.
-
Messaging and security configuration
- RabbitMQ now supports publisher confirmations and mandatory routing requirements, and declares the plugin event topic queue.
- MQTT and ThingsBoard no longer trust unverified certificates by default, and log a warning when certificate validation is manually relaxed.
- ModbusSlave now warns when listening on all interfaces, when the client permission list is empty, or when RPC writes are enabled.
-
Documentation site experience
- Optimized the homepage image, sidebar structure, and current screenshot directory so users can enter the current manuals more directly.
Fixed
-
Log file paths
- Channel, device, forwarding group, and forwarding target log file names are sanitized to avoid write or cleanup failures caused by invalid path characters.
-
Plugin stability
- Webhook now reports invalid custom header JSON clearly instead of silently ignoring it.
- TDengine historical data writes now validate and escape database/table identifiers and values to avoid create-table or write failures from special characters.
- Kafka producer shutdown and concurrent sends are synchronized to reduce send failures during shutdown.
v2.1.0 (2026-07-02)
Added
-
Business plugin forwarding configuration
- Added forwarding groups and forwarding targets to organize business data forwarding by group
- Forwarding groups support multiple targets within the same group for multi-target forwarding scenarios
- Forwarding targets support redundancy configuration to improve forwarding availability and fault tolerance
-
Memory calculation page
- Added a memory calculation page for centralized viewing and management of memory calculation configuration
Optimized
- Business plugin refactoring
- Refactored the business plugin module with an independent UI, reducing coupling between business plugin configuration and the main interface
- Optimized the business plugin configuration entry and interaction experience
v2.0.232 (2026-06-26)
Optimized
-
UI refactoring
- Refactored Gateway, Studio, and Watchdog Web interface structure and visual style
- Optimized page layouts, navigation, tables, forms, log panels, and compact mode experience
-
Improved script and custom node compilation experience
- Compilation failures now prioritize actionable error messages and reduce irrelevant technical output
- Custom node compilation error logs now support jumping to the corresponding editor line and column
- Fixed custom node compilation error line mapping so returned line numbers match user editor code
-
Optimized batch compilation flow
- Improved script batch compilation so logs are easier to follow and results are clearer
- Improved custom node batch compilation for post-upgrade validation
-
Optimized release packages
- Improved Watchdog, Runtime, and Studio package output for platform-specific deployment
Fixed
- Script and custom node deletion
- Deleting scripts or custom nodes also clears related runtime results so list status stays consistent with loaded status
- Batch deletion handles related runtime results at the same time
v2.0.223 (2026-06-23)
Added
-
Gateway data page refactoring
-
Variable table visual redesign
-
Left tree panel optimization
-
VariableNode trigger rule filtering logic fix
Optimized
-
TabBar keeps page state
- Switching tabs now truly preserves scroll position, form input, filter conditions, etc.
-
Compact mode adaptation
Fixed
-
Variable history data config lost on save (Interval/Condition)
-
Memory variable edit dialog shows device id number
-
Fixed known issues
v2.0.222 (2026-06-22)
Optimized
- Unified log export query conditions
- DeviceLog and ChannelLog export now includes
conditionalModel, fixing the issue where export ignored log level / keyword / time range filters - RpcLog and OperateLog export conditions had inconsistencies (
LikevsEqual,'true'vs'success'), unified by extracting a sharedbuildConditions()function - BackendLog and SqlLog also extracted
buildConditions()to eliminate duplicate code - All 6 log pages now share 100% the same condition building logic for both query and export
- DeviceLog and ChannelLog export now includes
Fixed
- Quick create expression not persisted
- GatewayWeb's QuickExpressionDialog previously only called
compileScriptto compile and hot-load, without writing to the database, causing expressions to be lost after restart - Now the "Apply" button calls
createScriptAPI to persist to thescript_expressiontable before emit, with an error prompt when a script with the same name already exists
- GatewayWeb's QuickExpressionDialog previously only called
v2.0.190 (2026-06-22)
Added
-
ModbusSlave client permission control
- Plugin properties added "client permission list", supporting configuration of multiple allowed client IPs and write permissions
- When the list is empty, no restriction; when non-empty, only matched IPs are allowed to write
- Each record supports
AllowedClientIp(supports exact match /*wildcard) andAllowWrite(whether to allow writing) - Write requests use the IP allowlist, and unauthorized or write-prohibited clients are rejected
- The plugin parameter editor supports visual table editing for adding, deleting, and editing client permission rows
-
Studio Roslyn IntelliSense integration
- The editor uses the Studio intelligent assistance service to provide C# script completion, syntax diagnostics, signature help, hover tips, semantic highlighting, and go-to-definition
- Automatically detects Studio Roslyn service availability, reconnects in background when disconnected, and seamlessly switches back after recovery
Optimized
- Database connection testing
- SqlServer, MySql, Sqlite, PostgreSql, QuestDb, and TDengine connections can be tested in a consistent way
- Real-time data, historical data, and historical alarm configuration support one-click "Test Connection"
Fixed
- Fixed known issues
v2.0.189 (2026-06-17)
Fixed
- Fixed known issues
v2.0.188 (2026-06-13)
Fixed
- Fixed known issues
v2.0.179 (2026-06-11)
Fixed
- Fixed known issues
v2.0.178 (2026-06-08)
Fixed
- Fixed known issues
v2.0.177 (2026-06-08)
Added
- Added built-in historical data storage
v2.0.176 (2026-06-05)
Optimized
- Optimized user experience
v2.0.170 (2026-06-04)
Fixed
- Fixed known issues
v2.0.168 (2026-06-03)
Fixed
- Fixed known issues
v2.0.166 (2026-06-03)
Fixed
- Fixed known issues
v2.0.158 (2026-06-01)
Fixed
- Fixed known issues
v2.0.157 (2026-05-30)
Added
- Business plugin concurrent upload
Fixed
- Fixed known issues
v2.0.155 (2026-05-28)
Added
- Business upload plugin supports concurrent upload
- Upload entity adds createTime field
v2.0.152 (2026-05-27)
Added
- TCP tunneling feature
- Supports intranet tunneling for remote access
- Provides stable tunneling connection service
v2.0.149 (2026-05-25)
Fixed
- Fixed Studio project file size limit on import
- Improved user experience
v2.0.148 (2026-05-25)
Fixed
- Fixed PLC array reading error
- Fixed variable plugin property update error
v2.0.143 (2026-05-24)
Fixed
- Fixed known issues
v2.0.140 (2026-05-24)
Fixed
- Fixed known issues
v2.0.136 (2026-05-19)
Added
- Internationalization support
v2.0.126 (2026-05-14)
Added
- Gateway version update feature
- Toolbar added "Gateway Version" button
- Automatically fetches latest versions from NuGet official site and local nupkgs directory
- Supports one-click GatewayVersion update and automatic rebuild
Optimized
- Dark mode adaptation
Fixed
- Fixed known issues
v2.0.124 (2026-05-13)
Added
- Import ZIP project supports duplicate name check, with options to rename or overwrite the project with the same name
Optimized
- Gateway data tree node display
v2.0.123 (2026-05-12)
Added
- Rule engine Excel export and import
Fixed
- Fixed known issues
v2.0.122 (2026-05-12)
Optimized
- MQTT RPC topic supports wildcards
v2.0.121 (2026-05-12)
Optimized
- OPCUA Server certificate prompt optimization
v2.0.120 (2026-05-11)
Added
- Import supports clearing original data
Optimized
- Frontend no longer shows blank page on network errors
Fixed
- Memory variable write error
- Known issues
v2.0.118 (2026-05-09)
Added
-
Studio NuGet package plugin management
- Supports visual plugin management interface
- Supports batch enable/disable plugins
- Plugin state persisted to project.json
- Automatically builds and restarts runtime based on project.json configuration
-
Rule engine variable RPC node
- Added variable RPC node type
- Supports calling variable RPC methods through rule engine
v2.0.111 (2026-05-07)
Fixed
- Fixed known issues.
Adjusted
- API operations no longer wait for background thread restart.
v2.0.104 (2026-05-06)
New Features
- Batch copy: Supports copying channels, devices, variables with configurable copy count and automatic name deduplication
- Copying a channel automatically cascades copies of all devices and variables under it
- Copying a device automatically cascades copies of all variables under it
v2.0.0 (2026-05-06)
New Features
- Data collection: Supports data collection via Modbus TCP/RTU, OPC UA, MQTT, Kafka, RabbitMQ and other industrial protocols
- Alarm management: Supports boolean on/off alarms, high/high-high/low/low-low limit alarms and custom alarm rules
- Rule engine: Visual rule flow orchestration, supports custom nodes and script extensions
- Redundancy configuration: Master-backup redundancy architecture, supports automatic failover and data synchronization
- Script extension: Supports custom expression scripts and C# script node extensions for business logic
- Permission management: User-role-permission three-level management system with fine-grained permission control
- Watchdog service: Automatically monitors and manages gateway processes, ensuring stable system operation
- Studio development environment: Provides visual configuration interface for convenient management of channels, devices and variables
Platform Support
- Windows x64
- Linux x64