Skip to content

Device discovery

Industrial Asset Hub discovers the indirectly managed devices connected through the Asset Gateway. The user can trigger asset discovery on the selected Asset Gateway.

Asset Gateway

The Asset Gateway offers a gRPC (google protocol-buffer) interface to connect Asset links to it. This can be done distributed over box boundaries (indirectly managed) or fully integrate with the native managed device.

Asset Gateway polls for gateway specific discovery jobs. Asset links has to implement the Device discovery API in order to discover the connected indirectly managed devices in the network. Asset Gateway delegates the discovery request to the right Asset link through Device discovery API.

The agents are provided as docker containers.

Example Asset

API Description

Protobuf Specification

DeviceDiscoverApi

GetFilterTypes

rpc GetFilterTypes(.siemens.common.filters.v1.FilterTypesRequest) .siemens.common.filters.v1.FilterTypesResponse

Get the list of supported Filter Types

GetFilterOptions

rpc GetFilterOptions(.siemens.common.filters.v1.FilterOptionsRequest) .siemens.common.filters.v1.FilterOptionsResponse

Get the list of supported Filter Options

DiscoverDevices

rpc DiscoverDevices(DiscoverRequest) DiscoverResponse

Start a device discovery with given filters and options. Returns the discovered devices.

Messages

DiscoverError {#discovererror}

Field Type Description
result_code int32 The error code, which should be an enum value of siemens.common.code.v1
description string Developer-facing human-readable message in English
oneof source.target siemens.common.address.v1.Destination none
oneof source.device siemens.common.address.v1.Destination none

DiscoverRequest {#discoverrequest}

Field Type Description
filters repeated siemens.common.filters.v1.ActiveFilter optional: Filters which are used to filter the discover result, e.g. a special device type values of identical keys are logically "OR" combined values of different keys are logically "AND" combined
options repeated siemens.common.filters.v1.ActiveOption optional: Options which are used to perform the discover, e.g. timeout, hircharchie level, ... values of identical keys are logically "OR" combined values of different keys are logically "AND" combined
target repeated siemens.common.address.v1.Destination optional: Specify the target where the discovery should be performed A target can be a physical device, which is acting as a gateway or a underlying subdriver If it's not specified, the whole system is scanned

DiscoverResponse {#discoverresponse}

Field Type Description
devices repeated DiscoveredDevice Holds information on one or more discovered devices
errors repeated DiscoverError Holds information on one or more discovered devices

DiscoveredDevice {#discovereddevice}

Field Type Description
identifiers repeated siemens.common.identifiers.v1.DeviceIdentifier List of default device identifiers of a device supported by the protocol
connection_parameter_set siemens.common.address.v1.ConnectionParameterSet The whole connection parameters, to establish the communciation with the discovered device, including the schema and subdriver configuration
timestamp fixed64 Timestamp when device was last seen 64 bit unsigned integer which represents the number of 100 nano-second [0.1 microsec] intervals since January 1, 1601 (UTC).

Enums

Scalar Value Types

.proto Type Notes C++ Type Java Type Python Type

double
double double float

float
float float float

int32
Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. int32 int int

int64
Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. int64 long int/long

uint32
Uses variable-length encoding. uint32 int int/long

uint64
Uses variable-length encoding. uint64 long int/long

sint32
Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. int32 int int

sint64
Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. int64 long int/long

fixed32
Always four bytes. More efficient than uint32 if values are often greater than 2^28. uint32 int int

fixed64
Always eight bytes. More efficient than uint64 if values are often greater than 2^56. uint64 long int/long

sfixed32
Always four bytes. int32 int int

sfixed64
Always eight bytes. int64 long int/long

bool
bool boolean boolean

string
A string must always contain UTF-8 encoded or 7-bit ASCII text. string String str/unicode

bytes
May contain any arbitrary sequence of bytes. string ByteString str

Any questions left?

Ask the community