Cloud control script functions
EC example code
- Cloud control example code below
function main() { // If the automation service is running normally if (!autoServiceStart(3)) { logd("Automation service failed to start; cannot run script"); exit(); return; } logd("Starting script...{} = {}", ecloud.getDeviceNo(), ecloud.getCloudUrl()); let ts = ecloud.getTaskInfo(); logd(ts); if (ts == null) { logd("No task info"); return; } logd("Task info:" + JSON.stringify(ts)); logd(ts["taskName"]); if (ts.valueJson) { // Get value for name = haoma in task parameter settings logd("valueJson " + ts.valueJson["haoma"]); // Get value for name = 账号 in task parameter settings logd("valueJson " + ts.valueJson['账号']); // Print parameters logd("valueJson " + ts.valueJson);
}
// Write your business logic here clickSettingTask(); sleep(3000) // Demo: create, read, update, delete, append, and remove one line dataOptDemo()
}
/** * Open the settings button **/function clickSettingTask() { // Simulate business logic sleep(4000);
}
function dataOptDemo() { // Get data by group name let data = ecloud.getData({ "groupName": "账号组2" }); if (data) { logd("账号组2 data: " + JSON.stringify(data)); }
// Get data by group name + data name data = ecloud.getData({ "groupName": "账号组2", "dataName": "001-1112" }); if (data) { logd("账号组2 data + dataName : " + JSON.stringify(data)); }
// Simulate uploading data let d = ecloud.addData({ "groupName": "账号组2", "dataName": ecloud.getDeviceNo() + "-111", "content": "xxx" + new Date() }); logd("First create 账号组2 data result - " + d)
// Simulate updating data let update2 = ecloud.updateData({ "groupName": "账号组2", "dataName": ecloud.getDeviceNo() + "-111", "content": "牛逼" + new Date() }); logd("Update data result - " + d) sleep(3000)
// Remove data by group + data name // let remove2 = ecloud.removeData({ // "groupName": "账号组2", // "dataName": ecloud.getDeviceNo() + "-111" // // }); // logd("Group + data remove result - " + remove2)
// Remove data by group + data name let remove3 = ecloud.removeData({ "groupName": "账号组2"
}); logd("Group remove result - " + remove3)
// Demo creating data again let d2 = ecloud.addData({ "groupName": "账号组2", "dataName": ecloud.getDeviceNo() + "-111", "content": "星星xxx" + new Date() }); logd("Second create 账号组2 data result - " + d2) sleep(3000) // Demo appending data let append1 = ecloud.appendOneLineData({ "groupName": "账号组2", "dataName": ecloud.getDeviceNo() + "-111", "content": "我是要增加的数据1" }); logd("Append data result - " + append1)
// Second append let append2 = ecloud.appendOneLineData({ "groupName": "账号组2", "dataName": ecloud.getDeviceNo() + "-111", "content": "我是要增加的数据2" }); logd("Append data result - " + append2)
// First remove-one-line let removeline1 = ecloud.removeOneLineData({ "groupName": "账号组2", "dataName": ecloud.getDeviceNo() + "-111", "content": "我是要增加的数据1" }); logd("Remove one line result - " + removeline1) sleep(3000)}
function autoServiceStart(time) { for (var i = 0; i < time; i++) { if (isServiceOk()) { return true; } var started = startEnv(); logd("Service start attempt " + (i + 1) + " result: " + started); if (isServiceOk()) { return true; } } return isServiceOk();}
main();Basic operations
ecloud.log Send log
- Send a log message to the cloud
- @param msg Log message
function main() { ecloud.log("I am a CLOUD log")}
main();ecloud.getDeviceNo Get device number
- Get the device number
- @return
{string}Device code or null
function main() { var d = ecloud.getDeviceNo() logd(d)}
main();ecloud.getDeviceId Get device ID
- Get the device ID
- Requires EC 11.8.0+
- @return
{string}Device ID or null
function main() { var d = ecloud.getDeviceId() logd(d)}
main();ecloud.getCloudUrl Get cloud control URL
- Get the cloud control URL
- @return
{string}Cloud control URL or null
function main() { var d = ecloud.getCloudUrl() logd(d)}
main();ecloud.getTaskInfo Get current task info
- Get info for the current task (already pushed to the device locally)
- @return
{json}Object
function main() { var d = ecloud.getTaskInfo() logd(d)}
main();- Return value example
- taskId: Cloud main task ID
- taskName: Cloud main task name
- scriptId: Script cloud ID
- scriptName: Script name
- scriptVersion: Script version
- scriptName: Script name
- scriptUrl: Script URL
- valueJson: Extra parameters
- Values returned by the task info function
{ "taskId": "1", "taskName": "X手浏览", "sort": 3, "scriptId": "1", "scriptName": "X手脚本", "scriptUrl": "http://baidu.com/a.iec", "scriptVersion": "1", "valueJson": { "a1": "test", "a2": "test" }}ecloud.removeScriptFile Clear script
- Delete the script file for security
- Requires EC 6.11.0+
- @return
{bool}true on success, false on failure
function main() { var d = ecloud.removeScriptFile() logd(d)}
main();Data sharing table operations
- Data sharing maps to Data groups and Data list under cloud control data management
- Table structure is fixed; users cannot change it
ecloud.getData Get data
- Get data by group name and/or data name; the data must exist in cloud control
- @param map Extensible parameter map
- Example
{"groupName":"数据组1","dataName":"key"} - Key definitions: groupName = data group name
- dataName = data name
function main() {var d = ecloud.getData({"groupName": "资源组1", "dataName": "111"})logd(d)}
main();- Return value example
- id: Data ID (can be ignored)
- name: Data name
- content: Data content
[ { "id": "", "name": "", "content": "" }]ecloud.getDataPop Get and delete data
- Get data by group name and/or data name; cloud control deletes it automatically after fetch. The data must exist in cloud control
- @param map Extensible parameter map
- Example
{"groupName":"数据组1","dataName":"key","getType":1,"size":1} - Key definitions: groupName = data group name
- dataName = data name
- getType = fetch mode: 1 head, 2 tail, 3 random
- size = number of records to fetch
- @return
{json array}Empty or JSON array
function main() {var d = ecloud.getDataPop({"groupName": "资源组1", "dataName": "111", "getType": 1, "size": 10})logd(d)logd(d[0])}
main();- Return value example
["aaa","bbb"]ecloud.addData Add data
- Add a data record; if the group already exists, data is appended automatically
- @param map Extensible parameter map
- Example
{"groupName":"数据组1","dataName":"key","content":"数据"} - Key definitions:
- groupName = data group name
- dataName = data name
- content = content
- @return
{bool}true on success, false on failure
function main() { var d = ecloud.addData({"groupName": "资源组1", "dataName": "111", "content": "test数据"}) logd(d)}
main();ecloud.updateData Update data
-
Update data under a group; group name and data name are required
-
@param map Extensible parameter map
-
Example
{"groupName":"数据组1","dataName":"key","content":"数据"}- Key definitions:
- groupName = data group name
- dataName = data name
- content = content
-
@return
{bool}true on success, false on failure
function main() { var d = ecloud.updateData({"groupName": "资源组1", "dataName": "111", "content": "test数据"}) logd(d)}
main();ecloud.removeData Delete data
- Delete data under a group. If only the group name is given, all data in that group is deleted. If both group name and data name are given, only matching records are deleted
- @param map Extensible parameter map
- Example
{"groupName":"数据组1","dataName":"key"} - Key definitions:
- groupName = data group name
- dataName = data name
- @return
{bool}true on success, false on failure
function main() {var d = ecloud.removeData({"groupName": "资源组1", "dataName": "111"})logd(d)}
main();ecloud.appendOneLineData Append one line
- Look up content for the data name under the group and append one line at the end
- @param map Extensible parameter map
- Example
{"groupName":"数据组1","dataName":"key","content":"数据"} - Key definitions:
- groupName = data group name
- dataName = data name
- content = content
- @return
{bool}true on success, false on failure
function main() { var d = ecloud.appendOneLineData({"groupName": "资源组1", "dataName": "111", "content": "test数据"}) logd(d)}
main();ecloud.removeOneLineData Remove one line
- Look up content for the data name under the group and remove one line equal to content
- @param map Extensible parameter map
- Example
{"groupName":"数据组1","dataName":"key","content":"数据"} - Key definitions:
- groupName = data group name
- dataName = data name
- content = content
- @return
{bool}true on success, false on failure
function main() { var d = ecloud.removeOneLineData({"groupName": "资源组1", "dataName": "111", "content": "test数据"}) logd(d)}
main();Dynamic data API
- Dynamic data maps to Data groups and Data list under cloud control data management
- Table structure is not fixed; users create tables and fill data themselves
ecloud.dynamicCreateTable Create or update dynamic table
- Create or update a dynamic data table schema
- If columns adds new fields, they are created automatically; if a field is removed from columns, it is dropped from the table
- Use caution when altering tables to avoid data loss!!!
- Requires EC 6.16.0+
- @param param Parameters
{ "tableName": "我是牛逼的表", "tableNameEn": "niubi_table", "columns": [{ "columnInfo": "姓名", "columnName": "name", "columnSize": 500 }, { "columnInfo": "年龄", "columnName": "age", "columnSize": 500 }, { "columnInfo": "性别", "columnName": "sex", "columnSize": 500 } ] }- Fields:
- tableName: Chinese display name (label only, not the actual table name)
- tableNameEn: English table name — the real table name
- columns: Column definitions; all column types are strings
- columnInfo: Column comment/description
- columnName: Column name — use English; no spaces or special characters
- columnSize: Column length
- @return
{string}JSON string; parse to a JSON object - Success example:
{"result":{"data":1}}— data is the number of affected rows - Failure example:
{"result":{"msg":"我是错误信息"}}
function main() { let crateTable = { "tableName": "我是牛逼的表", "tableNameEn": "niubi_table", "columns": [ { "columnInfo": "姓名", "columnName": "name", "columnSize": 500 }, { "columnInfo": "年龄", "columnName": "age", "columnSize": 500 }, { "columnInfo": "性别", "columnName": "sex", "columnSize": 500 } ] };
let creae = ecloud.dynamicCreateTable(crateTable) logd("=== {}", creae);}
main();ecloud.dynamicQuery Query dynamic table data
- Query dynamic data
- Requires EC 6.16.0+
- @param param Parameters
{ "pageNumber": 1, "pageSize": 4, "fields": "id,name", "query": "and name like '%我是%'", "tableNameEn": "niubi_table", "search": { "id": "1", "name": "我是name" } }- Fields:
- pageNumber: Page number, starting at 1. Use -1 to disable (uses LIMIT internally)
- pageSize: Page size. Use -1 to disable (uses LIMIT internally)
- fields: Columns to return; optional. Comma-separated English names — see example
- query: Custom SQL-style WHERE clause
- order: Sort clause, e.g.
order by id desc. If order contains LIMIT, set pageNumber to -1 to avoid duplicate LIMIT - tableNameEn: English table name
- search: Equality filters; use either search or query, not both
- search example:
"id":"1"means id = 1 - @return
{string}JSON string; parse to a JSON object - Success example:
{"result":{"data":[{"name":"3","id":2}]}}— data is the result array - Failure example:
{"result":{"msg":"我是错误信息"}}
function main() { let query = { "pageNumber": 1, "pageSize": 2, "fields": "", "query": " and age like '%2%'", "tableNameEn": "niubi_table", "order":"", "search": {} }; let queryr = ecloud.dynamicQuery(query) logd("=== {}", queryr);
// Random query let query2 = { "pageNumber": -1, "pageSize": -1, "fields": "", "query": "", "tableNameEn": "niubi_table", "order":"order by rand() limit 1", "search": {} }; let queryr2 = ecloud.dynamicQuery(query2) logd("=== {}", queryr2);}
main();ecloud.dynamicAdd Add dynamic table data
- Insert dynamic data
- Requires EC 6.16.0+
{ "tableNameEn": "niubi_table", "columns": { "name": "我是牛逼", "age": "niubi_table2", "sex": "niubi_table2" } }- @param param Parameters
- Fields:
- tableNameEn: English table name
- columns: Column name → value map
- Example:
"name": "我是牛逼的表"inserts name = 我是牛逼的表 - @return
{string}JSON string; parse to a JSON object - Success example:
{"result":{"data":1}}— data is the number of affected rows - Failure example:
{"result":{"msg":"我是错误信息"}}
function main() { let add = { "tableNameEn": "niubi_table", "columns": { "name": "我是牛逼的表", "age": "niubi_table2", "sex": "niubi_table2" } }
let queryr = ecloud.dynamicAdd(add) logd("=== {}", queryr);
}
main();ecloud.dynamicUpdate Update dynamic table data
- Update dynamic data
- Requires EC 6.16.0+
- @param param Parameters
{ "tableNameEn": "niubi_table", "columns": { "name": "我x是牛逼xxxx的表", "age": "niubi_table2", "sex": "niubi_table2" }, "query": "and id=1", "search": { "id": "7" } }- query: Custom SQL-style WHERE clause
- tableNameEn: English table name
- search: Equality filters; use either search or query, not both
- search example:
"id":"1"means id = 1 - columns: Columns and values to update
- Example:
"name": "我是牛逼的表"sets name to 我是牛逼的表 - @return
{string}JSON string; parse to a JSON object - Success example:
{"result":{"data":1}}— data is the number of affected rows - Failure example:
{"result":{"msg":"我是错误信息"}}
function main() { let update = { "tableNameEn": "niubi_table", "columns": { "name": "1我x是牛逼xxxx的表", "age": "niubi_table2", "sex": "niubi_table2" }, "query": "and name like '%我%'", "search": { "id": "7" } }
let updater = ecloud.dynamicUpdate(update) logd("=== {}", updater);
}
main();ecloud.dynamicRemove Delete dynamic table data
- Delete dynamic data
- Requires EC 6.16.0+
{ "tableNameEn": "niubi_table", "query": "and name like '%我%'", "search": { "id": "1" } }- @param param Parameters
- Fields:
- query: Custom SQL-style WHERE clause
- tableNameEn: English table name
- search: Equality filters; use either search or query, not both
- search example:
"id":"1"means id = 1 - @return
{string}JSON string; parse to a JSON object - Success example:
{"result":{"data":1}}— data is the number of affected rows - Failure example:
{"result":{"msg":"我是错误信息"}}
function main() { let del = { "tableNameEn": "niubi_table", "query": "and name like '%我%'", "search": { "id": "7" } } let delr = ecloud.dynamicRemove(del) logd("=== {}", delr);}
main();Data cache API
- Operates Redis cache, typically as key-value pairs
- Supports TTL, strings, and set collections
- For boolean or integer values, convert to strings
ecloud.addCache Add cache
- Add a Redis cache entry
- Requires EC 7.5.0+
- @param map Extensible parameter map
- Example
{"cacheKey":"缓存key","expireTime":300,"dataType":1,"content":"数据"} - Key definitions:
- cacheKey = cache key
- expireTime = TTL in seconds; empty or ≤ 0 means no expiry
- dataType = data type: 1 string, 2 set (newline
\nseparated) - content = payload; if dataType = 2, content is split by
\nand stored as a Redis set - @return
{bool}true on success, false on failure
function main() { // String let stringData = { "cacheKey": "key1", "expireTime": 300, "dataType": 1, "content": "数据" } let addString = ecloud.addCache(stringData); logd("addString {}", addString);
// SET collection let sss = "s1\ns2\ns3"; let setData = { "cacheKey": "key1", "expireTime": 300, "dataType": 2, "content": sss } let addSet = ecloud.addCache(setData); logd("addSet {}", addSet);}
main();ecloud.getCache Get cache
- Get a cache entry; returns nothing if expired
- Requires EC 7.5.0+
- @param map Extensible parameter map
- Example
{"cacheKey":"缓存key"} - Key definitions:
- cacheKey = cache key
- @return
{string}JSON string from the server; parse the result node
function main() { // String let stringData = { "cacheKey": "key1", "expireTime": 300, "dataType": 1, "content": "数据" } let addString = ecloud.addCache(stringData); logd("addString {}", addString);
// SET collection let sss = "s1\ns2\ns3"; let setData = { "cacheKey": "key1", "expireTime": -1, "dataType": 2, "content": sss } let addSet = ecloud.addCache(setData); logd("addSet {}", addSet);
let data = ecloud.getCache({"cacheKey": "key1"}); logd("data {}", JSON.stringify(data)); // Print directly logd("data {}", data.result); // Split and iterate data.result.split("\n").forEach(function (item) { console.log(item) })
}
main();ecloud.updateCache Update cache
- Update a Redis cache entry
- Requires EC 7.5.0+
- @param map Extensible parameter map
- Example
{"cacheKey":"缓存key","expireTime":300,"dataType":1,"content":"数据"} - Key definitions:
- cacheKey = cache key
- expireTime = TTL in seconds; empty or ≤ 0 means no expiry
- dataType = data type: 1 string, 2 set (newline
\nseparated) - content = payload; if dataType = 2, content is split by
\nand stored as a Redis set - @return
{bool}true on success, false on failure
function main() { // String let stringData = { "cacheKey": "key1", "expireTime": 300, "dataType": 1, "content": "数据" } let addString = ecloud.addCache(stringData); logd("addString {}", addString); let data = ecloud.getCache({"cacheKey": "key1"}); logd("data {}", JSON.stringify(data)); // Print directly logd("data {}", data.result);
let up = ecloud.updateCache({"cacheKey": "key1", "content": "test123"})
data = ecloud.getCache({"cacheKey": "key1"}); logd("Updated data {}", JSON.stringify(data)); // Print directly logd("Updated data {}", data.result);
}
main();ecloud.updateCacheExpire Update expiry
- Update Redis cache TTL
- Requires EC 7.5.0+
- @param map Extensible parameter map
- Example
{"cacheKey":"缓存key","expireTime":300} - Key definitions:
- cacheKey = cache key
- expireTime = TTL in seconds; empty or ≤ 0 means no expiry
- @return
{bool}true on success, false on failure
function main() { // String let stringData = { "cacheKey": "key1", "expireTime": 300, "dataType": 1, "content": "数据" } let addString = ecloud.addCache(stringData); logd("addString {}", addString); let data = ecloud.getCache({"cacheKey": "key1"}); logd("data {}", JSON.stringify(data)); // Print directly logd("data {}", data.result); let up = ecloud.updateCacheExpire({"cacheKey": "key1", "expireTime": 0}) logd("up {}", up); let leftTime = ecloud.getCacheExpire({"cacheKey": "key1"}) logd("Remaining TTL {}", leftTime);}
main();ecloud.getCacheExpire Get remaining TTL
- Get remaining TTL for a Redis key
- Requires EC 7.5.0+
- @param map Extensible parameter map
- Example
{"cacheKey":"缓存key"} - Key definitions:
- cacheKey = cache key
- @return
{long}Remaining TTL; negative means no expiry
function main() { // String let stringData = { "cacheKey": "key1", "expireTime": 300, "dataType": 1, "content": "数据" } let addString = ecloud.addCache(stringData); logd("addString {}", addString); let data = ecloud.getCache({"cacheKey": "key1"}); logd("data {}", JSON.stringify(data)); // Print directly logd("data {}", data.result); let up = ecloud.updateCacheExpire({"cacheKey": "key1", "expireTime": 0}) logd("up {}", up); let leftTime = ecloud.getCacheExpire({"cacheKey": "key1"}) logd("Remaining TTL {}", leftTime);}
main();ecloud.removeCache Delete cache
- Delete a Redis cache entry
- Requires EC 7.5.0+
- @param map Extensible parameter map
- Example
{"cacheKey":"缓存key"} - Key definitions:
- cacheKey = cache key
- @return
{bool}true on success, false on failure
function main() {// Stringlet stringData = {"cacheKey": "key1","expireTime": 300,"dataType": 1,"content": "数据"}let addString = ecloud.addCache(stringData);logd("addString {}", addString);
let data = ecloud.getCache({"cacheKey": "key1"});logd("data {}", JSON.stringify(data));// Print directlylogd("data {}", data.result);
let del = ecloud.removeCache({"cacheKey": "key1"})
logd("Delete {}", del);
data = ecloud.getCache({"cacheKey": "key1"});logd("After delete data {}", JSON.stringify(data));// Print directlylogd("After delete data {}", data.result);}
main();ecloud.appendOneLineCache Append to cache
- Append one line to a Redis set cache
- Requires EC 7.5.0+
- @param map Extensible parameter map
- Example
{"cacheKey":"缓存key","content":"数据"} - Key definitions:
- cacheKey = cache key
- content = one line to append to the Redis set
- @return
{string}JSON string from the server; parse the result node
function main() { // String let stringData = { "cacheKey": "key1", "expireTime": 300, "dataType": 2, "content": "a\nb\nc" } let addString = ecloud.addCache(stringData); logd("addString {}", addString);
let data = ecloud.getCache({"cacheKey": "key1"}); logd("data {}", JSON.stringify(data)); // Print directly logd("data {}", data.result);
let inc = ecloud.appendOneLineCache({"cacheKey": "key1", "content": "test"}) logd("==inc {}", inc); inc.result.split("\n").forEach(function (item) { console.log("append --- {}", item) })
}
main();ecloud.removeOneLineCache Remove one cache line
- Remove one element from a Redis set cache
- Requires EC 7.5.0+
- @param map Extensible parameter map
- Example
{"cacheKey":"缓存key","content":"数据"} - Key definitions:
- cacheKey = cache key
- content = one line to remove from the Redis set
- @return
{string}JSON string from the server; parse the result node
function main() { // String let stringData = { "cacheKey": "key1", "expireTime": 300, "dataType": 2, "content": "a\nb\nc" } let addString = ecloud.addCache(stringData); logd("addString {}", addString);
let data = ecloud.getCache({"cacheKey": "key1"}); logd("data {}", JSON.stringify(data)); // Print directly logd("data {}", data.result);
let inc = ecloud.appendOneLineCache({"cacheKey": "key1", "content": "test"}) logd("==inc {}", inc); inc.result.split("\n").forEach(function (item) { console.log("append --- {}", item) }) inc = ecloud.removeOneLineCache({"cacheKey": "key1", "content": "test"}) logd("==inc {}", inc); inc.result.split("\n").forEach(function (item) { console.log("append --- {}", item) })}
main();ecloud.incrementCache Increment cache
- Redis increment counter; each call adds 1 to the key
- Requires EC 7.5.0+
- @param map Extensible parameter map
- Example
{"cacheKey":"缓存key"} - Key definitions:
- cacheKey = cache key
- @return
{long}Value after increment
function main() { // String let stringData = { "cacheKey": "key1", "expireTime": 300, "dataType": 2, "content": "a\nb\nc" } let addString = ecloud.addCache(stringData); logd("addString {}", addString);
let data = ecloud.getCache({"cacheKey": "key1"}); logd("data {}", JSON.stringify(data)); // Print directly logd("data {}", data.result);
let inc = ecloud.incrementCache({"cacheKey": "key2"}) logd("==inc {}", inc); let get = ecloud.getCache({"cacheKey": "key2"}) // Returned as a string logd("==get {}", get.result);
}
main();ecloud.decrementCache Decrement cache
- Redis decrement counter; each call subtracts 1 from the key
- Requires EC 7.5.0+
- @param map Extensible parameter map
- Example
{"cacheKey":"缓存key"} - Key definitions:
- cacheKey = cache key
- @return
{long}Value after decrement
function main() { // String let stringData = { "cacheKey": "key1", "expireTime": 300, "dataType": 2, "content": "a\nb\nc" } let addString = ecloud.addCache(stringData); logd("addString {}", addString); let data = ecloud.getCache({"cacheKey": "key1"}); logd("data {}", JSON.stringify(data)); // Print directly logd("data {}", data.result); let inc = ecloud.incrementCache({"cacheKey": "key2"}) logd("==inc {}", inc); let get = ecloud.decrementCache({"cacheKey": "key2"}) // Returned as a string logd("==get {}", get);}
main();ecloud.popPushCache push or pop command
- Redis push or pop commands
- Requires EC 7.8.0+
- @param map Extensible parameter map
- Example
{"cacheKey":"缓存key"} - Key definitions:
- cmd = supports spop, rpush, lpush, lpop, rpop
- cacheKey = cache key
- content = value to push or pop
- @return
{string}JSON string from the server; parse the result node
function main() { // String let stringData = { "cacheKey": "key1", "cmd": "lpush", "content": "aaa" } let popPushCachex = ecloud.popPushCache(stringData); logd("popPushCachex {}", popPushCachex); let data = ecloud.getCache({"cacheKey": "key1"}); logd("data {}", JSON.stringify(data));
}
main();