suwill
#1
背景:
小爱同学的红外接入,用过esp8266烧录OpenMqttGageWay的红外方式,暂时放弃
绿板小爱要外挂单片机,放弃
黑板小爱买不到,放弃
曲线救国:
小爱同学支持blinker的自定义设备
写了个node-red的自定义插件,已经不需要烧录esp8266模块就能让blinker的app里显示设备在线,并监听到手机app点击按钮时mqtt服务器发来的消息了
主要参考了这里:
https://www.cnblogs.com/kekeoutlook/p/9375351.html
和blinker的官方js-sdk:
https://github.com/blinker-iot/blinker-js/blob/master/lib/BlinkerMQTT.js
大概梳理了下,设备的secureKey请求blinker服务器,得到登录阿里云(暂时只写了这个)mqtt的用户名、密码、clientID等信息;
重新组装下参数,拿开源的mqtt.js去模拟登录阿里云的mqtt服务器,并订阅主题
这部分参考了墨澜姐姐的教程
https://yq.aliyun.com/articles/673939?spm=a2c4e.11155435.0.0.311621b7RdZh8r
目前实现的是:
心跳包,根据blinker的机制,服务器发送get:state的时候,客户端必须要发送心跳包,否则服务器收不到心跳包则认为设备不在线根据Arduino论坛里,官方帖子里写的:
引用
心跳包与初始化UI
在blinker app上,点击设备图标进入设备控制页面时,app会向设备发送一个状态查询指令(心跳查询)
此后,WiFi设备,每59秒会返回一次心跳包;Ble设备,每29秒返回一次心跳包
状态查询指令,如下:
{“get”:“state”}
默认状态下,WiFi接入设备会返回:
{“state”:“online”}
BLE接入设备会返回:
{“state”:“connected”}
附图如下:
目前遇到的难题:
1,node-red里,在工作区挪动下节点,重新部署,会导致自定义节点不停的rest,不知道是什么原因
2,小爱同学已经能控制虚拟设备,但是手机上反馈:“嗯,尝试了一下,先看看设备状态吧”
看了blinker的文档,
引用小爱数据管理
智能音箱接口, 反馈数据到小爱同学
==任何控制务必即时反馈==
==超时2s以上再反馈,小爱同学就默认设备不在线,小爱同学会反馈“智能家居控制出了点问题”==
现在还不知道怎样把数据通过mqtt反馈给给小爱同学,而实际上指令已经发出了,Node-Red的虚拟设备能收到
个人猜测应该是把ToDevice写成"MIOT",fromDevice写自己,然后发mqtt包,还没时间验证。
3.个人对blinker的APP还不是很了解,他们家APP最多能模拟米家的4孔插排,如果要控制论坛定制的hassmart改装模块,我猜也就一个设备控制4盏灯
有没有相同爱好的同学,欢迎跟帖交流,也希望论坛大佬能指点迷津。
mrfu
#3
用blinker不靠谱的 这方案我已经放弃了 原因有这几点了
1、只能语音,不能反馈状态,成不成听天由命。
2、最多5个设备,再增加是要给钱的,他们老板说要10块钱一个设备。
3、使用多孔插座是不行的,他会默认是插座一、插座二等等,在智能和别名里面都不能改。
4、最关键的是被小爱同学控制的认证过程和普通blinker的认证过程是不一样的,你在js里看的认证过程只适用于普通的设备。米家的是使用的他们自己的服务器去认证,要上传硬件信息。
5、加油,我早已弃坑,希望你继续。你要参考的是arduino的库,参考js库没用
6、blinker不是很稳定……
7、他订阅的主题好像在js里能看到 记不清了好像是什么id/r或者/s
robot
#4
假如要整一个自己的第三方服务直接接入小爱同学,如何操作?
suwill
#6
5个设备,如果按照blinker那个插排的虚拟设备接入的话,5*4孔=20盏灯,不知道能不能这样计算,一般家庭里用也就足够了
另外,今天解决了俩问题:一个是挪动节点之后不停重启的问题:
this.on('close', function(removed, done) { client.end(); done(); });
这样就好了,在重启节点的时候mqtt要断开
解决了小爱同学fromMIOT来的mqtt包回复问题,至少小爱同学不会再说“嗯,尝试了一下,先看看设备状态吧”了
suwill
#7
1.根据blinker的文档来看,小爱接入必须要发反馈包的,而且个人测试结果也是有反馈的
2.最多5个设备我想用插孔来解决,我不会喊插孔一插孔二的,因为现在能抓到Blinker的APP里的按钮的名称(比如说btn_key1,btn_key2之类的)所以想从后台接收到那个Key1,key2就好了
4.拿blinker里虚拟设备的ID,把Key加到arduinoIDE 里,烧录一下,只要在线一次,米家就能识别到这个设备是“米家”的,设备可以同步过去
5.JS的库没写完,我改了arduino的库里的库文件,好让它在debugAll的时候把pub和sub打出来,比着串口日志,然后用js来实现它发布的mqtt,包括sub和pub
6.这倒是真的
7.已经有了
下面是今天下午折腾和小爱同学对话的日志
有手机截图为证:
另外,如果不喜欢插孔1,插孔2,可以训练小爱同学打开二锅头,打开三锅头…
还有米家里认到的俩虚拟设备:
附上二锅头的日志,反馈状态时多了点参数
1 个赞
suwill
#9
node-red-contrib-blinker-mqtt 节点已发布,欢迎拍砖
我的小爱同学训练设备这边打开空白。。。不知道什么鬼
houhd
#13
是点灯科技那玩意儿?前两天在头条上刷到过一个视频,关于电脑开关机还通过8266,然后通过“点灯”这玩意儿来控制。特意去下了这APP,还没开始玩呢,居然说这东西设备接入还付费,付个锤子哦。
suwill
#14
配置节点属性之后部署一下,再到米家绑定三方平台,选blinket,同步设备,然后才能小爱同学训练
suwill
#15
免费的可以添加5个自定义设备,我虚拟了5个插排,一个插排4个孔,可以控制20盏灯,仅此而已
yswxyl
#17
我想问一下,就是我的为什么提示连接点灯科技的key失败
请问这个日志如何查看,米家开发者平台只能企业注册,学生注册不了