非官方,阿里云 IOT 套件设备端 Python 开发 SDK
- MQTT
- HTTP
- CoAP
- Python3
pip3 install yansongda-aliyun-iot-device
from aliyun_iot_device.mqtt import Client as IOT
import time
def on_connect(client, userdata, flags, rc):
    print('subscribe')
    client.subscribe(qos=1)
def on_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_connect
iot.on_message = on_message
iot.connect()
iot.loop_start()
while True:
    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
from aliyun_iot_device.http import Client as IOT
import time
PRODUCE_KEY = "b1VzFx30hEm"
DEVICE_NAME = "iot_device_01"
DEVICE_SECRET = "3TSqd6sfzjSkSwEmLmcAdZnI0oGlmRZ8"
iot = IOT((PRODUCE_KEY, DEVICE_NAME, DEVICE_SECRET))
while True:
    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)