香橙派mqtt阿里云终端(二) --python3.5环境配置以及阿里云环境测试

书接上回,我搭好了树莓派所需的环境以及往我的个人服务网站上添加了我的树莓派终端,过程当中也是踩了不少坑,不过总算是过来了。接下来切入正题。

python环境以及包配置

基础包安装

首先我使用的编译环境是python,因为它香,当然作为一名学生党而言我希望我能更快的开发而不是在搭建环境配置变量上面浪费时间。
我的项目是基于m2m协议的(个人开发者推荐),这里采用了python的paho库,这是一个可以发布和订阅消息的mqtt库。

$ pip install paho-mqtt

安装完成后

python3

>>>import paho.mqtt
>>>

配置成功

阿里云服务器配置

阿里云物联网简介

三元组

  **PublicKey、DeviceName、DeviceSecret**
  PublicKey:设备在网络中的唯一标识,在通信及初始化的认证中都要用到。
  DeviceName:注册设备时自定义的或者自动生成的设备名称,在通信及初始化的认证中都要用到。
  DeviceSecret:物联网平台为设备颁发的设备秘钥,和DeviceName成对出现,在设备认证时会用到。

HmacSHA1签名

通过设备上传的信息,包括ClientId,DeviceName,ProductKey,timestamp,DeviceSecret
我们和服务器端同时采用哈希算法取得一个passwd,用于设备的登录验证,用户名为DeviceName,+"&"+ ProductKey。
具体关于哈希算法可参考博文

https://blog.csdn.net/lidaidai001/article/details/93599319

账户设置

首先需要一个阿里云开发者账户,注册登录后直接在首页登录物联网平台
在这里插入图片描述新建产品
在这里插入图片描述品类切换为自定义其余自定
之后新建物模型,物模型是设备和服务器之间通信的数据。
在这里插入图片描述之后新建设备,在设备页面可以看到阿里云的三元组
在这里插入图片描述点击右边的DeviceSecret即可查看。

测试代码

paho部分函数定义以及使用

1.connect(host, port=1883, keepalive=60, bind_address="")

参数 定义
host 主机名或IP地址
port 服务器主机的网络端口。 默认为1883
keepalive 与代理通信之间允许的最长时间段(以秒为单位)。 如果没有其他消息正在交换,则它将控制客户端向代理发送ping消息的速率
bind_address 绑定此客户端的本地网络接口的IP地址

2.publish(topic, payload=None, qos=0, retain=False)

参数 定义
topic 该消息发布的主题
payload 要发送的实际消息。如果没有给出,或设置为无,则将使用零长度消息。 传递int或float将导致有效负载转换为表示该数字的字符串。 如果你想发送一个真正的int / float,使用struct.pack()来创建你需要的负载
qos 服务的质量级别
retain 如果设置为True,则该消息将被设置为该主题的“最后已知良好”/保留的消息

3.subscribe(topic, qos=0)

参数 定义
topic 一个字符串,指定要订阅的订阅主题
qos 期望的服务质量等级。 默认为0。

4.on_connect(client, userdata, flags, rc):
flags是一个包含代理回复的标志的字典;
rc的值决定了连接成功或者不成功:

情况
0 连接成功
1 协议版本错误
2 无效的客户端标识
3 服务器无法使用
4 错误的用户名或密码
5 未经授权

5.on_disconnect(client, userdata, rc):
rc参数表示断开状态。
如果MQTT_ERR_SUCCESS(0),回调被调用以响应disconnect()调用。 如果以任何其他值断开连接是意外的,例如可能出现网络错误。
6.on_message(client, userdata, message):
当收到关于客户订阅的主题的消息时调用。
message是一个描述所有消息参数的MQTTMessage。
7.on_publish(client, userdata, mid):
对于Qos级别为1和2的消息,这意味着已经完成了与代理的握手。
对于Qos级别为0的消息,这只意味着消息离开了客户端。
mid变量与从相应的publish()返回的mid变量匹配,以允许跟踪传出的消息。
8.username_pw_set(username, password=None):
为代理认证设置一个用户名和一个可选的密码。必须在connect*()之前调用。
9.loop_forever(timeout=1.0, max_packets=1, retry_first_connection=False):
网络循环的阻塞形式,直到客户端调用disconnect()时才会返回。它会自动处理重新连接

测试源码

服务器用户密码解析

<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值