使用阿里云物联网平台IoT Studio控制海康摄像头旋转

需求:

在温室大棚的物联网监控系统里,安装了带云台控制的摄像头,海康自带的app是可以实现云台控制(转动,放大缩小),但是嵌入网页的播放器,没有这个功能,而客户又希望通过网页去控制摄像头,捕捉特定的植物细节画面。

一开始我是想说,平台的摄像头播放器不支持这个功能,甲方爸爸,臣妾做不到呀。可是后来商务跟我说,这个平台功能这么少呀,看来还是要自己开发的系统才有自由度呀。听到这里我不服气了,作为阿里云物联网平台的粉丝,我表示,我试试看,结果零零碎碎做了2天的时间,居然让我实现了这个功能。

来看一下怎么实现的吧。

目录

1.从海康萤石开放平台找到API的接口资料

2.在物联网平台的界面中,获取accessToken

3.使用accessToken发送云台控制命令

4.甲方爸爸,你要的云台控制功能做好了


1.从海康萤石开放平台找到API的接口资料

看了一会,明白了其中的控制逻辑:

1.通过账号的appKey和appSecret,来获取一个每7天变化一次的accessToken;

2.发送云台停止指令,

3.发送你想要的云台动作(操作命令:0-上,1-下,2-左,3-右,4-左上,5-左下,6-右上,7-右下,8-放大,9-缩小,10-近焦距,11-远焦距)

一开始我觉得是懵逼的,向一个网址发送一个报文,这对于一个嵌入式工程师来说,实在有点为难,难道要建立socket,拼装HTML报文,再发送?

但是对阿里云物联网平台的开放性怀有一种信仰般信心的我,去摸索了一下说明文档,发现这种发送报文的处理报文的事,已经是控件本身的一个功能了。话不多说,开搞。

2.在物联网平台的界面中,获取accessToken

萤石开发文档这样说:

  • 获取accessToken请求地址

    https://open.ys7.com/api/lapp/token/get

  • 请求方式

    POST

  • 请求参数
参数名类型描述是否必选
appKeyStringappKeyY
appSecretStringappSecretY
  • HTTP请求报文
POST /api/lapp/token/get HTTP/1.1
Host: open.ys7.com
Content-Type: application/x-www-form-urlencoded

appKey=9mqitppidgce4y8n54ranvyqc9fjtsrl&appSecret=096e76501644989b63ba0016ec5776
  • 返回数据
{
    "data": {
        "accessToken": "at.7jrcjmna8qnqg8d3dgnzs87m4v2dme3l-32enpqgusd-1jvdfe4-uxo15ik0s",
        "expireTime": 1470810222045
    },
    "code": "200",
    "msg": "操作成功!"
}

也就是说,获取accessToken的要求是把appKey和appSecret拼在一起发过去。

appKey=9mqitppidgce4y8n54ranvyqc9fjtsrl&appSecret=096e76501644989b63ba0016ec5776

怎么拼我又开始想着字符串拼接的痛苦经历了,C,python,jason,java的拼接各不一样,要不要加“”要不要printtf()是不是直接+就可以,结果抱着试一试的心态,给我试成功了。

首先在界面放入一个文本框,点开它的数据源“配置数据源”。

按照图示设置

这里动态参数,就是拼接的地方,键和值会自动用=号连接在一起,然后参数和参数之间用&连接在一起(我的猜测,否则不能满足萤石的协议要求)。

问题来了:这些参数怎么来的?

在平台有个变量管理页面,在设置交互的地方选择变量,就会出现变量管理,我配置了几个全局变量,说到这里,这个界面又有点像一个程序,可以以配置的方式声明赋值变量。

然后点击,就发送成功了,有了一个返回值:

{
  "msg": "操作成功!",
  "code": "200",
  "data": {
    "expireTime": 1623480908331,
    "accessToken": "at.3s4ualtw4b3tbtbscx1396q0a7pf5rpm-67w3tkhx63-10cz54n-9fx3orrs3"
  }
}

然后我要把返回值提取出来,只保留accessToken,返回的结果是一串jason的字符串,需要通过数据过滤脚本来过滤(鬼知道我为什么知道可以有这种操作,完全是凭着对马云的信心)。试了好久终于知道了这个脚本配置的规则,已经不去管这种语法是java还是jason,能完成功能就可以。

提取出来两个参数,在数据表配置中,选择我要的accesToken,处理后结果,就是那串数据。

还可以定时刷新。

经过阿里云工单系统,我知道了控件的刷新规则,然后刷新后存入变量,这样操作就可以。设置文本框的交互事件,当“值改变”这事件发生时,把文本框的值写入变量。

弄好了之后,把这个文本框设置成透明就看不到它了,它的作用就是形成一个定时获取accessToken的功能。

3.使用accessToken发送云台控制命令

以下是萤石开放平台对于停止云台控制的说明:

  • 请求地址

    https://open.ys7.com/api/lapp/device/ptz/stop

  • 请求方式

    POST

  • 子账户token请求所需最小权限

    "Permission":"Ptz" "Resource":"Cam:序列号:通道号"

  • 请求参数
参数名类型描述是否必选
accessTokenString授权过程获取的access_tokenY
deviceSerialString设备序列号,存在英文字母的设备序列号,字母需为大写Y
channelNoint通道号Y
directionint操作命令:0-上,1-下,2-左,3-右,4-左上,5-左下,6-右上,7-右下,8-放大,9-缩小,10-近焦距,11-远焦距N

提示:建议停止云台接口带方向参数。

我们放置一个按钮,命名为“左转”,然后设置它的交互动作,包含两个动作,一个停止,一个左转。

 

 

 

我们先看下停止要怎么配置,同样的选择POST到指定的地址,发送的格式是:

accessToken=at.25ne3gkr6fa7coh34ys0fl1h9hryc2kr&deviceSerial=568261888&channelNo=1&direction=1

按照要求配置,其中accesToken我发现引用变量似乎不灵,总是说过期,就直接引用文本框的值,结果就可以了。

最后发送成功了。如果是各种错误都会返回错误码,这个是正确的返回值。

{
  "msg": "设备不在线",
  "code": "20007"
}

交互2也是按照1一样,只是发送的地址是Start地址,里面的内容有点不一样,看图。

其他的云台操作,跟左转是很相似的,把这个做好的按钮复制粘贴过去,改一下direction这个键的键值就可以了,我做了四个按钮: 2-左,3-右,8-放大,9-缩小。

因为多个摄像头都接入了NVR,而我控制的是NVR,所以控制不同的设备是,只要更改channelNo就可以了。

4.甲方爸爸,你要的云台控制功能做好了

折腾了两天的时间,终于实现了云台控制的功能。        

阿里云物联网平台实现快速的物联网系统开发,让我这个嵌入式系统工程师,望着做软件开发团队,露出了复杂的微笑,他们的去留似乎都掌握在我的手中……

  • 9
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
### 回答1: Android Studio连接阿里云物联网平台需要完成以下步骤: 第一步:安装阿里云SDK并创建云账户 要在Android Studio中连接阿里云物联网平台,需要从阿里云官网上下载并安装适用于Android的阿里云SDK。安装完成后,需要创建一个云账户,并注册一个设备。 第二步:配置Gradle文件 在项目Gradle文件中添加阿里云maven库的地址: maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } 然后在应用程序的build.gradle文件中加入相应的依赖项: dependencies { compile 'com.aliyun.alink:alink-sdk:1.4.6' } 第三步:连接阿里云服务器 通过使用AlinkSDK去连接物联网平台,可以使用以下代码进行连接。 String pk = "productKey";//产品ProductKey String dn = "deviceName";//设备DeviceName String ds = "deviceSecret";//设备DeviceSecret String regionId = "cn-shanghai";//设备所在区域 ALink al = new ALink(); al.host("tcp://" + productKey + ".iot-as-mqtt." + regionId + ".aliyuncs.com:1883"); al.pkDn(productKey, deviceName, deviceSecret);//三元组 al.debug(true);//debug模式 al.setListener(new IConnectListener() { @Override public void onError(int code, String message) { Log.e(TAG, "Alink SDK 状态变化 onError " + code + " " + message); } @Override public void onInitDone(ISubscriber subscriber) { Log.d(TAG, "Alink SDK 状态变化 onInitDone , subscriber = " + subscriber); } @Override public void onConnectStateChange(ALink.ConnectState state, int code) { Log.d(TAG, "Alink SDK 状态变化 onConnectStateChange: " + state.toString() + " " + code); } @Override public void onChannelEvent(IClient iClient) { Log.d(TAG, "Alink SDK 状态变化 onChannelEvent " + iClient); } }); 以上就是在Android Studio中连接阿里云物联网平台的方法,通过这些步骤,可以实现在应用程序中与物联网设备的通信。 ### 回答2: Android Studio是一款流行的用于开发Android应用程序的集成开发环境。阿里云物联网平台是一项面向物联网应用程序的工具,可帮助用户连接和管理物联网设备和传感器。连接Android Studio和阿里云物联网平台,可以让开发人员轻松地集成物联网设备的功能到应用程序中。 首先,用户需要创建一个阿里云物联网平台账户,并创建一个设备。然后,用户需要安装阿里云Java SDK,该SDK提供了与物联网平台通信的API。 接下来,在Android Studio中创建一个新项目,并将阿里云的Java SDK添加到项目中。使用API密钥和设备ID配置SDK,以便应用程序能够与物联网平台进行通信。 在应用程序中,用户可以使用API调用与设备进行交互。例如,如果用户希望向设备发送指令,可以使用API调用将指令发送到物联网平台,然后将指令从平台传输到设备。如果用户希望接收来自设备的数据,可以使用API调用监听物联网平台,以便在数据到达时自动接收数据并将其显示在应用程序中。 Android Studio连接阿里云物联网平台可帮助用户开发更智能和更充分利用物联网设备的应用程序。该组合提供了一种简单、安全和可靠的方法,通过API对物联网设备进行控制和监控。无论您是初学者还是经验丰富的开发人员,都可以使用这种组合进行开发。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员熊子峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值