多设备

Total Control可以同时连接多个设备,实现成百上千的手机群控,所以Total Control API提供了一系列同时对多个设备操作的接口,
每一个设备一个对象,多设备就是多个设备对象集合,利用REST API获取当前连接的所有设备对象集合,通过返回的设备对象集合(多个设备对象)
对所有的设备进行批量操作。 您可以使用任何支持发送 HTTP 请求的设备来与 Total Control 进行交互。

REST API获取设备集合的方法

获取多设备REST API 和与其相对应的JS API。

//(多设备)获取当前连接Total Control的所有设备的对象集合
Device.searchObject(sigmaConst.DevAll)
http://IP:8090/TotalControl/v1/devices?q=all&token=:token
//(多设备)根据给定的组名称获取组内所有设备的对象集合
Device.searchObject(sigmaConst.DevGroup, )
http://IP:8090/TotalControl/v1/devices?q=group&name=:name&token=:token

如何使用多设备REST API

Total Control脚本提供的REST API中,部分REST API支持设备,REST API多设备与单设备的区别有:

  • 获取多设备对象集合用的REST API不一样,获取多设备的方法,返回的设备列表是一个数组(具体方法如上)。
  • 操作多设备的REST API 的请求方式不一样,
    操作多设备的请求方式为:
  • http://IP:8090/TotalControl/v1/devices/ids? token=:token&ids=:ids

    其中多设备IDs格式为:["device@1116106541","device@1116106541"]。

    操作单设备的请求方式为:

    http://IP:8090/TotalControl/v1/devices/device=:device? token=:token

请求示例:

在设备上运行指定的APP,其中,"com.sigma_rt.totalcontrol"为指定的AppName,请求方式:POST


//示例1
//多设备
http://localhost:8090/TotalControl/v1/devices/ids/apps/com.sigma_rt.totalcontrol?token=270eq7lXQK8bXYsJ&state=active&ids=["device@1116106541","device@1116106542"]
//单设备
http://localhost:8090/TotalControl/v1/devices/device@1116106541/apps/com.sigma_rt.totalcontrol?token=270eq7lXQK8bXYsJ&state=active


//示例2
//多设备
http://localhost:8090/TotalControl/v1/devices/ids/apps/com.sigma_rt.totalcontrol
{
    "token": "270eq7lXQK8bXYsJ",
    "state": "active",
	"ids": ["device@1116106541","device@1116106542"]
}
//单设备
http://localhost:8090/TotalControl/v1/devices/device@1116106541/apps/com.sigma_rt.totalcontrol
{
    "token": "270eq7lXQK8bXYsJ",
    "state": "active"
}

返回结果示例


//多设备
[{"id":"device@1116106541","code":200,"retval":{"status":true,"value":"make it active."}},{"id":"device@1116106542","code":200,"retval":{"status":true,"value":"make it active."}}]

//单设备
{
    "status": true,
    "value": "make it active"
}

REST API同时控制多设备示例

Python语言实现同时打开多个设备上的QQ音乐软件


#!/user/bin/python
#-*- coding:utf-8 -*-
import requests
import json
import base64
import time
import urllib.parse
import urllib
from argparse import Namespace

#定义一些基本的变量
REST_CONN = 'localhost:8090'
REST_BASIC_PATH = 'http://' + REST_CONN + '/TotalControl/v1/'
user_pass = 'sigma:3D391497'
appName = 'com.tencent.qqmusic'
url_login = REST_BASIC_PATH + 'login'
url_device =  REST_BASIC_PATH + 'devices'
url_runApp= REST_BASIC_PATH + 'devices/ids/apps/' + appName

#将用户和密码base64编码的方法
def base64Str(str_auth):
    encodeStr = base64.b64encode(str_auth.encode("UTF-8"))
    encodeStr = str(encodeStr, 'utf8')
    return encodeStr

#获取token的方法
def getToken(url,encodeStr):
    url_login = REST_BASIC_PATH + 'login'
    headers = {'Authorization': encodeStr}
    resp = requests.get(url, headers=headers)
    return resp

#获取设备对象集合的方法
def getDevice(url,token):
    a = {'q': 'all'}
    payload = dict(a, **token)
    resp_dev = requests.get(url, params=payload)
    return resp_dev

#运行指定APP的方法
def RunApp(url,token,ids):
    state = {"state": "active"}
    payload1 = dict(token, **ids)
    payload = dict(payload1, **state)
    payload = urllib.parse.urlencode(payload).encode('utf-8')
    resp_app = requests.post(url, params=payload)
    return resp_app

#调用以上方法,实现打开多设备上的QQ音乐软件
print("第一步: Base64编码用户名和密码")
authBase64 = base64Str(user_pass)
print("Base64编码后的值为: " ,authBase64)
print("第二步: 获取token")
respToken = getToken(url_login,authBase64)
resp = respToken.json()
token = resp['value']
if token == None :
    print("获取token的值失败")
else:
    print("token的值为:",token)
    respDevice = getDevice(url_device,token)
    print('第三步: 获取多设备对象')
    ids = respDevice.json()
    if ids['ids'] == None:
        print("获取多设备对象失败")
    else:
       print("设备对象集合:",ids)
       resp_runApp = RunApp(url_runApp,token,ids)
       print('第四步: 运行连接的多个设备上的QQ音乐软件')
       text = resp_runApp.text
       if 'false' in text:
           print("运行QQ音乐软件失败")
       else:
           print(resp_runApp.text)

运行结果


#如果每个步骤都执行成功,运行结果如下:
第一步: Base64编码用户名和密码
Base64编码后的值为:  c2lnbWE6M0QzOTE0OTc=
第二步: 获取token
token的值为: {'token': '26iB7Y91zssuTc5g'}
第三步: 获取多设备对象
设备对象集合: {'ids': ['device@1770543457', 'device@-230441652']}
第四步: 运行连接的多个设备上的QQ音乐软件
返回结果 [{"id":"device@1770543457","code":200,"retval":{"status":true,"value":"make it active."}},{"id":"device@-230441652","code":200,"retval":{"status":true,"value":"make it active."}}]