Add documentation for feature Multi-Assignment (#840)
Signed-off-by: Jeroen Laverman <jeroen.laverman@bosch-si.com>
This commit is contained in:
@@ -33,269 +33,516 @@ The following chapter describes the message body, header and properties.
|
|||||||
|
|
||||||
Note: the DMF protocol was intended to be compatible to other use cases by design. As a result, DMF uses the term **thing** and not **target** but they are actually synonyms in this case.
|
Note: the DMF protocol was intended to be compatible to other use cases by design. As a result, DMF uses the term **thing** and not **target** but they are actually synonyms in this case.
|
||||||
|
|
||||||
## Messages sent to hawkBit
|
## Messages sent to hawkBit (Client -> hawkBit)
|
||||||
|
|
||||||
All messages have to be sent to the exchange **dmf.exchange**.
|
|
||||||
|
|
||||||
### Message to register a thing
|
### THING_CREATED
|
||||||
|
|
||||||
| Message Header | Description | Type | Mandatory |
|
Message to register and update a provisioning target.
|
||||||
| -------------- | -------------------------------- | ----------------------------- | --------- |
|
|
||||||
| type | Type of the message | Fixed string "THING_CREATED " | true |
|
|
||||||
| thingId | The ID of the registered thing | String | true |
|
|
||||||
| tenant | The tenant this thing belongs to | String | true |
|
|
||||||
|
|
||||||
| Message Properties | Description | Type | Mandatory |
|
Header | Description | Type | Mandatory
|
||||||
| ------------------ | --------------------- | ------ | --------- |
|
-------------- | ------------------------------------------------ | ---------------------------- | -------------------------------------------------------------
|
||||||
| reply_to | Exchange to reply to. | String | true |
|
type | Type of the message | Fixed string "THING_CREATED" | true
|
||||||
|
thingId | The ID of the registered provisioning target | String | true
|
||||||
|
sender | Name of the message sender | String | false
|
||||||
|
tenant | The tenant this provisioning target belongs to | String | false
|
||||||
|
|
||||||
**Example Header**
|
Message Properties | Description | Type | Mandatory
|
||||||
|
------------------ | ---------------------------------------------------------------------------------------------------- | ------ | -------------------------------------------------------------
|
||||||
|
content_type | The content type of the payload | String | true
|
||||||
|
reply_to | Exchange to reply to. The default is sp.direct.exchange which is bound to the sp_direct_queue | String | false
|
||||||
|
|
||||||
| Headers | MessageProperties |
|
Example headers
|
||||||
| ------------------------------------------------------------- | -------------------------- |
|
|
||||||
| type=THING_CREATED <br /> tenant=tenant123 <br /> thingId=abc | reply_to=dmfclient.replyTo |
|
|
||||||
|
|
||||||
### Message to update target attributes
|
Header | MessageProperties
|
||||||
|
----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------
|
||||||
|
type=THING\_CREATED <br /> tenant=tenant123 <br /> thingId=abc <br /> sender=Lwm2m | content\_type=application/json <br /> reply_to (optional) =sp.connector.replyTo
|
||||||
|
|
||||||
| Message Header | Description | Type | Mandatory |
|
### UPDATE_ATTRIBUTES
|
||||||
| -------------- | -------------------------------- | -------------------------------- | --------- |
|
|
||||||
| type | Type of the message | Fixed string "EVENT" | true |
|
|
||||||
| topic | Topic to handle events different | Fixed string "UPDATE_ATTRIBUTES" | true |
|
|
||||||
| thingId | The ID of the registered thing | String | true |
|
|
||||||
| tenant | The tenant this thing belongs to | String | true |
|
|
||||||
|
|
||||||
| Message Properties | Description | Type | Mandatory |
|
Message to update target attributes. This message can be send in response to a _REQUEST_ATTRIBUTES_UPDATE_ event, sent by hawkBit.
|
||||||
| ------------------ | ------------------------------- | ------ | --------- |
|
|
||||||
| content_type | The content type of the payload | String | true |
|
|
||||||
|
|
||||||
**Example Header and Payload**
|
| Header | Description | Type | Mandatory
|
||||||
|
|-----------------------------|----------------------------------|-------------------------------------|----------------
|
||||||
|
| type | Type of the message | Fixed string "EVENT" | true
|
||||||
|
| topic | Topic name identifying the event | Fixed string "UPDATE_ATTRIBUTES" | true
|
||||||
|
| thingId | The ID of the registered thing | String | true
|
||||||
|
| tenant | The tenant this thing belongs to | String | false
|
||||||
|
|
||||||
| Headers | MessageProperties |
|
|
||||||
| ------------------------------------------------------------------------------------ | ----------------------------- |
|
|
||||||
| type=EVENT <br /> tenant=tenant123 <br /> thingId=abc <br /> topic=UPDATE_ATTRIBUTES | content_type=application/json |
|
|
||||||
|
|
||||||
Payload Template
|
| Message Properties | Description | Type | Mandatory |
|
||||||
|
|-----------------------------|----------------------------------|--------|-----------|
|
||||||
|
| content_type | The content type of the payload | String | true |
|
||||||
|
|
||||||
|
Example header and payload:
|
||||||
|
|
||||||
|
| Header | MessageProperties |
|
||||||
|
|---------------------------------------|---------------------------------|
|
||||||
|
| type=EVENT <br /> tenant=tenant123 <br /> thingId=abc <br /> topic=UPDATE\_ATTRIBUTES | content\_type=application/json <br />
|
||||||
|
|
||||||
|
Payload Template:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"exampleKey1": "exampleValue1",
|
"exampleKey1" : "exampleValue1",
|
||||||
"exampleKey2": "exampleValue2"
|
"exampleKey2" : "exampleValue2"
|
||||||
}
|
},
|
||||||
|
"mode": "String"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Message to send an action status event to hawkBit
|
The "mode" property specifies the update mode that should be applied. This property is optional. Possible [mode](https://github.com/eclipse/hawkbit/tree/master/hawkbit-dmf/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DmfUpdateMode.java) values:
|
||||||
|
|
||||||
The Java representation is ActionUpdateStatus:
|
Value | Description
|
||||||
|
--------------- | ---------------------------------------
|
||||||
|
MERGE | The target attributes specified in the payload are merged into the existing attributes. This is the default mode that is applied if no "mode" property is specified in the payload.
|
||||||
|
REPLACE | The existing attributes are replaced with the target attributes specified in the payload.
|
||||||
|
REMOVE | The target attributes specified in the payload are removed from the existing attributes.
|
||||||
|
|
||||||
| Header | Description | Type | Mandatory |
|
|
||||||
| ------ | -------------------------------- | ----------------------------------- | --------- |
|
|
||||||
| type | Type of the message | Fixed string "EVENT" | true |
|
|
||||||
| topic | Topic to handle events different | Fixed string "UPDATE_ACTION_STATUS" | true |
|
|
||||||
| tenant | The tenant this thing belongs to | String | true |
|
|
||||||
|
|
||||||
| Message Properties | Description | Type | Mandatory |
|
### UPDATE_ACTION_STATUS
|
||||||
| ------------------ | ------------------------------- | ------ | --------- |
|
|
||||||
| content_type | The content type of the payload | String | true |
|
|
||||||
|
|
||||||
Payload Template
|
Message to send an action status event to hawkBit.
|
||||||
|
|
||||||
|
Header | Description | Type | Mandatory
|
||||||
|
------ | -------------------------------- | ----------------------------------- | -------------------------------------------------------------
|
||||||
|
type | Type of the message | Fixed string "EVENT" | true
|
||||||
|
topic | Topic name identifying the event | Fixed string "UPDATE_ACTION_STATUS" | true
|
||||||
|
tenant | The tenant this thing belongs to | String | false
|
||||||
|
|
||||||
|
Message Properties | Description | Type | Mandatory
|
||||||
|
------------------ | ------------------------------- | ------ | -------------------------------------------------------------
|
||||||
|
content_type | The content type of the payload | String | true
|
||||||
|
|
||||||
|
Payload Template (the Java representation is [ActionUpdateStatus](https://github.com/eclipse/hawkbit/tree/master/hawkbit-dmf/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DmfActionUpdateStatus.java)):
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"actionId": long,
|
"actionId": long,
|
||||||
"softwareModuleId": long,
|
"softwareModuleId": long,
|
||||||
"actionStatus": "String",
|
"actionStatus":"String",
|
||||||
"message": ["String"]
|
"message":["String"]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Possible actionStatus
|
Possible [actionStatus](https://github.com/eclipse/hawkbit/tree/master/hawkbit-dmf/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DmfActionStatus.java) values:
|
||||||
|
|
||||||
| Header | Description |
|
Value | Description
|
||||||
| --------------- | ------------------------------------------------- |
|
--------------- | ---------------------------------------
|
||||||
| DOWNLOAD | Device is downloading |
|
DOWNLOAD | Device is downloading
|
||||||
| RETRIEVED | Device management service has retrieved something |
|
DOWNLOADED | Device completed download
|
||||||
| RUNNING | Update is running |
|
RETRIEVED | Device has retrieved the artifact
|
||||||
| FINISHED | Update process finished successful |
|
RUNNING | Update is running
|
||||||
| ERROR | Error during update process |
|
FINISHED | Update process finished successful
|
||||||
| WARNING | Warning during update process |
|
ERROR | Error during update process
|
||||||
| CANCELED | Cancel update process successful |
|
WARNING | Warning during update process
|
||||||
| CANCEL_REJECTED | Cancel update process has been rejected |
|
CANCELED | Cancel update process successful
|
||||||
|
CANCEL_REJECTED | Cancel update process has been rejected
|
||||||
|
|
||||||
**Example Header and Payload**
|
Example header and payload:
|
||||||
|
|
||||||
| Headers | MessageProperties |
|
Header | MessageProperties
|
||||||
| -------------------------------------------------------------------- | ----------------------------- |
|
----------------------------------------------------------------------- | -----------------------------
|
||||||
| type=EVENT <br /> tenant=tenant123 <br /> topic=UPDATE_ACTION_STATUS | content_type=application/json |
|
type=EVENT <br /> tenant=tenant123 <br /> topic=UPDATE\_ACTION\_STATUS | content_type=application/json
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"actionId": 137,
|
"actionId":137,
|
||||||
"softwareModuleId": 17,
|
"softwareModuleId":17,
|
||||||
"actionStatus": "DOWNLOAD",
|
"actionStatus":"DOWNLOAD",
|
||||||
"message": ["The download has started"]
|
"message":["The download has started"]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Message to cancel an update task
|
### PING
|
||||||
|
|
||||||
| Header | Description | Type | Mandatory |
|
hawkBit allows DMF clients to check the availability of the DMF service. For this scenario DMF specifies a PING message that can be sent by the client:
|
||||||
| ------- | -------------------------------- | ------------------------------ | --------- |
|
|
||||||
| type | Type of the message | Fixed string "Event" | true |
|
|
||||||
| thingId | The ID of the registered thing | String | true |
|
|
||||||
| topic | Topic to handle events different | Fixed string "CANCEL_DOWNLOAD" | true |
|
|
||||||
| tenant | The tenant this thing belongs to | String | true |
|
|
||||||
|
|
||||||
| Message Properties | Description | Type | Mandatory |
|
Header | Description | Type | Mandatory
|
||||||
| ------------------ | ------------------------------- | ------ | --------- |
|
------- | -------------------------------- | ------------------------------ | -------------------------------------------------------------
|
||||||
| content_type | The content type of the payload | String | true |
|
type | Type of the message | Fixed string "PING" | true
|
||||||
|
tenant | The tenant the PING belongs to | String | false
|
||||||
|
|
||||||
Payload Template
|
|
||||||
|
Message Properties | Description | Type | Mandatory
|
||||||
|
------------------ | ------------------------------- | ------ | -------------------------------------------------------------
|
||||||
|
correlationId | CorrelationId that allows the client to map a PING request to PING_RESPONSE | String | true
|
||||||
|
|
||||||
|
|
||||||
|
## Messages sent by hawkBit (hawkBit -> Client)
|
||||||
|
|
||||||
|
### CANCEL_DOWNLOAD
|
||||||
|
|
||||||
|
Message to cancel an update task.
|
||||||
|
|
||||||
|
Header | Description | Type | Mandatory
|
||||||
|
------- | -------------------------------- | ------------------------------ | -------------------------------------------------------------
|
||||||
|
type | Type of the message | Fixed string "Event" | true
|
||||||
|
thingId | The ID of the registered provisioning target | String | true
|
||||||
|
topic | Topic name identifying the event | Fixed string "CANCEL_DOWNLOAD" | true
|
||||||
|
tenant | The tenant this provisioning target belongs to | String | false
|
||||||
|
|
||||||
|
Message Properties | Description | Type | Mandatory
|
||||||
|
------------------ | ------------------------------- | ------ | -------------------------------------------------------------
|
||||||
|
content_type | The content type of the payload | String | true
|
||||||
|
|
||||||
|
Payload template:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"actionId": long
|
"actionId": long
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**Example Header and payload**
|
Example Headers and Payload:
|
||||||
|
|
||||||
| Headers | MessageProperties |
|
| Header | MessageProperties |
|
||||||
| ---------------------------------------------------------------------------------- | ----------------------------- |
|
|---------------------------------------|---------------------------------|
|
||||||
| type=EVENT <br /> tenant=tenant123 <br /> thingId=abc <br /> topic=CANCEL_DOWNLOAD | content_type=application/json |
|
| type=EVENT <br /> tenant=tenant123 <br /> thingId=abc <br /> topic=CANCEL\_DOWNLOAD | content_type=application/json
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"actionId": 137
|
"actionId":137
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
After this message has been sent, an action status event with either actionStatus=CANCELED or actionStatus=CANCEL_REJECTED has to be returned.
|
After sending this message, an action status event with either actionStatus=CANCELED or actionStatus=CANCEL_REJECTED has to be returned.
|
||||||
|
|
||||||
**Example Header and Payload when cancellation is successful**
|
Example header and payload when cancellation is successful:
|
||||||
|
|
||||||
| Headers | MessageProperties |
|
Header | MessageProperties
|
||||||
| -------------------------------------------------------------------- | ----------------------------- |
|
----------------------------------------------------------------------- | -----------------------------
|
||||||
| type=EVENT <br /> tenant=tenant123 <br /> topic=UPDATE_ACTION_STATUS | content_type=application/json |
|
type=EVENT <br /> tenant=tenant123 <br /> topic=UPDATE\_ACTION\_STATUS | content_type=application/json
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"actionId": 137,
|
"actionId":137,
|
||||||
"softwareModuleId": 17,
|
"softwareModuleId":17,
|
||||||
"actionStatus": "CANCELED",
|
"actionStatus":"CANCELED",
|
||||||
"message": ["The update was canceled."]
|
"message":["The update was canceled."]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**Example Header and Payload when cancellation was rejected**
|
Example header and payload when cancellation is rejected:
|
||||||
|
|
||||||
| Headers | MessageProperties |
|
Header | MessageProperties
|
||||||
| -------------------------------------------------------------------- | ----------------------------- |
|
----------------------------------------------------------------------- | -----------------------------
|
||||||
| type=EVENT <br /> tenant=tenant123 <br /> topic=UPDATE_ACTION_STATUS | content_type=application/json |
|
type=EVENT <br /> tenant=tenant123 <br /> topic=UPDATE\_ACTION\_STATUS | content_type=application/json
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"actionId": 137,
|
"actionId":137,
|
||||||
"softwareModuleId": 17,
|
"softwareModuleId":17,
|
||||||
"actionStatus": "CANCEL_REJECTED",
|
"actionStatus":"CANCEL_REJECTED",
|
||||||
"message": [
|
"message":["The cancellation was not possible since the target sent an unexpected response."]
|
||||||
"The cancellation was not possible since the target sent an unexpected response."
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Messages sent by hawkBit
|
|
||||||
|
|
||||||
All messages from hawkBit will be sent to the specified exchange in the `reply_to` property.
|
### DOWNLOAD_AND_INSTALL or DOWNLOAD
|
||||||
|
|
||||||
### Message sent by hawkBit to initialize an update task
|
Message sent by hawkBit to initialize an update or download task. Note: in case of a maintenance window configured but not yet active the message will have the topic _DOWNLOAD_ instead of _DOWNLOAD_AND_INSTALL_.
|
||||||
|
|
||||||
| Header | Description | Type | Mandatory |
|
Header | Description | Type | Mandatory
|
||||||
| ------- | -------------------------------- | ----------------------------------- | --------- |
|
------- | -------------------------------- | ----------------------------------- | -------------------------------------------------------------
|
||||||
| type | Type of the message | Fixed string "EVENT" | true |
|
type | Type of the message | Fixed string "EVENT" | true
|
||||||
| thingId | The ID of the registered thing | String | true |
|
thingId | The ID of the registered provisioning target | String | true
|
||||||
| topic | Topic to handle events different | Fixed string "DOWNLOAD_AND_INSTALL" | true |
|
topic | Topic name identifying the event | Fixed string "DOWNLOAD_AND_INSTALL" or "DOWNLOAD" | true
|
||||||
| tenant | The tenant this thing belongs to | String | true |
|
tenant | The tenant this provisioning target belongs to | String | false
|
||||||
|
|
||||||
| Message Properties | Description | Type | Mandatory |
|
Message Properties | Description | Type | Mandatory
|
||||||
| ------------------ | ------------------------------- | ------ | --------- |
|
------------------ | ------------------------------- | ------ | -------------------------------------------------------------
|
||||||
| content_type | The content type of the payload | String | true |
|
content_type | The content type of the payload | String | true
|
||||||
|
|
||||||
The Java representation is DownloadAndUpdateRequest:
|
Payload Template (the Java representation is [DmfDownloadAndUpdateRequest](https://github.com/eclipse/hawkbit/tree/master/hawkbit-dmf/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DmfDownloadAndUpdateRequest.java)):
|
||||||
|
|
||||||
Payload Template
|
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
"actionId": long,
|
||||||
|
"targetSecurityToken": "String",
|
||||||
|
"softwareModules":[
|
||||||
|
{
|
||||||
|
"moduleId": long,
|
||||||
|
"moduleType":"String",
|
||||||
|
"moduleVersion":"String",
|
||||||
|
"artifacts":[
|
||||||
|
{
|
||||||
|
"filename":"String",
|
||||||
|
"urls":{
|
||||||
|
"HTTP":"String",
|
||||||
|
"HTTPS":"String"
|
||||||
|
},
|
||||||
|
"hashes":{
|
||||||
|
"md5":"String",
|
||||||
|
"sha1":"String"
|
||||||
|
},
|
||||||
|
"size":long
|
||||||
|
}],
|
||||||
|
"metadata":[
|
||||||
|
{
|
||||||
|
"key":"String",
|
||||||
|
"value":"String"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Example header and payload:
|
||||||
|
|
||||||
|
Header | MessageProperties
|
||||||
|
------------------------------------------------------------------------------------------- | -----------------------------
|
||||||
|
type=EVENT <br /> tenant=tenant123 <br /> thingId=abc <br /> topic=DOWNLOAD\_AND\_INSTALL | content_type=application/json
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"actionId":137,
|
||||||
|
"targetSecurityToken":"bH7XXAprK1ChnLfKSdtlsp7NOlPnZAYY",
|
||||||
|
"softwareModules":[
|
||||||
|
{
|
||||||
|
"moduleId":7,
|
||||||
|
"moduleType":"firmware",
|
||||||
|
"moduleVersion":"7.7.7",
|
||||||
|
"artifacts":[
|
||||||
|
{
|
||||||
|
"filename":"artifact.zip",
|
||||||
|
"urls":{
|
||||||
|
"HTTP":"http://download-from-url.com",
|
||||||
|
"HTTPS":"https://download-from-url.com"
|
||||||
|
},
|
||||||
|
"hashes":{
|
||||||
|
"md5":"md5hash",
|
||||||
|
"sha1":"sha1hash"
|
||||||
|
},
|
||||||
|
"size":512
|
||||||
|
}],
|
||||||
|
"metadata":[
|
||||||
|
{
|
||||||
|
"key":"installationType",
|
||||||
|
"value":"5784K#"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### MULTI_ACTION
|
||||||
|
|
||||||
|
If `multi.assignments.enabled` is enabled, this message is sent instead of DOWNLOAD_AND_INSTALL, DOWNLOAD, or CANCEL_DOWNLOAD
|
||||||
|
by hawkBit to initialize update, download, or cancel task(s).
|
||||||
|
|
||||||
|
Header | Description | Type | Mandatory
|
||||||
|
------- | -------------------------------- | ----------------------------------- | -------------------------------------------------------------
|
||||||
|
type | Type of the message | Fixed string "EVENT" | true
|
||||||
|
thingId | The ID of the registered provisioning target | String | true
|
||||||
|
topic | Topic name identifying the event | Fixed string "MULTI_ACTION" | true
|
||||||
|
tenant | The tenant this provisioning target belongs to | String | false
|
||||||
|
|
||||||
|
Message Properties | Description | Type | Mandatory
|
||||||
|
------------------ | ------------------------------- | ------ | -------------------------------------------------------------
|
||||||
|
content_type | The content type of the payload | String | true
|
||||||
|
|
||||||
|
Payload Template (the Java representation is [DmfMultiActionRequest](https://github.com/eclipse/hawkbit/tree/master/hawkbit-dmf/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DmfMultiActionRequest.java)):
|
||||||
|
|
||||||
|
```json
|
||||||
|
[{
|
||||||
|
"topic": "String",
|
||||||
|
"action": {
|
||||||
"actionId": long,
|
"actionId": long,
|
||||||
"targetSecurityToken": "String",
|
"targetSecurityToken": "String",
|
||||||
"softwareModules": [
|
"softwareModules":[
|
||||||
{
|
{
|
||||||
"moduleId": long,
|
"moduleId": long,
|
||||||
"moduleType": "String",
|
"moduleType":"String",
|
||||||
"moduleVersion": "String",
|
"moduleVersion":"String",
|
||||||
"artifacts": [
|
"artifacts":[
|
||||||
{
|
{
|
||||||
"filename": "String",
|
"filename":"String",
|
||||||
"urls": {
|
"urls":{
|
||||||
"HTTP": "String",
|
"HTTP":"String",
|
||||||
"HTTPS": "String"
|
"HTTPS":"String"
|
||||||
},
|
},
|
||||||
"hashes": {
|
"hashes":{
|
||||||
"md5": "String",
|
"md5":"String",
|
||||||
"sha1": "String"
|
"sha1":"String"
|
||||||
},
|
},
|
||||||
"size": long
|
"size":long
|
||||||
}
|
}],
|
||||||
],
|
"metadata":[
|
||||||
"metadata": [
|
{
|
||||||
{
|
"key":"String",
|
||||||
"key": "String",
|
"value":"String"
|
||||||
"value": "String"
|
}
|
||||||
}
|
|
||||||
]
|
]
|
||||||
}
|
}]
|
||||||
]
|
}
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
"topic": "String",
|
||||||
|
"action": {
|
||||||
|
"actionId": long,
|
||||||
|
"targetSecurityToken": "String",
|
||||||
|
"softwareModules":[
|
||||||
|
{
|
||||||
|
"moduleId": long,
|
||||||
|
"moduleType":"String",
|
||||||
|
"moduleVersion":"String",
|
||||||
|
"artifacts":[
|
||||||
|
{
|
||||||
|
"filename":"String",
|
||||||
|
"urls":{
|
||||||
|
"HTTP":"String",
|
||||||
|
"HTTPS":"String"
|
||||||
|
},
|
||||||
|
"hashes":{
|
||||||
|
"md5":"String",
|
||||||
|
"sha1":"String"
|
||||||
|
},
|
||||||
|
"size":long
|
||||||
|
}],
|
||||||
|
"metadata":[
|
||||||
|
{
|
||||||
|
"key":"String",
|
||||||
|
"value":"String"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}]
|
||||||
```
|
```
|
||||||
|
|
||||||
**Example Header and Payload**
|
Example header and payload:
|
||||||
|
|
||||||
| Headers | MessageProperties |
|
Header | MessageProperties
|
||||||
| --------------------------------------------------------------------------------------- | ----------------------------- |
|
------------------------------------------------------------------------------------------- | -----------------------------
|
||||||
| type=EVENT <br /> tenant=tenant123 <br /> thingId=abc <br /> topic=DOWNLOAD_AND_INSTALL | content_type=application/json |
|
type=EVENT <br /> tenant=tenant123 <br /> thingId=abc <br /> topic=MULTI\_ACTION | content_type=application/json
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
[{
|
||||||
"actionId": 137,
|
"topic": "DOWNLOAD_AND_INSTALL",
|
||||||
"targetSecurityToken": "bH7XXAprK1ChnLfKSdtlsp7NOlPnZAYY",
|
"action": {
|
||||||
"softwareModules": [
|
"actionId":137,
|
||||||
{
|
"targetSecurityToken":"bH7XXAprK1ChnLfKSdtlsp7NOlPnZAYY",
|
||||||
"moduleId": 7,
|
"softwareModules":[
|
||||||
"moduleType": "firmware",
|
{
|
||||||
"moduleVersion": "7.7.7",
|
"moduleId":7,
|
||||||
"artifacts": [
|
"moduleType":"firmware",
|
||||||
{
|
"moduleVersion":"7.7.7",
|
||||||
"filename": "artifact.zip",
|
"artifacts":[
|
||||||
"urls": {
|
{
|
||||||
"HTTP": "http://download-from-url.com",
|
"filename":"artifact.zip",
|
||||||
"HTTPS": "https://download-from-url.com"
|
"urls":{
|
||||||
},
|
"HTTP":"http://download-from-url.com",
|
||||||
"hashes": {
|
"HTTPS":"https://download-from-url.com"
|
||||||
"md5": "md5hash",
|
},
|
||||||
"sha1": "sha1hash"
|
"hashes":{
|
||||||
},
|
"md5":"md5hash",
|
||||||
"size": 512
|
"sha1":"sha1hash"
|
||||||
}
|
},
|
||||||
],
|
"size":512
|
||||||
"metadata": [
|
}],
|
||||||
{
|
"metadata":[
|
||||||
"key": "installationType",
|
{
|
||||||
"value": "5784K#"
|
"key":"installationType",
|
||||||
}
|
"value":"5784K#"
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}]
|
||||||
]
|
}
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
"topic": "DOWNLOAD",
|
||||||
|
"action": {
|
||||||
|
"actionId":138,
|
||||||
|
"targetSecurityToken":"bH7XXAprK1ChnLfKSdtlsp7NOlPnZAYY",
|
||||||
|
"softwareModules":[
|
||||||
|
{
|
||||||
|
"moduleId":4,
|
||||||
|
"moduleType":"firmware",
|
||||||
|
"moduleVersion":"7.7.9",
|
||||||
|
"artifacts":[
|
||||||
|
{
|
||||||
|
"filename":"artifact.zip",
|
||||||
|
"urls":{
|
||||||
|
"HTTP":"http://download-from-url.com",
|
||||||
|
"HTTPS":"https://download-from-url.com"
|
||||||
|
},
|
||||||
|
"hashes":{
|
||||||
|
"md5":"md5hash",
|
||||||
|
"sha1":"sha1hash"
|
||||||
|
},
|
||||||
|
"size":512
|
||||||
|
}],
|
||||||
|
"metadata":[
|
||||||
|
{
|
||||||
|
"key":"installationType",
|
||||||
|
"value":"5784K#"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### THING_DELETED
|
||||||
|
|
||||||
|
Message sent by hawkBit when a target has been deleted.
|
||||||
|
|
||||||
|
Header | Description | Type | Mandatory
|
||||||
|
-------------- | ------------------------------------------------ | ---------------------------- | -------------------------------------------------------------
|
||||||
|
type | Type of the message | Fixed string "THING_DELETED" | true
|
||||||
|
thingId | The ID of the registered provisioning target | String | true
|
||||||
|
tenant | The tenant this provisioning target belongs to | String | true
|
||||||
|
|
||||||
|
Example header:
|
||||||
|
|
||||||
|
Header | MessageProperties
|
||||||
|
----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------
|
||||||
|
type=THING\_DELETED <br /> tenant=tenant123 <br /> thingId=abc | |
|
||||||
|
|
||||||
|
|
||||||
|
### REQUEST_ATTRIBUTES_UPDATE
|
||||||
|
|
||||||
|
Message sent by Eclipse hawkBit when a re-transmission of target attributes is requested.
|
||||||
|
|
||||||
|
Header | Description | Type | Mandatory
|
||||||
|
-------------- | ------------------------------------------------ | ---------------------------- | -------------------------------------------------------------
|
||||||
|
type | Type of the message | Fixed string "EVENT" | true
|
||||||
|
thingId | The ID of the registered provisioning target | String | true
|
||||||
|
topic | Topic name identifying the event | Fixed string "REQUEST_ATTRIBUTES_UPDATE" | true
|
||||||
|
tenant | The tenant this provisioning target belongs to | String | true
|
||||||
|
|
||||||
|
Example headers:
|
||||||
|
|
||||||
|
Header | MessageProperties
|
||||||
|
----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------
|
||||||
|
type=EVENT <br /> tenant=tenant123 <br /> thingId=abc <br /> topic=REQUEST\_ATTRIBUTES\_UPDATE | |
|
||||||
|
|
||||||
|
|
||||||
|
### PING_RESPONSE
|
||||||
|
|
||||||
|
_hawkBit_ will respond to the PING message with a PING_RESPONSE type message that has the same correlationId as the original PING message:
|
||||||
|
|
||||||
|
Header | Description | Type | Mandatory
|
||||||
|
------- | -------------------------------- | ------------------------------ | -------------------------------------------------------------
|
||||||
|
type | Type of the message | Fixed string "PING_RESPONSE" | true
|
||||||
|
tenant | The tenant the PING belongs to | String | false
|
||||||
|
|
||||||
|
|
||||||
|
Message Properties | Description | Type | Mandatory
|
||||||
|
------------------ | ------------------------------- | ------ | -------------------------------------------------------------
|
||||||
|
correlationId | CorrelationId of the original PING request | String | true
|
||||||
|
content_type | The content type of the payload | String | true
|
||||||
|
|
||||||
|
The PING_RESPONSE also contains a timestamp (i.e. the difference, measured in milliseconds, between the current time and midnight, January 1, 1970 UTC) as plain text. It is not guaranteed that this timestamp is completely accurate.
|
||||||
|
|
||||||
|
Header | MessageProperties
|
||||||
|
------------------------------------------------------------------------------------------- | -----------------------------
|
||||||
|
type=PING_RESPONSE <br /> tenant=tenant123 | content_type=text/plain |
|
||||||
|
|
||||||
|
```text
|
||||||
|
1505215891247
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -47,3 +47,26 @@ The cascading execution of the deployment groups is based on two thresholds that
|
|||||||
|
|
||||||
### State Machine on Rollout Deployment Group
|
### State Machine on Rollout Deployment Group
|
||||||

|

|
||||||
|
|
||||||
|
## Multi-Assignments (beta)
|
||||||
|
|
||||||
|
One of the main paradigms of Eclipse hawkBit is, that a Distribution Set represents the currently installed software of a device. Hence, a device can have only one Distribution Set assigned/installed at a time. With _Multi-Assignments_ enabled, this paradigm shifts. Multi-Assignments allows to assign multiple Distribution Sets to a device simultaneously, without cancelling each other. As a consequence, an operator can trigger multiple campaigns addressing the same devices in parallel.
|
||||||
|
|
||||||
|
### Consequences
|
||||||
|
|
||||||
|
While this feature provides more flexibility to the user and enables new use-cases, there are also some consequences one should be aware of:
|
||||||
|
|
||||||
|
**Critical**
|
||||||
|
|
||||||
|
* This feature is in beta and may change unannounced.
|
||||||
|
* For now, this feature is **opt-in only**. Once activated, it cannot be deactivated.
|
||||||
|
* Currently, there is no mechanism to hint devices to process the actions in a certain order.
|
||||||
|
|
||||||
|
**Minor**
|
||||||
|
|
||||||
|
* While on DMF-API a MULTI_ACTION request is sent, DDI-API only exposes the oldest open action.
|
||||||
|
* All information regarding the currently assigned or installed Distribution Set does only respect the last assignment, as well as the last successfully installed Distribution set. This also affects:
|
||||||
|
* Pinning a target or Distribution Set in Deployment View.
|
||||||
|
* Statistics about installed or assigned Distribution Sets.
|
||||||
|
* Auto close running actions, when a new Distribution Set is assigned (`repository.actions.autoclose.enabled`) is deactivated.
|
||||||
|
* Marking a Distribution Set to be a *Required Migration Step* is deactivated.
|
||||||
Reference in New Issue
Block a user