怎么通过JAVA远程操作墙插?

做了一个共享台球厅的项目,解决了手机端远程操作墙插的问题,今天就来分享给大家。

准备工作如下:
1.客户端:手机端
2.开发语言:JAVA
3.第三方平台:统软云物联网
4.设备:WIFI墙插
5.对接方式:API接口

统软云wifi墙插,150一台,跟普通的墙壁插座外观上没有任何区别,但可以连无线,可通过接口和小程序远程控制,机麻、饮水机等电器插上面就可以远程控制其通电了;

先看官方文档:

消息推送【上行】
当设备状态发生变化时,平台将会把以下4类消息推送到您设置的地址上
注意:相应是实时推送的,如果推送失败,将再次尝试推送,直到推送成功,最多推送5次。 当返回状态HTTP 1.1 200 OK(只判断HTTP状态)时,就认为推送成功,所以没有返回值要求。
1.上/下线消息
2.指令执行消息
3.设备触发的事件消息
4.设备自主上报的状态消息

设备管理【下发】
设备管理 - 获取设备列表
接口地址: http://iot-api.unisoft.cn/EtwYEFmu61/device/list/?sign={sign}&ts={ts}关于sign和ts的定义
请求参数

名称必填类型说明
tag0string可指定标签,传标签ID
group0string可指定分组,传分组ID
page_index0int页码,默认1
page_size0int默认10条,可为20、30、50

设备管理 - 向设备下发指令
接口地址: http://iot-api.unisoft.cn/EtwYEFmu61/device/control/?sign={sign}&ts={ts}
请求参数

名称必填类型说明
device1string设备ID,设备列表接口获取
sync0int为1时(默认),同步返回指令执行结果;为0时(需指定),只返回是否下发成功,而不返回指令执行结果
属性1string命令,格式为 设备的属性名称=属性值;在设备详情页,可查询设备的可用指令以及可用的值;如power=1,则下发命令接通设备电源

看了文档之后我们就会发现,有两方面需要处理:

1.设备的状态等变更是会通知给我们指定的地址,我们在指定的地址POST接受数据然后做数据处理就可以,所以这里就不细说了,如果有不清楚的可以参考官方文档
2.控制设备下发指令,给设备下发指令控制设备,我们主要说一下这里。

对接前需要注意的有几点,大家一定要注意。

1.一定先给设备配网,也就是联网,设备都是支持WIFI的,所以配网很简单,微信小程序进入“统软云物联”小程序,添加设备就可以。
2.统软云物联网平台创建工作台,获取APPID和设置开发者密码还有设置IP白名单,填写上行消息接收地址。
3.给设备下发的指令在设备详情页,可查询设备的可用指令以及可用的值,一般常用的就4个:打开power=1,关闭power=0,延时5秒打开reset=5000,延时5秒关闭point=5000。

下面上代码:

//1、获取设备列表
//准备数据,https://iot.unisoft.cn/developer/处获取
$app_id = "qtyVWasgeMqs"; //统软云物联网平台获取自己的APPID
$AppSecret = "shasadas"; //统软云物联网平台获取自己的开发者密码
$ts = time(); //请求时间(timezone,东八区),10位数字
$sign = md5(md5($AppSecret) . $ts); //md5(md5(开发者密码) + 上面的ts参数),32位字符串
//组装请求地址
$url = "http://iot-api.unisoft.cn/" . $app_id . "/device/list/?sign=" . $sign . "&ts=" . $ts;
//GET传参请求,可选参数tag,group,page_index,page_size,具体的看文档

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class GetRequestExample {
public static void main(String[] args) {
try {
// 创建URL对象
URL url = new URL("http://iot-api.unisoft.cn/qtyVWasgeMqs/device/list/?sign=3f79882436861bf7126617cc90b82c2a&ts=1690508963");
// 打开连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置请求方法
conn.setRequestMethod("GET");
// 发送请求
int responseCode = conn.getResponseCode();
// 读取响应
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// 处理响应数据
System.out.println(response.toString());
// 关闭连接
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
//返回参数code == 200 就OK了
//2.下发指令给设备,打开,关闭,延时打开,延时关闭
//准备数据,https://iot.unisoft.cn/developer/处获取
$app_id = "qtyVWasgeMqs"; //统软云物联网平台获取自己的APPID
$AppSecret = "shasadas"; //统软云物联网平台获取自己的开发者密码
$ts = time(); //请求时间(timezone,东八区),10位数字
$sign = md5(md5($AppSecret).$ts); //md5(md5(开发者密码) + 上面的ts参数),32位字符串
//请求地址 URL+接口名称
$url = "http://iot-api.unisoft.cn/".$app_id."/device/control/?sign=".$sign."&ts=".$ts;
//准备参数
$data = array(
"device" => 1,//设备ID,读取设备列表时返回的ID
"sync" => 1,//同步返回指令执行结果,默认为1,不需要改动,当sync为1(同步执行)方式下,才会返回指令执行结果
"power" => 1,//设备指令,在设备详情页,可查询设备的可用指令以及可用的值,如打开power=1,关闭power=0,延时5秒打开reset=5000,延时5秒关闭point=5000
);

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class PostRequestExample {
public static void main(String[] args) {
try {
// 创建URL对象
URL url = new URL("http://iot-api.unisoft.cn/qtyVWasgeMq/device/control/?sign=3f79882436861bf7126617cc90b82c2a&ts=1690508963");
// 打开连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置请求方法
conn.setRequestMethod("POST");
// 设置请求头
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
// 启用输出流
conn.setDoOutput(true);
// 设置请求参数
String parameters = "device=1&sync=1&power=1";
// 发送请求
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
out.writeBytes(parameters);
out.flush();
out.close();
// 读取响应
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// 处理响应数据
System.out.println(response.toString());
// 关闭连接
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
//返回参数code == 200 就OK了

其他的操作小伙伴们直接看文档吧,调用方式还是很简单,URL+自己的APPI_ID+签名sign+时间戳ts,然后注意是GET还是POST请求方式,然后把参数带进去就OK,个人觉得还是很简单,小伙伴们快去试试吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值