• 微信公众号实现简易的物联网控制(二)


    命令下发

    先来看一段OneNet文档说明:

    命令是指应用发送命令数据给OneNet设备云、再由OneNet设备云转发给终端设备、终端设备收到命令后可以向设备云反馈响应的一种工作机制。命令下发后,应用可以通过API查询命令状态和提取命令的响应数据。

    命令的执行步骤如下:

    1、  应用通过API向设备云发送命令数据;

    2、  设备云生成该命令的uuid作为该命令的唯一标识并向应用返回,同时向终端设备转发命令数据;

    3、  终端设备收到命令数据后执行命令数据,可以生成响应,也可以不响应;

    4、  设备云跟踪记录命令的响应,如果设备有响应,就关联命令uuid和响应结果;

    5、  应用通过API向设备云提取命令执行结果(API请求中携带命令uuid标识)。

    特别说明:

    命令下发到终端设备后,如果终端设备10秒内未收到响应,则此命令的状态将被设置为超时,应用通过API查询命令状态时,会反馈超时。超过10秒后收到的响应会被丢弃。

    终端设备针对同一条命令回复多条命令响应,只有在未超时时间内收到的第一条是有效响应,后续的响应包将会被直接丢弃。因此终端设备应该对每个命令只有一个响应包。


    下面是请求格式,这个地方有些坑,和官网的公开协议产品指南有所不同,刚开始按照官网的来实现始终报,后来在其他文档里面找到了这个才最终调试通了


    HTTP方法

    POST

    URL

    http://<API_ADDRESS>/cmds

    HTTP头部

    api-key:xxxx-ffff-zzzzz,必须master key

    URL参数

    device_id = //接收该数据的设备ID,必填。

    HTTP内容

    用户自定义Json或二进制数据(小于64K)

    成功返回

    {

    "errno": 0,

    "error":“succ”,

    "data":{

    //不超过64个字符字符串

    "cmd_uuid":“2302-312-FWs”

    }

    }



    import requests
    
    class OneNet():
        def __init__(self,key,dev_id,cmd):
            self.api_key = key
            self.dev_id = dev_id
            self.cmd = cmd
            self.header = {'api-key': self.api_key}
        def send_cmd(self):
            params = {'device_id':self.dev_id}
            url = "http://api.heclouds.com/cmds?"
            r = requests.session()
            res = r.post(url, headers=self.header, params=params,data=self.cmd)
            print(res.content)
    
    t = OneNet(you api_key,your dec_id, cmd)
    t.send_cmd()
    使用自带的requests库来实现post请求

    最后的结果

    {"errno":0,"data":{"cmd_uuid":"5bdaf1a9-3854-5e5f-b662-b1e3ef57ea6e"},"error":"succ"}



    努力成为一名GEEK!
  • 相关阅读:
    算法复杂度(Algorithmic Complexity)
    Javascript引用指针
    树(Trees)
    什么是数据挖掘(What is Data Mining?)
    Javascript的声明
    Javascript继承(下)——干嘛要继承
    Linux 中使用 OpenCV
    Java集合类(Java Collections classes)
    哈希查找(Hashing)
    Javascript继承(上)——对象构建
  • 原文地址:https://www.cnblogs.com/FanMLei/p/10501035.html
Copyright © 2020-2023  润新知