Skip to content

Server Variables Example

Source example: examples/highlevel/server_variables.py

This example focuses on variables only.

Explanation

Creating variables

temperature = server.add_variable("Temperature", server.objects_node, 22.5, nodeid="ns=1;i=1001")
pressure = server.add_variable("Pressure", server.objects_node, 1013.25, nodeid="ns=1;i=1002")

Read-only variables

FirmwareVersion is created with writable=False, which keeps it visible to clients but not writable.

firmware_version = server.add_variable(
    "FirmwareVersion",
    server.objects_node,
    "v2.1.0",
    nodeid="ns=1;i=1005",
    writable=False,
)

Updating variables

temperature.value = 22.5 + (cycle % 50) * 0.1
pressure.value = 1013.25 + (cycle % 20) * 0.5
is_running.value = cycle % 30 != 0

Full source

#!/usr/bin/env python3

import time
from o6 import Server


def main():
    server = Server(port=4840)

    temperature = server.add_variable(
        "Temperature",
        server.objects_node,
        22.5,
        nodeid="ns=1;i=1001",
    )

    pressure = server.add_variable(
        "Pressure",
        server.objects_node,
        1013.25,
        nodeid="ns=1;i=1002",
    )

    machine_name = server.add_variable(
        "MachineName",
        server.objects_node,
        "CNC-Mill-01",
        nodeid="ns=1;i=1003",
    )

    is_running = server.add_variable(
        "IsRunning",
        server.objects_node,
        False,
        nodeid="ns=1;i=1004",
    )

    firmware_version = server.add_variable(
        "FirmwareVersion",
        server.objects_node,
        "v2.1.0",
        nodeid="ns=1;i=1005",
        writable=False,
    )

    server.start()
    print("Server running at opc.tcp://localhost:4840")
    print("Press Ctrl+C to stop.\n")

    try:
        cycle = 0
        while True:
            cycle += 1

            temperature.value = 22.5 + (cycle % 50) * 0.1
            pressure.value = 1013.25 + (cycle % 20) * 0.5
            is_running.value = cycle % 30 != 0

            if cycle % 10 == 0:
                print(
                    f"  Cycle {cycle}: "
                    f"Temp={temperature.value:.1f}°C, "
                    f"Pressure={pressure.value:.1f}hPa, "
                    f"Running={is_running.value}"
                )

            time.sleep(1.0)

    except KeyboardInterrupt:
        print("\nShutting down…")
    finally:
        server.stop()
        print("Server stopped.")


if __name__ == "__main__":
    main()