云控
客户端指令
在小程序中可以使用的api部分
该部分API 可以让设备主动连接至 官方云控 或 开发者自搭建的云控平台.
# 导包
from ascript.android import cloud_control
连接云控
让设备连接至云控平台, 设备可以连接官方云控或自定义云控
可以通过api指令链接,也可以通过手动点击按钮链接.
- 手动链接如图所示:

连接官方云控
让设备连接至官方云控:http://control.ascript.cn:8088
连接后可在云端控制设备,远程操控设备,定时下发执行任务等.
- 方法
cloud_control.connect_to_as(dev_user:str)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
dev_user | str | 是 | 开发者账号,目前需要时vip用户才可使用 |
- 示例
from ascript.android import cloud_control
cloud_control.connect_to_as("你自己的开发者账号")
连接自定义云控
- 方法
cloud_control.connect_to_ws(ws_path:str)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
ws_path | str | 是 | websocket server 地址.您需要自己搭建ws服务. |
- 示例
from ascript.android import cloud_control
cloud_control.connect_to_as("你的服务器地址以及端口")
# 例如:
# cloud_control.connect_to_as("ws://192.168.31.90:3000")
发送数据给云控
发送数据,可以在云控查数值
- 方法
cloud_control.send(data:dict)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
data | dict | 是 | 字典形式的数据. 在云控服务器中可通过key值,显示value值 |
- 示例
# 发送数据给云控,云控中可实时显示
from ascript.android import cloud_control
data = {"gold":180,"water":200}
cloud_control.send(data)
消息监听
在小程序中,监听来自云控发送的消息.
- 函数
system.channel(fun)
参数 | 类型 | 必须 | 备注 |
---|---|---|---|
fun | python 函数 | 必填 | 需要一个形式参数,作为消息回调 |
# 导入消息通道
from ascript.android import system
# 创建一个Python函数,作为消息通道回调
def airws(msg):
print(msg)
# 建立消息回调通道
system.channel(airws)
关闭云控
关闭和云端控制的连接
- 方法
cloud_control.close()
- 示例
# 关闭云控
from ascript.android import cloud_control
cloud_control.close()
官方云控服务器
官方云控,即AS官方提供的云控.
该云控集成了大部分功能,通常来说,开发者只需关注客户端即可.
启动携参
云控每次启动app可以传递一些参数
假如在云控启动app时 传入 ** key:name, value: 李四 **
那么在小程序中,我们可以这样去接收数据.
import builtins
# 判断是否存在name属性,如果存在就打印
if hasattr(builtins, 'name'):
print(name,type(name))
自定义云控服务器

一个云控服务器其实就是一个 websocket-server
通常来讲,我们可以通过 任意语言来创建一个 ws-server. 如nodejs、python、java、php 等.
一个 nodejs 的websocket-server案例
如果你想搭建它,可以用vscode来执行操作.
新建一个工程文件夹,用vscode进入这个文件夹.在命令行中输入以下命令即可.
你必须先安装npm 工具
关于npm 工具的安装,有很多教程,则不多赘述.
-
- 创建 package.json
npm init -y
-
- 安装依赖:
npm install ws
-
- 创建 server.js 文件
const WebSocket = require('ws');
// 创建 WebSocket 服务器,监听 8080 端口
const wss = new WebSocket.Server({ port: 8080 });
console.log('WebSocket 服务器已启动,监听 ws://localhost:8080');
// 当有客户端连接时
wss.on('connection', (ws) => {
console.log('新的客户端已连接');
// 当收到客户端消息时
ws.on('message', (message) => {
console.log(`收到消息 => ${message}`);
// 向客户端回复(这里原样返回消息)
ws.send(`服务器回复:${message}`);
});
// 当连接关闭时
ws.on('close', () => {
console.log('客户端已断开连接');
});
// 发送欢迎消息
ws.send('欢迎连接到 WebSocket 服务器!');
});
// 处理服务器错误
wss.on('error', (error) => {
console.error('服务器错误:', error);
});
-
- 运行服务器:
node server.js
指令
指令结构
所有发送指令均为json
格式字符串
其中path字段为指令字段. 不同的命令path字段的值是不一样的.
当发送命令后会接收到一条相同path字段的回执消息**
# 发送的指令
{
"path":"消息指令",
//其他指令字段,见下面文档
}
# 收到回执消息
{
"path":"消息指令",
"code":1,
"msg":"",
"device_id":"xx"
//其他属性字段,见下面文档
}
- 属性解释
参数 | 备注 |
---|---|
path | 发送的指令,发送什么就回执什么 |
code | 消息的执行状态,1:执行成功,其他:执行失败 |
msg | 成功为success,其他为失败原因 |
device_id | 设备id,每条回执消息都会返回设备id |
当连接成功后
当连接成功后会收到服务器发送来的设备状态消息
- 消息案例:
{
"msg":"success",
"result":{"device_version":"3173","device_name":"XiaomiM2007J17C","app_is_run":false,"app_is_line":false,"app_id":"","username":"ws://192.168.31.18:8001"},
"path":"device_info",
"code":1,
"device_id":"f6c95072-8446-47d2-af2e-b787a094b644"
}
- 属性:
参数 | 必须 | 备注 |
---|---|---|
path | 必须 | "device_info" 设备状态的消息指令 |
msg | 必须 | 命令的执行状态消息 success为成功,其他为失败原因 |
code | 必须 | 1 为成功, 其他值为失败 |
device_id | 必须 | 设备id |
result | 必须 | device_version: app版本,device_name:设备名称,app_is_run:小程序是否运行中,app_is_line:运行的小程序是否为线上程序,app_id:运行的小程序id,username:云控开发者名称 |
启动在线小程序
- 请求消息:
{
"path":"app_run",
"id":"14",
"param":{"params1":"v"},
"card":"xxx"
}
- 属性:
参数 | 必须 | 备注 |
---|---|---|
path | 必须 | "app_run" 启动程序的指令 |
id | 必须 | 小程序id |
params | 否 | 初始化的小程序参数 |
card | 否 | 激活码,仅针对收费的小程序有效 |
- 回执消息
{"msg":"success","path":"app_run","code":1,"device_id":"f6c95072-8446-47d2-af2e-b787a094b644"}
停止小程序
- 请求消息:
{"path":"app_stop"}
- 回执消息
{"msg":"","path":"app_stop","code":-1,"device_id":"f6c95072-8446-47d2-af2e-b787a094b644"}
获取设备信息
- 请求消息:
{"path":"device_info"}
- 回执消 息
{
"msg":"success",
"result":{"device_version":"3173","device_name":"XiaomiM2007J17C","app_is_run":false,"app_is_line":false,"app_id":"","username":"ws://192.168.31.18:8001"},
"path":"device_info",
"code":1,
"device_id":"f6c95072-8446-47d2-af2e-b787a094b644"
}
- 属性:
参数 | 必须 | 备注 |
---|---|---|
path | 必须 | "device_info" 设备状态的消息指令 |
msg | 必须 | 命令的执行状态消息 success为成功,其他为失败原因 |
code | 必须 | 1 为成功, 其他值为失败 |
device_id | 必须 | 设备id |
result | 必须 | device_version: app版本,device_name:设备名称 app_is_run:小程序是否运行中, app_is_line:运行的小程序是否为线上程序, app_id:运行的小程序id,username:云控开发者名称 |
获取设备截图
- 请求消息:
{"path":"screen_shot","max":300,"quality":20}
- 回执消息
{
"msg":"success",
"result":{"s_size":[1088,2400],"image":"/9j/4AAQSkZ...","r_size":[136,300],"scale":true},
"path":"screen_shot",
"code":1,
"device_id":"f6c95072-8446-47d2-af2e-b787a094b644",
"max":300.0,
"quality":50.0
}
- 属性:
参数 | 必须 | 备注 |
---|---|---|
path | 必须 | "screen_shot" 截图指令 |
max | 必须 | 缩放最大边长,建议缩放.否则会非常慢.占用带宽 |
quality | 必须 | 图片清晰度 10-100, 20:百分之20%的清晰度. 建议20即可,否则占用带宽 |
result | 回执结果 | s_size: 原始图大小,image:图片base64数据,r_size:缩放后的尺寸,scale:是否缩放了 |
点击设备坐标
- 请求消息:
{"path":"device_action","action":"click","x":50,"y":10}
- 回执消息
{"msg":"success","path":"device_action","code":1,"device_id":"f6c95072-8446-47d2-af2e-b787a094b644","x":50.0,"action":"click","y":10.0}
- 属性:
参数 | 必须 | 备注 |
---|---|---|
path | 必须 | "device_action" 动作指令 |
action | 必须 | "click" 点击指令 |
x | 必须 | 点击坐标x |
y | 必须 | 点击坐标y |
滑动
- 请求消息:
{"path":"device_action","action":"swipe","ori":"left"}
- 回执消息
{"msg":"success","path":"device_action","code":1,"device_id":"f6c95072-8446-47d2-af2e-b787a094b644","action":"swipe","ori":"left"}
- 属性:
参数 | 必须 | 备注 |
---|---|---|
path | 必须 | "device_action" 滑动指令 |
action | 必须 | "swipe"滑动 |
ori | 必须 | left:左滑,top:上滑,right:右滑,bottom:下滑 |
发送按键
- 请求消息:
{"path":"device_action","action":"key","ori":"home"}
- 回执消息
{"msg":"success","path":"device_action","code":1,"device_id":"f6c95072-8446-47d2-af2e-b787a094b644","ori":"home","action":"key"}
- 属性:
参数 | 必须 | 备注 |
---|---|---|
path | 必须 | "device_action" 滑动指令 |
action | 必须 | "key"发送按键 |
ori | 必须 | "home":模拟home按键,"back":模拟回退按键 |