如何使用Lua将表格中的值保存到变量中?
2017-11-27 21:30:25
收藏:0
阅读:87
评论:1
我正在使用Fibaro HC2改善我的家庭自动化。
建筑物被分成几个部分,我想创建一个包含每个部分名称的设备列表。使用Fibaro API时,我仅获得部分ID而不是名称。使用json.encode,我获得了此表格的内容:
[
{
"Id":4,
"sortOrder":3,
"name":"地下室"
},
{
"id":5,
"sortOrder":2,
"name":"一楼"
},
{
"id":6,
"sortOrder":4,
"name":"二楼"
},
{
"id":7,
"sortOrder":1,
"name":"室外"
}
]
sortOrder不重要。我做了什么:
local jS = json.encode (sections)
for i = 1, #sections do
local jS = json.encode (sections [i])
s = string.gsub (jS, ', "sortOrder":% d', "")
print (s)
end
这是输出:
{ "Id": 4, "name": "地下室"}
{ "Id": 5, "name": "一楼"}
{ "Id": 6, "name": "二楼"}
{ "Id": 7, "name": "室外"}
我不知道这是否有意义。我想要一个将名称存储在变量中的函数:
function getSectionNamebyID (secID)
if secId == "4" then sectionname = "地下室" end
if secId == "5" then sectionname = "一楼" end
--...
return sectionname
end
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

一个非常不错的教程,讲述了如何在Fibaro中读取所有设备等信息,并将该信息表存储为全局变量中的json字符串值。
最有趣的部分是作为lua场景在Fibaro中实现的脚本。只需创建一个名为“HomeTable”的全局变量,并手动运行场景即可将所有设备/场景等存储在一个变量中:
--[[ %% autostart %% properties %% events %% globals --]] local debug = true --设置为false停止调试信息 -- 任何附加到设备,VD,iOS设备之外的主页表 -- 根据需要编辑或保留为空白:jsonHome = {} jsonHome = { scene = { HueSceneStart = 43, AlexaSceneStart = 67, }, users = { --admin = 2,frank = 1564,sylvia = 1565 }, } --下面无需用户编辑 local function log(str) if debug then fibaro:debug(str);end; end devices = fibaro:getDevicesId({visible = true,enabled = true})-获取所有可见和已启用设备的列表 log("Fill hometable with "..#devices.." devices") --使用所有VD,设备和iOS设备填充主页表 for k,i in ipairs(devices) do deviceName = string.gsub(fibaro:getName(i),"%s+","")-消除设备名称中的空格 -取消此注释以消除设备名称中的所有非字母数字字符 - deviceName = string.gsub(fibaro:getName(i),“%W”,“”) if fibaro:getType(i) ==“virtual_device ”then - 将VD添加到Hometable if jsonHome.VD == nil then - 将VD添加到表中 jsonHome.VD = {} end jsonHome.VD [deviceName] = i log("i ="..i ..“,type =”..fibaro:getType(i)..“,device =”..deviceName) else if fibaro:getType(i) ==“iOS_device ”then - 将iOS设备添加到Hometable if jsonHome.devices == nil then - 将iOS设备添加到表中 jsonHome.devices = {} end jsonHome.devices [deviceName] = i log("i ="..i ..“,type =”..fibaro:getType(i)..“,device =”..deviceName) 否则 - 将所有其他设备添加到表中 roomID = fibaro:getRoomID(i) 如果roomID == 0 then roomname = "Unallocated" other roomname = string.gsub(fibaro:getRoomName(roomID),"%s+","")--消除房间名称中的空格 -取消此注释以消除房间名称中的所有非字母数字字符 -roomname = string.gsub(fibaro:getRoomName(roomID),“%W”,"") end if jsonHome [roomname] == nil then - 添加房间到表中 jsonHome [roomname] = {} end jsonHome [roomname] [deviceName] = i log("i ="..i ..“,type =”..fibaro:getType(i)..“,device =”..deviceName ..“,room =”..roomname) end end jHomeTable = json.encode(jsonHome) - 存储数据之前将其编码为JSON格式 fibaro:setGlobal(“HomeTable”,jHomeTable) - 这将数据存储在变量中 log("global jTable created:") - 显示消息的标准调试行 log(jHomeTable)运行之后,您可以按以下示例使用它。在我的情况下,房间名称为“Workingroom”,设备名称为“Shutter”:
--[[ %% properties %% events %% globals --]] local ht = json.decode(fibaro:getGlobalValue(“HomeTable”)) fibaro:call(ht.Workingroom.Shutter,“open”)