【开源】如何用python远程控制硬件?

前段时间做了一个共享会议室的项目,解决了小程序端远程控制硬件的问题,今天就来分享给大家。

准备工作如下:
1.客户端:小程序端
2.开发语言:python
3.第三方平台:统软云物联网
4.设备:WIFI通断器WIFI墙壁开关WIFI墙插
5.对接方式:API接口

统软云wifi通断器,100左右一台,就是一个可以连wifi,可通过接口和小程序远程控制的继电器,控制包间的电磁锁。电磁锁淘宝上有卖,50-80一把,什么门都能装;主要是这个通断器支持多种指令:打开,关闭,延时打开,延时关闭;这样的话断电上锁和通电上锁的模式都可以解决。

 统软云wifi墙壁开关,120一台,有一路二路三路的,分别可控制对应路数的灯光,同样可以连无线,可通过小程序和接口远程控制,订单到期后自动关闭,客人仍然可通过按下开关再次开灯,但1分钟后仍然后自动关闭,很银性。

 统软云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 requests
url = "http://iot-api.unisoft.cn/qtyVWasgeMq/device/list/?sign=3f79882436861bf7126617cc90b82c2a&ts=1690508963"
response = requests.get(url)
if response.status_code == 200:
print(response.text)
else:
print("Error:", response.status_code)
//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
);
$data = json_encode($data);
//开始发送请求,注意这里是POST请求方式
import requests
url = "http://iot-api.unisoft.cn/qtyVWasgeMq/device/control/?sign=3f79882436861bf7126617cc90b82c2a&ts=1690508963"
payload = {
"device": "1",
"sync": "1",
"power": "1"
}
response = requests.post(url, data=payload)
if response.status_code == 200:
print(response.text)
else:
print("Error:", response.status_code)

其他的操作小伙伴们直接看文档吧,调用方式还是很简单,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、付费专栏及课程。

余额充值