Skip to main content

云控

客户端指令

在小程序中可以使用的api部分

该部分API 可以让设备主动连接至 官方云控开发者自搭建的云控平台.

# 导包
from ascript.android import cloud_control

连接云控

让设备连接至云控平台, 设备可以连接官方云控或自定义云控

可以通过api指令链接,也可以通过手动点击按钮链接.

  • 手动链接如图所示:

连接官方云控

让设备连接至官方云控:http://control.ascript.cn:8088

连接后可在云端控制设备,远程操控设备,定时下发执行任务等.

  • 方法
cloud_control.connect_to_as(dev_user:str)
  • 参数
参数类型是否必填说明
dev_userstr开发者账号,目前需要时vip用户才可使用
  • 示例
from ascript.android import cloud_control
cloud_control.connect_to_as("你自己的开发者账号")

连接自定义云控

  • 方法
cloud_control.connect_to_ws(ws_path:str)
  • 参数
参数类型是否必填说明
ws_pathstrwebsocket 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)
  • 参数
参数类型是否必填说明
datadict字典形式的数据. 在云控服务器中可通过key值,显示value值
  • 示例
# 发送数据给云控,云控中可实时显示
from ascript.android import cloud_control
data = {"gold":180,"water":200}
cloud_control.send(data)

消息监听

在小程序中,监听来自云控发送的消息.

  • 函数
system.channel(fun)
参数类型必须备注
funpython 函数必填需要一个形式参数,作为消息回调
# 导入消息通道
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 工具的安装,有很多教程,则不多赘述.

    1. 创建 package.json
npm init -y
    1. 安装依赖:
npm install ws
    1. 创建 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);
});
    1. 运行服务器:
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":模拟回退按键