阿里云物联网设备sdk

yansongda-aliyun-iot-device的Python项目详细描述


aliyun-iot-device-python

非官方,阿里云 IOT 套件设备端 Python 开发 SDK

支持的协议

  • [x] MQTT
  • [x] HTTP
  • [ ] CoAP

环境

  • Python3

安装

pip3 install yansongda-aliyun-iot-device

使用

MQTT

fromaliyun_iot_device.mqttimportClientasIOTimporttimedefon_connect(client,userdata,flags,rc):print('subscribe')client.subscribe(qos=1)defon_message(client,userdata,msg):print('receive message')print(str(msg.payload))PRODUCE_KEY="b1VzFx30hEm"DEVICE_NAME="iot_device_01"DEVICE_SECRET="3TSqd6sfzjSkSwEmLmcAdZnI0oGlmRZ8"iot=IOT((PRODUCE_KEY,DEVICE_NAME,DEVICE_SECRET))iot.on_connect=on_connectiot.on_message=on_messageiot.connect()iot.loop_start()whileTrue:iot.publish(payload="success",qos=1)time.sleep(5)

回调

  • on_connect

    定义连接成功后的回调函数

    回调函数格式:

    connect_callback(client, userdata, flags, rc)

    client: the client instance for this callback

    userdata: the private user data as set in Client() or userdata_set()

    flags: response flags sent by the broker

    rc: the connection result

  • on_subscribe

    定义订阅成功后的回调函数

    回调函数格式:

    subscribe_callback(client, userdata, mid, granted_qos)

    client: the client instance for this callback

    userdata: the private user data as set in Client() or userdata_set()

    mid: matches the mid variable returned from the corresponding subscribe() call.

    granted_qos: list of integers that give the QoS level the broker has granted for each of the different subscription requests.

  • on_message

    定义收到消息时的回调函数.

    回调函数格式:

    on_message_callback(client, userdata, message)

    client: the client instance for this callback

    userdata: the private user data as set in Client() or userdata_set()

    message: an instance of MQTTMessage.This is a class with members topic, payload, qos, retain.

  • on_publish

    定义 publish() 方法成功发送消息时的回调函数.

    格式:

    on_publish_callback(client, userdata, mid)

    client: the client instance for this callback

    userdata: the private user data as set in Client() or userdata_set()

    mid: matches the mid variable returned from the corresponding publish() call, to allow outgoing messages to be tracked.

  • on_unsubscribe

    定义取消订阅某条 topic 时的回调函数.

    格式:

    unsubscribe_callback(client, userdata, mid)

    client: the client instance for this callback

    userdata: the private user data as set in Client() or userdata_set()

    mid: matches the mid variable returned from the corresponding unsubscribe() call.

  • on_disconnect

    定义连接断开时的回调函数.

    格式:

    disconnect_callback(client, userdata, self)

    client: the client instance for this callback

    userdata: the private user data as set in Client() or userdata_set()

    rc: the disconnection result.

说明

  • 域名直连与 HTTPS 认证

    SDK 默认使用域名直连同时启用 TLS 加密。

    如果您不想使用 TLS 加密,可在初始化时传入 tls=False 参数;

    如果您想使用 HTTPS 认证,可在初始化时传入 domain_direct=False 参数,HTTPS 认证将强制使用 TLS 认证加密

  • TLS 认证 CA 证书

    SDK 默认使用了阿里云 IOT 根证书,一般情况无需修改。

    如一定要修改,请传入 ca_certs="/path/to/cert/root.cer"

  • websocket 通道

    SDK 默认使用 TCP 通道。

    如果需要使用 websocket,请传入 transport="websockets"

    当使用 websocket 时,默认启用 TLS,即使用的是 wss 协议,如果不想使用 wss,请同时传入 tls=False

HTTP

fromaliyun_iot_device.httpimportClientasIOTimporttimePRODUCE_KEY="b1VzFx30hEm"DEVICE_NAME="iot_device_01"DEVICE_SECRET="3TSqd6sfzjSkSwEmLmcAdZnI0oGlmRZ8"iot=IOT((PRODUCE_KEY,DEVICE_NAME,DEVICE_SECRET))whileTrue:iot.publish('success')time.sleep(5)

注意

  • 使用 http 协议进行通讯时,需要 token 进行认证,SDK 默认使用内存型缓存(cachetools 方案)进行 token 的保存。

  • 如果您需要自行进行其他方案进行保存(file/memcached/redis),可以 iot.get_token(cache=False) 获取 token,再 publish 消息时,请 iot.publish(payload=payload, token=token)

设备影子系统

# 设备主动上报状态iot.publish(payload={"method":"update","version":i,"reported":{"online":True}},topic="shadow",qos=1)# 设备主动获取设备影子内容iot.publish(payload={"method":"get"},topic="shadow",qos=1)# 设备端删除影子属性iot.publish(payload={"method":"delete","reported":"null"},topic="shadow",qos=1)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
javascript节点js require()和Rhino Shell load()之间的区别是什么?   While循环中的java If语句   java GXT如何在XTemplate中显示treeobject?   如何将黑白图像加载到二进制文件中?   java ORMLite不知道如何存储班级航班。扫描仪。modelFX。机场航空公司的AirlineFx。使用另一个类或自定义持久器   java组织。阿帕奇。德比。客户是SqlException JSP和JSTL查询   spring如何将clob数据分配给java变量   java从上的表获取数据(Spring)   javaphp使用Exec执行带有用户定义参数的Jar文件   java jsonschema2pojo:引用相同类型的对象   使用原语从Scala调用Java vararg方法   java ClassNotFoundException:ClientBuilder Jersey 2.25.1 Tomcat 9.0   Android(Java)cr_BindingManager:无法调用determinedVisibility()从未看到pid的连接:   Java使用LocalTime类比较没有日期的时间   Java如何初始化对象的参数?