移远QuecPython(基于EC600s)开发物联网应用(九) 阿里云IOT 腾讯云IOT

quecpython提供了aLiYun( 阿里云物联网套件客户端功能) 和 TenCentYun(腾讯云物联网套件客户端功能), 可以非常方便的连接这两个云平台, 在真正使用umqtt库之前, 我们先了解一下这两个模块, 以便将来我们写出API风格类似的模块


第一部分 阿里云服务

一. aLiYun - 阿里云服务

阿里云物联网套件客户端功能,目前的产品节点类型仅支持“设备”,设备认证方式支持“一机一密和“一型一密”
关于阿里云IOT平台的设置, 我们不在赘述, 可参考之前的文章: https://www.jianshu.com/p/f0d46324a2c6

导入模块

from aLiYun import aLiYun

1. 实例化阿里云连接

aLiYun(productKey, productSecret, DeviceName, DeviceSecret)

我们要找到关键的三元组信息:

aLiYun模块这里多了一个productSecret , 此参数是为一型一密设计的, 如果是一机一密的方式,可以传None, 需要时也可按如下方式找到

2. 设置MQTT数据通道的参数

aLiYun.setMqtt(clientID, clean_session, keepAlive)

需要注意的是,当进行阿里云的一型一密连接的时候,会在本地生成secret.json的文件用以保存设备的设备密钥,如果重刷固件或者删除,再进行连接的时候会因为没有secret.json而报错,所以重刷固件或者删除了secert.json文件,需要手动新建secret.json文件,下面secret.json文件的模板

{
  "Test01": "9facf9aba414ec9eea7c10d8a4cb69a0"
}
# Test01 : 设备名
# "9facf9aba414ec9eea7c10d8a4cb69a0" 设备密钥

3.注册回调函数

aLiYun.setCallback(sub_cb)

4. 订阅mqtt主题

aLiYun.subscribe(topic,qos)

5. 发布消息

aLiYun.publish(topic,msg, qos=0)

6. 运行连接

aLiYun.start()

7. 关闭连接

aLiYun.disconnect()

二. 上传数据举例: 阿里云上传温湿度信息

from aLiYun import aLiYun
import ujson

PRODUCT_KEY = 'a1AYa96sZMJ'
PRODUCT_SECRET = None
DEVICE_NAME = 'EspTempAndHumi_D001'
DEVICE_SECRET = 'a23249cb179feee41ca2f8f38525113d'
aLiY = aLiYun(PRODUCT_KEY, PRODUCT_SECRET, DEVICE_NAME, DEVICE_SECRET)


state = 1
# 设备下发命令的set主题
ALINK_TOPIC_PROP_SET = "/sys/" + PRODUCT_KEY + \
    "/" + DEVICE_NAME + "/thing/service/property/set"
# 设备上传数据的post主题
ALINK_TOPIC_PROP_POST = "/sys/" + PRODUCT_KEY + \
    "/" + DEVICE_NAME + "/thing/event/property/post"
# 设备post上传数据要用到一个json字符串, 这个是拼接postJson用到的一个字符串
ALINK_METHOD_PROP_POST = "thing.event.property.post"


def sub_cb(topic, msg):
    global state
    print(
        "Subscribe Recv: Topic={},Msg={}".format(
            topic.decode(), msg.decode()))
    state -= 1


clientID = "testDevice"
aLiY.setMqtt(clientID, clean_session=False, keepAlive=300)

aLiY.setCallback(sub_cb)
aLiY.subscribe(ALINK_TOPIC_PROP_POST)

data_dict = {
    "CurrentTemperature": 24.3,
    "CurrentHumidity": 47.5,
    "GeoLocation": {
        "CoordinateSystem": 2,
        "Latitude": 36.11,
        "Longitude": 117.09,
        "Altitude": 150
    }
}
msg_dict = {
    "id": 1,
    "version": 1.0,
    "method": ALINK_METHOD_PROP_POST,
    "params": data_dict
}

aLiY.publish(ALINK_TOPIC_PROP_POST, ujson.dumps(msg_dict))
aLiY.start()
while True:
    if state:
        pass
    else:
        aLiY.disconnect()
        break

三. 下发命令举例: 远程控制灯开关

from aLiYun import aLiYun
import ujson
from machine import Timer

PRODUCT_KEY = 'a17lGhkKwXs'
PRODUCT_SECRET = None
DEVICE_NAME = 'esp32LightHome'
DEVICE_SECRET = '14fb77db62910b887dd28c5e449f406e'
aLiY = aLiYun(PRODUCT_KEY, PRODUCT_SECRET, DEVICE_NAME, DEVICE_SECRET)


# 设备下发命令的set主题
ALINK_TOPIC_PROP_SET = b"/sys/" + PRODUCT_KEY + \
    "/" + DEVICE_NAME + "/thing/service/property/set"
# 设备上传数据的post主题
ALINK_TOPIC_PROP_POST = b"/sys/" + PRODUCT_KEY + \
    "/" + DEVICE_NAME + "/thing/event/property/post"

light_status = 0

# 回调函数
def sub_cb(topic, msg):
    if topic == ALINK_TOPIC_PROP_POST:
        print(
            "上报成功! Subscribe Recv: Topic={},Msg={}".format(
                topic.decode(), msg.decode()))
    elif topic == ALINK_TOPIC_PROP_SET:
        print("下发成功! Subscribe Recv: Topic={},Msg={}".format(
            topic.decode(), msg.decode()))
        params = ujson.loads(msg.decode())['params']
        global light_status
        light_status = params["LightSwitch"]
        print("灯亮了" if light_status else "灯灭了")


clientID = "testDevice"  # 客户端ID,随便取名
aLiY.setMqtt(clientID, clean_session=False, keepAlive=300)  # 设置MQTT连接

aLiY.setCallback(sub_cb)  # 设置回调函数
aLiY.subscribe(ALINK_TOPIC_PROP_POST)  # 订阅上传数据主题


def send_msg_to_AliY(args):
    # 要上传的数据
    data_dict = {
        "LightSwitch": light_status
    }
    # 上传数据格式
    msg_dict = {
        "id": 1,
        "version": 1.0,
        "method": "thing.event.property.post",
        "params": data_dict
    }
    aLiY.publish(ALINK_TOPIC_PROP_POST, ujson.dumps(msg_dict))


timer1 = Timer(Timer.Timer1)
timer1.start(period=5000, mode=Timer.PERIODIC, callback=send_msg_to_AliY)
aLiY.start()
while True:
    pass

第二部分 腾讯云服务

腾讯云物联网套件客户端功能,目前的产品节点类型仅支持“设备”,设备认证方式支持“一机一密和“动态注册认证”。

from TenCentYun import TXyun

一. TenCentYun- 腾讯云服务

1. 实例化腾讯云服务

TXyun(productID, devicename, devicePsk, ProductSecret)

2. 设置MQTT数据通道的参数

TXyun.setMqtt(clean_session, keepAlive)

3. 注册回调函数

TXyun.setCallback(sub_cb)

4. 订阅mqtt主题

TXyun.subscribe(topic,qos=0)

5. 发布消息

TXyun.publish(topic,msg, qos=0)

6. 运行连接

TXyun.start()

7. 关闭连接

TXyun.disconnect()

二. 举例

现在看来, 腾讯云和阿里云IOT一毛一样, 直接参考阿里云的例子即可
此外, 我看腾讯云IOT文档, 好多是基于SDK介绍的, 而又没用提供micro-python SDK, 这就很尴尬了,腾讯云IOT我用的少, 但毕竟腾讯出品, 我相信她是很完善的平台。大家可以自行尝试。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,710评论 4 376
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,839评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,295评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,776评论 0 223
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,198评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,074评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,200评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,986评论 0 214
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,733评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,877评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,348评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,675评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,393评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,209评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,212评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,003评论 2 280

推荐阅读更多精彩内容