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)
- 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”