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 Technical 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 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"
}
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 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/
set general tab by screenshot
add commands
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”

