“Machine Condition Monitoring Example” - Single File

This example shows an entire Machine condition monitoring service expressed within a single commissioning file.

Download:

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). If your license is not eligible to use the example Docker image, please contact Cybus Sales (sales@cybus.io).

description: >
    Temperature & Vibration Visualization for a Machine

metadata:
    name: Condition Monitoring
    icon: https://www.cybus.io/wp-content/uploads/2019/03/Cybus-logo-Claim-lang.svg
    provider: cybus
    homepage: https://www.cybus.io
    version: 0.0.1

definitions:
    SID: !ref Cybus::ServiceId

parameters:
    IP_Address:
        type: string
        default: 172.17.0.1

    Port_Number:
        type: integer
        default: 4840

    Azure_Iot_Hub_Connection_String:
        type: string
        default: some_azure_connection_string

resources:
    # OPC UA simulator container used for the demo
    opcuaServer:
        type: Cybus::Container
        properties:
            image: registry.cybus.io/cybus-factory/opcua-server:1.0.1
            ports:
                - 4840:50000/tcp
            command:
                - '--unsecuretransport'
                - '--autoaccept'
                - '--defaultuser=user'
                - '--defaultpassword=pass'

    opcuaConnection:
        type: Cybus::Connection
        properties:
            protocol: Opcua
            targetState: connected
            connection:
                host: !ref IP_Address
                port: !ref Port_Number
                username: user
                password: pass

    opcuaCurrentServerTime:
        type: Cybus::Endpoint
        properties:
            protocol: Opcua
            connection: !ref opcuaConnection
            subscribe:
                nodeId: i=2258
                samplingInterval: 1000

    opcuaTemperature:
        type: Cybus::Endpoint
        properties:
            protocol: Opcua
            connection: !ref opcuaConnection
            subscribe:
                nodeId: ns=2;s=SpikeData
                samplingInterval: 2000

    opcuaVibration:
        type: Cybus::Endpoint
        properties:
            protocol: Opcua
            connection: !ref opcuaConnection
            subscribe:
                nodeId: ns=2;s=DipData
                samplingInterval: 2000

    mapping:
        type: Cybus::Mapping
        properties:
            mappings:
                - subscribe:
                      endpoint: !ref opcuaCurrentServerTime
                  publish:
                      topic: !sub '${Cybus::MqttRoot}/current-server-time'
                - subscribe:
                      endpoint: !ref opcuaTemperature
                  rules:
                      - transform:
                            expression: |
                                {
                                  "timestamp": timestamp,
                                  "value": (value - 32) * (5/9),
                                  "unit": "celsius"
                                }
                  publish:
                      topic: !sub '${Cybus::MqttRoot}/temperature'
                - subscribe:
                      endpoint: !ref opcuaVibration
                  publish:
                      topic: !sub '${Cybus::MqttRoot}/vibration'

    #----------------------------------------------------------------------------
    # VOLUMES
    #----------------------------------------------------------------------------

    grafanaVolume:
        type: Cybus::Volume

    influxdbVolume:
        type: Cybus::Volume

    #----------------------------------------------------------------------------
    # FRONTENDS
    #----------------------------------------------------------------------------

    # Grafana
    grafanaURL:
        type: Cybus::IngressRoute
        properties:
            container: !ref genericGrafana
            type: http
            slug: grafana
            target:
                path: '/'
                port: 3000

    dashboard:
        type: Cybus::Link
        properties:
            name: Dashboard
            ingressRoute: !ref grafanaURL
            href: ''

    #----------------------------------------------------------------------------
    # Cybus Timeseris & Dashboard service containers
    #----------------------------------------------------------------------------

    influxdbPush:
        type: Cybus::Container
        properties:
            image: registry.cybus.io/cybus-services/influxdb-push:0.0.3
            environment:
                MQTT_HOST: !ref Cybus::MqttHost
                MQTT_USER: !ref Cybus::MqttUser
                MQTT_PORT: !ref Cybus::MqttPort
                MQTT_PASS: !ref Cybus::MqttPassword
                MQTT_ROOT_TOPIC: !sub '${Cybus::MqttRoot}/#'
                INFLUX_HOST: !ref influxdb
                INFLUX_PORT: 8086
                INFLUX_DB: generic
                HTTP_ROOT: /

    influxdb:
        type: Cybus::Container
        properties:
            image: registry.cybus.io/cybus-services/influxdb:1.7.7-alpine
            ports:
                - 8086:8086/tcp
            volumes:
                - !sub '${influxdbVolume}:/var/lib/influxdb'
            environment:
                INFLUXDB_DB: generic

    genericGrafana:
        type: Cybus::Container
        properties:
            image: registry.cybus.io/cybus-services/generic-grafana:1.2.1
            volumes:
                - !sub '${grafanaVolume}:/var/lib/grafana'
            environment:
                GF_SERVER_ROOT_URL: !sub '/services/${SID}/grafana'
                GF_AUTH_ANONYMOUS_ENABLED: true
                INFLUX_DB: generic
                INFLUX_HOST: !ref influxdb
                INFLUX_PORT: 8086

    #----------------------------------------------------------------------------
    # Cybus Azure IoT Hub Connector Service
    #----------------------------------------------------------------------------

    azureIoTConnector:
        type: Cybus::Container
        properties:
            image: registry.cybus.io/cybus-services/azure-iot-connector:0.0.5
            environment:
                LOG_LEVEL: 'info'
                CONNECTOR_CONFIG: !sub |
                    {
                      "general": {
                        "name": "Azure Connector"
                      },
                      "source": {
                        "driver": "azure.iot",
                        "connection": {
                          "connectionString": "${Azure_Iot_Hub_Connection_String}"
                        },
                        "defaults": {
                          "operation": "write"
                        }
                      },
                      "target": {
                        "driver": "mqtt",
                        "connection": {
                          "protocol": "mqtt",
                          "host": "${Cybus::MqttHost}",
                          "port": ${Cybus::MqttPort},
                          "username": "admin",
                          "password": "admin"
                        },
                        "defaults": {
                          "operation": "subscribe",
                          "topicPrefix": "${Cybus::MqttRoot}"
                        }
                      },
                      "mappings": [
                        {
                          "source": {
                            "name": "temperature",
                            "type": "telemetry"
                          },
                          "target": {
                            "topic": "${Cybus::MqttRoot}/temperature"
                          }
                        },
                        {
                          "source": {
                            "name": "vibration",
                            "type": "telemetry",
                            "properties": {
                              "default": false,
                              "route": "storage"
                            }
                          },
                          "target": {
                            "topic": "${Cybus::MqttRoot}/vibration"
                          }
                        }
                      ]
                    }

Last updated

Logo

© Copyright 2024, Cybus GmbH