blob: 22f69db8140277844d46114434f31e82b28273c1 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PPMP Specification | Unide</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="icon" href="/unide/images/icon.ico">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" integrity="sha384-XdYbMnZ/QjLh6iI4ogqCTaIjrFk87ip+ekIjefZch0Y+PvJ8CDYtEs1ipDmPorQ+" crossorigin="anonymous">
<link rel="stylesheet" href="/unide/css/styles.css">
</head>
<body>
<nav class="navbar navbar-inverse">
<div class="container">
<div class="navbar-brand navbar-right">
<a href="/unide/"><img src='/unide/images/logo.png'></img></a>
</div>
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#main-menu-navbar" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div class="collapse navbar-collapse" id="main-menu-navbar">
<ul class="nav navbar-nav">
<li><a class=""
href="/unide/index.html">Home</a></li>
<li><a class=""
href="/unide/proposal">Proposal</a></li>
<li><a class="active"
href="/unide/specification">Specification</a></li>
<li><a class=""
href="/unide/archives">Blog Archives</a></li>
<li><a class=""
href="/unide/faq">FAQ</a></li>
</ul>
</div>
</div>
</nav>
<div class="container">
<div class="row">
<div class="col-sm-12 content-main specification_index">
<h1>
PPMP Specification
</h1>
<h1 id="Rationale">
<a href="#Rationale" class="headerlink" title="Rationale"></a>
Rationale
</h1>
<p>
Noticeably in recent years, there’s a continuous increase in demand, price pressure and complexity in manufacturing. Things need to move faster, be more flexible, and fulfill higher quality standards forcing manufacturers to optimize their processes.
</p>
<p>
Production facilities and their performance have a huge impact on the overall performance of manufacturing processes. However, to identify bottlenecks and possibilities for improvements detailed data from machines are required.
</p>
<p>
Such data is surely provided by machines either via modern protocols such as OPC UA or via proprietary access methods but it is not provided in a common and easily accessible format, which can be used to do performance analysis and optimization. This renders holistic process improvement efforts infeasible for many, especially smaller organizations.
</p>
<p>
The Production Performance Management Protocol (PPMP) specifies a format that allows to capture data that is required to do performance analysis of production facilities. It allows monitoring backends to collect and evaluate key metrics of machines in the context of a production process. It is doing that by allowing to relate the machine status with currently produced parts.
</p>
<p>
The specification is structured into two payload formats: Measurement payload and message payload. The Measurement payload contains measurements from machines such as the temperature of a machine at a specific point in time together with the currently produced part. The message payload contains arbitrary messages sent by a machine, e.g. alerts or the like.
</p>
<p>
The payload is meant to be transported via http as a json object. This allows for an easy integration into various backend systems.
</p>
<h1 id="Communicating-Parties">
<a href="#Communicating-Parties" class="headerlink" title="Communicating Parties"></a>
Communicating Parties
</h1>
<p>
Two parties are involved in a PPMP message exchange: the sender and the receiver. The sender pushes a message to the receiver. Usually the sender is a machine or a sensor of a machine.
</p>
<p>
The receiver waits for messages. It offers a API that allows for sending either measurement payloads or message payloads.
</p>
<p>
The communication is unidirectional. Only the sender can contact the receiver and send messages. No feedback from receiver to sender is provided.
</p>
<img src="images/collaborators.png" alt="Overview PPMP" title="Overview PPMP" class="center-block img-responsive">
<h1>
<a name="#Measurement-Payload" title="Measurement Payload"></a>
Measurement Payload
</h1>
<p>The measurement message is the format to exchange simple (non-structured, non-complex ) measurement data. It also allows to transport multiple measurement data (eg. values over time), called 'series'.</p>
<img src="images/measurementPayload.png" alt="Class diagram of the measurement payload" title="Class diagram of the measurement payload" class="center-block img-responsive">
<div class="panel panel-default">
<div class="panel-heading">Structure of payload</div>
<div class="panel-body">
<ul class="toc">
<li><a href="#content_spec">content-spec</a></li>
<li><a href="#device">device</a>
<ul>
<li><a href="#deviceID">deviceID</a></li>
<li><a href="#operationalStatus">operationalStatus</a></li>
<li><a href="#metaData">metaData</a></li>
</ul>
</li>
<li><a href="#part">part</a>
<ul>
<li><a href="#partTypeID">partTypeID</a></li>
<li><a href="#partID">partID</a></li>
<li><a href="#result">result</a></li>
<li><a href="#code">code</a></li>
<li><a href="#metaData">metaData</a></li>
</ul>
</li>
<li><a href="#measurements">measurements</a>
<ul>
<li><a href="#ts">ts</a></li>
<li><a href="#result">result</a></li>
<li><a href="#code">code</a></li>
<li><a href="#series">series</a>
<ul>
<li><a href="#__time">$_time</a></li>
</ul>
</li>
<li><a href="#limits">limits</a>
<ul>
<li><a href="#upperError">upperError</a></li>
<li><a href="#lowerError">lowerError</a></li>
<li><a href="#upperWarn">upperWarn</a></li>
<li><a href="#lowerWarn">lowerWarn</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<h3>
<a name="measurement-example" title="Measurement Example"></a>
measurement example
</h3>
<pre>
{
"content-spec": "urn:spec://eclipse.org/unide/measurement-message#v2",
"device": {
"deviceID": "a4927dad-58d4-4580-b460-79cefd56775b"
},
"measurements": [{
"ts": "2002-05-30T09:30:10.123+02:00",
"series": {
"$_time" : [ 0, 23, 24 ],
"temperature" : [ 45.4231, 46.4222, 44.2432]
}
}, {
"ts": "2002-05-30T09:30:10.123+02:00",
"series": {
"$_time" : [ 0, 13, 26 ],
"pressure" : [ 52.4, 46.32, 44.2432 ]
}
}]
}
</pre>
<h1>
<a name="#Message-Payload" title="Machine Message Payload"></a>
Machine Message Payload
</h1>
<p>The main purpose of the machine message format is to allow devices and integrators to send messages containing an interpretation of measurement data or status.</p>
<img src="images/messagePayload.png" alt="Class diagram of the message payload" title="Class diagram of the message payload" class="center-block img-responsive">
<div class="panel panel-default">
<div class="panel-heading">Structure of payload</div>
<div class="panel-body">
<ul class="toc">
<li><a href="#content_spec">content-spec</a></li>
<li><a href="#device">device</a>
<ul>
<li><a href="#deviceID">deviceID</a></li>
<li><a href="#operationalStatus">operationalStatus</a></li>
<li><a href="#metaData">metaData</a></li>
</ul>
</li>
<li><a href="#messages">messages</a>
<ul>
<li><a href="#ts">ts</a></li>
<li><a href="#origin">origin</a></li>
<li><a href="#type">type</a></li>
<li><a href="#severity">severity</a></li>
<li><a href="#code_msg">code</a></li>
<li><a href="#title">title</a></li>
<li><a href="#description">description</a></li>
<li><a href="#hint">hint</a></li>
<li><a href="#metaData">metaData</a></li>
</ul>
</li>
</ul>
</div>
</div>
<h3>
<a name="minimal-message-example" title="Minimal Message Example"></a>
minimal message example
</h3>
<pre>
{
"content-spec":"urn:spec://eclipse.org/unide/machine-message#v2",
"device": {
"deviceID": "2ca5158b-8350-4592-bff9-755194497d4e"
},
"messages": [{
"ts": "2002-05-30T09:30:10.123+02:00",
"code": "190ABT"
}]
}
</pre>
<h3>
<a name="multiple-messages-example" title="Multiple Messages Example"></a>
multiple messages example
</h3>
<pre>
{
"content-spec":"urn:spec://eclipse.org/unide/machine-message#v2",
"device": {
"deviceID": "2ca5158b-8350-4592-bff9-755194497d4e",
"operationalStatus": "normal",
"metaData":{
"swVersion": "2.0.3.13",
"swBuildID": "41535"
}
},
"messages": [{
"origin": "sensor-id-992.2393.22",
"ts": "2002-05-30T09:30:10.123+02:00",
"type": "DEVICE",
"severity": "HIGH",
"code": "190ABT",
"title": "control board damaged",
"description": "Electronic control board or its electrical connections are damaged",
"hint": "Check the control board",
"metaData": {
"firmware": "20130304_22.020"
}
}, {
"ts": "2002-05-30T09:30:10.125+02:00",
"type": "TECHNICAL_INFO",
"severity": "HIGH",
"code": "33-02",
"title": "Disk size limit reached",
"description": "Disk size has reached limit. Unable to write log files."
}]
}
</pre>
<h1>
<a name="#fields-definition" title="Fields definition"></a>
Fields definition
</h1>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="content_spec" title="content-spec"></a>
content-spec
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>Defines the format version</td>
</tr>
<tr>
<th>Possible values:</th>
<td>
<ul>
<li>"urn:spec://eclipse.org/unide/machine-message#v2"</li>
<li>"urn:spec://eclipse.org/unide/measurement-message#v2"</li>
</ul>
</td>
</tr>
<tr>
<th>Required:</th>
<td>no</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td>enum indicating the type of this payload.</td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"content-spec": "urn:spec://eclipse.org/unide/measurement-message#v2"
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="device" title="device"></a>
device
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>Contains information about the device</td>
</tr>
<tr>
<th>Required:</th>
<td>yes</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td></td>
</tr>
<tr>
<th>Sub Fields:</th>
<td>
<ul>
<li>
<a href="#deviceID" title="go to deviceID">deviceID</a>
</li>
<li>
<a href="#operationalStatus" title="go to operationalStatus">operationalStatus</a>
</li>
<li>
<a href="#metaData" title="go to metaData">metaData</a>
</li>
</ul>
</td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
device: {
"deviceID": "0815"
}
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="deviceID" title="deviceID"></a>
deviceID
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>The unique ID of the device. As this is used to identify a device independently from time or location. The ID itself must be stable and unique. The recommendation is to use a universally unique identifier (UUID).</td>
</tr>
<tr>
<th>Required:</th>
<td>true</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td>reprentation could follow <a href="http://www.gs1.org/global-individual-asset-identifier-giai" title="GIAI" target="_blank" rel="external">GIAI</a>, <a href="https://en.wikipedia.org/wiki/Universally_unique_identifier" title="UUID" target="_blank" rel="external">UUID</a> or others</td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"deviceID": "6e7807d0-5491-11e6-9d32-02423234b390"
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="operationalStatus" title="operationalStatus"></a>
operationalStatus
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>The operationalStatus describes the status of a device. It is a string matching a definition in the Production Performance Manager.</td>
</tr>
<tr>
<th>Required:</th>
<td>no</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td></td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"operationStatus": "MM" //Maintenance Mode
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="metaData" title="metaData"></a>
metaData
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>Additional key-value pairs in a JSON structure format. Key and value must be strings.</td>
</tr>
<tr>
<th>Required:</th>
<td>no</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td>subfields can be any key/string value pair</td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"metaData": {
"swVersion": "2.0.3.13", //software (firmware) version
"swBuildID": "41535" //software (firmware) build identifier/number
}
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="part" title="part"></a>
part
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>Contains information regarding the part which this payload relates to</td>
</tr>
<tr>
<th>Required:</th>
<td>no</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td></td>
</tr>
<tr>
<th>Sub Fields:</th>
<td>
<ul>
<li>
<a href="#partTypeID" title="go to partTypeID">partTypeID</a>
</li>
<li>
<a href="#partID" title="go to partID">partID</a>
</li>
<li>
<a href="#result" title="go to result">result</a>
</li>
<li>
<a href="#code" title="go to code">code</a>
</li>
<li>
<a href="#metaData" title="go to metaData">metaData</a>
</li>
</ul>
</td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"part": {
"partTypeID": "F00VH07328",
"partID": "420003844",
"result": "OK",
"code": "HUH289",
"metaData": {
"lotID" : "845849",
"toolID" : "32324-432143"
}
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="partTypeID" title="partTypeID"></a>
partTypeID
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>Identifies the type of the part</td>
</tr>
<tr>
<th>Required:</th>
<td>no</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td></td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"partTypeID": "F00VH07328"
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="partID" title="partID"></a>
partID
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>Identifies a part. This ID comes from a 3rd party system and thus we have no guarantees if this is unique or not.</td>
</tr>
<tr>
<th>Required:</th>
<td>no</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>256</td>
</tr>
<tr>
<th>Note:</th>
<td></td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"partID": "420003844"
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="result" title="result"></a>
result
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>Information if the quality of the produced part was ok or not</td>
</tr>
<tr>
<th>Possible values:</th>
<td>
<ul>
<li>"UNKNOWN"</li>
<li>"OK"</li>
<li>"NOK"</li>
</ul>
</td>
</tr>
<tr>
<th>Required:</th>
<td>no</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td>Default value is "UNKNOWN"</td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"result": "OK"
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="code" title="code"></a>
code
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>The code is an addendum to the result which allows to pass information in the case the result was NOK.</td>
</tr>
<tr>
<th>Required:</th>
<td>no</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>36</td>
</tr>
<tr>
<th>Note:</th>
<td>The value often stems from the integrated system e.g. a PLC code</td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"code": "HUH289"
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="measurements" title="measurements"></a>
measurements
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>A list of sensor readings</td>
</tr>
<tr>
<th>Required:</th>
<td>yes</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td>if sensor readings have the same timestamp/-offsets, they can be combined in one measurement block. Otherwise they are added to the measurements list as individual block.</td>
</tr>
<tr>
<th>Sub Fields:</th>
<td>
<ul>
<li>
<a href="#ts" title="go to ts">ts</a>
</li>
<li>
<a href="#result" title="go to result">result</a>
</li>
<li>
<a href="#code" title="go to code">code</a>
</li>
<li>
<a href="#limits" title="go to limits">limits</a>
</li>
<li>
<a href="#series" title="go to series">series</a>
</li>
</ul>
</td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"measurements": [{
"ts": "2002-05-30T09:30:10.123+02:00",
"series": {
"$_time" : [ 0, 23, 24 ],
"temperature" : [ 45.4231, 46.4222, 44.2432]
}
}]
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="ts" title="ts"></a>
ts
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>Start time of the the data measurment in <a href="http://www.w3.org/TR/NOTE-datetime" title="ISO 8601" target="_blank" rel="external">ISO 8601 format</a></td>
</tr>
<tr>
<th>Required:</th>
<td>yes</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td>http://www.w3.org/TR/NOTE-datetime</td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"ts": "2002-05-30T09:30:10.123+02:00"
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="limits" title="limits"></a>
limits
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>Provides information about limits for data provided in the series element. The limits is an JSON object where the key is the name of a Measurement Point (see also series element) and the value is a structure of different upper/lower limits.</td>
</tr>
<tr>
<th>Required:</th>
<td>no</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td>each subfield key corresponds to one measurement point and holds an object with the error/warning levels.</td>
</tr>
<tr>
<th>Sub Fields:</th>
<td>
<ul>
<li>
<a href="#upperError" title="go to upperError">upperError</a>
</li>
<li>
<a href="#lowerError" title="go to lowerError">lowerError</a>
</li>
<li>
<a href="#upperWarn" title="go to upperWarn">upperWarn</a>
</li>
<li>
<a href="#lowerWarn" title="go to lowerWarn">lowerWarn</a>
</li>
</ul>
</td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"limits": {
"temperature": {
"upperError": 4444,
"lowerError": 44,
"upperWarn": 2222,
"lowerWarn": 46
}
}
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="upperError" title="upperError"></a>
upperError
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>Indicates the upper error threshold, given by the device/integrator</td>
</tr>
<tr>
<th>Required:</th>
<td>no</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td></td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"upperError": 4444
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="lowerError" title="lowerError"></a>
lowerError
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>Indicates the lower error threshold, given by the device/integrator</td>
</tr>
<tr>
<th>Required:</th>
<td>no</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td></td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"lowerError": 44
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="upperWarn" title="upperWarn"></a>
upperWarn
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>Indicates the upper warning threshold, given by the device/integrator</td>
</tr>
<tr>
<th>Required:</th>
<td>no</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td></td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"upperWarn": 2222
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="lowerWarn" title="lowerWarn"></a>
lowerWarn
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>Indicates the lower warning threshold, given by the device/integrator</td>
</tr>
<tr>
<th>Required:</th>
<td>no</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td></td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"lowerWarn": 46
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="series" title="series"></a>
series
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>The series data collected for the measurements. Every subfield key matches a measurement point of the device type. Every subfield value is an array. All arrays are of equal length and an entry at a given index corresponds to another arrays value at this index</td>
</tr>
<tr>
<th>Required:</th>
<td>yes</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td>In the case of a time series, one column contains the time offset (positive values in ascending order starting with 0). In this case the key is <i>$_time`</i>.</td>
</tr>
<tr>
<th>Sub Fields:</th>
<td>
<ul>
<li>
<a href="#__time" title="go to $_time">$_time</a>
</li>
</ul>
</td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"ts": "2015-07-23T16:04:10.223+02:00",
"series": {
"$_time": [0, 22, 24, 27],
"temperature": [33, 34, 33, 32],
"pressure": [1, 1.001. 2.52. 3.2]
}
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="__time" title="$_time"></a>
$_time
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>An array of time offsets in miliseconds from the <href="#ts">ts field of this series</href="#ts"></td>
</tr>
<tr>
<th>Required:</th>
<td>no</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td>the offsets are of unsigned long integer values</td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"$_time": [0, 22, 24, 27]
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="messages" title="messages"></a>
messages
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>A list of machine messages</td>
</tr>
<tr>
<th>Required:</th>
<td>yes</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td></td>
</tr>
<tr>
<th>Sub Fields:</th>
<td>
<ul>
<li>
<a href="#ts" title="go to ts">ts</a>
</li>
<li>
<a href="#origin" title="go to origin">origin</a>
</li>
<li>
<a href="#type" title="go to type">type</a>
</li>
<li>
<a href="#severity" title="go to severity">severity</a>
</li>
<li>
<a href="#code" title="go to code">code</a>
</li>
<li>
<a href="#title" title="go to title">title</a>
</li>
<li>
<a href="#description" title="go to description">description</a>
</li>
<li>
<a href="#hint" title="go to hint">hint</a>
</li>
<li>
<a href="#metaData" title="go to metaData">metaData</a>
</li>
</ul>
</td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"messages": [{
"ts": "2002-05-30T09:30:10.123+02:00",
"code": "190ABT"
}]
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="origin" title="origin"></a>
origin
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>The origin of the message if not the device identified by deviceID in the header element.</td>
</tr>
<tr>
<th>Required:</th>
<td>Could be used to identify a subsystem or a particular sensor/part of the device where the <br> message actually relates to.</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td></td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"origin": "sensor-id-992.2393.22"
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="type" title="type"></a>
type
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>The type of message. Default is DEVICE but can be set to TECHNICAL_INFO indicating a problem with the integration of the actual device.</td>
</tr>
<tr>
<th>Possible values:</th>
<td>
<ul>
<li>"DEVICE"</li>
<li>"TECHNICAL_INFO"</li>
</ul>
</td>
</tr>
<tr>
<th>Required:</th>
<td>no</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td></td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"type": "DEVICE"
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="severity" title="severity"></a>
severity
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>Severity of the message.</td>
</tr>
<tr>
<th>Possible values:</th>
<td>
<ul>
<li>"HIGH"</li>
<li>"MEDIUM"</li>
<li>"LOW"</li>
<li>"UNKNOWN"</li>
</ul>
</td>
</tr>
<tr>
<th>Required:</th>
<td>no</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>no</td>
</tr>
<tr>
<th>Note:</th>
<td>Default is "UNKNOWN"</td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"severity": "HIGH"
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="code_msg" title="code"></a>
code
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>Code identifying the problem described in the message.</td>
</tr>
<tr>
<th>Required:</th>
<td>yes</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>36</td>
</tr>
<tr>
<th>Note:</th>
<td>The value often stems from the machine e.g. a PLC code. Is similar to <a href="#code" title="go to measurement code">code</a> in measurement interface.</td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"code": "190ABT"
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="title" title="title"></a>
title
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>The title of the message</td>
</tr>
<tr>
<th>Required:</th>
<td>no</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>1000</td>
</tr>
<tr>
<th>Note:</th>
<td></td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"title": "control board damaged"
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="description" title="description"></a>
description
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>The description is used to describe the purpose of the message, e.g. the problem</td>
</tr>
<tr>
<th>Required:</th>
<td>no</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>2000</td>
</tr>
<tr>
<th>Note:</th>
<td></td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"description": "Electronic control board or its electrical connections are damaged"
...</pre>
</td>
</tr>
</table>
</div>
<h4>
</h4>
<div class="panel panel-default field-definition table-responsive">
<div class="panel-heading">
<a name="hint" title="hint"></a>
hint
<a href="#" title="go up">
<span class="glyphicon glyphicon-chevron-up pull-right" aria-hidden="true">&nbsp;</span>
</a>
</div>
<table class="table">
<tr>
<th>Definition:</th>
<td>In case a problem is reported, the hint can be used to point out a possible solution.</td>
</tr>
<tr>
<th>Required:</th>
<td>no</td>
</tr>
<tr>
<th>Size restriction:</th>
<td>2000</td>
</tr>
<tr>
<th>Note:</th>
<td></td>
</tr>
<tr>
<th>Example:</th>
<td>
<pre>...
"hint": "Check the control board"
...</pre>
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
<footer class="blog-footer">
<div class="container">
<div id="footer-info" class="inner">
<ul>
<li>
<a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a>
</li>
<li>
<a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a>
</li>
<li>
<a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a>
</li>
<li>
<a href="http://www.eclipse.org/legal/">Legal</a>
</li>
</ul>
</div>
</div>
</footer>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js" integrity="sha384-8gBf6Y4YYq7Jx97PIqmTwLPin4hxIzQw5aDmUg/DDhul9fFpbbLcLh3nTIIDJKhx" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
</body>
</html>