====== MQTT ======
===== Basic properties and requirements =====
* MQTT versions 3.1.0 a and **3.1.1** are supported
* Any device must be registered in the Mervis cloud. Connection parameters are provided upon the registration (**DeviceID**, **user name** and **password**)
* Contact [[en:help:support|]].
* possibility of a dynamic variable set (devices can specify what variables they publish)
* only built-in types are supported (bool, integers, floating point numbers, string)
* no commands/set point yet
* support for secured channel. A device can use secure or non-secure connection
===== General behavior of the clients =====
==== Connect ====
* ClientID corresponds to the DeviceID
* User name and password
* No special requirements considering flags or keep-alive periods (some reasonable value like 60 seconds are recommended)
==== Publish/Subscribe ====
* Every topic starts with the DeviceId
* The rest of the topic depends on the required functionality
===== Supported formats =====
==== Wago compatible format ====
=== Registration of available variables ===
* Informs the subscribers of available variables
* Publish message with “At least once delivery”
* Topic: deviceId/TagConfiguration
* Combination of the collection ID and Tag must be unique for every device!
* Payload: UTF-8 JSON document
* /FormatId: (string), message ID
* /ApiVersion(int), version of API
* /Complete (bool), must be true now
* /Collections (Array of collection elements)
* /Id (int), ID of the collection
* /CollectionName (string)
* /SampleRate (int), collection sample rate in ms
* /PublishInterval (int), collection publish interval in ms
* /TagData (Array of variable descriptions)
* /Tag (string), ID of the variable
* /Unit (string), unit of the variable
* /ValueType (string), ST type; only simple types are supported
**Example**
{
"FormatId": "TagConfiguration",
"ApiVersion": 1,
"Complete": true,
"Collections": [{
"Id": 1,
"CollectionName": "Building 1",
"SampleRate": 60000,
"PublishInterval": 60000,
"TagData": [{
"Tag": "Temperature1",
"Unit": "ºC",
"ValueType": "real"
},
{
"Tag": "Humidity",
"Unit": "%",
"ValueType": "word"
}]
},
{
"Id": 2,
"CollectionName": "Building 2",
"SampleRate": 120000,
"PublishInterval": 240000,
"TagData": [{
"Tag": "Water flow",
"Unit": "m3/h",
"ValueType": "byte"
},
{
"Tag": "Current phase L1",
"Unit": "A",
"ValueType": "lreal"
}]
}]
}
=== Variable values ===
* Publishes values of variables
* Publish message with “At least once delivery”
* Topic: deviceId/TagValues
* Payload: UTF-8 JSON document
* /FormatId: (string), message ID
* /ApiVersion(int), version of API
* /CollectionId (int), identification of the collection
* /TagData (Array of value items)
* /Time (datetime), timestamp in ISO format (YYYY-MM-DDTHH:MM:SSZ), ideal is a UTC form
* /Values (Collection of Tag and value tuples)
**Example**
{
"FormatId": "TagValues",
"ApiVersion": 1,
"CollectionId": 1,
"TagData": [{
"Time": "2018-03-27T17:19:23.720+02:00",
"Values": {
"Temperature1": 15.52,
"Humidity": 21
}
}]
}
==== Weintek compatible format ====
* We assume that all datetime values are in **UTC**
* Print screens are from EasyBuilder Pro SW
=== Variable values ===
* Publishes values of variables
* Publish message with “At least once delivery”
* Topic: $deviceId/mervis/values or $deviceId/mervis/values/*
* Payload: UTF-8 JSON document
* /d: root element
* "property_name": value - property name, can contain metada(not required). Always use array [...] for value of property
* metadata format:
* "name" name of property
* "type" property type(we supported only [[https://kb.mervis.info/doku.php/en:mervis-scada:80-mqtt#our_supported_types|our list of types]])
* "unit" information about unit of value
**Example**
{
"d" : {
"name:MyHomeTemperature, type:generic_sint64, unit:°C" : [ 0 ],
"number C" : [ 0 ],
"Bit" : [ false ],
"My array" : [ 0, 10, 20 ]
},
"ts" : "2020-08-27T07:10:24.360316"
}
{{ :en:mervis-scada:annotation_2020-08-27_120101.png?600 |}}
=== Command registration ===
* Topic: $deviceId/mervis/cmd_reg or $deviceId/mervis/cmd_reg/*
* Format:
* /d root element
* "propertyName" must include some informations(separate by ","). Value is ignored.
* "id" what is command id and define subscribe topic ($deviceId/mervis/command/change_temperature)
* "name" just for customer info
* "params" parameters with informations to command (**must include all parameters of supscribe topic**)
* "name" parameter name in json
* "type" type of parameter (we supported only [[https://kb.mervis.info/doku.php/en:mervis-scada:80-mqtt#our_supported_types|our list of types]])
* "unit" information about unit of parameter
* "ts" time span
{
"d" : {
"id:change_temperature, name:change temperature in house ,params:[{name: temperature, type:generic_float64, unit:°C}, {name: date, type:generic_datetime, unit:UTC}]" : false
},
"ts" : "2020-08-27T07:10:11.356013"
}
choose/create $deviceId/mervis/cmd_reg/
{{ :en:mervis-scada:annotation_2020-08-27_110112.png?400 |}}
set general tab by screenshot
{{ :en:mervis-scada:annotation_2020-08-27_121338.png?400 |}}
add commands
{{ :en:mervis-scada:annotation_2020-08-27_115716.png?400 |}}
===Our supported types===
* "generic_bool"
* "generic_sint8"
* "generic_uint8"
* "generic_sint16"
* "generic_uint16"
* "generic_sint32"
* "generic_uint32"
* "generic_sint64"
* "generic_uint64"
* "generic_float32"
* "generic_float64"
* "generic_string"
* "generic_datetime"
===Create a subcribe topic for executing command===
* for previous command example
* create topic $deviceId/mervis/command/change_temperature
* with two addresses:
* temperature(32-bit float)
* date(string)
{{ :en:mervis-scada:annotation_2020-08-27_110134.png?600 |}}