挖坑:小爱同学->blinker-Node-RED接入homeassistant方法探讨(新版-已实现)

背景:
小爱同学的红外接入,用过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盏灯

有没有相同爱好的同学,欢迎跟帖交流,也希望论坛大佬能指点迷津。

小爱反馈根据日志已经弄好了

用blinker不靠谱的 这方案我已经放弃了 原因有这几点了
1、只能语音,不能反馈状态,成不成听天由命。
2、最多5个设备,再增加是要给钱的,他们老板说要10块钱一个设备。
3、使用多孔插座是不行的,他会默认是插座一、插座二等等,在智能和别名里面都不能改。
4、最关键的是被小爱同学控制的认证过程和普通blinker的认证过程是不一样的,你在js里看的认证过程只适用于普通的设备。米家的是使用的他们自己的服务器去认证,要上传硬件信息。
5、加油,我早已弃坑,希望你继续。你要参考的是arduino的库,参考js库没用
6、blinker不是很稳定……
7、他订阅的主题好像在js里能看到 记不清了好像是什么id/r或者/s

假如要整一个自己的第三方服务直接接入小爱同学,如何操作?

已实测,免费只能5个设备,使用价值有限

5个设备,如果按照blinker那个插排的虚拟设备接入的话,5*4孔=20盏灯,不知道能不能这样计算,一般家庭里用也就足够了

另外,今天解决了俩问题:一个是挪动节点之后不停重启的问题:
this.on('close', function(removed, done) { client.end(); done(); });
这样就好了,在重启节点的时候mqtt要断开

解决了小爱同学fromMIOT来的mqtt包回复问题,至少小爱同学不会再说“嗯,尝试了一下,先看看设备状态吧”了

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赞

点赞 你已经成功解锁20个设备了

node-red-contrib-blinker-mqtt 节点已发布,欢迎拍砖

没错,家里一共不到20个灯,感谢鞭策和激励。

棒棒的
但是是看起来感觉好复杂啊
但是还是要挺你

我的小爱同学训练设备这边打开空白。。。不知道什么鬼

是点灯科技那玩意儿?前两天在头条上刷到过一个视频,关于电脑开关机还通过8266,然后通过“点灯”这玩意儿来控制。特意去下了这APP,还没开始玩呢,居然说这东西设备接入还付费,付个锤子哦。

配置节点属性之后部署一下,再到米家绑定三方平台,选blinket,同步设备,然后才能小爱同学训练

免费的可以添加5个自定义设备,我虚拟了5个插排,一个插排4个孔,可以控制20盏灯,仅此而已

不好使,我连小米自家设备都刷新不了