MQTT client - LM application #
MQTT payload to object value #
MQTT payload is decoded using JSON. Writing to object is done using the following rules for the decoded value:
- JSON
null
- no write is performed - Invalid JSON (Lua
nil
) - the original payload string is written - Valid JSON - the decoded JSON value is written
Object value to MQTT payload #
Object value is converted to MQTT payload using the following rules:
boolean
is converted to'1'
or'0'
table
is encoded using JSONnumber
is converted to a string viatostring
string
is sent as is
Scripts - In (From MQTT) #
Script provides two global variables:
topic
(string) - topic namepayload
(string) - payload data
Script must end with a return statement unless the mapped object is not set.
Scripts - Out (To MQTT) #
Script provides one global variable:
value
(boolean
,number
,string
ortable
depending on the data type) - object value
Script must end with a return statement.
The returned script value is converted to MQTT payload using the same rules as for topics without scripts except for invalid types (including nil
). Invalid values are not published.
Examples #
String ↔ boolean conversion #
Conversion is built into the app, the following example simply illustrates the basic script structure.
MQTT device uses 'on'
or 'off'
(string) for status and control.
In (From MQTT) script - converts payload string to boolean #
if payload == 'on' then
return true
elseif payload == 'off' then
return false
end
Out (To MQTT) script - converts boolean to payload string #
if value then
return 'on'
else
return 'off'
end
JSON payload (single value) #
MQTT payload is the following JSON:
{
"id": "0",
"battery": {
"V": 2.99,
"percent": 98
}
}
In (From MQTT) script - gets the battery percent from the JSON object #
local data = json.pdecode(payload)
if type(data) == 'table' then
return data.battery.percent
end
JSON payload (multiple values) #
MQTT payload is the following JSON:
{
"temperature": 24.5,
"humidity": 45
}
In (From MQTT) script - multiple values to objects #
No object is mapped to the MQTT topic. Script handles writing multiple values to objects.
local data = json.pdecode(payload)
if type(data) == 'table' then
grp.checkwrite('1/1/1', data.temperature)
grp.checkwrite('1/1/2', data.humidity)
end
Out (To MQTT) script - objects to multiple values #
Two topic mappings are required if both objects must trigger publishing to MQTT.
return json.encode({
temperature = grp.getvalue('1/1/1'),
humidity = grp.getvalue('1/1/2'),
})