阿里云物模型物聯網平臺初探(python)
前言
家里買了個天貓精靈,發現這些隨便加了個傳感器的東西都好貴,想著自己做一個巨無霸整合傳感器,剩下一大筆money,畢設也可以往這方面發展,
具體的步驟看官網的吧,稍微踩了點坑,初步的python示例在下面,
mqtt協議的學習光看官方檔案還是有點枯燥,這里觀看了b站的視頻
MQTT協議視頻
小白一個,都是本人的拙見,有錯誤歡迎指正,沒有怎么正經學過,人菜勿罵,
無腦復制檔案代碼的后果
查了小半個小時,最后發現官方給的實體代碼,居然是類復用的時候用的,想直接寫進去除錯,得把self去掉,實際開發肯定還是直接復用吧,
然后就是一定要先把json檔案下載下來,我就在下載下來以后,放進同一檔案夾,然后就沒有后續了,,,想了好半天才發現,

然后就是在物模型上發現,在從云端設定屬性的時候,阿里云的sdk是多行程操作的,直接在回呼函式中設定全域變數并不能改掉屬性值,初步考慮設個管道?常用的多行程通信操作,后面想了想,如果只是簡單的開關,實際開發好像直接讀寫引腳更容易實作和理解,但如果是像具體資料的話就的想其他辦法了,后面在查閱資料研究研究,
總之最后是基本可以實作兩邊的通信了,下面打算連接板子試試看,正好有一塊k210.課設試試做個人臉門鎖,能上云的,k210資源還是挺豐富的,人臉模型直接用就行,拼積木的課設有點讓人害羞,
import json
from linkkit import linkkit
lk = linkkit.LinkKit(
host_name="cn-shanghai",
product_key="你的key",
device_name="設備名稱",
device_secret="設備密碼!不是產品")
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):
# 設備端的接收到的資料卻是b:"123"用了一個切片去處理資料
print("阿里云上傳回的數值是:", str(payload))
# 拿到接收來的資料
data = str(payload)[2:-1]
print("阿里云上傳回的數值是:", data)
dataDict = json.loads(data)
print(topic)
print(qos)
print(userdata)
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 on_thing_enable(userdata):
print("on_thing_enable")
def on_thing_disable(userdata):
print("on_thing_disable")
def on_thing_prop_post(request_id, code, data, message, userdata):
print("on_thing_prop_post request id:%s, code:%d, data:%s message:%s" %
(request_id, code, str(data), message))
def on_thing_event_post(event, request_id, code, data, message, userdata):
print("on_thing_event_post event:%s,request id:%s, code:%d, data:%s, message:%s" %
(event, request_id, code, str(data), message))
def on_thing_prop_changed(params, userdata):
# 多行程操作,資料并不共享,現實使用直接讀取引腳建議,
global prop_data
prop_data['NightLightSwitch'] = params['NightLightSwitch']
lk.thing_post_property(prop_data)
print('xiugai', prop_data['NightLightSwitch'])
def on_thing_call_service(identifier, request_id, params, userdata):
print("on_thing_call_service identifier:%s, request id:%s, params:%s" %
(identifier, request_id, params))
# 注冊接收到云端資料的方法
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.thing_setup("objdect_model.json")
# 物模型可用?
lk.on_thing_enable = on_thing_enable
lk.on_thing_disable = on_thing_disable
# 屬性
lk.on_thing_prop_post = on_thing_prop_post # 每改變一次就要提交一次,
lk.on_thing_prop_changed = on_thing_prop_changed
# 事件?
lk.on_thing_event_post = on_thing_event_post
# 服務器一步回應
lk.on_thing_call_service = on_thing_call_service
# 連接mqtt
lk.connect_async()
time.sleep(2)
prop_data = {
"NightLightSwitch": 1,
}
while True:
if prop_data['NightLightSwitch'] == 1:
prop_data['NightLightSwitch'] = 0
else:
prop_data['NightLightSwitch'] = 1
time.sleep(5)
print('ziji',prop_data['NightLightSwitch'])
pass
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/300059.html
標籤:其他
上一篇:商業模式的構成及有效因素
下一篇:POE原理與配置
