@lisaisacat
2019-07-16T10:04:33.000000Z
字数 46521
阅读 5273
开发手册 企业版
Windows 平台按 Ctrl + F 打开快捷搜索
Mac 平台按 command + F 打开快捷搜索
※右侧文本列表可以找到全部手册
| 返回值 | 类型 | 说明 |
|---|---|---|
| text | number | 产品类型,1 为云控,2 为中控,nil 为未知连接方式 |
函数用例:
local text = (TSUserType == 1 and "云控" or TSUserType == 2 and "中控" or "未知连接方式")dialog(text)
注意事项:
获取的是当前运行脚本所在的企业产品类型。
函数功能:获取用户 ID
返回值:number,用户 ID
函数用例:
dialog(TSUserID)
注意事项:
获取的是当前运行脚本所在使用产品的用户 ID。
函数功能:获取企业用户邮箱
返回值:number,用户邮箱账号
函数用例:
dialog(TSUserEmail)
注意事项:
获取的是当前运行脚本所在的企业用户邮箱。
完整示例:
local text = (TSUserType == 1 and "云控" or TSUserType == 2 and "中控" or "未知连接方式").."\r\n"..(TSUserID == nil and "未获取到用户 ID" or "ID : " .. TSUserID).."\r\n"..(TSUserEmail == nil and "未获取到用户邮箱" or "邮箱 : " .. TSUserEmail)dialog(text)
| 参数 | 类型 | 说明 |
|---|---|---|
| title | string | 必填,提示框标题 |
| text | string | 必填,提示框内容 |
脚本实例:
--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")ts_enterprise_lib:messageBox("提示","我是来自脚本的提示!")
| 参数 | 类型 | 说明 |
|---|---|---|
| sec | number | 必填,超时时间,单位为秒,默认为 5 秒 |
脚本实例:
--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")-- 设置超时时间为 60 秒ts_enterprise_lib.timeout = 60
| 参数 | 类型 | 说明 |
|---|---|---|
| ret | table | 必填,ret.version - 中控版本号,ret.build - 中控 build 号 |
脚本实例:
--取中控版本号和 build 号--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")if ts_enterprise_lib.version then--判断 version 函数是否存在,旧版的中控(build 1080前)没有这个函数local ret = ts_enterprise_lib:version()-- ret :失败 ret=false-- 成功 ret 返回table,ret.build build号,ret.version=版本字符串if ret thentoast("中控版本"..ret.version..',build:'..ret.build)else--toast('获取失败')endend
| 参数 | 类型 | 说明 |
|---|---|---|
| code | string | 必填,注入代码内容 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回 true,失败返回 false |
| msg | string | 操作结果详情,失败返回失败原因 |
脚本实例:
--[[请注意注入代码的安全,不安全的代码会导致中控器崩溃简单的发账号示例测试/account.txt 文件中内保存账号密码,文件格式为 UTF-8(默认存放路径为 TouchSpriteENT_Files 文件夹下)--]]ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")local ok,account = ts_enterprise_lib:controller_injection([[local f = io.open("测试/account.txt", "r")if f thenlocal account_tab = {}local account = f:read()while account dotable.insert(account_tab,account)account = f:read()endf:close()if #account_tab > 0 thenlocal f = io.open("account.txt", "w")if f thenfor i = 2,#account_tab dof:write(account_tab[i].."\n")endf:close()endreturn account_tab[1]elsereturn falseendendreturn false]])assert(ok,account)if account thennLog("获取账号:"..account)toast("获取账号:"..account)elsenLog("获取账号失败")toast("获取账号失败")endmSleep(1000)
- 更多示例代码可参考这里 → 注入中控器简单的发账号示例
| 参数 | 类型 | 说明 |
|---|---|---|
| x1 | number | 必填,左上角顶点屏幕横坐标 |
| y1 | number | 必填,左上角顶点屏幕纵坐标 |
| x2 | number | 必填,右下角顶点屏幕横坐标 |
| y2 | number | 必填,右下角顶点屏幕纵坐标 |
| text | string | 必填,文字打码内容 |
| timeout | timeout | 选填,超时时间,单位秒,可缺省,默认 60 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 成功返回 true,失败返回 false |
| msg | string | 返回打码结果,超时未处理返回"timeout" |
脚本实例:
-- 中控端打码,发送图片ts_enterprise_lib = require("ts_enterprise_lib")assert( ts_enterprise_lib,"无法引入企业专用库")local x1 = 1 --打码左上角坐标local y1 = 1 --打码左上角坐标local x2 = 200 --打码右下角坐标local y2 = 100 --打码右下角坐标local timeout = 300 --打码超时,单位秒,缺省60,如果中控器超时没有处理,会返回false,"timeout"local ok,msg = ts_enterprise_lib:controller_ocr(x1,y1,x2,y2,timeout)assert(ok,msg)nLog("打码成功!"..msg)toast("打码成功!"..msg)mSleep(1000)
-- 中控端打码,发送字符串ts_enterprise_lib = require("ts_enterprise_lib")assert( ts_enterprise_lib,"无法引入企业专用库")local text = "test!"local timeout = 300 --打码超时,单位秒,缺省60,如果中控器超时没有处理,会返回false,"timeout"local ok,msg = ts_enterprise_lib:controller_txt(text,timeout)assert(ok,msg)nLog("打码成功!"..msg)toast("打码成功!"..msg)mSleep(1000)
| 返回值 | 类型 | 说明 |
|---|---|---|
| ret | boolean | 操作结果,成功返回 true,失败返回 false |
| msg | string | 操作结果详情,失败返回失败原因 |
脚本实例:
--设备重启期间不要关闭中控器ts_enterprise_lib = require("ts_enterprise_lib")local ret,msg = ts_enterprise_lib:reboot_restart()if ret thentoast("设备即将重启")elsetoast("设备重启失败:"..msg)end
| 参数 | 类型 | 说明 |
|---|---|---|
| filepath | string | 必填,文件路径,可以是相对中控器文件夹的相对路径,也可以是绝对路径 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回 true,失败返回 false |
| data | string | 当 ok 等于 true,返回文件数据;当 ok等于 false,返回错误原因 |
脚本实例:
--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")--文件名:中控器上的文件名,可以是相对中控器文件夹的相对路径,也可以是绝对路径--如果文件名所在的文件夹不存在,或者没有权限,或者文件名存在非法字符,文件会读取--这是相对路径,v1.2.5 以上版本中控默认为 TouchSpriteENT_Files 文件夹下local filepath = "123.txt"--[[--这是 win 绝对路径local filepath = "E:\\上传脚本\\测试\\数据中心.txt"--这是 Mac 绝对路径local filepath = "/Users/xxxx/Documents/abc"]]---- 读取远程文件local ok,data = ts_enterprise_lib:remote_file_load(filepath)if ok thentoast("读成功:"..data)elsetoast("读失败:"..data)end-- 返回值 ok:调用是否成功,如果 true,第二个参数返回文件数据,如果 false,第二个返回值返回错误原因
| 参数 | 类型 | 说明 |
|---|---|---|
| filepath | string | 必填,文件路径,可以是相对中控器文件夹的相对路径,也可以是绝对路径 |
| filedata | table | 必填,需要插入的内容,内容不能为空 |
--是否可以为空
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回true,失败返回false |
| data | string | 当 ok 等于 true,无返回值;当 ok 等于 false,返回错误原因 |
脚本实例:
--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")--文件名:中控器上的文件名,可以是相对中控器文件夹的相对路径,也可以是绝对路径--如果电脑/手机的文件名所在的文件夹不存在,或者没有权限,或者文件名存在非法字符,文件会创建失败--这是相对路径,v1.2.5 以上版本中控默认为 TouchSpriteENT_Files 文件夹下local filepath = "123.txt"--[[--这是 Win 绝对路径local filepath = "E:\\上传脚本\\测试\\1.txt"--这是 Mac 绝对路径local filepath = "/Users/xxxx/Documents/abc"]]----文件数据,支持二进制数据local filedata = [[111122223333]]-- 写入远程文件local ok,msg = ts_enterprise_lib:remote_file_save(filepath,filedata)if ok thentoast("写入成功")elsetoast("写入失败:"..msg)end-- 返回值 ok:调用是否成功,如果 true,没有第二个返回值,如果 false,第二个返回值返回错误原因
- 更多脚本示例代码可参考这里 → 封装中控器读写函数
| 参数 | 类型 | 说明 |
|---|---|---|
| local_file | string | 设备的文件路径 |
| remote_file | string | 中控的文件路径,可以是相对中控器文件夹的相对路径,也可以是绝对路径 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回 true,失败返回 false |
| err | string | 当 ok 等于 true,无返回值;当 ok 等于 false,返回错误原因 |
脚本实例:
--如果电脑/手机文件名所在的文件夹不存在,或者没有权限,或者文件名存在非法字符,文件会上传失败ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")toast("开始测试")--上传文件到中控器--本地的文件路径(手机上)local local_file = userPath().."/res/aaa/test2.zip"--中控的文件路径(相对于中控器的根路径),v1.2.5 以上版本中控相对路径默认为 TouchSpriteENT_Files 文件夹下local remote_file = 'test2.zip'--[[--这是 Win 绝对路径local remote_file = "E:\\上传脚本\\测试\\1.txt"--这是 Mac 绝对路径local remote_file = "/Users/xxxx/Documents/abc"]]--local ok,err = ts_enterprise_lib:push_file(local_file,remote_file)if ok thentoast("上传成功")elsetoast(err)end--测试速度结果:80M 文件 11 - 18 秒--此功能需要配合 v1069 以上版本中控器方可使用
| 参数 | 类型 | 说明 |
|---|---|---|
| local_file | string | 设备的文件路径 |
| remote_file | string | 中控的文件路径,可以是相对中控器文件夹的相对路径,也可以是绝对路径 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回 true,失败返回 false |
| err | string | 当 ok 等于 true,无返回值;当 ok 等于 false,返回错误原因 |
脚本实例:
--如果电脑/手机文件名所在的文件夹不存在,或者没有权限,或者文件名存在非法字符,文件会下载失败ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")toast("开始测试")--从中控器下载文件--本地的文件名(手机上)local local_file = userPath().."/res/aaa/test.zip"--中控的文件名(相对于中控器的根路径),v1.2.5 以上版本中控相对路径默认为 TouchSpriteENT_Files 文件夹下local remote_file = 'test.zip'--[[--这是 Win 绝对路径local remote_file = "E:\\上传脚本\\测试\\1.txt"--这是 Mac 绝对路径local remote_file = "/Users/xxxx/Documents/abc"]]--if ok thentoast("下载成功")elsetoast(err)returnend--测试速度结果:80M 文件 11 - 18 秒--此功能需要配合 1069 以上版本中控器方可使用
| 参数 | 类型 | 说明 |
|---|---|---|
| action | string | 设置模式, 填写 "set_column" 为设置变量监控列名, 填写 "set_variable" 为上传每列列值 |
| *str | string | 列名或列值 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回 true,失败返回 false |
| msg | string | 当 ok 等于 true,无返回值;当 ok 等于 false,返回错误原因 |
脚本实例:
--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")--设置变量监控列信息local ok,msg = ts_enterprise_lib:plugin_api_call("VariableMonitor","set_column","序号","随机数","序号+随机数","序号*随机数")toast(ok and "set_column 成功" or "set_column 失败:"..msg)mSleep(1000)math.randomseed(os.time())for i = 1 , 100 dolocal var1 = ilocal var2 = math.random()local var3 = var1+var2local var4 = var1*var2--上传每列数据local ok,msg = ts_enterprise_lib:plugin_api_call("VariableMonitor","set_variable",var1,var2,var3,var4)toast(ok and "set_variable 成功" or "set_variable 失败:"..msg)mSleep(1000)end
当调用企业库 plugin_api_call 方法第一个参数填写 "DataCenter" 时,可以调用企业版数据中心的相关函数功能,第二个参数为函数名称。
| 参数 | 类型 | 说明 |
|---|---|---|
| category | string | 必填,需要创建的数据中心分类名 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回 true,失败返回 false |
| ret1 | string/boolean | 当 ok 等于 true,创建成功;当 ok 等于 false,创建成功 |
| ret2 | string | 当 ret1 等 true,返回成功;当 ret1 等于 false,返回失败原因 |
函数用例:
ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")--分类名称local category = "分类"local ok,ret1,ret2 = ts_enterprise_lib:plugin_api_call("DataCenter","add_category",category)if ok thentoast("创建成功")elsetoast("创建失败 : " .. ret1)end
| 参数 | 类型 | 说明 |
|---|---|---|
| category | string | 必填,数据中心分类名 |
| data | string | 必填,要插入的数据 |
-----------是否可以写为空
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回 true,失败返回 false |
| ret1 | string/boolean | 当 ok 等于 true,返回数据获取状态;当 ok 等于 false,返回错误原因 |
| ret2 | string | 当 ret1 等于 true,无返回;当 ret1 等于 false,返回失败原因 |
函数用例:
--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")local category = "测试分类"--添加一个数据local data = "要插入的数据"local ok,ret1,ret2 = ts_enterprise_lib:plugin_api_call("DataCenter","insert_data",category,data)if ok thenif ret1 thennLog("insert_data 成功")elsenLog("insert_data 失败:"..ret2)endelsenLog("insert_data 失败:"..ret1)endmSleep(5000)
| 参数 | 类型 | 说明 |
|---|---|---|
| category | string | 必填,数据中心分类名 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回 true,失败返回 false |
| ret1 | string/boolean | 当 ok 等 于 true,返回数据获取状态;当 ok 等于 false,返回错误原因 |
| ret2 | string | 当 ret1 等于 true,返回数据;当 ret1 等于 false,返回失败原因 |
函数用例:
-- 本例子所调用的 API,在中控根目录 plugin/DataCenter/api.lua 中都有实现源码,可根据自己的实际需要做功能调整--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")local category = "测试分类"-- 取数据操作,每 5 秒取一次数据,取 100 次for i = 1 , 100 do-- 使用中控库的插件 api 调用接口-- category 是分类名local ok,ret1,ret2 = ts_enterprise_lib:plugin_api_call("DataCenter","get_data",category)-- 返回 ok 表示插件 api 是否调用成功,ret1,ret2 是 api 的返回值if ok thenif ret1 thennLog("get_data 成功:"..ret2)elsenLog("get_data 失败:"..ret2)endelsenLog("get_data 失败:"..ret1)endmSleep(5000)end
| 参数 | 类型 | 说明 |
|---|---|---|
| category | string | 必填,数据中心分类名 |
| count | number | 必填,获取数据数量 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回 true,失败返回 false |
| ret1 | string/boolean | 当 ok 等于 true,返回数据获取状态;当 ok 等于 false,返回错误原因 |
| ret2 | string/table | 当 ret1 等于 true,返回 table 格式的数据;当 ret1 等于 false,返回失败原因 |
函数用例:
--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")--使用扩展库前必须插入这一句local ts = require("ts")--使用 JSON 模块前必须插入这一句local json = ts.json--批量取数据--数据中心分类名local category = "测试分类"--需要获取数据的数量local count = 10local ok,ret1,ret2 = ts_enterprise_lib:plugin_api_call("DataCenter","batch_data",category,count)if ok thenif ret1 then--返回一个数组tablenLog("batch_data 成功:"..json.encode(ret2))elsenLog("batch_data 失败:"..ret2)endelsenLog("batch_data 失败:"..ret1)end
| 参数 | 类型 | 说明 |
|---|---|---|
| category | string | 必填,数据中心分类名 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回 true,失败返回 false |
| ret1 | string/boolean | 当 ok 等于 true,返回数据获取状态;当 ok 等于 false,返回错误原因 |
| ret2 | string | 当 ret1 等于 true,返回剩余数据数量;当 ret1 等于 false,返回失败原因 |
函数用例:
--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")--获取剩余有效数据数量(未使用)--数据中心分类名local category = "测试分类"local ok,ret1,ret2 =ts_enterprise_lib:plugin_api_call("DataCenter","get_remain_count",category)if ok thenif ret1 thennLog("get_remain_count 成功,剩余有效数据数量为"..ret2)elsenLog("get_remain_count 失败:"..ret2)endelsenLog("get_remain_count 失败:"..ret1)end
| 参数 | 类型 | 说明 |
|---|---|---|
| category | string | 必填,数据中心分类名 |
| data | string | 必填,要还原的数据 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回 true,失败返回 false |
| ret1 | string/boolean | 当 ok 等于 true,返回数据获取状态;当 ok 等于 false,返回错误原因 |
| ret2 | string | 当 ret1 等于 true,无返回;当 ret1 等于 false,返回失败原因 |
脚本实例:
--注意: 以下函数在中控器 build 1081 及以后的版本才支持--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")--数据中心分类名local category = "测试分类"--需要还原的数据local data = "要归还的数据"local ok,ret1,ret2 = ts_enterprise_lib:plugin_api_call("DataCenter","revert_data",category,data)if ok thenif ret1 thennLog("revert_data 成功:")elsenLog("revert_data 失败:"..ret2)endelsenLog("revert_data 失败:"..ret1)end
| 参数 | 类型 | 说明 |
|---|---|---|
| category | string | 必填,数据中心分类名 |
| data | string | 必填,要删除的数据 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回 true,失败返回 false |
| ret1 | string/boolean | 当 ok 等于 true,返回数据获取状态;当 ok 等于 false,返回错误原因 |
| ret2 | string | 当 ret1 等于 true,无返回;当 ret1 等于 false,返回失败原因 |
脚本实例:
--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")--数据中心分类名local category = "测试分类"--删除一个分类下的某个数据--需要删除的数据local data="13321638994";local ok,ret1,ret2= ts_enterprise_lib:plugin_api_call("DataCenter","delete_data",category,data)if ok thenif ret1 thendialog("删除成功", 5)return trueelsedialog("ret1 失败:"..ret1)endelsedialog("ok 失败:"..ret1)endmSleep(5000)
| 参数 | 类型 | 说明 |
|---|---|---|
| category | string | 必填,数据中心分类名 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回 true,失败返回 false |
| msg | string | 当 ok 等于 true,无返回值;当 ok 等于 false,返回错误原因 |
脚本实例:
--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")--重置某个分类下的数据--数据中心分类名local category = "测试分类"local ok,msg = ts_enterprise_lib:clear_dataCenterUser(category)assert(ok)if ok thennLog("重置成功!")toast("重置成功!")elsenLog("重置失败!"..msg)toast("重置失败!"..msg)end
ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")local category = "insert_data"local ts = require("ts")--使用扩展库前必须插入这一句local json = ts.json--使用 JSON 模块前必须插入这一句toast("创建分类名 测试")local category = "分类"local ok,ret1,ret2 = ts_enterprise_lib:plugin_api_call("DataCenter","add_category",category)if ok thendialog("创建成功")elsedialog("创建失败 : " .. ret1)endtoast("插入数据 测试")mSleep(1000)local data = "要插入的数据"local ok,ret1,ret2 = ts_enterprise_lib:plugin_api_call("DataCenter","insert_data",category,data..os.date("%H%M%S"))if ok thenif ret1 thendialog("插入数据 insert_data 成功")elsedialog("插入数据 insert_data 失败:"..ret2)endelsedialog("插入数据 insert_data 失败:"..ret1)endtoast("获取数据 测试")mSleep(1000)local ok,ret1,ret3 = ts_enterprise_lib:plugin_api_call("DataCenter","get_data",category)if ok thenif ret1 thendialog("获取数据 get_data 成功:"..ret3)elsedialog("获取数据 get_data 失败:"..ret3)endelsedialog("获取数据 get_data 失败:"..ret1)endtoast("还原数据 测试")mSleep(1000)local ok,ret1,ret2 = ts_enterprise_lib:plugin_api_call("DataCenter","revert_data",category,ret3)if ok thenif ret1 thendialog("还原数据 revert_data 成功:")elsedialog("还原数据 revert_data 失败:"..ret2)endelsedialog("还原数据 revert_data 失败:"..ret1)endtoast("批量获取数据 测试") mSleep(1000)local count = 2 --取数据数量local ok,ret1,ret2 = ts_enterprise_lib:plugin_api_call("DataCenter","batch_data",category,count)if ok thenif ret1 thendialog("批量获取数据 batch_data 成功:"..json.encode(ret2))elsedialog("批量获取数据 batch_data 失败:"..ret2)endelsedialog("批量获取数据 batch_data 失败:"..ret1)endtoast("重置数据中心 测试") mSleep(1000)local ok,msg = ts_enterprise_lib:clear_dataCenterUser(category)assert(ok)if ok thendialog("重置数据中心 重置成功!")elsedialog("重置数据中心 重置失败!"..msg)endtoast("剩余有效数据 测试")mSleep(1000)local ok,ret1,ret2 = ts_enterprise_lib:plugin_api_call("DataCenter","get_remain_count",category)if ok thenif ret1 thendialog("剩余有效数据 get_remain_count 成功,剩余有效数据数量为:"..ret2)elsedialog("剩余有效数据 get_remain_count 失败:"..ret2)endelsedialog("剩余有效数据 get_remain_count 失败:"..ret1)endtoast("删除数据 测试")mSleep(1000)local ok,ret1,ret2= ts_enterprise_lib:plugin_api_call("DataCenter","delete_data",category,ret3)if ok thenif ret1 thendialog("删除数据 删除成功", 5)elsedialog("删除数据 ret1 失败:"..ret1)endelsedialog("删除数据 ok 失败:"..ret1)end
此功能模块为云控用户提供云端文件存储、调用服务
云盘访问地址: http://yun.touchsprite.com/
| 参数 | 类型 | 说明 |
|---|---|---|
| file | string | 必填,需要获取文件的文件夹路径 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ret | table | true/fale 和文件列表 |
脚本实例:
local ts = require("ts")local json = ts.jsonts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")dialog(json.encode({ts_enterprise_lib:cloud_file_list("/")}))
| 参数 | 类型 | 说明 |
|---|---|---|
| file | string | 必填,需要创建的文件(夹)路径,创建文件请写明后缀,否则将无法显示后缀 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ret | table | 成功 - true,失败 - false |
脚本实例:
local ts = require("ts")local json = ts.jsonts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")--创建 a1 文件夹dialog(json.encode({ts_enterprise_lib:cloud_file_new("/a1/")}))--在 a1 文件夹下创建 1.txt 文件dialog(json.encode({ts_enterprise_lib:cloud_file_new("/a1/1.txt")}))
| 参数 | 类型 | 说明 |
|---|---|---|
| file | string | 必填,需要修改的文件(夹)路径 |
| rename | string | 必填,需要修改的文件(夹)名称。如果是修改文件,不需要写文件后缀 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ret | table | 成功 - true,失败 - false |
脚本实例:
local ts = require("ts")local json = ts.jsonts_enterprise_lib = require("ts_enterprise_lib")--修改 a1 文件夹下 1.txt 文件名称为 2.txtdialog(json.encode({ts_enterprise_lib:cloud_file_rename("/a1/1.txt","2")}))--修改 a1 文件夹下的 1 文件夹名称为 2dialog(json.encode({ts_enterprise_lib:cloud_file_rename("/a1/1/","2")}))
| 参数 | 类型 | 说明 |
|---|---|---|
| file | string | 需要删除的文件(夹)路径 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ret | table | 成功 - true,失败 - false |
脚本实例:
local ts = require("ts")local json = ts.jsonts_enterprise_lib = require("ts_enterprise_lib")--删除 a1 文件夹下的 2 文件夹dialog(json.encode({ts_enterprise_lib:cloud_file_del("/a1/2/")}))--删除 a1 文件夹下的 2.txt 文件dialog(json.encode({ts_enterprise_lib:cloud_file_del("/a1/2.txt")}))
| 参数 | 类型 | 说明 |
|---|---|---|
| cloud_file_name | string | 必填,写入文件路径,需包含完整文件名 |
| file_data | string | 必填,文件内容 |
| timeout_seconds | number | 选填,超时时间,单位秒。数据较大时,应适当延长,默认为 5 秒 |
---是否可以为空
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回true,失败返回false |
| err | string | 当ok等于true,无返回值;当ok等于false,返回错误原因 |
脚本实例:
ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")--云文件名,包含目录的完整文件名--云盘文件路径不存在会创建路径下的文件及文件夹,即创建 aaa 文件夹下的 bbb 文件夹下的 2.lua 文件,并插入数据:123local cloud_file_name = "/aaa/bbb/2.lua"--需要插入的数据local file_data = "123"--超时秒数,数据较大时,适当延长local timeout_seconds = 30;local ok,err = ts_enterprise_lib:cloud_file_save(cloud_file_name,file_data,timeout_seconds)if ok thendialog("成功")elsedialog(err)end
| 参数 | 类型 | 说明 |
|---|---|---|
| cloud_file_name | string | 必填,读取文件路径,需包含完整文件名 |
| timeout_seconds | number | 选填,超时时间,单位秒。数据较大时,应适当延长,默认为 5 秒 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返 回true,失败返回 false |
| err | string | 当 ok 等于 true,无返回值;当 ok 等于 false,返回错误原因 |
脚本实例:
ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")--云文件名,包含目录的完整文件名local cloud_file_name = "/aaa/bbb/脚本2.lua"--超时秒数,数据较大时,适当延长local timeout_seconds = 30;local ok,data = ts_enterprise_lib:cloud_file_load(cloud_file_name,timeout_seconds)if ok thendialog("success:"..data)elsedialog("fail:"..data)end
| 参数 | 类型 | 说明 |
|---|---|---|
| local_file | string | 必填,本地文件路径,需包含完整文件名 |
| cloud_file_name | string | 必填,云盘文件路径,需包含完整文件名 |
| timeout_seconds | number | 选填,超时时间,单位秒。数据较大时,应适当延长,默认为 5 秒 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回 true,失败返回 false |
| err | string | 当 ok 等 于true,无返回值;当 ok 等于 false,返回错误原因 |
脚本实例:
ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")--本地文件名local local_file = userPath().."/1.lua"--云文件名,包含目录的完整文件名local cloud_file_name = "/aaa/bbb/脚本2.lua"--超时秒数,数据较大时,适当延长local timeout_seconds = 30;local ok,err = ts_enterprise_lib:cloud_file_pull(local_file,cloud_file_name,timeout_seconds)if ok thendialog("成功")elsedialog(err)end
| 参数 | 类型 | 说明 |
|---|---|---|
| local_file | string | 必填,本地文件路径,需包含完整文件名 |
| cloud_file_name | string | 必填,云盘文件路径,需包含完整文件名 |
| timeout_seconds | number | 选填,超时时间,单位秒。数据较大时,应适当延长,默认为 5 秒 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回 true,失败返回 false |
| err | string | 当 ok 等于 true,无返回值;当 ok 等于 false,返回错误原因 |
脚本实例:
ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")--本地文件名local local_file = userPath().."/1.lua"--云文件名,包含目录的完整文件名--云盘文件路径不存在会创建路径下的文件夹local cloud_file_name = "/aaa/bbb/push.lua"--超时秒数,数据较大时,适当延长local timeout_seconds = 30;local ok,err = ts_enterprise_lib:cloud_file_push(local_file,cloud_file_name,timeout_seconds)if ok thendialog("成功")elsedialog(err)end
此功能模块为云控用户提供云端数据存储、查询等功能
云数据库访问地址: http://cloud-db.touchsprite.com/
云数据库开发教程:http://v.youku.com/v_show/id_XMzE4MTY4MTc1Mg==.html?qq-pf-to=pcqq.c2c
- 用户可在数据库管理平台中对已经有操作权限的表进行导入、添加、修改、删除等操作(导入数据大小限制为 5M,仅支持 txt 格式文件导入,文件中数据需以空格进行列分割、以回车进行行分割)
- 用户可在数据库管理平台为已经有操作权限的表添加视图,可针对视图设置权限(公开、私有)
- 开发者可在数据库管理平台建立表结构供脚本用户使用
- 开发者需设置数据库中每条记录的大小(单位:kb)
- 开发者需设置允许访问表的用户列表(关联企业用户账号至该表)
- 添加列名(用于在脚本中访问,首位必须为英文)
- 添加列显示名(用于在用户视图中展示数据时使用,仅限使用中英文)
| 参数 | 类型 | 说明 |
|---|---|---|
| table_id | string | 必填,云数据库表 ID,可在数据库管理平台查看 |
| data | table | 必填,需要插入的数据,格式为键值对,对应列名和数据 |
| timeout_seconds | number | 选填,超时时间,单位秒。数据较大时,应适当延长,默认为 5 秒 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回 true,失败返回 false |
| err | string | 当 ok 等于 true,返回用户查询的实际结果;当 ok 等于 false,返回错误原因 |
脚本实例:
--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")--添加数据--云数据库表 ID,可在云数据库管理平台查看local table_id = '58b7968986d4e24f4a0cf4e5'--需要写入的数据local data = {a=1,b=1}--超时设置,单位:秒local timeout_seconds = 30local ok,err = ts_enterprise_lib:cloud_db_add(table_id,data,timeout_seconds)if ok thendialog("成功")elsedialog(err)end
| 参数 | 类型 | 说明 |
|---|---|---|
| table_id | string | 云数据库表 ID,可在数据库管理平台查看 |
| where | table | 删除条件,格式为键值对,对应列名和数据 可写多个条件,条件更多写法参考查询数据 |
| timeout_seconds | number | 超时时间,单位秒。数据较大时,应适当延长,默认为 5 秒 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回 true,失败返回 false |
| err | string | 当 ok 等于 true,返回用户查询的实际结果;当 ok 等于 false,返回错误原因 |
脚本实例:
--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")--删除数据--云数据库表 ID,可在云数据库管理平台查看local table_id = '58b7968986d4e24f4a0cf4e5'--条件(可多个条件)local where = {a=3}--超时时间,单位秒local timeout_seconds = 30local ok,err = ts_enterprise_lib:cloud_db_delete(table_id,where,timeout_seconds)if ok thendialog("成功")elsedialog(err)end
| 参数 | 类型 | 说明 |
|---|---|---|
| table_id | string | 云数据库表ID,可在数据库管理平台查看 |
| where | table | 删除条件,格式为键值对,对应列名和数据 可写多个条件,条件更多写法参考查询数据 |
| data | table | 修改数据,格式为键值对,对应列名和数据 |
| timeout_seconds | number | 超时时间,单位秒。数据较大时,应适当延长,默认为 5 秒 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回true,失败返回false |
| err | string | 当 ok 等于 true,返回用户查询的实际结果;当ok等于false,返回错误原因 |
脚本实例:
--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")--修改数据local table_id = '58b7968986d4e24f4a0cf4e5' --表idlocal where = {a=2} --条件local data= {a=5}local timeout_seconds = 30 --超时local ok,err = ts_enterprise_lib:cloud_db_update(table_id,where,data,timeout_seconds)if ok thendialog("成功")elsedialog(err)end
| 参数 | 类型 | 说明 |
|---|---|---|
| table_id | string | 云数据库表ID,可在数据库管理平台查看 |
| where | table | 删除条件,格式为键值对,对应列名和数据 可写多个条件,条件写法参考脚本示例 |
| timeout_seconds | number | 超时时间,单位秒。数据较大时,应适当延长,默认为 5 秒 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回true,失败返回false |
| ret | string/table | 当 ok 等于 true,返回用户查询的实际结果;当ok等于false,返回错误原因 |
脚本实例1:普通查询
--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")local ts = require("ts")--使用扩展库前必须插入这一句local json = ts.json--使用 JSON 模块前必须插入这一句--查询数据local table_id = '58b7968986d4e24f4a0cf4e5' --表idlocal where = {a=5 } --条件local timeout_seconds = 30 --超时local ok,ret = ts_enterprise_lib:cloud_db_query(table_id,where,timeout_seconds)if ok thendialog("成功:"..ts_enterprise_lib.json.encode(ret))elsedialog(ret)end
脚本实例2:分页查询
--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")local ts = require("ts")--使用扩展库前必须插入这一句local json = ts.json--使用 JSON 模块前必须插入这一句--分页查询数据local table_id = '58b7968986d4e24f4a0cf4e5' --表idlocal where = {a=5 } --条件local option = {pageSize=1,pageIndex=0} --pageSize分页大小(<1000,default:50),pageIndex分页序号(default:0),local timeout_seconds = 30 --超时local ok,ret = ts_enterprise_lib:cloud_db_query(table_id,where,option,timeout_seconds)if ok thendialog("成功:"..ts_enterprise_lib.json.encode(ret))elsedialog(ret)end
脚本实例3:排序查询
--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")local ts = require("ts")--使用扩展库前必须插入这一句local json = ts.json--使用 JSON 模块前必须插入这一句--排序查询数据local table_id = '58b7968986d4e24f4a0cf4e5' --表idlocal where = {} --条件local option = {sort={a=-1 -- -1:从大到小、1:从小到大}}local timeout_seconds = 30 --超时local ok,ret = ts_enterprise_lib:cloud_db_query(table_id,where,option,timeout_seconds)if ok thendialog("成功:"..ts_enterprise_lib.json.encode(ret))elsedialog(ret)end
脚本实例4:模糊条件查询
--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")local ts = require("ts")--使用扩展库前必须插入这一句local json = ts.json--使用 JSON 模块前必须插入这一句--表idlocal table_id = '58a522d7f502b1263083b74b'local where = {a={lt=2},b={lte=1},c={gt=1},d={gte=1},e={ne=1},f={regex = "b", type="first" } }--条件--说明--小于:lt,小于或等于:lte,大于:gt,大于或等于:gte,不等于:ne--模糊: regex="b" type="first" 开头匹配 type="all" 任意匹配local timeout_seconds = 30 --超时local ok,ret = ts_enterprise_lib:cloud_db_query(table_id,where,timeout_seconds)if ok thendialog("成功:"..ts_enterprise_lib.json.encode(ret))elsedialog(ret)end
| 参数 | 类型 | 说明 |
|---|---|---|
| table_id | string | 云数据库表ID,可在数据库管理平台查看 |
| where | table | 获取条件,填写为{used_device=""}即可 |
| data | table | 更新数据,填写为{used_device=getDeviceID()} |
| timeout_seconds | number | 超时时间,单位秒。数据较大时,应适当延长,默认为 5 秒 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ok | boolean | 操作结果,成功返回true,失败返回false |
| ret | string/table | 当ok等于true,返回查询到的数据;当ok等于false,返回错误原因 |
脚本实例
--获取数据--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")local ts = require("ts")--使用扩展库前必须插入这一句local json = ts.json--使用 JSON 模块前必须插入这一句--表idlocal table_id = '58a522d7f502b1263083b74b'--表中包括两个字段,data字段为取号的内容,used_device 为使用号的设备,如果为空,表示此号未使用--取号可以通过以下代码完成if ts_enterprise_lib.build and ts_enterprise_lib.build >=100 thenlocal ok,ret = ts_enterprise_lib:cloud_db_query_update(table_id, --table id{used_device=""}, --未使用的号的条件{used_device=getDeviceID()}, --修改used_device为当前设备号,给该记录设置了使用标记60)if ok thenif #ret > 0 thendialog("成功取号:"..ts_enterprise_lib.json.encode(ret))--nLog(ts_enterprise_lib.json.encode(ret))elsedialog("没号了")endelsedialog(ret)endelsedialog('ts_enterprise_lib版本太低')end
启动参数有两种设置方式:
1. 在开发者平台的脚本参数设置内设置
2. 使用script.json文件配置
script.json文件放到脚本文件夹下即可生效
※json需要按照规范编写,不可以添加注释,否则会导致解析错误
※文件编码方式选择UTF-8,其他模式会导致中文乱码
※当两种方式都设置的时候,以json文件配置为准
每个参数需定义 name 以做标识,在脚本中以name字段值为变量名调用即可
调用示例:
json:
{"params":[ { "display_name": "选项", "default": "1", "name": "mode",
"type": 2 },],"name":"lua脚本测试变量监控" }
lua:
dialog(mode,time)
| 参数 | 类型 | 说明 |
|---|---|---|
| params | - | 脚本参数模板 |
| display_name | 文本型 | 脚本显示名 |
| name | 文本型 | 变量名 |
| default | 文本型 | 该选项缺省值,即默认选项 |
| type | 数字型 | 指定选项类型,1 - 数字;2 - 字符串 |
json示例1:
{"params":[{"display_name": "1游戏模式(1:升级模式,2:打怪模式)","default": "1","name": "mode","type": 2},{"display_name": "登录用户名","default": "test","name": "user","type": 2},{"display_name": "登录密码","default": "123456","name": "password","type": 2}],"name":"lua脚本测试变量监控" --修改脚本名称为 lua脚本测试变量监控}
json示例2:
{"params": [{"display_name": "数字","name": "number","type": 1,"default": "1"},{"display_name": "字符串","name": "string","type": 2,"default": "string"},{"display_name": "单选","name": "radio","type": 3,"options": [{"name": "1","value": 0},{"name": "2","value": 1},{"name": "3","value": 2},{"name": "4","value": 3}],"default": "0"},{"display_name": "多选","name": "checkbox","type": 4,"options": [{"name": "1","value": 0},{"name": "2","value": 1},{"name": "3","value": 2},{"name": "4","value": 3},{"name": "5","value": 4}],"default": "0@1@2"},{"name": "4m7yf7FJVxBPnlqY9ZFKyKLtrYoCduhc","type": 5,"value": "<p>这是文字说明<br></p>","default": "<p>这是文字说明<br></p>"}]}
| 参数 | 类型 | 说明 |
|---|---|---|
| type | 文本型 | 控件类型,填写switches |
| id | 文本型 | 控件标识,脚本调用的变量名 |
| list | 文本型 | 开关名称,可写多项,用“,”隔开 |
| select | 文本型 | 选中项,可写多项,用“@”隔开,选项编号从0开始 |
json示例:
{"params": [{"id": "kg","type": "switches","list": "开关1,开关2,开关3","select": "0@2"}]}
| 参数 | 类型 | 说明 |
|---|---|---|
| type | 文本型 | 控件类型,填写RadioGroup |
| id | 文本型 | 控件标识,脚本调用的变量名 |
| list | 文本型 | 开关名称,可写多项,用“,”隔开 |
| select | 文本型 | 选中项,选项编号从0开始 |
json示例:
{"params": [{"id": "dx","type": "RadioGroup","list": "选项1,选项2,选项3","select": "1"}]}
| 参数 | 类型 | 说明 |
|---|---|---|
| type | 文本型 | 控件类型,填写CheckBoxGroup |
| id | 文本型 | 控件标识,脚本调用的变量名 |
| list | 文本型 | 开关名称,可写多项,用“,”隔开 |
| select | 文本型 | 选中项,选项编号从0开始,可写多项,用“@”隔开 |
json示例:
{"params": [{"id": "ceshi9","type": "CheckBoxGroup","list": "选项1,选项2,选项3,选项4","select": "0@3"}]}
| 参数 | 类型 | 说明 |
|---|---|---|
| type | 文本型 | 控件类型,填写Label |
| text | 文本型 | 标题 |
| size | 文本型 | 字体大小 |
| align | 文本型 | 对齐方式,center-居中,left-左,right-右 |
| color | 文本型 | 字体颜色,格式:“255,255,255” |
json示例:
{"params": [{"type": "Label","text": "文字标签","size": 18,"align": "center","color": "0,168,233"},{"id": "ceshi9","type": "CheckBoxGroup","list": "选项1,选项2,选项3,选项4","select": "0@3"}]}
- 注意:当json中只有label时无法显示,需要和其他控件一起使用
| 参数 | 类型 | 说明 |
|---|---|---|
| type | 文本型 | 控件类型,填写Edit |
| id | 文本型 | 控件标识,脚本调用的变量名 |
| prompt | 文本型 | 提示内容 |
| text | 文本型 | 默认内容 |
| row | 文本型 | 编辑框行数,可缺省,默认为一行 |
| kbtype | 文本型 | 编辑框类型,填写ascii |
json示例:
{"params": [{"id": "input","type": "Edit","prompt": "请输入一个字母","text": "默认值","row": "5","kbtype": "ascii"}]}
| 参数 | 类型 | 说明 |
|---|---|---|
| type | 文本型 | 控件类型,填写Edit |
| id | 文本型 | 控件标识,脚本调用的变量名 |
| prompt | 文本型 | 提示内容 |
| text | 文本型 | 默认内容 |
| kbtype | 文本型 | 编辑框类型,填写password |
json示例:
{"params": [{"id": "ceshi8","type": "Edit","prompt": "请输入密码","text": "hhkjkjh","kbtype": "password"}]}
| 参数 | 类型 | 说明 |
|---|---|---|
| type | 文本型 | 控件类型,填写Edit |
| id | 文本型 | 控件标识,脚本调用的变量名 |
| prompt | 文本型 | 提示内容 |
| text | 文本型 | 默认内容 |
| kbtype | 文本型 | 编辑框类型,填写number |
json示例:
{"params": [{"id": "num","type": "Edit","prompt": "请输入一个数字","text": "2","kbtype": "number"}]}
| 参数 | 类型 | 说明 |
|---|---|---|
| type | 文本型 | 控件类型,填写Edit |
| id | 文本型 | 控件标识,脚本调用的变量名 |
| kbtype | 文本型 | 编辑框类型,填写range |
| max | 文本型 | 最大值 |
| min | 文本型 | 最小值 |
json示例:
{"params": [{"id": "num","type": "Edit","kbtype": "range","max": "100","min": "0"}]}
| 参数 | 类型 | 说明 |
|---|---|---|
| type | 文本型 | 控件类型,填写ComboBox |
| id | 文本型 | 控件标识,脚本调用的变量名 |
| list | 文本型 | 选择项,多个可选项目之间用英文半角逗号分割 |
| select | 文本型 | 选中项,选项编号从0开始 |
json示例:
{"params": [{"id": "ceshi11","type": "ComboBox","list": "选项1,选项2,选项3,选项4,选项5,选项6,选项7","select": "1"}]}
| 参数 | 类型 | 说明 |
|---|---|---|
| type | 文本型 | 控件类型,填写ComboBox |
| id | 文本型 | 控件标识,脚本调用的变量名 |
| list | 文本型 | 一级下拉框选择项,多个可选项目之间用英文半角逗号分割 |
| data | 文本型 | 二级下拉框选择项,选择项有几项,需要用#号分割成几项 |
| select | 文本型 | 选中项,选项编号从0开始,一级和二级选项间用#分割 |
json示例:
{"params": [{"id": "ceshi10","type": "ComboBox","list": "选项1,选项2,选项3","select": "2#1","data": "子选项1,子选项2,子选项3,子选项4#子选项5,子选项6,子选项7#子选项8,子选项9","source": "test"}]}
| 参数 | 类型 | 说明 |
|---|---|---|
| type | 文本型 | 控件类型,填写Image |
| id | 文本型 | 控件标识,脚本调用的变量名 |
| scr | 文本型 | 图片地址,填写图片url地址 |
json示例:
{"params": [{"type": "Image","src": "http://www.touchsprite.com/wp-content/uploads/2016/10/banner2_790x230-790x0.png"}]}
{"params": [{"type": "Label","text": "标题1","size": 18,"align": "center","color": "0,168,233"}, {"type": "Image","src": "http://www.touchsprite.com/wp-content/uploads/2016/10/banner2_790x230-790x0.png"}, {"type": "Label","text": "switches控件","size": 16,"align": "left","color": "0,168,233"}, {"id": "kg","type": "switches","list": "开关1,开关2,开关3","select": "0@2"}, {"type": "Label","text": "RadioGroup控件","size": 16,"align": "left","color": "0,168,233"}, {"id": "dx","type": "RadioGroup","list": "选项1,选项2,选项3","select": "1"}, {"type": "Label","text": "Edit控件(普通)","size": 16,"align": "left","color": "0,168,233"}, {"id": "input","type": "Edit","prompt": "请输入一个字母","text": "默认值","kbtype": "ascii"}, {"type": "Label","text": "Edit控件(多行)","size": 16,"align": "left","color": "0,168,233"}, {"id": "shuru","type": "Edit","prompt": "请输入一个字母","text": "默认值","row": "5","kbtype": "ascii"}, {"type": "Label","text": "Edit控件(滑块)","size": 16,"align": "left","color": "0,168,233"}, {"id": "num","type": "Edit","prompt": "请输入一个数字","text": "2","kbtype": "range","max": "100","min": "0"}, {"type": "Label","text": "Edit控件(数字)","size": 16,"align": "left","color": "0,168,233"}, {"id": "num1","type": "Edit","prompt": "请输入一个数字","text": "123456","kbtype": "number"}, {"type": "Label","text": "Edit控件(密码)","size": 16,"align": "left","color": "0,168,233"}, {"id": "ceshi8","type": "Edit","prompt": "请输入密码","text": "hhkjkjh","kbtype": "password"}, {"type": "Label","text": "CheckBoxGroup控件","size": 16,"align": "left","color": "0,168,233"}, {"id": "ceshi9","type": "CheckBoxGroup","list": "选项1,选项2,选项3,选项4","select": "0@3"}, {"type": "Label","text": "ComboBox控件(二级)","size": 16,"align": "left","color": "0,168,233"}, {"id": "ceshi10","type": "ComboBox","list": "选项1,选项2,选项3","select": "2#1","data": "子选项1,子选项2,子选项3,子选项4#子选项5,子选项6,子选项7#子选项8,子选项9","source": "test"}, {"type": "Label","text": "ComboBox控件(一级)","size": 16,"align": "left","color": "0,168,233"}, {"id": "ceshi11","type": "ComboBox","list": "选项1,选项2,选项3,选项4,选项5,选项6,选项7","select": "1"}]}
{"params": {"width":590,"height":550,"titles":"第1页,第2页,第3页","pages": [[{"type": "Label","text": "标题1","size": 18,"align": "center","color": "0,168,233"},{"type": "Image","src": "http://www.touchsprite.com/wp-content/uploads/2016/10/banner2_790x230-790x0.png"},{"type": "Label","text": "switches控件","size": 16,"align": "left","color": "0,168,233"},{"type": "switches","list": "开关1,开关2,开关3","select": "0@2","id":"swk"},{"type": "Label","text": "RadioGroup控件","size": 16,"align": "left","color": "0,168,233"},{"id": "ceshi4","type": "RadioGroup","list": "选项1,选项2,选项3","select": "1"},{"type": "Label","text": "Edit控件(普通)","size": 16,"align": "left","color": "0,168,233"},{"id": "ceshi5","type": "Edit","prompt": "请输入一个字母","text": "默认值","kbtype": "ascii"},{"type": "Label","text": "Edit控件(多行)","size": 16,"align": "left","color": "0,168,233"},{"id": "ceshi6","type": "Edit","prompt": "请输入一个字母","text": "默认值","row": "5","kbtype": "ascii"},{"type": "Label","text": "Edit控件(滑块)","size": 16,"align": "left","color": "0,168,233"},{"type": "Edit","prompt": "请输入一个数字","text": "2","kbtype": "range","max": "100","min": "0","id":"hk"},{"type": "Label","text": "Edit控件(数字)","size": 16,"align": "left","color": "0,168,233"},{"id": "ceshi7","type": "Edit","prompt": "请输入一个数字","text": "123456","kbtype": "number"},{"type": "Label","text": "Edit控件(密码)","size": 16,"align": "left","color": "0,168,233"},{"id": "ceshi8","type": "Edit","prompt": "请输入密码","text": "hhkjkjh","kbtype": "password"},{"type": "Label","text": "CheckBoxGroup控件","size": 16,"align": "left","color": "0,168,233"},{"id": "ceshi9","type": "CheckBoxGroup","list": "选项1,选项2,选项3,选项4","select": "0@3"},{"type": "Label","text": "ComboBox控件(二级)","size": 16,"align": "left","color": "0,168,233"},{"id": "ceshi10","type": "ComboBox","list": "选项1,选项2,选项3","select": "2#1","data": "子选项1,子选项2,子选项3,子选项4#子选项5,子选项6,子选项7#子选项8,子选项9","source": "test"},{"type": "Label","text": "ComboBox控件(一级)","size": 16,"align": "left","color": "0,168,233"},{"id": "ceshi11","type": "ComboBox","list": "选项1,选项2,选项3,选项4,选项5,选项6,选项7","select": "1"}],[{"type": "Label","size": 25,"text": "第二页设置","align": "center","color": "0,0,0"},{"text": "默认值","type": "Edit","kbtype": "ascii","prompt": "请输入一个字母"},{"text": "默认值","type": "Edit","kbtype": "number","prompt": "请输入一个数字"}],[{"type": "Label","size": 25,"text": "第三页设置","align": "center","color": "0,0,0"},{"type": "CheckBoxGroup","list": "选项1,选项2,选项3,选项4,选项5,选项6,选项7","select": "3@5"},{"list": "选项1,选项2,选项3","source": "test","type": "ComboBox","data": "子选项1,子选项2,子选项3,子选项4#子选项5,子选项6,子选项7#子选项8,子选项9","select": "1"},{"dataSource": "test","type": "ComboBox","select": "1"}]]}}
以下功能仅在1200之前版本的中控版本可以使用,新版本已弃用
--引入中控库local ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_libb,"无法引入企业专用库")local redis = ts_enterprise_lib.redisassert(redis,"无法引入redis库")local red = redis:new()red:set_timeout(5) -- 5 secassert(red:connect())assert(red:set("dog", "an animal"))local ret,msg = red:get("dog")if ret thennLog("dog is "..ret)elsenLog("redis get error"..msg)endassert(red:set("params", {aaa=111,bbb=222}))local params,msg = red:get("params")if params thennLog("params.aaa="..params.aaa..",params.bbb="..params.bbb)elsenLog("redis get params error"..msg)end
以下功能仅在 1267之后版本的中控版本可以使用
函数名称:保存数据交换的值
函数功能:保存数据交换的值
函数方法:
assert(ts_enterprise_lib:variable_save("k","v"))
| 参数 | 类型 | 说明 |
|---|---|---|
| k | string | 必填,对应是 key |
| v | string/number | 选填,对应是 value |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ret | boolean | true - 成功,false - 失败 |
| msg | string | 操作结果或者错误信息 |
函数用例:
--引入中控库local ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")assert(ts_enterprise_lib:variable_save("k","v"))if ret thennLog("params="..msg)elsenLog("get params error")end
函数名称:获取数据交换的值
函数功能:获取数据交换的 value 的值
函数方法:
local ret,msg = ts_enterprise_lib:variable_get("k")
| 参数 | 类型 | 说明 |
|---|---|---|
| k | string | 必填,对应是 key |
| 返回值 | 类型 | 说明 |
|---|---|---|
| ret | boolean | true - 成功,false - 失败 |
| msg | string | 查询结果或者错误信息 |
函数用例:
--引入中控库ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")local ret,msg = ts_enterprise_lib:variable_get("k")if ret thennLog("params="..msg)elsenLog("get params error")end
|____plugin| |____test --目录名为插件id| | |____1.png| | |____api.js| | |____api.lua| | |____EquipmentAuthor.css| | |____EquipmentAuthor.js| | |____main.lua| | |____plugin.json --插件配置文件| | |____plugin_index.html| | |____html.html
{"name": "插件演示", //插件显示名(桌面下的图标名)"window": {"title":"测试插件", //窗体的标题"width":1000, //窗体宽"height":500 //窗体高},"icon":"1.png", //桌面图标文件"index":"index.html", //桌面入口文件"main":"mail.lua", //插件的主函数入口"api":"api.lua" //插件api文件}
<!DOCTYPE html><html><head lang="en"><meta charset="UTF-8"><title></title><!--引入api调用的接口--><script src="api"></script></head><body><h1>测试插件</h1></body><script><!--调用插件api,名字abc,参数10,10,返回值ret1,ret2,ret3-->api_call("abc",function(success,ret1,ret2,ret3){console.info(success,ret1,ret2,ret3)alert(ret1)},10,10)</script></html>
local api = {}--取当前时间function api.current_time(task)return os.time()end--计算乘积function api.multiplication(task,a,b)return a*bend--多参数示例function api.multi_param(task,p1,p2,p3,p4)return p1,p2,p3,p4end--阻塞api示例local 退出条件 = falsefunction api.block(task)while true doif 退出条件 thenbreakend--在可能阻塞的代码段,必须调用task.sleep(x),其中x为等待x毫秒task.sleep(100)endend--获取设备号和脚本id示例function api.get_device(task)return task.deviceidendfunction api.get_tspid(task)return task.tspidendreturn api
<!--引入api调用的接口--><script src="api"></script>
<script><!--调用插件api,名字abc,参数1,2,3,4,返回值ret1,ret2,ret3,ret4-->api_call("multi_param",function(success,ret1,ret2,ret3,ret4){console.info(success,ret1,ret2,ret3,ret4)alert(ret1)},1,2,3,4)</script>
<!--引入api调用的接口--><script src="angular_api"></script><script><!--调用插件api,名字abc,参数1,2,3,4,返回值ret1,ret2,ret3,ret4-->angular_api_call($http,"multi_param",function(success,ret1,ret2,ret3,ret4){console.info(success,ret1,ret2,ret3,ret4)alert(ret1)},1,2,3,4)</script>
ts_enterprise_lib = require("ts_enterprise_lib")assert(ts_enterprise_lib,"无法引入企业专用库")-- 插件id(插件的目录名)local plugin_id = "test"-- 调用api的名字local api_name = "multi_param"local p1 = 1local p2 = 2local p3 = 3local p4 = 4--设置调用api等待的时间,缺省是5秒,对于立即返回的api,可以不用设置,如果是阻塞较长时间的api,根据需要调整大小,ts_enterprise_lib.timeout = 5local success,ret1,ret2,ret3,ret4 = ts_enterprise_lib:plugin_api_call(plugin_id,api_name,p1,p2,p3,p4)if success thentoast("调用成功:"..ret1..ret2..ret3..ret4)elsetoast("调用失败:"..ret1)end
local function init_plugin(task)-- todo 插件初始化endlocal function loop(task)-- todo 插件后台循环endreturn function(task)init_plugin(task)while true doloop(task)task.sleep(100)endend
https://www.zybuluo.com/miniknife/note/288009
showUI 不能弹出、点击没反应、滑动失效等问题有可能是由于安装了冲突插件引起的
https://www.zybuluo.com/miniknife/note/307651#已知与触动精灵冲突的插件列表
远程调试、运行脚本
TouchSprite Studio(v1.1.7):http://pan.baidu.com/s/1bn5b9Vp 密码:k9yf
远程截图、取色、生成代码
触动精灵抓色工具(v1.7.10):http://dev.touchsprite.com/
https://www.zybuluo.com/miniknife/note/307651#脚本加密
标签(空格分隔): 企业版
-- 获取文件列表
ts_enterprise_lib:cloud_file_list("/b1/")
-- 创建文件
ts_enterprise_lib:cloud_file_new("/b1/a3")
-- 重命名
-- 文件夹
ts_enterprise_lib:cloud_file_rename("/b1/a3","b3")
-- 文件
ts_enterprise_lib:cloud_file_rename("/b1/a3.txt","b3")
-- 删除文件
ts_enterprise_lib:cloud_file_del("/ipa/aa/bb/")
| 参数 | 类型 | 说明 |
|---|---|---|
| file | string | 必填,文件路径 |
| 返回值 | 类型 | 说明 |
|---|---|---|
| bool | boolean | 路径存在 - true,路径不存在 - false |
| type | string | bool 为 true 时 file - 文件,folder - 文件夹 |
函数名称:getRndStr 生成随机字符串
函数名称:生成随机字符串
函数功能:生成随机字符串
len = getRndStr(lib,num,len)
参数:
1.lib:string,必填,需要生成字符串的库
2.num:number,选填,需要生成的随机字符串中的字符数量,值为 6
3.len:number,选填,每个字符的长度,默认值为 1
返回值:
str:string生成的随机字符串
随机字符串 = string.random(字符池 [, 生成字符个数, 每字符的字节数 ])
字符池
文本型,需要生成字符串的字典
生成字符个数
整数型,可选参数,需要生成的随机字符串中的字符个数,默认 6
每字符的字节数
整数型,可选参数,每个字符的长度,默认 1
随机字符串
文本型,返回生成的随机字符串
去除掉文本前的 UTF8-BOM (string.strip_utf8_bom)
声明
处理后文本 = string.strip_utf8_bom(处理前文本)
参数及返回值
处理前文本
文本型,需要剔除掉 UTF8-BOM 字符的文本
处理后文本
文本型,返回已经剔除掉 UTF8-BOM 字符的文本
说明
UTF8-BOM 的表现形式是文档开头的三个看不见的字符 "\xEF\xBB\xBF" (在 Lua 源码中,字符串中 \x 开头,后面跟两位 16 进制数表示以该数字编码的单个字节。例如:\x58 表示 X 这个字符,可打印字符部分参考《ASCII 编码》)
这个函数在 1.1.3-1 版以上方可使用
函数名称:reTxtUtf8 过滤文本前的 UTF8-BOM 内容
功能:过滤文本前的 UTF8-BOM 内容
str2 = reTxtUtf8(str1)
参数: str1:需要过滤 UTF8-BOM 字符的内容
返回值:str2:过滤 UTF8-BOM 字符后的内容
发起 GET 请求 (http.get)
声明
HTTP状态码, 返回头JSON文本, 返回主体 = http.get(URL [, 超时秒, 请求头, URL不ESCAPE ])
参数及返回值
URL
文本型,需要请求的 URL 地址,该方法默认会对 URL 进行百分号 escape 处理,如不需要可参考 URL不ESCAPE 参数说明
超时秒
实数型,可选参数,请求超时时间,单位秒,默认 2
*1.2-3 版以上默认超时改为 10 秒
请求头
表型,可选参数,发出的请求的头部信息,形式 {field1 = value1, field2 = value2, ...},默认 {}
URL不ESCAPE *1.1.3-1 新增
布尔型,可选参数,true 表示不对 URL 进行 escape 直接请求,默认 false
对 URL 进行自定义 escape 可参考 lcurl 模块 的 easy:escape、easy:unescape
HTTP状态码
整数型,返回当次请求的 http 状态码,请求超时返回 -1
返回头JSON文本
文本型 或 nil,请求完成返回的 JSON 形式头部信息,请求超时返回 nil
返回主体
字符串型 或 nil,请求完成返回的内容,请求超时返回 nil
说明
使用 HTTP/1.1 协议的 GET 方法请求获取网络资源
这个函数不会将资源存储到磁盘上,如果需要下载较大的网络资源,建议使用 http.download
这个函数可能会让出,在这个函数返回之前,其它的 线程 可能会得到运行机会
若服务器协议版本为 HTTP/1.0 或 HTTP/0.9,可使用
返回主体 = httpGet(URL, 超时秒)
这个方法替代
函数:httpGet 获取网页数据
函数功能:获取网页数据信息
函数方法
webdata = httpGet(url,bool);
参数
url:string,必填,请求的网页地址 url
bool:boolean,选填,默认 false,表示对 URL 进行转码,true 表示不对 URL 进行解码
返回值
webdata :string/boolean,成功返回网页内容,失败返回空
函数: ts.httpGet 发送 httpGET 请求
函数方法
status_resp,body_resp = ts.httpGet(url, header_send, body_send,bool);
参数:
url:string,请求 URL,必填
header_send:table,请求头部内容,选填,本参数必须与请求体一起填写
body_send:table,请求内容,选填,本参数必须与头部一起填写
bool:bool:boolean,选填,默认 false,表示对 URL 进行转码,true 表示不对 URL 进行解码
函数:httpPost 提交网页数据增加参数:bool
函数方法
str=httpPost(url,data,bool)
参数:
url:string ,必填,访问的网页地址 url
data:string,必填,要提交的 Post 参数数据
bool:boolean,选填,默认 false,表示对 URL 进行转码,true 表示不对 URL 进行解码
函数名称:ts.tsDownload 下载文件新增参数
函数名称:下载文件
函数功能:下载文件到设备,支持 http 和 ftp
函数方法
code,msg = ts.tsDownload(path,url,mode,block,size);
参数:
path:string,保存路径
url:string,下载 URL
mode:boolean,是否需要支持断点续传,默认 false,需要 - true,不需要- false
block:默认为空,为 true 时停止这次下载
size:number,缓冲区大小字节数,默认自动最优配置
返回值
code:number,状态码,200 为下载成功
msg:table/string,如果连接成功则返回下载信息,失败返回连接失败原因。
返回值为 table 时
-- 第二个返回值下载信息结构如下
{
resource_size = 远端资源总字节数,
start_pos = 本次下载从资源的开始的位置,
size_download = 本次下载的字节数,
speed_download = 本次下载的速度(单位:字节/秒),
}
函数: ts.ftp.download 下载文件增加参数
函数功能:下载服务器文件到本地
函数方法
status,msg = ts.ftp.download(localfilepath,severfilepath,type,mode,block,size);
参数:
localfilepath string 本地文件路径
severfilepath string FTP 文件路径
type number 选填,默认值非 0 表示文本类型,0 表示非文本类型
mode:boolean,是否需要支持断点续传,默认 false,需要 - true,不需要- false
block:默认为空,为 true 时停止这次下载
size:number,缓冲区大小字节数,默认自动最优配置
返回值:
status boolean 成功返回 true 失败,返回 false
msg:table/string,如果连接成功则返回下载信息,失败返回连接失败原因。
返回值为 table 时
-- 第二个返回值下载信息结构如下
{
resource_size = 远端资源总字节数,
start_pos = 本次下载从资源的开始的位置,
size_download = 本次下载的字节数,
speed_download = 本次下载的速度(单位:字节/秒),
}
函数: ts.ftp.upload 上传文件增加参数
函数功能:上传本地文件到服务器
函数方法
status,msg = ts.ftp.upload(localfilepath,severfilepath,type,type,mode,block,size);
参数:
localfilepath string 本地文件路径
severfilepath string FTP 文件路径
type number 选填,默认值非 0 表示文本类型,0 表示非文本类型
mode:boolean,是否需要支持断点续传,默认 false,需要 - true,不需要- false
block:默认为空,为 true 时停止这次下载
size:number,缓冲区大小字节数,默认自动最优配置
返回值:
status boolean 成功返回 true 失败,返回 false
msg:table/string,如果连接成功则返回上传信息,失败返回连接失败原因。
函数: ts.ftp.upload 上传文件增加参数
函数功能:上传本地文件到服务器
函数方法
status,msg = ts.ftp.upload(localfilepath,severfilepath,type,type,mode,block,size);
参数:
localfilepath string 本地文件路径
severfilepath string FTP 文件路径
type number 选填,默认值非 0 表示文本类型,0 表示非文本类型
mode:boolean,是否需要支持断点续传,默认 false,需要 - true,不需要- false
block:默认为空,为 true 时停止这次下载
size:number,缓冲区大小字节数,默认自动最优配置
返回值:
status boolean 成功返回 true 失败,返回 false
msg:table/string,如果连接成功则返回上传信息,失败返回连接失败原因。
说明
-- 第二个返回值为 table 时下载信息结构如下
{
resource_size = 本地文件总字节数,
start_pos = 本次上传从本地文件的开始的位置,
size_upload = 本次上传的字节数,
speed_upload = 本次上传的速度(单位:字节/秒),
}
函数:ts.binaryzation 屏幕二值化
ts.binaryzation(x1,y1,x2,y2,{color,maxicolor})
参数:
x1:number 左上角顶点屏幕横坐标
y1:number 左上角顶点屏幕纵坐标
x2:number 右下角顶点屏幕横坐标
y2:number 右下角顶点屏幕纵坐标
color:number,颜色值白名单,十六进制颜色值,是颜色值本身
maxicolor:number,颜色值白名单,十六进制颜色值,是颜色值的最大色差值
ts.binaryzation(x1,y1,x2,y2,"cx-cox")
参数:
x1:number 左上角顶点屏幕横坐标
y1:number 左上角顶点屏幕纵坐标
x2:number 右下角顶点屏幕横坐标
y2:number 右下角顶点屏幕纵坐标
cx :number,是颜色值本身的十进制数据
cox:number,是颜色值本身最大色差值十进制数据
函数名称 plist.read PLIST 文件读取增加参数
函数方法:
tb = plist.read(str)
参数:
str:string,需要读取的 xml 数据
返回值:
tb:table或 nil,加载成功则返回内容返回表,否则返回 nil
函数:plist.read PLIST 文件读取
函数方法:
str = plist.read(tb)
参数:
tb:需要转换的 table 数据
返回值:
tb:string 或 nil,加载成功则返回内容返回 xml 数据,否则返回 nil
函数名称:plist.load xml 数据转换 table 数据
函数功能:xml 数据转换 table 数据
函数方法:
tb = plist.load(str)
参数:
str:string,需要读取的 xml 数据
返回值:
tb:table或 nil,加载成功则返回内容返回表,否则返回 nil
函数名称:plist.dump table 数据转换 xml 数据
函数功能:xml 数据转换 table 数据
函数方法:
str = plist.load(tb)
参数:
tb:需要转换的 table 数据
返回值:
tb:string 或 nil,加载成功则返回内容返回 xml 数据,否则返回 nil
增加函数:ocrObject 识别图片对象
方法:
text,tid = ocrObject(object,type,timeout,scale);
参数:
object:图片对象,需要打码的图片对象(具体参数可以详见 https://touchsprite.5upm.com/story-view-520.html)
type:打码类型
timeout:超时时间
scale:缩放比例
返回值:
text:string.boolean 正确返回打码结果,错误返回 nil
tid:string 正常返回 id,错误返回错误信息