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
