blob: 76500178ee6725685a9dd7842250be391ebfafde [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="/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.<br>Things need to move faster, be more flexible, and fulfill higher quality standards forcing manufacturers to optimize<br>their processes.
</p>
<p>
Production facilities and their performance have a huge impact on the overall performance of manufacturing processes.<br>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<br>it is not provided in a common and easily accessible format, which can be used to do performance analysis and<br>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<br>to do performance analysis of production facilities. It allows monitoring backends to collect and evaluate key metrics<br>of machines in the context of a production process. It is doing that by allowing to relate the machine status with<br>currently produced parts.
</p>
<p>
The specification is structured into two payload formats: Measurement payload and message payload. The Measurement<br>payload contains measurements from machines such as the temperature of a machine at a specific point in time together<br>with the currently produced part. The message payload contains arbitrary messages sent by a machine, e.g. alerts or<br>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<br>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.<br>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<br>payloads.
</p>
<p>
The communication is unidirectional. Only the sender can contact the receiver and send messages. No feedback from<br>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="#Measurement-Payload" title="Measurement Payload"></a>
Machine Measurement 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>