全部产品
云市场

物模型开发

更新时间:2018-11-27 21:44:13

设备可以使用物模型功能,实现属性上报、事件上报和服务调用

配置物模型文件

用户需要从云端控制台下载物模型文件,该文件需要集成到应用工程中,这样对应的topic才能正确的接收和发送消息

  1. lk.thing_setup("tsl.json")

注:该设置需要在连接云端之前调用。

物模型功能可用时通过on_thing_enable通知用户,然后用户可以进行属性上报,事件上报,服务响应:

  1. lk.on_thing_enable = on_thing_enable
  2. ...
  3. def on_thing_enable(self, userdata):
  4. print("on_thing_enable")

物模型功能不可用时通过 on_thing_disable 通知用户,属性上报,事件上报,服务响应不可用

  1. lk.on_thing_disable = on_thing_disable
  2. ...
  3. def on_thing_disable(self, userdata):
  4. print("on_thing_disable")

属性上报

通过thing_post_property上报属性,传入参数为与物模型定义中属性对应的字典对象

  1. prop_data = {
  2. "abs_speed": 11,
  3. "power_stage": 10
  4. }
  5. rc, request_id = lk.thing_post_property(prop_data)

服务端对上报的属性做出处理发出响应,SDK通过on_thing_prop_post 通知用户

  1. lk.on_thing_prop_post = on_thing_prop_post
  2. ...
  3. def on_thing_prop_post(self, request_id, code, data, message,userdata):
  4. print("on_thing_prop_post request id:%s, code:%d, data:%s message:%s" %
  5. (request_id, code, str(data), message))

thing_post_property返回值rc为0时表明请求写入发送缓冲区成功,rc为其它值为写入发送缓冲失败,当on_thing_prop_post 调用时,表明结果从云端返回了请求结果,code为200时表明解析成功,其它值为失败,失败信息可在message中查看

事件上报

通过thing_trigger_event上报事件,传入参数为事件identifier和物模型中定义事件对应的字典对象,如下所示:

  1. event_data = {
  2. "power": 10,
  3. "power_style": 1
  4. }
  5. rc, request_id = lk.thing_trigger_event(("power_state", event_data))

服务端对上报的事件处理后发出响应,SDK通过on_thing_event_post通知用户

  1. lk.on_thing_event_post = on_thing_event_post
  2. ...
  3. def on_thing_event_post(self, event, request_id, code, data, message, userdata):
  4. print("on_thing_event_post event:%s,request id:%s, code:%d, data:%s, message:%s" %
  5. (event, request_id, code, str(data), message))

设置属性

服务端发送设置属性消息后,SDK通过设置的回调函数on_thing_prop_changed通知用户,回调函数中params为包含属性名与值的字典对象,用户需要对接收到的新属性进行处理:

  1. lk.on_thing_prop_changed = on_thing_prop_changed
  2. ...
  3. def on_thing_prop_changed(self, params, userdata):
  4. print("on_thing_prop_changed params:" + str(params))

注: SDK不会主动上报属性变化,如需要修改后再次上报云端,需要用户自行调用thing_post_property()发送

服务响应(异步)

服务端发送服务请求消息后,SDK通过设置的回调函数on_thing_call_service通知用户:

注:所有的服务均通过on_thing_call_service进行通知用户,通过identifier区分不同服务

  1. lk.on_thing_call_service = on_thing_call_service
  2. ...
  3. def on_thing_call_service(self, identifier, request_id, params, userdata):
  4. print("on_thing_call_service identifier:%s, request id:%s, params:%s" %
  5. (identifier, request_id, params))

identifier 对应物模型中服务对应的identifier, request_id为区分每次调用的id,params为服务调用参数

设备端对服务做出返回响应

  1. lk.thing_answer_service(identifier, request_id, code, params)

identifer为物模型中服务对应的identifier,request_id为on_thing_call_service中传递的reques_id,code为返回码,200为本地处理成功,params为字典类型的参数,和物模型中服务返回参数进行对应

物模型-自定义协议

如果想使用自定义格式传输数据,则将物模型文件参数为空即可

  1. lk.thing_setup()

设备上行数据,通过thing_raw_post_data向服务端发送自定义格式数据

  1. params = {
  2. "prop_int16": 11
  3. }
  4. payload = self.protocolToRawData(params)
  5. lk.thing_raw_post_data(payload)

服务端收到自定义格式数据后给出回复,SDK通过on_thing_raw_data_post通知用户

  1. lk.on_thing_raw_data_post = on_thing_raw_data_post
  2. def on_thing_raw_data_post(self, payload, userdata):
  3. print("on_thing_raw_data_post: %s" % str(payload))

服务端发送数据后,SDK通过on_thing_raw_data_arrived通知用户

  1. lk.on_thing_raw_data_arrived = on_thing_raw_data_arrived
  2. def on_thing_raw_data_arrived(self, payload, userdata):
  3. print("on_thing_raw_data_arrived:%r" % payload)
  4. print("prop data:%r" % self.rawDataToProtocol(payload))