openapi: 3.0.1
info:
  title: groov Manage
  description: "_groov_ Manage REST API\n==================================================================\n\
    \nThe _groov_ Manage REST API provides secure access to the I/O on the rack.\n\
    \nThe REST API allows clients to store and retrieve files for use by Node-RED,\n\
    the Control Engine, _groov_ Manage, and other REST clients.\n\nAuthentication\n\
    ------------------------------------------------------------------\n\nEach request\
    \ is authenticated by means of an API key.\n\nAPI keys are assigned to each user\
    \ within _groov_ Manage.\n\nExample Request\n------------------------------------------------------------------\n\
    \nUsing *curl* to request the list of modules plugged into the rack at hostname\
    \ *opto-01-02-03*\nwith an API Key of *TZC2TAPxs2jyqU9xRKEoSRNVEL3qfAsw*:\n\n\
    \    curl -k -H apiKey:TZC2TAPxs2jyqU9xRKEoSRNVEL3qfAsw \n      https://opto-01-02-03/manage/api/v1/io/local/modules/type\n\
    \nExample Response:\n\n    {\n      \"types\": [\n        {\n          \"index\"\
    : 0,\n          \"type\": \"0xA0000003\",\n          \"name\": \"GRV-OVMALC-8\"\
    \n        },\n        {\n          \"index\": 1,\n          \"type\": \"0x60000002\"\
    ,\n          \"name\": \"GRV-IV-24\"\n        },\n        {\n          \"index\"\
    : 2,\n          \"type\": \"0x00000000\",\n          \"name\": \"\"\n        },\n\
    \        ...etc...\n      ]\n    }\n"
  contact:
    name: developer@opto22.com
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
  version: 3.0.0
servers:
- url: /manage
paths:
  /api/v1/files/{area}/rpc/delete-file/{areaPath}:
    delete:
      description: Delete a file.
      operationId: deleteFileRpc
      parameters:
      - name: area
        in: path
        description: '''unsecured'', ''secured'', or ''usb'''
        required: true
        schema:
          type: string
      - name: areaPath
        in: path
        description: Path for a filename in the given area.
        required: true
        schema:
          type: string
      responses:
        200:
          description: successful operation
          content: {}
        404:
          description: File not found
          content: {}
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/files/{area}/rpc/get-file/{areaPath}:
    get:
      description: Download a file.
      operationId: getFileRpc
      parameters:
      - name: area
        in: path
        description: '''unsecured'', ''secured'', or ''usb'''
        required: true
        schema:
          type: string
      - name: areaPath
        in: path
        description: Path for a filename in the given area.
        required: true
        schema:
          type: string
      responses:
        200:
          description: The file.
          content: {}
        404:
          description: Path not found
          content: {}
      security:
      - apiKey: []
  /api/v1/files/{area}/rpc/list-dir/{areaPath}:
    get:
      description: Gets the list of files and subdirectories in the given directory.
      operationId: listDirectory
      parameters:
      - name: area
        in: path
        description: '''unsecured'', ''secured'', or ''usb'''
        required: true
        schema:
          type: string
      - name: areaPath
        in: path
        description: Path for directory or filename in the given area.
        required: true
        schema:
          type: string
      responses:
        200:
          description: The list of files and subdirectories at the given path.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileDetailsArray'
        404:
          description: Path not found
          content: {}
      security:
      - apiKey: []
  /api/v1/files/{area}/rpc/info/{areaPath}:
    get:
      description: Gets info about the given path, which may be a file or directory.
      operationId: getPathInfo
      parameters:
      - name: area
        in: path
        description: '''unsecured'', ''secured'', or ''usb'''
        required: true
        schema:
          type: string
      - name: areaPath
        in: path
        description: Path for directory or filename in the given area.
        required: true
        schema:
          type: string
      responses:
        200:
          description: File details including file name, path, modified time (POSIX
            time), and size (bytes)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileDetailsModel'
        404:
          description: Path not found
          content: {}
      security:
      - apiKey: []
  /api/v1/files/{srcArea}/rpc/copy-file/{srcAreaPath}:
    put:
      description: Copy a file.
      operationId: copyFile
      parameters:
      - name: srcArea
        in: path
        description: '''unsecured'', ''secured'', or ''usb'''
        required: true
        schema:
          type: string
      - name: srcAreaPath
        in: path
        description: Path for the source filename in the given area.
        required: true
        schema:
          type: string
      - name: destArea
        in: query
        description: One of 'unsecured', 'secured', or 'usb'.
        required: true
        schema:
          type: string
      - name: destAreaPath
        in: query
        description: Path for directory in the given area.
        required: true
        schema:
          type: string
      responses:
        200:
          description: successful operation
          content: {}
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/files/{srcArea}/rpc/move-file/{srcAreaPath}:
    put:
      description: Move a file.
      operationId: moveFile
      parameters:
      - name: srcArea
        in: path
        description: '''unsecured'', ''secured'', or ''usb'''
        required: true
        schema:
          type: string
      - name: srcAreaPath
        in: path
        description: Path for the source filename in the given area.
        required: true
        schema:
          type: string
      - name: destArea
        in: query
        description: One of 'unsecured', 'secured', or 'usb'.
        required: true
        schema:
          type: string
      - name: destAreaPath
        in: query
        description: Path for directory in the given area.
        required: true
        schema:
          type: string
      responses:
        200:
          description: successful operation
          content: {}
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/files/{area}/rpc/create-file/{areaPath}:
    put:
      description: Add a new file (up to 20M) or update an existing file with the
        same name.
      operationId: uploadFile
      parameters:
      - name: area
        in: path
        description: '''unsecured'', ''secured'', or ''usb'''
        required: true
        schema:
          type: string
      - name: areaPath
        in: path
        description: Path for directory or filename in the given area.
        required: true
        schema:
          type: string
      requestBody:
        content:
          multipart/form-data:
            schema:
              required:
              - file
              properties:
                file:
                  type: string
                  format: binary
        required: true
      responses:
        200:
          description: successful operation
          content: {}
        413:
          description: File exceeded 20M
          content: {}
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/io/descriptions/channels:
    get:
      description: Returns all Channel Descriptions.
      operationId: getChannelDescriptions
      responses:
        200:
          description: All channel descriptions.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ChannelDescriptions'
      security:
      - apiKey: []
  /api/v1/io/descriptions/channels/{channelId}:
    get:
      description: Returns the Channel Description for the given Channel Type ID.
      operationId: getChannelDescription
      parameters:
      - name: channelId
        in: path
        description: A string of the hexadecimal value for the Channel Type ID. For
          example, "0x60000002".
        required: true
        schema:
          type: string
      responses:
        200:
          description: The channel description for the given Channel Type ID.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ChannelDescription'
        404:
          description: Invalid Channel Type ID
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
      security:
      - apiKey: []
  /api/v1/io/descriptions/modules:
    get:
      description: Returns all Module Descriptions.
      operationId: getModuleDescriptions
      responses:
        200:
          description: All module descriptions.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ModuleDescriptions'
      security:
      - apiKey: []
  /api/v1/io/descriptions/modules/{module}:
    get:
      description: Returns the Module Description for the given module ID or product
        number.
      operationId: getModuleDescription
      parameters:
      - name: module
        in: path
        description: The module ID (e.g. "0x90000014") or module product number (e.g.
          "GRV-OAC-12-I").
        required: true
        schema:
          type: string
      responses:
        200:
          description: Module description.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ModuleDescription'
        404:
          description: Invalid module ID or name
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
      security:
      - apiKey: []
  /api/v1/io/{device}/batch:
    put:
      operationId: startIoBatchOperation
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IoBatchOperations'
        required: true
      responses:
        200:
          description: ""
          content: {}
        422:
          description: Validation error. The request was well-formed, but one or more
            values were invalid.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ValidationError'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
      x-codegen-request-body-name: body
  /api/v1/io/{device}/config:
    get:
      description: Returns the I/O Unit configuration. These are settings that affect
        all of the I/O modules and channels.
      operationId: getIoConfiguration
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      responses:
        200:
          description: ""
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/IoConfiguration'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
    put:
      operationId: setIoConfiguration
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IoConfiguration'
        required: true
      responses:
        200:
          description: ""
          content: {}
        422:
          description: Validation error. The request was well-formed, but one or more
            values were invalid.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ValidationError'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
      x-codegen-request-body-name: body
  /api/v1/io/{device}/config/opcode:
    post:
      description: Send an Operation Code to the I/O unit.
      operationId: setIoConfigurationOpCode
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      requestBody:
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/NumericValue'
        required: true
      responses:
        200:
          description: successful operation
          content: {}
        400:
          description: Bad request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
      x-codegen-request-body-name: body
  /api/v1/io/{device}/diagnostics:
    get:
      description: Returns diagnostic information about the I/O unit.
      operationId: getIoDiagnostics
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      responses:
        200:
          description: Successful operation.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/IoDiagnostics'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/system/battery-voltage:
    get:
      description: Read the internal battery voltage (V). Only available on groov EPIC units with a hardware revision of 9/2020 or later.
      operationId: getBatteryVoltage
      responses:
        200:
          description: Successful operation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatteryVoltage'
        404:
          description: Battery voltage is not available on this unit.
          content: {}
      security:
      - apiKey: []
  /api/v1/io/{device}/info:
    get:
      description: Returns information about the I/O unit.
      operationId: getIoInfo
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      responses:
        200:
          description: Successful operation.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/IoInfo'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/io/{device}/modules/{moduleIndex}/analog/values:
    get:
      description: Returns the channel values of an analog module. This is the
        most efficient way to get all the analog values. It uses a packed area of
        the I/O memory map. Additional information about a channel is available on
        a channel by channel basis.
      operationId: getModuleAnalogChannelValues
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: moduleIndex
        in: path
        description: The index of the module, between 0 and 15.
        required: true
        schema:
          type: number
      - name: channels
        in: query
        description: The number of channels to return. It must
          be between 1 and 64. Defaults to 32 if not provided.
        schema:
          type: number
      responses:
        200:
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnalogModuleValues'
        404:
          description: Invalid module index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/io/{device}/modules/{moduleIndex}/channels/{channelIndex}/analog/value:
    put:
      description: Set the value of the analog channel.
      operationId: setAnalogChannelValue
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: moduleIndex
        in: path
        description: The index of the module, between 0 and 15.
        required: true
        schema:
          type: number
      - name: channelIndex
        in: path
        description: The index of the channel, between 0 and one less than the number
          of channels on the current module.
        required: true
        schema:
          type: number
      requestBody:
        description: The value for the channel.
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/NumericValue'
        required: true
      responses:
        200:
          description: successful operation
          content: {}
        404:
          description: Invalid module or channel index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
      x-codegen-request-body-name: body
  /api/v1/io/{device}/modules/{moduleIndex}/channels/{channelIndex}/analog/status:
    get:
      description: |
        Returns the current status of the analog fields for the given channel.

        Does not confirm that an analog module is plugged in at the given index.
      operationId: getChannelAnalogStatus
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: moduleIndex
        in: path
        description: The index of the module, between 0 and 15.
        required: true
        schema:
          type: number
      - name: channelIndex
        in: path
        description: The index of the channel, between 0 and one less than the number
          of channels on the current module.
        required: true
        schema:
          type: number
      responses:
        200:
          description: ""
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnalogChannelRead'
        404:
          description: Invalid module or channel index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/io/{device}/modules/{moduleIndex}/channels/{channelIndex}/analog/min-value/clear:
    post:
      description: Clear the analog channel's minimum value.
      operationId: clearAnalogChannelMinValue
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: moduleIndex
        in: path
        description: The index of the module, between 0 and 15.
        required: true
        schema:
          type: number
      - name: channelIndex
        in: path
        description: The index of the channel, between 0 and one less than the number
          of channels on the current module.
        required: true
        schema:
          type: number
      responses:
        200:
          description: successful operation
          content: {}
        404:
          description: Invalid module or channel index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/io/{device}/modules/{moduleIndex}/channels/{channelIndex}/analog/max-value/clear:
    post:
      description: Clear the analog channel's maximum value.
      operationId: clearAnalogChannelMaxValue
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: moduleIndex
        in: path
        description: The index of the module, between 0 and 15.
        required: true
        schema:
          type: number
      - name: channelIndex
        in: path
        description: The index of the channel, between 0 and one less than the number
          of channels on the current module.
        required: true
        schema:
          type: number
      responses:
        200:
          description: successful operation
          content: {}
        404:
          description: Invalid module or channel index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/io/{device}/modules/{moduleIndex}/channels/{channelIndex}/config:
    get:
      operationId: getChannelConfiguration
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: moduleIndex
        in: path
        description: The index of the module, between 0 and 15.
        required: true
        schema:
          type: number
      - name: channelIndex
        in: path
        description: The index of the channel, between 0 and one less than the number
          of channels on the current module.
        required: true
        schema:
          type: number
      responses:
        200:
          description: ""
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChannelConfig'
        404:
          description: Invalid module or channel index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
    put:
      operationId: setChannelConfiguration
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: moduleIndex
        in: path
        description: The index of the module, between 0 and 15.
        required: true
        schema:
          type: number
      - name: channelIndex
        in: path
        description: The index of the channel, between 0 and one less than the number
          of channels on the current module.
        required: true
        schema:
          type: number
      requestBody:
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/ChannelConfigWrite'
        required: true
      responses:
        200:
          description: successful operation
          content: {}
        400:
          description: Bad request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        404:
          description: Invalid module or channel index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
      x-codegen-request-body-name: body
  /api/v1/io/{device}/modules/{moduleIndex}/channels/{channelIndex}/digital/counter/active:
    put:
      description: Activates or deactivates a digital channel counter. Has no affect
        on other digital input features.
      operationId: setDigitalChannelCounterActive
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: moduleIndex
        in: path
        description: The index of the module, between 0 and 15.
        required: true
        schema:
          type: number
      - name: channelIndex
        in: path
        description: The index of the channel, between 0 and one less than the number
          of channels on the current module.
        required: true
        schema:
          type: number
      requestBody:
        description: The state for the channel.
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/BooleanValue'
        required: true
      responses:
        200:
          description: successful operation
          content: {}
        404:
          description: Invalid module or channel index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
      x-codegen-request-body-name: body
  /api/v1/io/{device}/modules/{moduleIndex}/channels/{channelIndex}/digital/feature/clear:
    post:
      description: Clears the digital channel feature and restarts the measurement.
      operationId: clearDigitalChannelFeature
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: moduleIndex
        in: path
        description: The index of the module, between 0 and 15.
        required: true
        schema:
          type: number
      - name: channelIndex
        in: path
        description: The index of the channel, between 0 and one less than the number
          of channels on the current module.
        required: true
        schema:
          type: number
      responses:
        200:
          description: successful operation
          content: {}
        404:
          description: Invalid module or channel index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/io/{device}/modules/{moduleIndex}/channels/{channelIndex}/digital/off-latch/clear:
    post:
      description: Clears the off-latch of the digital channel.
      operationId: clearDigitalChannelOffLatch
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: moduleIndex
        in: path
        description: The index of the module, between 0 and 15.
        required: true
        schema:
          type: number
      - name: channelIndex
        in: path
        description: The index of the channel, between 0 and one less than the number
          of channels on the current module.
        required: true
        schema:
          type: number
      responses:
        200:
          description: successful operation
          content: {}
        404:
          description: Invalid module or channel index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/io/{device}/modules/{moduleIndex}/channels/{channelIndex}/digital/on-latch/clear:
    post:
      description: Clears the on-latch of the digital channel.
      operationId: clearDigitalChannelOnLatch
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: moduleIndex
        in: path
        description: The index of the module, between 0 and 15.
        required: true
        schema:
          type: number
      - name: channelIndex
        in: path
        description: The index of the channel, between 0 and one less than the number
          of channels on the current module.
        required: true
        schema:
          type: number
      responses:
        200:
          description: successful operation
          content: {}
        404:
          description: Invalid module or channel index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/io/{device}/modules/{moduleIndex}/channels/{channelIndex}/digital/state:
    put:
      description: Get the current state of the digital channel.
      operationId: setDigitalChannelState
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: moduleIndex
        in: path
        description: The index of the module, between 0 and 15.
        required: true
        schema:
          type: number
      - name: channelIndex
        in: path
        description: The index of the channel, between 0 and one less than the number
          of channels on the current module.
        required: true
        schema:
          type: number
      requestBody:
        description: The state for the channel.
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/BooleanValue'
        required: true
      responses:
        200:
          description: successful operation
          content: {}
        404:
          description: Invalid module or channel index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
      x-codegen-request-body-name: body
  /api/v1/io/{device}/modules/{moduleIndex}/channels/{channelIndex}/digital/status:
    get:
      description: |-
        Returns the current status of the digital fields for the given channel.\
        Does not confirm that a digital module is plugged in at the given index.
      operationId: getChannelDigitalStatus
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: moduleIndex
        in: path
        description: The index of the module, between 0 and 15.
        required: true
        schema:
          type: number
      - name: channelIndex
        in: path
        description: The index of the channel, between 0 and one less than the number
          of channels on the current module.
        required: true
        schema:
          type: number
      responses:
        200:
          description: ""
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DigitalChannelRead'
        404:
          description: Invalid module or channel index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/io/{device}/modules/{moduleIndex}/channels/names:
    get:
      description: Returns the channel names for the given module.
      operationId: getChannelNames
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: moduleIndex
        in: path
        description: The index of the module, between 0 and 15.
        required: true
        schema:
          type: number
      responses:
        200:
          description: The names for the given module index.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChannelNames'
        404:
          description: Invalid module index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/io/{device}/modules/{moduleIndex}/config:
    get:
      description: Returns the configuration for the given module.
      operationId: getModuleConfiguration
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: moduleIndex
        in: path
        description: The index of the module, between 0 and 15.
        required: true
        schema:
          type: number
      responses:
        200:
          description: ""
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModuleChannelConfig'
        404:
          description: Invalid module index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/io/{device}/modules/{moduleIndex}/digital/values:
    get:
      description: Returns all the channel values of a digital module. This is the
        most efficient way to get all the digital values. It uses a packed area of
        the I/O memory map. Additional information about a channel is available on
        a channel by channel basis.
      operationId: getModuleDigitalChannelValues
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: moduleIndex
        in: path
        description: The index of the module, between 0 and 15.
        required: true
        schema:
          type: number
      responses:
        200:
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DigitalModuleValues'
        404:
          description: Invalid module index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/io/{device}/modules/{moduleIndex}/info:
    get:
      description: Returns information about the module at the given slot index.
      operationId: getModuleInfo
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: moduleIndex
        in: path
        description: The index of the module, between 0 and 15.
        required: true
        schema:
          type: number
      responses:
        200:
          description: ""
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ModuleInfo'
        404:
          description: Invalid module index
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/io/{device}/modules/quality:
    get:
      description: Returns quality flags for all the module slots on the rack.
      operationId: getModuleQualityFlags
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      responses:
        200:
          description: ""
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ModuleQualityFlags'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/io/{device}/modules/type:
    get:
      description: Returns all the types of modules plugged into the rack.
      operationId: getModuleTypes
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      responses:
        200:
          description: ""
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ModuleTypes'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/io/{device}/modules/info:
    get:
      description: Returns information about all the modules plugged into the rack.
      operationId: getModuleInfos
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      responses:
        200:
          description: ""
          content:
            'application/json':
              schema:
                required:
                - modules
                type: object
                properties:
                  modules:
                    type: array
                    description: An array of ModuleInfo objects describing the modules
                      on a rack. The array index matches the module index on the rack.
                    items:
                      $ref: '#/components/schemas/ModuleInfo'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/io/{device}/mmp/address:
    put:
      description: Writes to one or more OptoMMP memory map addresses.
      operationId: setMmpValues
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      requestBody:
        description: An array of values and addresses to write. The array must have
          between 1 and 256 elements. Otherwise, 400 is returned.
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/MmpGenericValues'
        required: true
      responses:
        200:
          description: successful operation
          content: {}
        400:
          description: Bad request.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        404:
          description: Resource not found.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
      x-codegen-request-body-name: body
  /api/v1/io/{device}/mmp/address/{address}:
    get:
      description: Returns one or more values at the given OptoMMP memory map address.
      operationId: getMmpValues
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: address
        in: path
        description: A hexadecimal address. For example, "0xF0D81100".
        required: true
        schema:
          type: string
      - name: type
        in: query
        description: One of 'int8', 'uint8', 'int32', 'uint32', 'int64', 'uint64', 'float', 'string'.
          This is how the raw memory will be interpreted.
        schema:
          type: string
          default: int32
      - name: length
        in: query
        description: For numbers, this is the number of elements to return. It must
          be 256 or less, except int64 and uint64 must be 128 or less. For a string, this is the number of bytes to read, and must
          be 1024 or less.
        schema:
          type: number
      - name: encoding
        in: query
        description: One of 'ascii' or 'utf8'. This is how the raw memory will be
          interpreted.
        schema:
          type: string
      responses:
        200:
          description: ""
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/AbstractMmpValues'
        400:
          description: Bad request.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        404:
          description: Resource not found.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
    put:
      description: Writes a value at the given OptoMMP memory map address.
      operationId: setMmpValue
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: address
        in: path
        description: A hexadecimal address. For example, "0xF0D81100".
        required: true
        schema:
          type: string
      requestBody:
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/MmpGenericValue'
        required: true
      responses:
        200:
          description: successful operation
          content: {}
        400:
          description: Bad request.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        404:
          description: Resource not found.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
      x-codegen-request-body-name: body
  /api/v1/io/{device}/scratchpad/{datatype}/index:
    put:
      description: Writes to one or more scratch pad elements.
      operationId: setScratchPadValues
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: datatype
        in: path
        description: One of 'int32', 'int64', 'float', or 'string'
        required: true
        schema:
          type: string
          default: int32
      requestBody:
        description: An array of values and indexes to write. The array must have
          between 1 and 256 elements. Otherwise, 400 is returned.
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/ScratchPadGenericValues'
        required: true
      responses:
        200:
          description: successful operation
          content: {}
        400:
          description: Bad request.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        404:
          description: Resource not found.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
      x-codegen-request-body-name: body      
  /api/v1/io/{device}/scratchpad/{datatype}/index/{index}:
    get:
      description: Returns one or more values at the given OptoMMP memory map address.
      operationId: getScratchPadValues
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: datatype
        in: path
        description: One of 'int32', 'int64', 'float', or 'string'
        required: true
        schema:
          type: string
          default: int32
      - name: index
        in: path
        description: The scratch pad index.
        required: true
        schema:
          type: number
          default: 0
      - name: length
        in: query
        description: The number of elements to return. It must
          be between 1 and 256. Default to 1 if not provided.
        schema:
          type: number
      - name: encoding
        in: query
        description: One of 'ascii' or 'utf8'. This is how the raw memory will be
          interpreted.
        schema:
          type: string
      responses:
        200:
          description: ""
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/MmpGenericValues'
        400:
          description: Bad request.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        404:
          description: Resource not found.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
    put:
      description: Writes a value at the given scratch pad index.
      operationId: setScratchPadValue
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: datatype
        in: path
        description: One of 'int32', 'int64', 'float', or 'string'
        required: true
        schema:
          type: string
          default: int32
      - name: index
        in: path
        description: The scratch pad index.
        required: true
        schema:
          type: number
          default: 0
      requestBody:
        description: The value to write.
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/ScratchPadGenericValue'
        required: true
      responses:
        200:
          description: successful operation
          content: {}
        400:
          description: Bad request.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        404:
          description: Resource not found.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
      x-codegen-request-body-name: body   
  /api/v1/io/{device}/scratchpad/public-access:
    get:
      description: Returns the I/O Unit configuration. These are settings that affect
        all of the I/O modules and channels.
      operationId: getScratchPadPublicAccessConfiguration
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      responses:
        200:
          description: ""
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ScratchPadPublicAccess'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
    put:
      operationId: setScratchPadPublicAccessConfiguration
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScratchPadPublicAccess'
        required: true
      responses:
        200:
          description: ""
          content: {}
        422:
          description: Validation error. The request was well-formed, but one or more
            values were invalid.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ValidationError'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
      x-codegen-request-body-name: body
  /api/v1/io/{device}/pids/config:
    get:
      operationId: getPidConfigurations
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      responses:
        200:
          description: ""
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PidConfigs'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/io/{device}/pids/{pidIndex}/config:
    get:
      operationId: getPidConfiguration
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: pidIndex
        in: path
        description: The index of the PID loop, between 0 and 96.
        required: true
        schema:
          type: number
      responses:
        200:
          description: ""
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PidConfig'
        404:
          description: Invalid PID index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
    put:
      operationId: setPidConfiguration
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: pidIndex
        in: path
        description: The index of the PID loop, between 0 and 96.
        required: true
        schema:
          type: number
      requestBody:
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/PidConfig'
        required: true
      responses:
        200:
          description: successful operation
          content: {}
        400:
          description: Bad request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        404:
          description: Invalid PID index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
      x-codegen-request-body-name: body
  /api/v1/io/{device}/pids/{pidIndex}/status:
    get:
      operationId: getPidStatus
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: pidIndex
        in: path
        description: The index of the PID loop, between 0 and 96.
        required: true
        schema:
          type: number
      responses:
        200:
          description: ""
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PidStatus'
        404:
          description: Invalid PID index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
    put:
      operationId: setPidStatus
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      - name: pidIndex
        in: path
        description: The index of the PID loop, between 0 and 96.
        required: true
        schema:
          type: number
      requestBody:
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/PidStatusWrite'
        required: true
      responses:
        200:
          description: successful operation
          content: {}
        400:
          description: Bad request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        404:
          description: Invalid PID index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
      x-codegen-request-body-name: body
  /api/v1/io/{device}/standardstream/config:
    get:
      operationId: getStandardStreamConfiguration
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      responses:
        200:
          description: ""
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StreamConfig'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
    put:
      operationId: setStandardStreamConfiguration
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      requestBody:
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/StreamConfig'
        required: true
      responses:
        200:
          description: successful operation
          content: {}
        400:
          description: Bad request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        404:
          description: Standard Stream error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
      x-codegen-request-body-name: body
  /api/v1/io/{device}/codesysstream/config:
    get:
      operationId: getCodesysStreamConfiguration
      parameters:
      - name: device
        in: path
        description: The name of the device. Use "local" for the built-in rack of
          I/O.
        required: true
        schema:
          type: string
      responses:
        200:
          description: ""
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StreamConfig'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/system/network/vpn/openvpn/enable:
    post:
      description: Enable or disable the OpenVPN client.
      operationId: enableOpenVpn
      requestBody:
        description: True to enable, false to disable
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/BooleanValue'
        required: true
      responses:
        200:
          description: successful operation
          content: {}
        400:
          description: Bad request.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/RequestErrorDetail'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
      x-codegen-request-body-name: body
  /api/v1/system/portforward/rules:
    get:
      description: '[EPIC ONLY] Returns the array of port forward rules.'
      operationId: getPortForwardRules
      responses:
        200:
          description: The array of port forward rules or an empty array.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PortForwardRuleArray'
        500:
          description: An error occurred in the server, another service, or a remote
            device
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
    post:
      description: '[EPIC ONLY] Overwrites the array of port forwarding rules.'
      operationId: overwritePortForwardRules
      requestBody:
        description: A array of port forward rules. The rules must not have duplicate titles, overlapping ports,
             reserved ports (80, 443, 502) on the external interface, or otherwise invalid fields.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PortForwardRuleArray'
        required: true
      responses:
        200:
          description: successful operation
          content: {}
        422:
          description: Validation error. The request was well-formed, but one or
            more values were invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
        500:
          description: An error occurred in the server, another service, or a remote
            device
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
        503:
          description: The server is busy with another request. Try again later.
      security:
      - apiKey: []
      x-codegen-request-body-name: body
  /api/v1/system/usb/unmount:
    post:
      operationId: unmountUsb
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UsbDrive'
        required: true
      responses:
        200:
          description: successful operation
          content: {}
        400:
          description: Bad request.
          content: {}
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
      x-codegen-request-body-name: body
  /api/v1/files/{area}/content/{fileName}:
    get:
      deprecated: true
      description: Download a file. This method is deprecated. Use _/api/v1/files/{area}/rpc/get-file/{areaPath}_ instead.
      operationId: getFile
      parameters:
      - name: area
        in: path
        description: '''unsecured'' or ''secured'''
        required: true
        schema:
          type: string
      - name: fileName
        in: path
        required: true
        schema:
          type: string
      responses:
        200:
          description: The file
          content: {}
        404:
          description: File not found
          content: {}
      security:
      - apiKey: []
    put:
      deprecated: true
      description: Add a new file (up to 20M) or update an existing file with the
        same name. This method is deprecated. Use _/api/v1/files/{area}/rpc/create-file/{areaPath}_ instead.
      operationId: addFile
      parameters:
      - name: area
        in: path
        description: '''unsecured'' or ''secured'''
        required: true
        schema:
          type: string
      - name: fileName
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          multipart/form-data:
            schema:
              required:
              - file
              properties:
                file:
                  type: string
                  format: binary
        required: true
      responses:
        200:
          description: successful operation
          content: {}
        413:
          description: File exceeded 20M
          content: {}
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
    delete:
      deprecated: true
      description: Delete a file.This method is deprecated. Use _/api/v1/files/{area}/rpc/delete-file/{areaPath}_ instead.
      operationId: deleteFile
      parameters:
      - name: area
        in: path
        description: '''unsecured'' or ''secured'''
        required: true
        schema:
          type: string
      - name: fileName
        in: path
        required: true
        schema:
          type: string
      responses:
        200:
          description: successful operation
          content: {}
        404:
          description: File not found
          content: {}
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/files/{area}/info:
    get:
      deprecated: true
      description: List files. This method is deprecated. Use _/api/v1/files/{area}/rpc/list-dir/{areaPath}_ instead.
      operationId: getFiles
      parameters:
      - name: area
        in: path
        description: '''unsecured'' or ''secured'''
        required: true
        schema:
          type: string
      responses:
        200:
          description: The list of files including file name, path, modified time
            (POSIX time), and size (bytes)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileDetailsArray'
        500:
          description: An error occured in the server, another service, or a remote
            device.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseError'
      security:
      - apiKey: []
  /api/v1/files/{area}/info/{fileName}:
    get:
      deprecated: true
      description: Get file details. This method is deprecated. Use _/api/v1/files/{area}/rpc/info/{areaPath}_ instead.
      operationId: getFileInfo
      parameters:
      - name: area
        in: path
        description: '''unsecured'' or ''secured'''
        required: true
        schema:
          type: string
      - name: fileName
        in: path
        required: true
        schema:
          type: string
      responses:
        200:
          description: File details including file name, path, modified time (POSIX
            time), and size (bytes)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileDetailsModel'
        404:
          description: File not found
          content: {}
      security:
      - apiKey: []
components:
  schemas:
    AbstractChannelRead:
      required:
      - channelIndex
      - modelType
      - moduleIndex
      - qualityDetail
      type: object
      properties:
        modelType:
          type: string
          description: Discriminator for the model type. Either 'AnalogChannelRead'
            or 'DigitalChannelRead'.
        moduleIndex:
          type: number
          description: The index of the module, between 0 and 15.
        channelIndex:
          type: number
          description: The index of the channel, between 0 and one less than the number
            of channels on the current module.
        qualityDetail:
          type: number
      discriminator:
        propertyName: modelType
    AbstractMmpValues:
      required:
      - dataType
      - mmpValues
      type: object
      properties:
        dataType:
          $ref: '#/components/schemas/MmpValueType'
        mmpValues:
          type: array
          description: A value can also be 'null' to indicate an invalid MMP address. OpenAPI 3.0 cannot express a nullable
            array element.
          items:
            oneOf:
              - type: number
              - type: string
              - type: object
    AnalogChannelRead:
      allOf:
      - $ref: '#/components/schemas/AbstractChannelRead'
      - required:
        - maxValue
        - minValue
        - value
        type: object
        properties:
          value:
            type: number
          minValue:
            type: number
          maxValue:
            type: number
    IoCommunications:
     required:
     - arcnetAcks
     - acomScanCount
     - vcomScanCount
     type: object
     properties:
      arcnetAcks:
       type: number
      acomScanCount:
       type: number
      vcomScanCount:
       type: number
    BooleanValue:
      required:
      - value
      type: object
      properties:
        value:
          type: boolean
    ChannelConfig:
      required:
      - averageFilterWeight
      - channelIndex
      - channelType
      - clampLower
      - clampUpper
      - feature
      - gain
      - moduleIndex
      - moduleType
      - name
      - offset
      - qualityEnabled
      - scaledLower
      - scaledUpper
      - simpleMovingAverageReadings
      - steinhartHartCoefficientA
      - steinhartHartCoefficientB
      - steinhartHartCoefficientC
      - steinhartHartCoefficientSecondOrder
      - unit
      - watchdogEnabled
      - watchdogValue
      type: object
      properties:
        moduleType:
          type: number
        channelType:
          type: number
        moduleIndex:
          type: number
          description: The index of the module, between 0 and 15.
        channelIndex:
          type: number
          description: The index of the channel, between 0 and one less than the number
            of channels on the current module.
        name:
          type: string
        watchdogValue:
          type: number
        watchdogEnabled:
          type: boolean
        qualityEnabled:
          type: boolean
        feature:
          type: number
          description: '[Digital Only]'
        unit:
          type: string
          description: '[Analog Only]'
        offset:
          type: number
          description: '[Analog Only]'
        gain:
          type: number
          description: '[Analog Only]'
        scaledLower:
          type: number
          description: '[Analog Only]'
        scaledUpper:
          type: number
          description: '[Analog Only]'
        clampLower:
          type: number
          description: '[Analog Only]'
        clampUpper:
          type: number
          description: '[Analog Only]'
        averageFilterWeight:
          type: number
          description: '[Analog Only]'
        simpleMovingAverageReadings:
          type: number
          description: '[Analog Only]'
        steinhartHartCoefficientA:
          type: number
          description: '[Analog Only, Since Firmware 1.3.0]'
        steinhartHartCoefficientB:
          type: number
          description: '[Analog Only, Since Firmware 1.3.0]'
        steinhartHartCoefficientSecondOrder:
          type: number
          description: '[Analog Only, Since Firmware 1.3.0]'
        steinhartHartCoefficientC:
          type: number
          description: '[Analog Only, Since Firmware 1.3.0]'
        publicAccessAttributes:
          $ref: '#/components/schemas/AbstractPublicAccessAttributes'
      description: ""
    ChannelConfigWrite:
      type: object
      properties:
        name:
          type: string
        watchdogValue:
          type: number
        watchdogEnabled:
          type: boolean
        feature:
          type: number
          description: Only used for digital.
        channelType:
          type: string
          description: Only used for analog. Must be in hexadecimal format.
        unit:
          type: string
          description: user-provided unit string.
        qualityEnabled:
          type: boolean
          description: Only used for analog.
        offset:
          type: number
          description: Only used for analog.
        gain:
          type: number
          description: Only used for analog.
        scaledLower:
          type: number
          description: Only used for analog.
        scaledUpper:
          type: number
          description: Only used for analog.
        clampLower:
          type: number
          description: Only used for analog.
        clampUpper:
          type: number
          description: Only used for analog.
        averageFilterWeight:
          type: number
          description: Only used for analog.
        simpleMovingAverageReadings:
          type: number
          description: Only used for analog.
        steinhartHartCoefficientA:
          type: number
          description: Only used for analog. Since firmware 1.3.0.
        steinhartHartCoefficientB:
          type: number
          description: Only used for analog. Since firmware 1.3.0.
        steinhartHartCoefficientSecondOrder:
          type: number
          description: Only used for analog. Since firmware 1.3.0.
        steinhartHartCoefficientC:
          type: number
          description: Only used for analog. Since firmware 1.3.0.
        publicAccessAttributes:
          $ref: '#/components/schemas/AbstractPublicAccessAttributes'
    AbstractPublicAccessAttributes:
      required:
      - modelType
      - writable
      type: object
      properties:
        modelType:
          type: string
          description: Discriminator for the model type. Either 'AnalogPublicTagAccessAttributes'
            or 'DigitalPublicTagAccessAttributes'.
        writable:
          type: boolean
      discriminator:
        propertyName: modelType
    AnalogPublicAccessAttributes:
      allOf:
      - $ref: '#/components/schemas/AbstractPublicAccessAttributes'
      - required:
        - maximumRead
        - minimumRead
        - qualityRead
        - valueRead
        type: object
        properties:
          valueRead:
            type: boolean
          deadband:
            type: number
            description: Change threshold for a MQTT/Sparkplug publication
          maximumRead:
            type: boolean
          minimumRead:
            type: boolean
          qualityRead:
            type: boolean
    DigitalPublicAccessAttributes:
      allOf:
      - $ref: '#/components/schemas/AbstractPublicAccessAttributes'
      - required:
        - counterRead
        - offLatchRead
        - onLatchRead
        - stateRead
        type: object
        properties:
          stateRead:
            type: boolean
          onLatchRead:
            type: boolean
          offLatchRead:
            type: boolean
          counterRead:
            type: boolean
    ChannelDescription:
      required:
      - channelTypeId
      - name
      type: object
      properties:
        channelTypeId:
          type: string
          description: A string version of the hexadecimal value of the Channel Type.
            Each channel type has a unique ID, which is a 32-bit unsigned number.
            For example, "0x60000002".
        name:
          $ref: '#/components/schemas/I18nString'
        engineeringUnits:
          type: string
          description: The default Engineering Units. For example, "mV".
        minUnderScale:
          type: number
          description: Minimum signal amplitude this channel type can measure or output.
        maxOverScale:
          type: number
          description: Maximum signal amplitude this channel type can measure or output.
        lowScale:
          type: number
          description: Low end of published range of signal amplitude for this channel
            type.
        highScale:
          type: number
          description: High end of published range of signal amplitude for this channel
            type.
    ChannelDescriptions:
      type: object
      additionalProperties:
        $ref: '#/components/schemas/ChannelDescription'
      description: An object map of Channel Descriptions. The property name for each
        item in the object is the _channelTypeId_ for the Channel Description.
    ChannelNames:
      required:
      - names
      type: object
      properties:
        names:
          type: array
          description: An array of strings containing channel names. The index of
            the channel matches the index in the array.
          items:
            type: string
      description: An array of the user-defined channel names of a particular module.
    DigitalChannelRead:
      allOf:
      - $ref: '#/components/schemas/AbstractChannelRead'
      - required:
        - counterActive
        - featureType
        - featureValue
        - offLatchState
        - onLatchState
        - state
        type: object
        properties:
          state:
            type: boolean
          onLatchState:
            type: boolean
          offLatchState:
            type: boolean
          featureType:
            type: number
          featureValue:
            type: number
          counterActive:
            type: boolean
    FileAreaType:
      type: string
      enum:
      - secured
      - unsecured
      - usb
    FileDetailsModel:
      required:
      - modified
      - name
      - path
      - size
      type: object
      properties:
        name:
          type: string
          description: File or directory name.
        path:
          type: string
          description: The real path on the file system.
        area:
          type: string
          description: '''unsecured'', ''secured'' or ''usb''. Added in version 1.5.0'
        areaPath:
          type: string
          description: Path of the file's parent folder, relative to the area it is
            in. Added in version 1.5.0.
        modified:
          type: number
          description: ""
        size:
          type: number
          description: ""
        mode:
          type: number
          description: Added in version 1.5.0
        isFile:
          type: boolean
          description: Added in version 1.5.0
        isDirectory:
          type: boolean
          description: Added in version 1.5.0
    FileDetailsArray:
      type: array
      items:
        $ref: '#/components/schemas/FileDetailsModel'
    I18nString:
      required:
      - en
      type: object
      properties:
        en:
          type: string
          description: The English version of the text.
    IoBatchOperations:
      required:
      - modules
      - channels
      - operation
      type: object
      properties:
        modules:
          type: string
          description: Module indexes to operate on. For example, "all", "1", or "1-2".
        channels:
          type: string
          description: Channel indexes to operate on. For example, "all", "1", or "1-2".
        operation:
          type: object
          properties:
            operationType:
              type: string
              description: The operation type. Either 'config', 'analog', or 'digital'.
            analog:
              type: object
              properties:
                clearMin:
                  type: boolean
                  description: If true, clears all the Minimum values.
                clearMax:
                  type: boolean
                  description: If true, clears all the Maximum values.
            digital:
              type: object
              properties:
                state:
                  type: boolean
                  description: If the property exists and is a boolean, the state is set on or off accordingly.
                clearOnLatch:
                  type: boolean
                  description: If true, clears all the On Latch flags.
                clearOffLatch:
                  type: boolean
                  description: If true, clears all the Off Latch flags.
            config: 
              type: object
              properties:
                qualityIndicator:
                  type: boolean
                publicAccess:
                  type: object
                  properties:
                    enable:
                      type: boolean
                    digitalOnLatch:
                      type: boolean
                    digitalOffLatch:
                      type: boolean
                    digitalFeature:
                      type: boolean
                    analogMin:
                      type: boolean
                    analogMax:
                      type: boolean
                    analogQuality:
                      type: boolean
                    writable:
                      type: boolean
    IoConfiguration:
      required:
      - degreesF
      - modbusFloatFormat
      - watchdogMs
      type: object
      properties:
        watchdogMs:
          type: number
          description: The watchdog time in milliseconds. 0 disables the watchdog.
            This is the amount of time the I/O unit will wait for communication from
            the host device before timing out.
        degreesF:
          type: boolean
          description: "Flag for controlling the unit used for temperature inputs.\
            \ \n\n- 0 = degrees C\n- non-0 = degrees F\n"
        modbusFloatFormat:
          type: number
          description: |
            Format of floating-point values for Modbus.

            - 0 for Big Endian.
            - 1 for Big Endian, word swapped. Most significant bit of float is in the most significant register.
        ioModbusSlaveEnabled:
          type: boolean
          description: Flag for enabling or disabling the I/O Modbus Slave. You can
            disable the I/O Modbus Slave to allow another Modbus Slave to listen on
            port 8502/tcp.
    IoDiagnostics:
      required:
      - communications
      - scannerTimes
      - moduleTimesDiscovered
      type: object
      properties:
        communications:
          $ref: '#/components/schemas/IoCommunications'
        scannerTimes:
          $ref: '#/components/schemas/ScannerTimes'
        moduleTimesDiscovered:
          type: array
          description: The per module count of the number of times a module has been discovered by the controller.
          items:
           type: integer
    BatteryVoltage:
      required:
      - voltage
      type: object
      properties:
        voltage:
          type: number
          description: The internal battery voltage (V).
    IoFirmare:
      required:
      - date
      - time
      - version
      type: object
      properties:
        version:
          type: string
          description: Version of I/O server.
        date:
          type: string
          description: Date that the I/O server was built. For example, "06/08/2018".
        time:
          type: string
          description: Time that the I/O server was built. For example, "08:58:38".
      description: Version information about the I/O server.
    IoHardware:
      required:
      - part
      - revision
      type: object
      properties:
        part:
          type: string
          description: The part name of the hardware. For example, "GRV-EPIC-PR1".
        revision:
          type: string
          description: The date of the hardwre design revision. For example, "05/31/2018".
      description: Version information about the I/O hardware.
    IoInfo:
      required:
      - firmware
      - hardware
      - mmpRev
      - pucFlag
      type: object
      properties:
        mmpRev:
          type: number
          description: Memory Map revision number.
        pucFlag:
          type: boolean
          description: Powerup Clear flag. (0 = OK; anything else means a Powerup
            Clear is needed)
        firmware:
          $ref: '#/components/schemas/IoFirmare'
        hardware:
          $ref: '#/components/schemas/IoHardware'
    ScratchPadPublicAccess:
      required:
      - int32StartIndex
      - int32Length
      - int64StartIndex
      - int64Length
      - floatStartIndex
      - floatLength
      - stringStartIndex
      - stringLength
      type: object
      properties:
        int32StartIndex:
          type: number
          description: The starting index of INT32 Scratch Pad values available in the Data Service. Must be between 0 and 10239.
        int32Length:
          type: number
          description: The number of indexes available. The total number of elements available is 10240.
        int64StartIndex:
          type: number
          description: The starting index of INT64 Scratch Pad values available in the Data Service. Must be between 0 and 1023.
        int64Length:
          type: number
          description: The number of indexes available. The total number of elements available is 1024.
        floatStartIndex:
          type: number
          description: The starting index of Float Scratch Pad values available in the Data Service. Must be between 0 and 10239.
        floatLength:
          type: number
          description: The number of indexes available. The total number of elements available is 10240.
        stringStartIndex:
          type: number
          description: The starting index of Float Scratch Pad values available in the Data Service. Must be between 0 and 63.
        stringLength:
          type: number
          description: The number of indexes available. The total number of elements available is 64.
    MmpGenericValue:
      required:
      - value
      type: object
      properties:
        value:
          anyOf:
            - type: number
            - type: string
            - type: object
          description: Can be either a number, string, or an object. 
        type:
          $ref: '#/components/schemas/MmpValueType'
    MmpGenericValues:
      required:
      - values
      type: object
      properties:
        values:
          type: array
          items:
            $ref: '#/components/schemas/MmpGenericValuesValues'
        encoding:
          type: string
          description: One of 'ascii' or 'utf8'. This is how the raw memory will be
            interpreted.
          default: ascii
      description: A list of MMP values of any type.
    MmpGenericValuesValues:
      required:
      - address
      - type
      type: object
      properties:
        address:
          type: string
          description: String version of the MMP address. Can be either decimal or
            hexadecimal.
        stringValue:
          type: string
        numberValue:
          type: number
          description: Float values are returned as doubles. Float values may also
            be a string type, with a value of either 'NaN', 'Infinity', or '-Infinity'.
        type:
          $ref: '#/components/schemas/MmpValueType'
    MmpValueType:
      type: string
      enum:
      - int8
      - uint8
      - int32
      - uint32
      - int64
      - uint64
      - float
      - string
    ScratchPadValueType:
      type: string
      enum:
      - int32
      - int64
      - float
      - string
    ScratchPadGenericValue:
      required:
      - value
      type: object
      properties:
        value:
          anyOf:
            - type: number
            - type: string
    ScratchPadGenericValues:
      required:
      - values
      type: object
      properties:
        values:
          type: array
          items:
            $ref: '#/components/schemas/ScratchPadGenericValuesValues'
        encoding:
          type: string
          description: One of 'ascii' or 'utf8'. This is how the raw memory will be
            interpreted.
          default: ascii
      description: A list of MMP values of any type.
    ScratchPadGenericValuesValues:
      required:
      - index
      - value
      type: object
      properties:
        index:
          type: number
        value:
          oneOf:
           - type: string
           - type: number
    ModuleChannelDescriptions:
      required:
      - channelTypes
      - defaultChannelType
      type: object
      properties:
        description:
          $ref: '#/components/schemas/I18nString'
        channelTypes:
          type: array
          items:
            type: string
        defaultChannelType:
          type: string
    ModuleDescription:
      required:
      - channelDescriptions
      - contentVersion
      - family
      - moduleId
      - numberOfChannels
      - productDescription
      - productNumber
      - productSpecification
      - schemaVersion
      type: object
      properties:
        schemaVersion:
          type: string
          description: Version of schema used for this module description. For example,
            "2.0.1".
        contentVersion:
          type: string
          description: Version of the content in this module description. For example,
            "1.1.2".
        moduleId:
          type: string
          description: ""
        family:
          type: string
          description: Either "GRV-EPIC" or "GRV-RIO".
        productNumber:
          type: string
          description: Opto 22 part number for this product. Format for Groov modules
            is GRV-<signal type>-<num channels>-<other properties>
        numberOfChannels:
          type: number
          description: Number of channels on this module.
        productDescription:
          $ref: '#/components/schemas/I18nString'
        channelDescriptions:
          $ref: '#/components/schemas/ModuleChannelDescriptions'
        enhancedDigitalChannelTypeId:
          type: string
          description: An enhanced digital channel type for modules that already have
            been released with firmware that uses the generic digital channel types.
            Used for determining the range of the module's channels.
        productSpecification:
          type: object
          additionalProperties:
            type: object
            additionalProperties:
              type: object
              properties: {}
              description: The module specification for the named locale.
            description: Locale code for the specification table.
          description: A localized and ordered list of key-value pairs that may rendered
            as a specification table in a document or user interface.
    ModuleDescriptions:
      type: object
      additionalProperties:
        $ref: '#/components/schemas/ModuleDescription'
      description: A collection of Modules Descriptions. The property name for each
        item in the object is the _moduleId_ for the Module Description.
    ModuleChannelConfig:
      required:
      - channels
      - index
      - typeID
      - typeName
      type: object
      properties:
        index:
          type: number
        typeID:
          type: string
        typeName:
          type: string
        channels:
          type: array
          items:
            $ref: '#/components/schemas/ChannelConfig'
    ModuleQualityFlags:
      required:
      - qualityMask
      type: object
      properties:
        qualityMask:
          type: number
          description: A bitmask for module quality. A bit will be set if any channel
            on the corresponding module has an error condition. A bit will also be
            set if a module is not present in the corresponding slot on the rack.
    AnalogModuleValues:
      required:
      - channelValues
      - moduleIndex
      type: object
      properties:
        moduleIndex:
          type: number
        channelValues:
          type: array
          description: An array of objects containing analog values and quality error
            flags. The index of the channel matches the index in the array.
          items:
            $ref: '#/components/schemas/AnalogModuleValuesChannelValues'
    AnalogModuleValuesChannelValues:
      required:
      - qualityError
      - value
      type: object
      properties:
        value:
          type: number
          description: The current value of the analog channel.
        qualityError:
          type: boolean
          description: ""
    DigitalModuleValues:
      required:
      - channelValues
      - moduleIndex
      type: object
      properties:
        moduleIndex:
          type: number
          description: The module index.
        channelValues:
          type: array
          description: An array of objects containing digital states and quality error
            flags. The index of the channel matches the index in the array.
          items:
            $ref: '#/components/schemas/DigitalModuleValuesChannelValues'
    DigitalModuleValuesChannelValues:
      required:
      - offLatch
      - onLatch
      - qualityError
      - state
      type: object
      properties:
        state:
          type: boolean
          description: ""
        onLatch:
          type: boolean
          description: ""
        offLatch:
          type: boolean
          description: ""
        qualityError:
          type: boolean
    ModuleType:
      required:
      - index
      - name
      - type
      type: object
      properties:
        index:
          type: number
          description: The module index.
        type:
          type: string
          description: A string version of the hexadecimal value of the module type
            ID. Each module type has a unique ID, which is a 32-bit unsigned number.
            For example, "0x5000000F" for GRV-IAC-24. If no module is plugged into
            a slot, then "id" will be "0x00000000".
        name:
          type: string
          description: The name of the module, or an empty string if a module is not
            plugged into the slot. For example, "GRV-IAC-24".
    ModuleTypes:
      required:
      - types
      type: object
      properties:
        types:
          type: array
          description: An array of modules on the rack. The array index matches the
            module index on the rack.
          items:
            $ref: '#/components/schemas/ModuleType'
    ModuleInfo:
      required:
      - index
      - moduleId
      type: object
      properties:
        index:
          type: number
          description: The module index.
        moduleId:
          type: string
          description: For example, "0x94000019". Will be "0x00000000" if no module
            is plugged in.
        firmwareMode:
          type: number
          description: ""
        mfgSerialNumber:
          type: number
          description: The unique serial number of the module. For example, 728410.
        hardwareRevisionDate:
          type: string
          description: YYYY-MM-DD format. For example, "2016-3-1".
        loaderProgramNumber:
          type: string
          description: For example, "37672".
        loaderDate:
          type: string
          description: '"YYYY-MM-DD" format. For example, "2016-05-30".'
        loaderTime:
          type: string
          description: '"HH:MM:SS" format. For example, "14:46:03".'
        loaderVersion:
          type: string
          description: '"AM.ma" format. For example, "R1.0g".'
        firmwareProgramNumber:
          type: string
          description: For example, "0".
        firmwareDate:
          type: string
          description: '"YYYY-MM-DD" format. For example, "2016-05-30".'
        firmwareTime:
          type: string
          description: '"HH:MM:SS" format. For example, "14:46:03".'
        firmwareVersion:
          type: string
          description: '"AM.ma" format. For example, "R1.0g".'
    NumericValue:
      required:
      - value
      type: object
      properties:
        value:
          type: number
    PidStatus:
      required:
      - currentCalculation
      - liveValues
      - scanCount
      - statusFlags
      - tuning
      type: object
      properties:
        pidIndex:
          type: number
          description: The index of the PID, between 0 and 96.
          readOnly: true
        currentCalculation:
          required:
          - derivativeContribution
          - error
          - feedForward
          - gainContribution
          - input
          - inputFromHost
          - integral
          - integralContribution
          - output
          - setpoint
          type: object
          properties:
            error:
              type: number
              description: Current value for Error (Input – Setpoint)
            gainContribution:
              type: number
              description: Current value for P (gain) contribution
            integralContribution:
              type: number
              description: Current value for I (integral) contribution
            derivativeContribution:
              type: number
              description: Current value for D (derivative) contribution
            integral:
              type: number
              description: Current value for Integral
            inputFromHost:
              type: number
              description: Current input value when input is provided by a host (application
                or supervisory system).
            input:
              type: number
              description: Input or process variable (PV) value.
            setpoint:
              type: number
              description: Setpoint value.
            feedForward:
              type: number
              description: Current value of feed forward
            output:
              type: number
              description: Current value of Output
        tuning:
          required:
          - d
          - feedForwardGain
          - i
          - p
          type: object
          properties:
            p:
              type: number
              description: P (Gain) value. Should be positive for cooling, negative
                for heating.
            i:
              type: number
              description: I (Integral) value, in units of one per second. Increase
                value to increase contribution.
            d:
              type: number
              description: D (Derivative) value, in seconds. Increase value to increase
                contribution.
            feedForwardGain:
              type: number
              description: Feed forward gain.
        liveValues:
          required:
          - input
          - setpoint
          type: object
          properties:
            input:
              type: number
              description: Current value at the memory map address from which the
                input value is copied.
            setpoint:
              type: number
              description: Current value at the memory map address from which the
                setpoint value is copied.
          description: Live values, useful for graphing.
        manualMode:
          type: boolean
          description: True for Manual; False for Automatic.
        scanCount:
          type: number
          description: Scan counter
        statusFlags:
          type: string
          description: Status flags. 1 = Input is below Input low scale; 2 = Input
            is above Input high scale; 4 = Output has been forced to a predetermined
            level because input is out of range.
      description: ""
    PidStatusWrite:
      type: object
      properties:
        manualMode:
          type: boolean
          description: True for Manual; False for Automatic.
        input:
          type: number
          description: Input or process variable (PV) value.
        setpoint:
          type: number
          description: Setpoint value.
        output:
          type: number
          description: Current value of Output
        p:
          type: number
          description: P (Gain) value. Should be positive for cooling, negative for
            heating.
        i:
          type: number
          description: I (Integral) value, in units of one per second. Increase value
            to increase contribution.
        d:
          type: number
          description: D (Derivative) value, in seconds. Increase value to increase
            contribution.
      description: ""
    PidConfig:
      type: object
      properties:
        pidIndex:
          type: number
          description: The index of the PID, between 0 and 96.
          readOnly: true
        name:
          type: string
          description: The name of the PID. 50 characters maximum.
        maxOutputChange:
          type: number
          description: Maximum output change allowed. Zero disables this feature.
        minOutputChange:
          type: number
          description: Minimum output change allowed. Zero disables this feature.
        inputLowerRange:
          type: number
          description: Input low range.
        inputUpperRange:
          type: number
          description: Input upper range.
        outputLowerClamp:
          type: number
          description: Output lower clamp.
        outputUpperClamp:
          type: number
          description: Output upper clamp.
        scanTimeSec:
          type: number
          description: PID scan time in seconds. Minimum value is 0.001 second (1
            millisecond).
        outputValueWhenInputUnderRange:
          type: number
          description: If Input (PV) is below low range, output is set to this value.
        outputValueWhenInputOverRange:
          type: number
          description: If Input (PV) is above high range, output is set to this value.
        inputMmpAddress:
          type: string
          description: A string of the hexadecimal memory map address from which the
            input value is copied prior to each PID calculation. If this address is
            0, no input value is copied, and the input value must be written directly
            by an application. Use 0 when supervisory system supplies or processes
            this value.
        setpointMmpAddress:
          type: string
          description: A string of the hexadecimal memory map address from which the
            setpoint value is copied prior to each PID calculation. This is typically
            the address of an analog input channel or another PID loop (cascading
            PIDs). If this address is 0, no setpoint value is copied, and the setpoint
            value must be written directly by an application. Use 0 when supervisory
            system supplies or processes this value.
        outputMmpAddress:
          type: string
          description: A string of the hexadecimal memory map address to which the
            output value is written after each PID calculation. If this address is
            0, the output value is not written. Use 0 when supervisory system supplies
            or processes this value.
        algorithm:
          type: number
          description: 0 = PID disabled 1 = Velocity algorithm (Type B; deprecated)
            2 = ISA algorithm (Obsolete) 3 = Parallel algorithm (Obsolete) 4 = Interacting
            algorithm (Obsolete) 5 = Velocity algorithm (Type C; SNAP firmware R8.5e
            and higher) 6 = ISA algorithm (SNAP firmware R9.4c or higher) 7 = Parallel
            algorithm (SNAP firmware R9.4c or higher) 8 = Interaction algorithm (SNAP
            firmware R9.4c or higher)
        manualMode:
          type: boolean
          description: True for Manual; False for Automatic.
        configurationBitmask:
          type: string
          description: Configuration flags (read-only). Returned as a hexadecimal
            string. 1 = Enable square root of Input. 2 = Force output when Input is
            out of range. 4 = Switch to manual mode when input goes out of range.
        feedForward:
          type: number
          description: Feed forward.
        feedForwardGain:
          type: number
          description: Feed forward gain.
        publicAccessAttributes:
          type: object
          properties:
            readable:
              type: boolean
            writable:
              type: boolean
            inputDeadband:
              type: number
            outputDeadband:
              type: number
            setpointDeadband:
              type: number
            scanCountDeadband:
              type: number
      description: ""
    PidConfigs:
      required:
      - pids
      type: object
      properties:
        pids:
          type: array
          items:
            $ref: '#/components/schemas/PidConfig'
      description: ""
    StreamConfig:
      type: object
      properties:
        ioMirroring:
          type: number
          description: Enable or disable I/O mirroring. 0 is disable. non-0 is enable.
        startingDataAddress:
          type: number
          description: Beginning address of the data you want to stream. Leave blank if streaming entire section of data.
        streamDataSize:
          type: number
          description: Size of data to stream in Bytes. Max size is 1480 Bytes. Leave blank if streaming entire section of data.
        streamToggle:
          type: number
          description: Streaming on or off. 0 is off. non-0 is on.
        interval:
          type: number
          description: How often in milliseconds to receive streamed data. Interval 0 means send only when prompted.
        udpPort:
          type: number
          description: UDP port number to stream to.
        streamAddressTarget0:
          type: string
          description: Stream target IP address 0.
        streamAddressTarget1:
          type: string
          description: Stream target IP address 1.
        streamAddressTarget2:
          type: string
          description: Stream target IP address 2.
        streamAddressTarget3:
          type: string
          description: Stream target IP address 3.
        streamAddressTarget4:
          type: string
          description: Stream target IP address 4.
        streamAddressTarget5:
          type: string
          description: Stream target IP address 5.
        streamAddressTarget6:
          type: string
          description: Stream target IP address 6.
        streamAddressTarget7:
          type: string
          description: Stream target IP address 7.
      description: ""
    RequestError:
      required:
      - error
      type: object
      properties:
        error:
          $ref: '#/components/schemas/RequestErrorDetail'
    RequestErrorDetail:
      required:
      - message
      type: object
      properties:
        message:
          type: string
          description: A human-readable message describing the error. The message
            is not fixed and might change without notice.
    ResponseError:
      required:
      - error
      type: object
      properties:
        error:
          $ref: '#/components/schemas/ResponseErrorDetail'
    ResponseErrorDetail:
      required:
      - code
      - message
      type: object
      properties:
        code:
          type: number
          description: "The unique error code for this error. \n\n- 1: General Error\n\
            - 2: Validation\n- 3: Timeout\n- 4: Not Connected to service or device.\n\
            - 5: Operation Busy. Only one instance of the operation may be running\
            \ at a time.\n- 6: MMP Error. See \"subCode\" field for additional error\
            \ code.\n"
        subCode:
          type: number
          description: |
            An additional error code for this error.

            __MMP Errors (_code_ is 6):__
            - 5: TransactionLabelMismatch
            - 57345 (0xE001): Undefined Command
            - 57346 (0xE002): Invalid Point Type
            - 57349 (0xE005): Invalid memory address or invalid data for the memory address.
        message:
          type: string
          description: A human-readable message describing the error. The message
            is not fixed and might change without notice.
    ScannerTimes:
     required:
     - acomMsPerScan
     - vcomMsPerScan
     type: object
     properties:
      acomMsPerScan:
       type: number
       description: Analog and Smart Digital Milliseconds per analog/HDD scan. Value of -1 means scanner is not running.
      vcomMsPerScan:
       type: number
       description: Module Scanner Milliseconds per analog/HDD scan. Value of -1 means scanner is not running.
    PortForwardRule:
      required:
      - title
      - protocol
      - externalPort
      - externalInterface
      - redirectAddress
      - redirectPort
      - redirectInterface
      type: object
      properties:
        title:
          type: string
          description: The rule title (not parsed).
        protocol:
          $ref: '#/components/schemas/ProtocolType'
          description: The protocol(s) forwarded.
        externalPort:
          type: number
          description: The port from which traffic arriving on the external
            interface is forwarded.
        externalInterface:
          $ref: '#/components/schemas/PortForwardInterfaceType'
          description: The network interface from which traffic is forwarded.
        redirectAddress:
          type: string
          description: The IP address to which traffic is forwarded.
        redirectPort:
          type: number
          description: The port to which traffic is forwarded.
        redirectInterface:
          $ref: '#/components/schemas/PortForwardInterfaceType'
          description: The network interface to which traffic is forwarded.
        source:
          type: string
          description: The source IP address or subnet for which the forward is appicable.
    PortForwardRuleArray:
      type: array
      items:
        $ref: '#/components/schemas/PortForwardRule'
    PortForwardInterfaceType:
      type: string
      enum:
      - eth0
      - eth1
      - wlan0
      - tun0
    ProtocolType:
      type: string
      enum:
      - tcp
      - udp
      - both
    UsbDrive:
      required:
      - drive
      type: object
      properties:
        drive:
          type: string
          description: The full path of the drive device to unmount, such as "/dev/sdb".
    ValidationError:
      required:
      - error
      type: object
      properties:
        error:
          $ref: '#/components/schemas/ValidationErrorDetail'
    ValidationErrorDetail:
      required:
      - code
      - fields
      - message
      type: object
      properties:
        code:
          type: number
          description: The unique error code for this error. For validation errors,
            the error code is 2.
        message:
          type: string
          description: A human-readable message describing the error. The message
            is not fixed and might change without notice.
        fields:
          type: array
          description: List of fields that did not validate.
          items:
            type: string
  responses:
    ServerErrorResponse:
      description: An error occured in the server, another service, or a remote device.
      content:
        'application/json':
          schema:
            $ref: '#/components/schemas/ResponseError'
    ValidationErrorResponse:
      description: Validation error. The request was well-formed, but one or more
        values were invalid.
      content:
        'application/json':
          schema:
            $ref: '#/components/schemas/ValidationError'
  parameters:
    deviceParam:
      name: device
      in: path
      description: The name of the device. Use "local" for the built-in rack of I/O.
      required: true
      schema:
        type: string
    moduleIndexParam:
      name: moduleIndex
      in: path
      description: The index of the module, between 0 and 15.
      required: true
      schema:
        type: number
    channelIndexParam:
      name: channelIndex
      in: path
      description: The index of the channel, between 0 and one less than the number
        of channels on the current module.
      required: true
      schema:
        type: number
    pidIndexParam:
      name: pidIndex
      in: path
      description: The index of the PID loop, between 0 and 96.
      required: true
      schema:
        type: number
  securitySchemes:
    apiKey:
      type: apiKey
      name: apiKey
      in: header
