跳到主要内容

LUA组件使用说明

LUA组件使用说明

Lua组件的目标是能让用户在平台上写lua代码进行开发,不用去关心组件的打包。缺点是需要在本地调试好之后再粘贴代码。
Lua是一个脚本语言,性能接近C语言。但是有随时随地修改的优点。

应用举例

前面板拖入一个输入框和显示文本,分别表示测试输入和结果显示,lua组件将输入的格式转换为输出的格式。

这里想把如下格式转换:

{
"type":"report",
"device_name":"device_lrrbrQKI8A",
"driver":"opcda",
"channel":"channel_Hp88RapAL5",
"timestamp":"2020-11-24 09:20:04",
"values":[
{
"id":"3",
"name":"test1",
"desc":"测试1",
"freq":"1000",
"compute":"no;",
"value":"8729",
"updatetime":"2020-11-24 09:20:03",
"quality":"Good",
"address":"Random.Int4",
"server_timestamp":"2020\/11\/24 17:20:05",
"type":"default"
},
{
"id":"4",
"name":"test2",
"desc":"测试2",
"freq":"1000",
"compute":"no;",
"value":"9984",
"updatetime":"2020-11-24 09:20:03",
"quality":"Good",
"address":"Random.Int2",
"server_timestamp":"2020\/11\/24 17:20:05",
"type":"default"
}
]
}

转换结果:

{
"test1": "8729",
"test2": "9984",
}

首先,在本地安装lua的IDE,再打开lua IDE,先本地编辑调试代码。

进入JSON在线格式化工具,将输入源变成字符串:
JSON在线 | JSON解析格式化—SO JSON在线工具

依次点击,压缩和转义。

在这里编写代码,测试数据是压缩转义后的输入数据,给到第一行的local data。 这里看到打印后的数据已经是自己想要的东西了。代码如下

| local data="{\"type\":\"report\",\"device_name\":\"device_lrrbrQKI8A\",\"driver\":\"opcda\",\"channel\":\"channel_Hp88RapAL5\",\"timestamp\":\"2020-11-24 09:20:04\",\"values\":[{\"id\":\"3\",\"name\":\"test1\",\"desc\":\"测试1\",\"freq\":\"1000\",\"compute\":\"no;\",\"value\":\"8729\",\"updatetime\":\"2020-11-24 09:20:03\",\"quality\":\"Good\",\"address\":\"Random.Int4\",\"server_timestamp\":\"2020\\/11\\/24 17:20:05\",\"type\":\"default\"},{\"id\":\"4\",\"name\":\"test2\",\"desc\":\"测试2\",\"freq\":\"1000\",\"compute\":\"no;\",\"value\":\"9984\",\"updatetime\":\"2020-11-24 09:20:03\",\"quality\":\"Good\",\"address\":\"Random.Int2\",\"server_timestamp\":\"2020\\/11\\/24 17:20:05\",\"type\":\"default\"}]}"

local json = loadfile("json.lua")() local indata_1 = json.decode(data) local values = indata_1.values
local result_1 = {}
for i,v in ipairs(values) do
--print(i, v["name"], v["value"]) result_1[v["name"]] = v["value"]
end

local out_value = json.encode(result_1) print(out_value) | | --- |

这里为了将消息输出,最后修改一下加上2行代码,这里表示将数据输出到out1.

local j = {{ port="out1", data = out_value }}
return json.encode(j)

最后修改成这样, 粘贴到LUA里面:

| function main(port, data) local json = loadfile("lua/json.lua")() local indata_1 = json.decode(data) local values = indata_1.values
local result_1 = {}
for i,v in ipairs(values) do
--print(i, v["name"], v["value"]) result_1[v["name"]] = v["value"]
end
local out_value = json.encode(result_1) print(out_value) local j = {{ port="out1", data = out_value }}
return json.encode(j) end | | --- |

这里保存的最终结果如图所示:

如果代码运行出错,会在LUA日志里面打印错误信息。

测试:

在输入框输入需要转换的字符串,得到文本框显示正确的结果。