日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

物模型通信

物模型是阿里云物聯網平臺為產品定義的數據模型,您可以通過物聯網平臺提供的Python Link SDK實現設備與物聯網平臺之間的物模型通信,包括屬性上報、事件上報和服務調用。

前提條件

背景信息

物模型是實體設備映射到阿里云物聯網平臺的數據模型。您可在物聯網平臺控制臺產品詳情頁面,單擊功能定義頁簽,單擊物模型TSL,查看或導出JSON格式的物模型文件(TSL)。

物模型:ICA標準數據格式(Alink JSON)

初始化

請參考代碼中的thing_alink.py文件, 在__init__函數中完成對象的初始化。

    def __init__(self):
        self.__linkkit = linkkit.LinkKit(
            host_name="cn-shanghai",
            product_key="a18wP******",
            device_name="LightSwitch",
            device_secret="uwMTmVAMnGGHaAkqmeDY6cHxxB******")

配置物模型文件

用戶需要從云端控制臺下載物模型文件,該文件需要集成到應用工程中,這樣對應的Topic才能正確接收和發送消息:

self.__linkkit.thing_setup("tsl.json")        
說明
  • tsl.json默認為utf-8格式,如果需要修改,請確保在保存文件時格式為utf-8。

  • 該設置需要在連接云端之前調用。

物模型功能可通過on_thing_enable通知用戶,然后用戶可以進行屬性上報、事件上報和服務響應:

     self.__linkkit.on_thing_enable = self.on_thing_enable

     def on_thing_enable(self, userdata):
        print("on_thing_enable")       

物模型功能不可用時,通過on_thing_disable通知用戶,屬性上報、事件上報、服務響應不可用。

    self.__linkkit.on_thing_disable = self.on_thing_disable

    def on_thing_disable(self, userdata):
        print("on_thing_disable")    
重要

屬性上報、事件上報、設置屬性、服務響應等接口的應用,需在設備完成認證與連接之后。

屬性上報

重要

Python Link SDK的1.0.0至1.2.11版本中,設備與物聯網平臺連接斷開后,如果繼續調用以下接口發送消息會拋出異常,需要您做好異常處理。在1.2.12版本后,該API執行失敗后,會返回非零錯誤值,不再拋出異常。

通過thing_post_property上報屬性,傳入參數為屬性名稱及值:

    prop_data = {
        "abs_speed": 11,
        "power_stage": 10
    }
    self.__linkkit.thing_post_property(prop_data)          

服務端對上報的屬性做出處理發出響應,SDK通過on_thing_prop_post通知用戶:

    self.__linkkit.on_thing_prop_post = self.on_thing_prop_post

    def on_thing_prop_post(self, 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))           

thing_post_property返回值rc為0時,表明請求寫入發送緩沖區成功,rc為其它值時,表示寫入發送緩沖失敗。當on_thing_prop_post調用時,表明結果從云端返回了請求結果,code為200時表明解析成功,code為其它值表示解析失敗,失敗信息可在message中查看。

事件上報

重要

Python Link SDK的1.0.0至1.2.11版本中,設備與物聯網平臺連接斷開后,如果繼續調用以下接口發送消息會拋出異常,需要您做好異常處理。在1.2.12版本后,該API執行失敗后,會返回非零錯誤值,不再拋出異常。

通過thing_trigger_event上報事件,傳入參數為事件identifier和物模型中定義事件對應的對象,如下所示:

    event_data = {
        "power": 10,
        "power_style": 1
    }
    self.__linkkit.thing_trigger_event(("power_state", event_data))            

服務端對上報的事件處理后發出響應,SDK通過on_thing_event_post通知用戶:

    self.__linkkit.on_thing_event_post = self.on_thing_event_post

    def on_thing_event_post(self, 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))
        pass           

設置屬性

服務端發送設置屬性消息后,SDK通過設置的回調函數on_thing_prop_changed通知用戶,回調函數中params為包含屬性名與值的JSON對象,用戶需要對接收到的新屬性進行處理:

    self.__linkkit.on_thing_prop_changed = self.on_thing_prop_changed

    def on_thing_prop_changed(self, params, userdata):
        print("on_thing_prop_changed params:" + str(params))     
說明

SDK不會主動上報屬性變化,如果需要修改后再次上報云端,需要用戶自行調用thing_post_property()發送。

服務響應(異步)

服務端發送服務請求消息后,SDK通過設置的回調函數on_thing_call_service通知用戶:

注:所有的服務均通過on_thing_call_service進行通知用戶,通過identifier區分不同服務:

    self.__linkkit.on_thing_call_service = self.on_thing_call_service

    def on_thing_call_service(self, identifier, request_id, params, userdata):
        print("on_thing_call_service identifier:%s, request id:%s, params:%s" %
              (identifier, request_id, params))
        self.__call_service_request_id = request_id
        pass          

identifier對應物模型中服務對應的identifierrequest_id為區分每次調用的ID,params為服務調用參數。

設備端對服務做出返回響應:

self.__linkkit.thing_answer_service(identifier, request_id, code, params)            

identifier為物模型中服務對應的identifierrequest_idon_thing_call_service中傳遞的reques_idcode為返回碼,200為本地處理成功,params為字典類型的參數,與物模型中服務返回參數進行對應。

物模型:自定義格式

初始化

Python Link SDK支持您使用自定義格式(非物模型格式)傳輸數據。

請參考代碼thing_custom.py文件, 在__init__函數中完成對象的初始化。

    def __init__(self):
        self.__linkkit = linkkit.LinkKit(
            host_name="cn-shanghai",
            product_key="a18wP******",
            device_name="LightSwitch",
            device_secret="uwMTmVAMnGGHaAkqmeDY6cHxxB******")

配置物模型文件

首先需要將物模型文件參數設置為空:

self.__linkkit.thing_setup()           

上報數據

重要

Python Link SDK的1.0.0至1.2.11版本中,設備與物聯網平臺連接斷開后,如果繼續調用以下接口發送消息會拋出異常,需要您做好異常處理。在1.2.12版本后,該API執行失敗后,會返回非零錯誤值,不再拋出異常。

設備上行數據,通過thing_raw_post_data向服務端發送自定義格式數據:

    def protocolToRawData(self, params):
        # command set
        payload_bytes = b'\x00'
        # id
        payload_bytes += b'\x00'
        payload_bytes += b'\x00'
        payload_bytes += b'\x00'
        payload_bytes += b'\x01'
        # prop_int16 big en
        prop_int16 = params["prop_int16"]
        payload_bytes += bytes([prop_int16 // 256])
        payload_bytes += bytes([prop_int16 % 256])
        return payload_bytes

    params = {
        "prop_int16": 11
        }
    payload = self.protocolToRawData(params)
    print("payload:%r" % payload.hex())
    self.__linkkit.thing_raw_post_data(payload)       

服務端收到自定義格式數據后給出回復,SDK通過on_thing_raw_data_post通知用戶:

self.__linkkit.on_thing_raw_data_post = self.on_thing_raw_data_post

def on_thing_raw_data_post(self, payload, userdata):
        print("on_thing_raw_data_post: %s" % str(payload))         

接收下行消息

服務端發送數據后,SDK通過on_thing_raw_data_arrived通知用戶:

self.__linkkit.on_thing_raw_data_arrived = self.on_thing_raw_data_arrived

def on_thing_raw_data_arrived(self, payload, userdata):
        print("on_thing_raw_data_arrived:%r" % payload)
        print("prop data:%r" % self.rawDataToProtocol(payload))