Sample-Server implementation based on open62541, showcases umati endorsed OPC UA companion specifications. Provides a 🐋 📦 to run locally for development purpose. https://umati.org
  • C++ 93.2%
  • CMake 3.5%
  • Jinja 2.1%
  • Python 0.5%
  • Dockerfile 0.4%
  • Other 0.3%
Find a file
umati-bot 6d088ddd66
All checks were successful
Lint cmake-format / Lint Code Base (cmake-format-lint) (push) Successful in 34s
Lint Code Base / Lint Code Base (super-linter) (push) Successful in 44s
Matrix Build / docker (push) Successful in 3m45s
Matrix Build / build (ubuntu-22.04) (push) Successful in 4m1s
Matrix Build / build (ubuntu-24.04) (push) Successful in 5m37s
chore(deps): update actions/checkout action to v7 (#1715)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [actions/checkout](https://github.com/actions/checkout) | action | major | `v6.0.3` → `v7.0.0` |
| [actions/checkout](https://github.com/actions/checkout) | action | major | `v6` → `v7` |

---

### Release Notes

<details>
<summary>actions/checkout (actions/checkout)</summary>

### [`v7.0.0`](https://github.com/actions/checkout/blob/HEAD/CHANGELOG.md#v700)

[Compare Source](https://github.com/actions/checkout/compare/v7.0.0...v7.0.0)

- Block checking out fork PR for pull\_request\_target and workflow\_run by [@&#8203;aiqiaoy](https://github.com/aiqiaoy) in [#&#8203;2454](https://github.com/actions/checkout/pull/2454)
- Bump actions/publish-immutable-action from 0.0.3 to 0.0.4 in the minor-actions-dependencies group across 1 directory by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2458](https://github.com/actions/checkout/pull/2458)
- Bump flatted from 3.3.1 to 3.4.2 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2460](https://github.com/actions/checkout/pull/2460)
- Bump js-yaml from 4.1.0 to 4.2.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2461](https://github.com/actions/checkout/pull/2461)
- Bump [@&#8203;actions/core](https://github.com/actions/core) and [@&#8203;actions/tool-cache](https://github.com/actions/tool-cache) and Remove uuid by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2459](https://github.com/actions/checkout/pull/2459)
- upgrade module to esm and update dependencies by [@&#8203;aiqiaoy](https://github.com/aiqiaoy) in [#&#8203;2463](https://github.com/actions/checkout/pull/2463)
- Bump the minor-npm-dependencies group across 1 directory with 3 updates by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2462](https://github.com/actions/checkout/pull/2462)

### [`v7`](https://github.com/actions/checkout/blob/HEAD/CHANGELOG.md#v700)

[Compare Source](https://github.com/actions/checkout/compare/v6.0.3...v7.0.0)

- Block checking out fork PR for pull\_request\_target and workflow\_run by [@&#8203;aiqiaoy](https://github.com/aiqiaoy) in [#&#8203;2454](https://github.com/actions/checkout/pull/2454)
- Bump actions/publish-immutable-action from 0.0.3 to 0.0.4 in the minor-actions-dependencies group across 1 directory by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2458](https://github.com/actions/checkout/pull/2458)
- Bump flatted from 3.3.1 to 3.4.2 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2460](https://github.com/actions/checkout/pull/2460)
- Bump js-yaml from 4.1.0 to 4.2.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2461](https://github.com/actions/checkout/pull/2461)
- Bump [@&#8203;actions/core](https://github.com/actions/core) and [@&#8203;actions/tool-cache](https://github.com/actions/tool-cache) and Remove uuid by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2459](https://github.com/actions/checkout/pull/2459)
- upgrade module to esm and update dependencies by [@&#8203;aiqiaoy](https://github.com/aiqiaoy) in [#&#8203;2463](https://github.com/actions/checkout/pull/2463)
- Bump the minor-npm-dependencies group across 1 directory with 3 updates by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2462](https://github.com/actions/checkout/pull/2462)

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMjIuMSIsInVwZGF0ZWRJblZlciI6IjQzLjIyMi4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119-->

Reviewed-on: #1715
2026-06-19 15:31:44 +02:00
.forgejo/workflows chore(deps): update actions/checkout action to v7 (#1715) 2026-06-19 15:31:44 +02:00
.github chore(deps): update actions/checkout action to v7 (#1715) 2026-06-19 15:31:44 +02:00
AdditiveManufacturing feat: update location for GrindingHub 2026 2026-05-04 17:33:07 +02:00
arch feat(lib): Applies license and copyright headers (#545) 2021-12-13 14:10:42 +00:00
cmake feat(lib): Applies license and copyright headers (#545) 2021-12-13 14:10:42 +00:00
Configuration feat: set location for TMTS2026 (#1630) 2026-02-10 16:22:48 +01:00
deps chore(deps): update deps/json digest to 02dfbea (#1714) 2026-06-19 13:44:16 +02:00
doc feat: set location for TMTS2026 (#1630) 2026-02-10 16:22:48 +01:00
Exceptions feat(lib): Applies license and copyright headers (#545) 2021-12-13 14:10:42 +00:00
GMS feat: update location for GrindingHub 2026 2026-05-04 17:33:07 +02:00
MachineTools feat: update location for GrindingHub 2026 2026-05-04 17:33:07 +02:00
model chore(deps): update deps/open62541 digest to 258d6ad (#1080) 2023-08-04 07:10:51 +00:00
OpcUaTypes feat: set location for TMTS2026 (#1630) 2026-02-10 16:22:48 +01:00
Robotics feat: set location for TMTS2026 (#1630) 2026-02-10 16:22:48 +01:00
tests feat: set location for TMTS2026 (#1630) 2026-02-10 16:22:48 +01:00
tools/certGen feat: set location for TMTS2026 (#1630) 2026-02-10 16:22:48 +01:00
TypeDefinition feat: set location for TMTS2026 (#1630) 2026-02-10 16:22:48 +01:00
UmatiServerLib refactor: update childs to children in comments and log messages 2026-02-18 15:14:59 +01:00
Woodworking feat: update location for GrindingHub 2026 2026-05-04 17:33:07 +02:00
.clang-format Add .clang-format files 2021-05-17 16:19:06 +02:00
.clang-format-ignore Add .clang-format files 2021-05-17 16:19:06 +02:00
.dockerignore Fix: Docker build 2021-04-20 06:59:04 +02:00
.gitignore fix: extend to ignore linter leftovers (#1335) 2024-09-23 15:23:26 +02:00
.gitmodules fix(deps): Pin open62541 to branch 1.4 (#1162) 2023-10-17 13:55:50 +02:00
.whitesource Add .whitesource configuration file (#1222) 2024-02-07 09:06:21 +00:00
CMakeLists.txt feat: release version 1.2.0 2026-02-19 17:59:09 +01:00
CODE_OF_CONDUCT.md feat: Update Linter (#1128) 2023-08-08 12:01:36 +00:00
configuration.docker.json fix(ci): Add port also to docker config 2022-06-27 16:07:30 +02:00
configuration.template.json Make server port configurable (#811) 2022-06-27 08:29:29 +00:00
CONTRIBUTING.md Prepare for publishing 2020-11-25 10:41:55 +01:00
Dockerfile chore(deps): update alpine docker tag to v3.24.1 (#1711) 2026-06-16 09:27:20 +02:00
initialbuild.sh fix(ci): update workflows and duplicate for codeberg 2026-02-18 15:14:59 +01:00
LICENSE Prepare for publishing 2020-11-25 10:41:55 +01:00
README.md feat: set location for TMTS2026 (#1630) 2026-02-10 16:22:48 +01:00
SampleServer.cpp feat(GMS): Bring features of FullGMS to BasicGMS (#1045) 2026-02-19 16:38:54 +00:00

umati sample server

Sample-Server

Sample-Server implementation of various umati endorsed OPC UA companion specifications. Provides a 🐳 📦 to run locally for development purpose.

Build status

GitHub Workflow Status Gitpod ready-to-code DOI

Current Implementation

Scope

This implementation provides simulationed instances for the machine tool and woodworking specification, which changes most values in a pseudo random way. As no real machine simulation is done in the background, the values need not correlate with each other. Also only reading of values of OPC UA-clients is implemented. All write requests are ignored silently.

Machine Tool Examples

This is an example implementation of the OPC UA Machine Tool companion specification based on open62541. The server provides several simulated machine tools, which show different extension stages of the specification.

Woodworking Examples

This is an example implementation of the OPC UA for Woodworking companion specification. The server provides two simulated woodworking machines, a basic one implementing only mandatory variables/objects and a full one implementing every optional variable/object.

Geometrical Measurement Systems Example

This is an example implementation oof the OPC UA for Geometrical Measuring Systems companion specification. The server provide one simulated BasisGMS instance.

Additive Manufacturing Examples

This is an example implementation of the OPC UA for Additive Manufacturing companion specification. The server provides two simulated additive manufacturing machines, a basic one implementing only mandatory variables/objects and a full one implementing every optional variable/object.

Public available instance

The container image build by this repository is run public at opc.tcp://opcua.umati.app:4840 (Security: none and higher / Authentication: anonymous) in the develop version.

Container Image

This repository automatically builds a sample server container image to use image for your local development purposes. Pull this public image at: docker pull ghcr.io/umati/sample-server:main

To run this image you need a Docker installation and than typically: docker run -d -p 4840:4840 ghcr.io/umati/sample-server:main

Refer to the Docker documentation for details.

Local Usage

To read how to prepare a VM and to test the server locally, please refer to the usage documentation. To read how to compile the Sample-Server yourself, refer to the compilation documentation.

Configuration

The configuration uses a JSON format. By default, the server looks for a file configuration.json. The supported parameters are:

{
    "Hostname": "localhost", // Hostname of the server, should be identical to the hostname that is used by OPC UA clients to connect to the server.
    "Encryption": { // Optional encryption, can be omitted to only support unencrypted connections
        "ServerCert": "server_cert.der", // Server certificate
        "ServerKey": "server_key.der", // Server private key for the certificate
        "TrustedClients": ["trusted/test.pem"], // List of allowed clients, if empty, all client certificates are accepted
        "IssuerCerts": [], // List of allowed issuers
        "Revocation": [] // List of revoked certificates.
    }
}

Concept

This implementation represents the OPC UA Instance with an instance of an C++ struct and connects them together. So writing an value in the C++ instance will also set this value in the corresponding OPC UA node. The binding is established by utilizing reflection, as described in this publication).

The binding is done by comparing the name of structure members with the browse name of the OPC UA instance. As the binding uses memory addresses of the C++ instance, the instance itself must not be copied after the binding.

Folder Structure

├──AdditiveManufacturing   Simulated Additive Manufacturing machine
├──arch                    architecture specific files
├──cmake                   CMake files for building the project, e.g. custom find-scripts
├──Exceptions              Custom exceptions
├──GMS                     Simulated GMS instance
├──MachineTools            Simulated machine tools
├──model                   Unpublished/Fixed NodeSet files
├──OpcUaTypes              C++ equivalent of some OPC UA DataTypes and helpers for their definition
├──Robotics                Simulated Robots
├──tests                   Some unit tests, initially created for tracking down bugs
├──tools/certGen           Custom certificate generator tool           
├──TypeDefinition          Definition of C++ Types for OPC UA Types, that can be bind later
├──UmatiServerLib          Library for binding the defined types to OPC UA instances
├──Woodworkng              Simulated wood working sample machines

License

GitHub

This sample server implementation is licensed under the Mozilla Public License v2.0 (MPLv2) except otherwise stated in the header of a file.