Blinker 后台数据分析
如何解析出后台服务器认证信息,供自己的设备连接。
测试程序 天气 增加了 Debug输出信息功能
1手机APP添加控件信息
2硬件烧录程序
#define BLINKER_PRINT Serial
#define BLINKER_MQTT
#define BLINKER_DEBUG_ALL
#include <Blinker.h> char auth[] = "9a02fc93f6cf";
char ssid[] = "dongdong";
char pswd[] = "ldd123456"; #define BUTTON_1 "btn-qc4" void setup()
{
Serial.begin(115200); pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW); Blinker.begin(auth, ssid, pswd);
Blinker.wInit(BUTTON_1, W_BUTTON);
} void loop()
{
Blinker.run(); if (Blinker.available()) {
BLINKER_LOG2("Blinker.readString(): ", Blinker.readString()); uint32_t BlinkerTime = millis(); Blinker.beginFormat();
Blinker.vibrate();
Blinker.print("millis", BlinkerTime);
Blinker.endFormat();
} if (Blinker.button(BUTTON_1)) {
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
String get_weather = Blinker.weather(); BLINKER_LOG2("weather: ", get_weather); Blinker.delay(60000);
}
}
最重要在 #define BLINKER_DEBUG_ALL 可以打印出服务器返回数据,里面有认证账号和密码
3返回的消息
[50] Blinker v0.1.5
[50] Connecting to dongdong
[605] Connected
[605] Your IP is: 192.168.1.102
[605] authkey: 9a02fc93f6cf
[605] HTTPS begin: https://iotdev.clz.me/api/v1/user/device/diy/auth?authKey=9a02fc93f6cf
[1374] [HTTP] GET... code: 200
[1378] reply was:
[1378] ==============================
[1378] {"detail": {"broker": "aliyun", "deviceName": "67DEBCDA4YFZURWW9H5KOLTW", "iotId": "qAQieJeIJ64YqEM8Bze60010c40400", "iotToken": "27c0df1e500b43f39c7b750f6f09604e", "productKey": "JgCGbHlndgz", "uuid": "67c3698830d0482a6b96256526e01ecf"}, "message": 1000}
[1395] ==============================
[1400] ====================
[1401] DEVICE_NAME: 67DEBCDA4YFZURWW9H5KOLTW
[1405] MQTT_PRODUCTINFO: JgCGbHlndgz
[1408] MQTT_ID: 67DEBCDA4YFZURWW9H5KOLTW
[1412] MQTT_NAME: qAQieJeIJ64YqEM8Bze60010c40400
[1416] MQTT_KEY: 27c0df1e500b43f39c7b750f6f09604e
[1421] MQTT_BROKER: aliyun
[1423] HOST: public.iot-as-mqtt.cn-shanghai.aliyuncs.com
[1428] PORT: 1883
[1430] UUID: 67c3698830d0482a6b96256526e01ecf
[1434] ====================
[1437] BLINKER_PUB_TOPIC: /JgCGbHlndgz/67DEBCDA4YFZURWW9H5KOLTW/s
[1442] BLINKER_SUB_TOPIC: /JgCGbHlndgz/67DEBCDA4YFZURWW9H5KOLTW/r
[1451] mDNS responder started
[1452] webSocket server started
[1454] ws://67DEBCDA4YFZURWW9H5KOLTW.local:81
[1458] ESP8266_MQTT Initialled...
[2462] Current time: Fri Jul 27 03:59:57 2018 [6448] Connecting to MQTT...
只需要知道6个信息
服务器端口[1428] PORT: 1883
服务器域名 [1423] HOST: public.iot-as-mqtt.cn-shanghai.aliyuncs.com
分配用户账号[1412] MQTT_NAME: qAQieJeIJ64YqEM8Bze60010c40400
分配用户密码[1416] MQTT_KEY: 27c0df1e500b43f39c7b750f6f09604e
在服务器上的消息
[1437] BLINKER_PUB_TOPIC: /JgCGbHlndgz/67DEBCDA4YFZURWW9H5KOLTW/s
[1442] BLINKER_SUB_TOPIC: /JgCGbHlndgz/67DEBCDA4YFZURWW9H5KOLTW/r
测试
打开手机MQTT调试助手
设置信息 域名+端口+账号+密码
设置接受话题和发送话题
打开blinker app 每次在 blinker app上按下按钮(键值 btn-qc4)
就会接收到消息
刚开始成功了
过会就掉了,不知道为什么
(中间不小心重启了ESP8266)
牛逼 竟然是动态密码
1每次刷了官方的固件ESP8266重启发送HTTP请求,域名端口 账号不变 密码重新生成。
由于调试助手每次只连接MQTT服务器而不发起HTTP请求,所以不会修改密码,关闭打开仍然可用。
2 睡了一早上,打开手机调试助手怎么也连不上,重新用ESP发起请求一次获得新密码,看样子隔段时间密码还会变的,只能从服务器从新获取。
如下图 在新设备里自定义一个按键,两个滑块,一个开关,分别按下
收到的消息如下图,
JSON数据格式 {1设备类型 2数据 {控件键值(按键)+数据 3从哪来 4 到哪去 }(下面是话题名)
至此,全部搞明白
Blinker 的流程是这样的
0手机注册一个新设备,设备里面有很多操作控件(按键,滑块)。分配一个KEY
1 ESPP8266终端利用手机的设备分配的KEY,当唯一HTTP用户认证名,向HTTP服务发起请求,获取分配的服务器+端口+认证账户+动态认证密码+接收和发送消息话题,每次程序重启就会发起一次,每次就会修改一次认证密码,其余不变。
--
2 ESP8266终端获取到认证消息后,利用这些消息连接MQTT服务器,进行数据交互
每一个设备分配一个大话题,在此之下,每个控件(按键,滑块)在手机端设置的键值,就是区分消息源的关键。
蹭的很开心!
后续深入
认证使用的是阿里物联网套件
https://www.alibabacloud.com/help/zh/doc-detail/73742.htm
应该是第二种 使用HTTPS认证再连接模式
MQTT认证模式
http://emqtt.com/docs/v2/plugins.html
推测是HTTP解析认证
1ESP访问
HTTPS begin: https://iotdev.clz.me/api/v1/user/device/diy/auth?authKey=9a02fc93f6cf
得到回应
{"detail": {"broker": "aliyun", "deviceName": "67DEBCDA4YFZURWW9H5KOLTW", "iotId": "qAQieJeIJ64YqEM8Bze60010c40400", "iotToken": "27c0df1e500b43f39c7b750f6f09604e", "productKey": "JgCGbHlndgz", "
服务器网站和端口
[1423] HOST: public.iot-as-mqtt.cn-shanghai.aliyuncs.com
[1428] PORT: 1883
MQTT信息
[1401] DEVICE_NAME: 67DEBCDA4YFZURWW9H5KOLTW
[1405] MQTT_PRODUCTINFO: JgCGbHlndgz
[1408] MQTT_ID: 67DEBCDA4YFZURWW9H5KOLTW
[1412] MQTT_NAME: qAQieJeIJ64YqEM8Bze60010c40400
[1416] MQTT_KEY: 27c0df1e500b43f39c7b750f6f09604e
[1421] MQTT_BROKER: aliyun
[1423] HOST: public.iot-as-mqtt.cn-shanghai.aliyuncs.com
[1428] PORT: 1883
[1430] UUID: 67c3698830d0482a6b96256526e01ecf
发布和接受的话题
[1437] BLINKER_PUB_TOPIC: /JgCGbHlndgz/67DEBCDA4YFZURWW9H5KOLTW/s
[1442] BLINKER_SUB_TOPIC: /JgCGbHlndgz/67DEBCDA4YFZURWW9H5KOLTW/r
最后不断自己发粗心跳包
Blinker 后台数据分析的更多相关文章
- 初步了解SequoiaDB数据库
随着企业中日益复杂与多变的需求,以及迅速扩展带来的海量数据的业务,IT部门需要将越来越多的信息提供给用户,同时在现今的全球经济背景环境下,IT部 门还需要在提供高效服务的同时,降低其设备与程序维护成本 ...
- 第八次作业(课堂实战)- 项目UML设计(团队)
1. 团队信息 队名:小白吃队 成员: 后敬甲 031602409 卢泽明 031602328 蔡文斌 031602301 葛亮 031602617 刘浩 031602423 黄泽 031602317 ...
- 2018软工实践作业八之UML设计
1. 团队信息 队名:小白吃队 成员: 后敬甲 031602409 卢泽明 031602328 蔡文斌 031602301 葛亮 031602617 刘浩 031602423 黄泽 031602317 ...
- 深入学习sequoiadb巨杉数据库及python连接方式
随着公司日益复杂与多变的需求,以及迅速扩展带来的海量数据业务,我们需要在提供高效服务的同时,降低其设备与程序维护成本.算了,不吹了,说白了就是需要从巨杉数据库中抓取大量的数据,但是我现在不会,所以需要 ...
- Django ---- blog项目学习所得
一.登录功能 1.采用ajax 提交form表单的方式 2.后台生成随机验证码,登录时提交验证码 3.用PLI库生成随机验证码,置于session中,登录时与前台提交的code进行upeer()的验证 ...
- 利用NPOI导出数据到Execl
相信很多童鞋都开发过Execl的导入导出功能,最近产品中无论是后台数据分析的需要,还是前端满足用户管理的方便,都有Execl导入导出的维护需求产生. 以前做这个功能,如果是web,利用HttpCont ...
- 腾讯技术分享:Android版手机QQ的缓存监控与优化实践
本文内容整理自公众号腾讯Bugly,感谢原作者的分享. 1.问题背景 对于Android应用来说,内存向来是比较重要的性能指标.内存占用过高,会影响应用的流畅度,甚至引发OOM,非常影响用户体验.因此 ...
- 微信小程序---协同工作和发布
(1)协同开发和发布 在中大型的公司里,人员的分工非常仔细,一般会有不同岗位角色的员工同时参与同一个小程序项目.为此,小程序平台设计了不同的权限管理使得项目管理者可以更加高效管理整个团队的协同工作. ...
- V2X:
一篇文章读懂V2X系列:标准篇 为了提升交通系统的安全性和智能化,智能交通系统的概念正逐渐兴起.智能交通可以利用新一代的通信网络和数据处理能力,提高现有交通系统的整体效率,降低能量损耗,增加运输的安全 ...
随机推荐
- Django之模型层(多表操作)
一.创建模型 1,一对多关系 一本书只有一个出版社,一个出版社可以出版多本书,从而书与出版社之间就构成一对多关系,书是‘多’的一方,出版社是‘一’的一方,我们在建立模型的时候,把外键写在‘多’的一方, ...
- SPI Flash(W25Q16DV) 基本操作
读取厂家\设备 ID 发送 90H 指令,再发送 00h 的地址,然后接收即可. 代码如下: void SPIFlashReadID(int *pMID, int *pDID) { SPIFlash_ ...
- Linux中ls命令用法
ls 命令的含义是list显示当前目录中的文件名字.注意不加参数它显示除隐藏文件外的所有文件及目录的名字. 1)ls –a 显示当前目录中的所有文件,包含隐藏文件 命令: aijian.shi@U-a ...
- Ocelot中文文档-Configuration
配置 一个关于Ocelot配置例子在这里.配置有两个部分.一个数组类型的ReRoutes和一个全局配置.ReRoutes是个对象,告诉Ocelot怎么去处理一个上游请求.全局配置有点繁琐(is a h ...
- Nginx 500错误总结
Nginx 500错误总结 500(服务器内部错误) 服务器遇到错误,无法完成请求. 501(尚未实施) 服务器不具备完成请求的功能.例如,当服务器无法识别请求方法时,服务器可能会返回此代码. 502 ...
- 在C语言结构体中添加成员函数
我们在使用C语言的结构体时,经常都是只定义几个成员变量,而学过面向对象的人应该知道,我们定义类时,不只是定义了成员变量,还定义了成员方法,而类的结构和结构体非常的相似,所以,为什么不想想如何在C语言结 ...
- sigar获取Windows系统的硬件信息进行JAVA后台系统资源监控
windows下,将sigar-amd64-winnt.dll复制到jdk的bin目录下或者拷贝到WEB-INF/lib下 linux下,将libsigar-amd64-linux.so拷贝到jdk的 ...
- Runtime和Process
private void runByshcommand(String command) { try { System.out.println("开始执行命令....."); Pro ...
- IE和Chrome执行javascript对鼠标双击事件的不同响应
最近在用天地图API帮同学做点开发的工作,主要是基于天地图的API实现违法用地举报的在线地图标绘,要实现的效果如下: 由于是基于天地图API的TPolygonTool工具实现面积量测和多边形绘制功能, ...
- Kotlin入门(20)几种常见的对话框
提醒对话框手机上的App极大地方便了人们的生活,很多业务只需用户拇指一点即可轻松办理,然而这也带来了一定的风险,因为有时候用户并非真的想这么做,只是不小心点了一下而已,如果App不做任何提示的话,继续 ...