# “Bearbeitungszentrum BAZ” - Agent Mode

This example shows an entire BAZ setup expressed within a single commissioning file, using explicit topics and involving an agent for providing the connection and endpoint resources.

The name of the agent must be specified in the *agentName* parameter, for example *connectware-agent* or whatever other name has been given to the agent instance.

Download:

{% file src="<https://3008235441-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FshLLdPEhD7SHVDYSquU1%2Fuploads%2Fgit-blob-0bfdb4248013f852a7da1d797e81ab8060172323%2FbazAgentMode.yml?alt=media>" %}

{% hint style="info" %}
The example below uses an additional Docker image provided by Cybus that requires a suitable license. You can check the current capabilities and permissions of your Connectware license in the Cybus Portal ([https://portal.cybus.io](https://portal.cybus.io/)). If your license is not eligible to use the example Docker image, please contact Cybus Sales ([sales@cybus.io](mailto:sales%40cybus.io)).
{% endhint %}

{% code lineNumbers="true" %}

```yaml
description: >
    Entire simulated machining involving a protocol-mapper agent

metadata:
    name: Simulated Machining Center
    icon: https://www.cybus.io/wp-content/themes/cybus/img/product-slide-img.png
    provider: cybus
    homepage: https://www.cybus.io
    version: 2.0.0

parameters:
    agentName:
        type: string
        description: Agent Name
        default: connectware-agent

    modbusPort:
        type: integer
        default: 10502
    dockerBridgeNetworkIp:
        type: string
        default: 172.17.0.1
        description: The IP address of the docker bridge network gateway, see "docker network inspect bridge"

definitions:
    CYBUS_MQTT_ROOT: cybus/baz-simulator

    defaultModbusAddress:
        fc: 3
        length: 2
        interval: 1000
        dataType: uint16BE

resources:
    machineSimulator:
        type: Cybus::Container
        properties:
            image: registry.cybus.io/cybus-services/baz-machine-simulator:0.0.1
            ports:
                - !sub '${modbusPort}:10502/tcp'

    modbusConnection:
        type: Cybus::Connection
        properties:
            agentName: !ref agentName
            protocol: Modbus
            targetState: connected
            connection:
                host: !ref dockerBridgeNetworkIp
                port: !ref modbusPort

    currentState:
        type: Cybus::Endpoint
        properties:
            protocol: Modbus
            connection: !ref modbusConnection
            topic: current-state
            subscribe: !merge
                defaultModbusAddress:
                address: 0

    currentTool:
        type: Cybus::Endpoint
        properties:
            protocol: Modbus
            connection: !ref modbusConnection
            topic: current-tool
            subscribe: !merge
                defaultModbusAddress:
                address: 2

    coolantLevel:
        type: Cybus::Endpoint
        properties:
            protocol: Modbus
            connection: !ref modbusConnection
            topic: coolant-level
            subscribe: !merge
                defaultModbusAddress:
                address: 4

    spindleSpeed:
        type: Cybus::Endpoint
        properties:
            protocol: Modbus
            connection: !ref modbusConnection
            topic: spindle-speed
            subscribe: !merge
                defaultModbusAddress:
                address: 6

    dashboard:
        type: Cybus::Container
        properties:
            image: registry.cybus.io/cybus-services/baz-dashboard:0.2.3
            volumes:
                - !sub '${dashboardData}:/root/.node-red'
            environment:
                MQTT_HOST: !ref Cybus::MqttHost
                MQTT_USER: !ref Cybus::MqttUser
                MQTT_PASS: !ref Cybus::MqttPassword
                MQTT_PORT: !ref Cybus::MqttPort
                HTTP_ROOT: /

    dashboardData:
        type: Cybus::Volume

    dashboardRoute:
        type: Cybus::IngressRoute
        properties:
            container: !ref dashboard
            type: http
            slug: dashboard
            target:
                path: /
                port: 1880

    dashboardLink:
        type: Cybus::Link
        properties:
            ingressRoute: !ref dashboardRoute
            href: ui/
            name: Dashboard
```

{% endcode %}

## How to deploy the agent

To run the above example, you must also deploy and run an agent, which is a container using the Connectware’s image *protocol-mapper* with some special environment variables (see also [Agent Installation](https://docs.cybus.io/1-8-0/documentation/agents/installing-agents)).

The first thing you need to set is the image and image tag (i.e. version) you are going to use. The agent’s container must use the protocol-mapper image of the exact same version as the Connectware, otherwise the system may run into unspecified behaviour. For the subsequent command the image tag (version) is stored as IMAGE\_TAG= 1.6.2

Using the IMAGE\_TAG environment variable, the following command will run the agent directly (but with the comment lines removed):

{% code lineNumbers="true" %}

```yaml
# The docker run command
docker run --rm \
    # Attach a volume so the agent can store data across restarts
  -v /tmp/cybus:/data \
    # Set the name of the agent. This must match the agentName used in the commissioning file.
  -e CYBUS_AGENT_NAME=connectware-agent \
    # The IP address where the Connectware is running.
  -e CYBUS_MQTT_HOST=10.11.12.13 \
    # Make it run as an agent
  -e CYBUS_AGENT_MODE=distributed \
    # Some suitable hostname of the container.
  --hostname=${HOSTNAME} \
    # Run it in host mode networking
  --net=host \
    # The image to use
  registry.cybus.io/cybus/protocol-mapper:${IMAGE_TAG}
```

{% endcode %}

Then, complete the set up by registering the new agent’s user in the Connectware using the “Client Registry” process, see [Agent Registration](https://docs.cybus.io/1-8-0/documentation/agents/registering-agents-in-connectware) and [Client Registry](https://docs.cybus.io/1-8-0/documentation/client-registry)

Alternative ways to run the agent can be found on [Agent Installation](https://docs.cybus.io/1-8-0/documentation/agents/installing-agents).
