云控系统是跑在服务器上的管理后台。设备连上来之后,在网页里发任务、看状态、收数据。
云控脚本和单机脚本不一样,数据、任务、状态都在云端。单机脚本把这一遍跑完就行。云控脚本还得知道自己是哪台设备、当前任务叫什么、参数是什么、数据写到哪里。这些都在 ecloud 函数里,脚本直接调用,不用另对接接口,也不用单独集成 SDK。和云控的连接走平台内置通道。
云控脚本函数是什么,先看一个完整实例
以 ecloud 开头的函数用来和云控交互:取云控上的数据、上报日志、读写数据共享表和缓存。常见用途是任务参数下发、账号数据共享、运行日志回传、状态上报。
任务参数在建任务时写入「参数设定」。脚本用 ecloud.getTaskInfo() 拿到 valueJson,再按名字取,例如 ts.valueJson["haoma"]、ts.valueJson['账号']。一段把取参和后续业务接起来的脚本如下:
function main() {
// 如果自动化服务正常
if (!autoServiceStart(3)) {
logd("自动化服务启动失败,无法执行脚本");
exit();
return;
}
logd("开始执行脚本...{} = {}", ecloud.getDeviceNo(), ecloud.getCloudUrl());
// 获取当前任务信息
let ts = ecloud.getTaskInfo();
if (ts == null) {
logd("没有任务信息");
return;
}
logd("任务信息:" + JSON.stringify(ts));
logd(ts["taskName"]);
if (ts.valueJson) {
// 获取任务-参数设定中 名称 = haoma 的值
logd("valueJson " + ts.valueJson["haoma"]);
// 获取任务-参数设定中 名称 = 账号 的值
logd("valueJson " + ts.valueJson['账号']);
}
// 这里开始编写你要的业务逻辑
clickSettingTask();
sleep(3000)
// 对数据进行增删改查、追加和移出一条的演示
dataOptDemo()
}
四组接口:基础、共享表、动态表、缓存
基础操作:
| 函数 | 作用 |
|---|---|
ecloud.log |
发送日志到云控 |
ecloud.getDeviceNo() |
获取机器编号 |
ecloud.getDeviceId() |
获取设备 ID |
ecloud.getCloudUrl() |
获取云控的 URL 地址 |
ecloud.getTaskInfo() |
获取当前任务信息(含任务名 taskName 与参数 valueJson) |
ecloud.removeScriptFile() |
清除脚本(一次性任务跑完自动清理) |
数据共享表按组名组织,用来在设备之间共享账号、关键词这类业务数据:
function dataOptDemo() {
// 按照组名获取数据
let data = ecloud.getData({ "groupName": "账号组 2" });
if (data) {
logd("账号组 2 数据: " + JSON.stringify(data));
}
// 组名 + 指定的数据名 获取数据
data = ecloud.getData({ "groupName": "账号组 2", "dataName": "001-1112" });
// 新增数据
let d = ecloud.addData({
"groupName": "账号组 2",
"dataName": ecloud.getDeviceNo() + "-111",
"content": "xxx" + new Date()
});
// 更新数据
let update2 = ecloud.updateData({
"groupName": "账号组 2",
"dataName": ecloud.getDeviceNo() + "-111",
"content": "牛逼" + new Date()
});
// 按组 + 数据名删除数据
// let remove2 = ecloud.removeData({ "groupName": "账号组 2", "dataName": "..." });
// 按组删除数据
let remove3 = ecloud.removeData({ "groupName": "账号组 2" });
// 追加一行数据
let append1 = ecloud.appendOneLineData({
"groupName": "账号组 2",
"dataName": ecloud.getDeviceNo() + "-111",
"content": "我是要增加的数据 1"
});
// 删除一行数据
let removeline1 = ecloud.removeOneLineData({
"groupName": "账号组 2",
"dataName": ecloud.getDeviceNo() + "-111",
"content": "我是要增加的数据 1"
});
}
函数速查:
| 函数 | 作用 |
|---|---|
getData |
按组或组+数据名取得数据 |
getDataPop |
取得并删除数据 |
addData |
新增数据 |
updateData |
修改数据 |
removeData |
删除数据(按组或按组+数据名) |
appendOneLineData |
追加一条数据 |
removeOneLineData |
删除一条数据 |
多台设备同时写共享表时,用 ecloud.getDeviceNo() 当作数据名的一部分,例如 设备编号-111,按设备隔开,避免互相覆盖。
动态数据接口适合表结构不固定的业务,用来动态创建和操作表:
| 函数 | 作用 |
|---|---|
dynamicCreateTable |
动态创建更新表 |
dynamicQuery |
动态查询表数据 |
dynamicAdd |
动态增加表数据 |
dynamicUpdate |
动态更新表数据 |
dynamicRemove |
动态删除表数据 |
运行状态、计数、临时标记这类写得很勤的数据放缓存。共享表用来放账号、关键词。
| 函数 | 作用 |
|---|---|
addCache |
新增缓存 |
getCache |
获取缓存 |
updateCache |
更新缓存 |
updateCacheExpire |
更新过期时间 |
getCacheExpire |
获取剩余过期时间 |
removeCache |
删除缓存 |
appendOneLineCache |
追加缓存 |
removeOneLineCache |
删除一行缓存 |
incrementCache |
自增缓存(计数器) |
decrementCache |
自减缓存 |
popPushCache |
push 或 pop 命令(队列操作) |
同一条任务发到多台设备时,每台用 getTaskInfo() 读自己的 taskName 和 valueJson,按参数走不同分支。账号和关键词放共享表,设备之间都能读。表结构事先定不下来,就用动态表那一组。计数和队列走缓存:incrementCache / decrementCache 做自增自减,popPushCache 做 push / pop。每台设备的运行情况用 ecloud.log 送回云端。一次性任务跑完,调用 ecloud.removeScriptFile() 把脚本清掉,避免留在设备上。
想要真实跑起来?
本文介绍的方案均可在 EasyClick 手机自动化平台落地。官网提供完整文档、开发工具与群控云控产品,免费体验。