概述
库函数的需要
首先我们需要下载一个模块,可以使用pip命令进行安装
pip install aliyun-iot-linkkit
(这篇博文撰写的时候,他的版本处在1.2.0)
任务描述
首先,我们需要在阿里云平台上创建一个产品和一台设备,然后本地程序通过连接这台云上设备来进行数据的上下交换。数据的交互我们凭借的是阿里云上自带的规则引擎去实现的(这些我都会一一讲述如何实现)对于将数据传递到QQ邮箱,我会在下面进行介绍,下面紧跟着的代码是没有这个功能的。
如何创建阿里云上的设备
这个问题在我之前的文章 已经写过了,可以前往那篇文章进行查看,在云端的创建上是一模一样的 :https://blog.csdn.net/qq_19408097/article/details/96346936
如何创建一条新的云上数据传输规则
这个问题在我之前的文章 已经写过了,可以前往那篇文章进行查看,在云端的创建上是一模一样的 :https://blog.csdn.net/qq_19408097/article/details/96452193
本地代码
本地代码如下,有些数据需要填入自己的信息:
from linkkit import linkkit
import time
import json
//连接阿里云
def on_connect(session_flag, rc, userdata):
print("on_connect:%d,rc:%d,userdata:" % (session_flag, rc))
pass
//取消连接阿里云
def on_disconnect(rc, userdata):
print("on_disconnect:rc:%d,userdata:" % rc)
def on_subscribe_topic(mid, granted_qos, userdata):#订阅topic
print("on_subscribe_topic mid:%d, granted_qos:%s" %
(mid, str(','.join('%s' % it for it in granted_qos))))
pass
//接收云端的数据
def on_topic_message(topic, payload, qos, userdata):
#print("on_topic_message:" + topic + " payload:" + str(payload) + " qos:" + str(qos))
//不知道为什么下行的数据是“123”,设备端的接收到的数据却是b:"123"
//所以我在这里用了一个切片去处理数据
print("阿里云上传回的数值是:",str(payload)[2:-1])
pass
//终止订阅云端数据
def on_unsubscribe_topic(mid, userdata):
print("on_unsubscribe_topic mid:%d" % mid)
pass
//发布消息的结果,判断是否成功调用发布函数
def on_publish_topic(mid, userdata):
print("on_publish_topic mid:%d" % mid)
//设置连接参数,方法为“一机一密”型
lk = linkkit.LinkKit(
host_name="cn-shanghai",//填自己的host_name
product_key="***",//填自己的product_key
device_name="***",//填自己的device_name
device_secret="***")//填自己的device_secret
//注册接收到云端数据的方法
lk.on_connect = on_connect
//注册取消接收到云端数据的方法
lk.on_disconnect = on_disconnect
//注册云端订阅的方法
lk.on_subscribe_topic = on_subscribe_topic
//注册当接受到云端发送的数据的时候的方法
lk.on_topic_message = on_topic_message
//注册向云端发布数据的时候顺便所调用的方法
lk.on_publish_topic = on_publish_topic
//注册取消云端订阅的方法
lk.on_unsubscribe_topic = on_unsubscribe_topic
//连接阿里云的函数(异步调用)
lk.connect_async()
//因为他是他是异步调用需要时间所以如果没有这个延时函数的话,他就会出现not in connected state的错误
time.sleep(2)
//订阅这个topic,不需要写prodect_key和device_name
rc, mid = lk.subscribe_topic(lk.to_full_topic("user/get"))
a=input("你想要将什么数值传到阿里云上去?")
//调用数据上传的函数,将string类的a上传到阿里云上去
rc, mid = lk.publish_topic(lk.to_full_topic("user/update"), str(a))
数据的检查
我们将数据上传到云上去了以后,我们可以登陆我们的阿里云,然后前往日记服务中查看我们的数据是否如我们所想的那样,已经在云上走了一遭了。
附:将云上得到的数据发送到某人的QQ邮箱里面去
这里我们采用的是SMTP协议,关于这个这个协议的使用我在之前的一篇文章中有具体的讲过,可以前往那篇文章中查看:https://blog.csdn.net/qq_19408097/article/details/100546889
具体代码如下:
from linkkit import linkkit
import time #应对异步调用
import json #数据的处理(其实到头来完全没有用到...)
import smtplib#邮件发送的模块
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
def on_connect(session_flag, rc, userdata):#连接阿里云
print("on_connect:%d,rc:%d,userdata:" % (session_flag, rc))
pass
def on_disconnect(rc, userdata):#取消连接阿里云
print("on_disconnect:rc:%d,userdata:" % rc)
def on_subscribe_topic(mid, granted_qos, userdata):#订阅topic
print("on_subscribe_topic mid:%d, granted_qos:%s" %
(mid, str(','.join('%s' % it for it in granted_qos))))
pass
def on_topic_message(topic, payload, qos, userdata):#接收云端的数据
toaddr=input("请输入你要接收阿里云回传数据的QQ邮箱")
#print("on_topic_message:" + topic + " payload:" + str(payload) + " qos:" + str(qos))
print("阿里云上传回的数值是:",str(payload)[2:-1])#不知道为什么下行的数据是“123”,设备端的接收到的数据却是b:"123"
send_email(toaddr,str(payload)[2:-1])
pass#所以我在这里用了一个切片去处理数据
def on_unsubscribe_topic(mid, userdata):#终止订阅云端数据
print("on_unsubscribe_topic mid:%d" % mid)
pass
def on_publish_topic(mid, userdata):#发布消息结果
print("on_publish_topic mid:%d" % mid)
def send_email(toaddr,message):#发送邮件的方法
fromaddr = "***"#发送端的qq邮箱号码
#toaddr = "***"#邮件接收端的qq邮箱号码
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "阿里云的回传数据"
body = message
msg.attach(MIMEText(body, 'plain'))
server = smtplib.SMTP("smtp.qq.com",587)
server.starttls()
server.login(fromaddr , "***")#邮件发出端的密钥
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
lk = linkkit.LinkKit(#设置连接参数,方法为“一机一密”型
host_name="cn-shanghai",#自己的host_name
product_key="***",#自己的product_key
device_name="***",#自己的device_name
device_secret="***")#自己的device_secret
lk.on_connect = on_connect
lk.on_disconnect = on_disconnect
lk.on_subscribe_topic = on_subscribe_topic
lk.on_topic_message = on_topic_message#注册接收到云端数据的方法
lk.on_publish_topic = on_publish_topic#注册云端发布消息结果的方法
lk.on_unsubscribe_topic = on_unsubscribe_topic#注册取消云端订阅的方法
lk.connect_async()#连接阿里云的函数(异步调用)
time.sleep(10)#因为他是他是异步调用需要时间所以如果没有这个延时函数的话,他就会出现not in connected state的错误
rc, mid = lk.subscribe_topic(lk.to_full_topic("user/get"))#订阅这个topic,不需要写prodect_key和device_name
a=input("你想要将什么数值传到阿里云上去?")
rc, mid = lk.publish_topic(lk.to_full_topic("user/update"), str(a))#调用数据上传的函数,将string类的a上传到阿里云上去
总结
总的来说,用python写的代码比我之前用C#写的要简单的多,所以在这一点上,我建议还是用python去写这个程序,尽管其实阿里云提供的python的SDK其实有点乱,但能用还是可以用的,只是可能原本可以再简单一些的。
最后
以上就是鳗鱼故事为你收集整理的用python通过MQTT协议去连接阿里云来实现数据的上下交互(并将得到的云上数据发送到某人的QQ邮箱中)的全部内容,希望文章能够帮你解决用python通过MQTT协议去连接阿里云来实现数据的上下交互(并将得到的云上数据发送到某人的QQ邮箱中)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复