mrh 7a7957f91e 本地 OneNet_API.py 成功下发命令给 esp 3 роки тому
..
OneNet_API.py 7a7957f91e 本地 OneNet_API.py 成功下发命令给 esp 3 роки тому
board.py ef7e4f7152 esp8266 实现数据定时上传与接收应答 3 роки тому
communicate-RaspberryPi.py ef7e4f7152 esp8266 实现数据定时上传与接收应答 3 роки тому
communicate.py ef7e4f7152 esp8266 实现数据定时上传与接收应答 3 роки тому
connect.py ef7e4f7152 esp8266 实现数据定时上传与接收应答 3 роки тому
mqtt_onenet.py ef7e4f7152 esp8266 实现数据定时上传与接收应答 3 роки тому
mylib.py ef7e4f7152 esp8266 实现数据定时上传与接收应答 3 роки тому
pyboard.py ef7e4f7152 esp8266 实现数据定时上传与接收应答 3 роки тому
readme.md e8892bbf3b 应用端通过http向调试工具发送信息 3 роки тому
test.py 7a7957f91e 本地 OneNet_API.py 成功下发命令给 esp 3 роки тому
test2.py ef7e4f7152 esp8266 实现数据定时上传与接收应答 3 роки тому

readme.md

开发板

参考安信可官网: https://docs.ai-thinker.com/esp8266/boards/nodemcu

https://docs.ai-thinker.com/_media/esp8266/boards/nodemcu8266_v1.2_e8_a7_84_e6_a0_bc_e4_b9_a6.pdf

连接OneNet

OneNet官方参考指南

https://open.iot.10086.cn/doc/mqtt/book/device-develop/mqtt-c-demo.html

token算法

https://open.iot.10086.cn/doc/mqtt/book/manual/auth/token.html

网友参考

https://blog.csdn.net/weixin_42410959/article/details/105897629?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165375763916782388012981%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165375763916782388012981&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-105897629-null-null.142^v11^pc_search_result_control_group,157^v12^control&utm_term=python+mqtt+onenet&spm=1018.2226.3001.4187

mqtt与代理通信

由于上述只能连接,无法通信,参考其他文档: https://blog.csdn.net/ZHJ123CSDN/article/details/115137258?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165376451316782246419436%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165376451316782246419436&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-10-115137258-null-null.142^v11^pc_search_result_control_group,157^v12^control&utm_term=OneNet+mqtt&spm=1018.2226.3001.4187

在 OneNet_communicate-RaspberryPi.py 中有代码示例,但这是关于树莓派的,还需要移植一下,详见:OneNet_communicate.py

publish 消息

这是成功发布"订阅设备数据点上报结果"的消息:

topic_publish:  $sys/522417/esp8266/dp/post/json
topic_publish:  $sys/522417/esp8266/dp/post/json
payload:  b"{'id': 160, 'dp': {'count': [{'v': 114}], 'random': [{'v': 224}], 'talk': [{'v': 'fuck you bitch!166'}]}}"

一般来说,只要用户名、密码正确,发布的topic协议如上,均能正常送达 topic格式规范参考:https://open.iot.10086.cn/doc/v5/develop/detail/251

{
    "id": 123,        
    "dp": {             
        "temperatrue": [{     
            "v": 30,       
            "t": 1552289676
        }],
        "power": [{     
            "v": 4.5,        
            "t": 1552289676 
        }],
        "status": [{
                "v": {
                    "color": "blue"
                },
                "t": 1552289677
            },
            {
                "v": {
                    "color": "red"
                },
                "t": 1552289678
            }
        ]
    }
}

总结:格式仅支持json,必须要有id、dp、v参数,t可选,方括号也是必须的

订阅消息

设备与服务端要双向通信,必须要订阅相关topic,如果不订阅,设备将只能发消息而收不到任何内容。 see:https://open.iot.10086.cn/doc/v5/develop/detail/247 例如订阅一个accepted的topic:$sys/{pid}/{device-name}/dp/post/json/accepted,此后任何发送给服务端的消息,都会收到一个应答,没有订阅则收不到应答消息。 注意 :在 {pid}/{device-name}中,哪台设备要订阅topic,就填写哪台设备的id和device-name,不能填写别人的

API命令(代理服务器)和设备

如果进行设备管理,数据查询,设备命令交互等操作,需要用到平台提供的API see:https://open.iot.10086.cn/doc/v5/develop/detail/255

因为设备无法通过mqtt方式直接告诉代理要转发给谁,只能通过https协议调用代理的API,由服务器执行消息转发、应答设备、下发消息等等

查询设备

在文件 Onet_API_https.py -> get_device_info 中,通过发送API查询指令得到设备信息

注册设备

TODO

设备命令

假设有esp8266开发板、服务端、电脑端,如果开发板要远程发消息给电脑,步骤如下:

  1. 开发板想要接受服务端的消息,需要先订阅命令相关的topic
  2. 建议开发板订阅来自服务端的所有命令的topic,如:$sys/{pid}/{device-name}/cmd/#,这样就能收到来自服务端所有的命令消息了。参考文档
  3. 电脑端告诉服务端发送命令给开发板,需调用服务端API,以https协议POST方式发送数据内容参考文档
  4. 电脑端发送的https数据包中,header存放数据鉴权,body为用户自定义数据内容“例如:"open" ”。参考
  5. 服务端收到 https 消息后,会将 body 内容以mqtt协议发送给开发板
  6. 开发板收到"$sys/{pid}/{device-name}/request/{cmdid} open",必须向服务端发送一个应答,应答格式为:$sys/{pid}/{device-name}/cmd/response/{cmdid} ,参考
  7. 服务端会把开发板应答成功的消息发送给电脑端。如果开发板不应答,电脑端会受到服务端一个time_out错误返回。

设备镜像

服务端记录设备状态的信息,例如 device id、device name 、创建时间、网络状态等等,用户也可以增加一些自定义属性如:版本号、地理位置、剩余电量、存储空间、上次更新时间、传感器状态、环境温度等等。总的来说设备镜像就是设备的信息或工作状态。