lione95678 发表于 2019-5-15 15:09:45

小白教小白-通过百度云物联的mqtt连接node-red和手机tasker

小白教小白-通过百度云物联的mqtt连接node-red和手机tasker
起因:家里宽带没有公网ip,也不想把hass、node-red挂到外网,但是想通过简单的方式用手机来遥控操作家里的ha或者将ha信息反馈到手机,想了很多办法,包括用企业微信等,现在又有了一个新的思路和解决办法。思路:用安卓手机的tasker软件配合MQTT Client(这个软件可以在tasker中生成插件,软件下载地址,应用汇,再通过百度云的物接入lot hub, mqtt方式连接家里的node-red。教程如下:第一步,拥有百度云的物接入lothub1、到百度云的网站注册账号,地址:https://cloud.baidu.com/,注意,要使用lot hub需要实名制验证,然后按图片进行操作:

我选择的是每月100万条消息,3个月,免费,你需要多少?


上图中,项目名称和描述随便填,但是项目类型选择我红框的“数据型


上图中,名称和用户名随意填

上图中,身份随意填,后面一步忘了截图了,应该是设置策略,涉及到mqtt的“标题”内容,忘了怎么填了,但无所谓,后面可以修改。但是注意了,最后会生成一个身份密钥,一定要复制下来保存后,否则只能通过重置来取得新的秘钥。所有都好了以后,你就可以在网页中看到你的项目了,在项目列表中点击及所注册的项目,可以看到“用户列表”、“身份列表”、“策略列表”的相关信息,如下面几张图



我这里创建了1个项目,对应了2个用户,2个身份,1个策略。这里我也不是很懂,我是node-red用了一个用户,在后面node-red中的mqtt节点中输入了这个用户的相关资料,手机用了另一个用户。(我不知道手机和node-red用同一个用户的资料是否可以,反正我是不行,一个上去另一个就断开了)接下来,你可以直接在网页上测试一下mqtt是否可以了,百度云给了你一个网页端的mqtt的测试方式,见下图





在“身份列表”中,找到你创建的“用户名”,右侧有一个“连接测试”,点进去



上图中,“步骤一”中除了输入“身份秘钥”以外,什么都不要改,主机名称和用户名可以复制下来,然后点击“connect”,点击“步骤二”的右侧的“Add new topic subscription”按键,输入你需要订阅的主题,比如“ceshi/#”以及“Qos”,比如1,对于mqtt的主题,你可以参考以下网址http://itindex.net/detail/58722-mqtt-topic-%E9%80%9A%E9%85%8D%E7%AC%A6在上图中左侧的红框中输入“主题”和“信息”,点击“publish”,就可以在步骤三中看到你发送的信息了。注意,这里输入的主题一定要和你订阅的主题相符合,比如我刚才订阅的主题是“ceshi/#”,那么你发布的主题一定要是“ceshi/***”,比如“ceshi/测试”“ceshi/测试1/测试2”.最后你返回一下项目列表,可以看到如下图



红框中的信息记下来,就是你的设备需要连接的主机名称,连接方式和对应的端口,以上步骤,你的百度云mqtt就好了,按照上面我让你复制的东西,就有了主机名称,用户名称,连接方式(tcp、ssl、wss),对应的端口号,用户秘钥。下面是node-red了第二步:node-red的操作1、在node-red中,新建一个mqtt in节点,按以下图片配置:





上图中,“主题”填写需要订阅的主题内容,Qos按你所需填写,“服务器端”选择添加新的mqtt broker节点,点右侧的笔,



上图中,名称随意,在“连接”下面的“服务端”填写你获得的百度云的信息,比如你获得的是abc123.mqtt.iot.gz.baidubce.com,就填tcp:// abc123.mqtt.iot.gz.baidubce.com,“端口”填1883,(注意将这里填的和你百度云获得的tcp、ssl、wss的相关信息对应起来。)




在“安全”下面的用户名和密码填入你获得的“用户名”和“身份秘钥”。这个节点设置好以后,在这个mqtt节点后面拖一个“debug”节点,部署一下,然后就可以到百度云的“连接测试”中试一下,看看node-red中是否可以收到信息了。要在node-red中发布mqtt,只要加一个mqtt out的节点就可以了。 第三步,用安卓手机发布或者订阅mqtt消息。安卓手机安装MQTT Client这款软件,你可以在google市场找到5.4.1版本的,免费但有广告,我在应用汇找到一个5.4版本的,这个软件好在可以在tasker的插件中调用。配合tasker完成自动化。



安装好以后,按照以下图片配置:从左到右4张图片,一张张来,第一张,右下角点“+”,第二张,“Enabled”点击开启,“Nick name”随意,“Enable SSL”点击开启,“use mqttv3.1”点击开启,“Host”填入你的百度服务端,比如“abc123.mqtt.iot.gz.baidubce.com”(注意,这里的服务端设置和node-red不一样,node-red中要在你的服务端前输入连接方式,比如tcp:// abc123.mqtt.iot.gz.baidubce.com,这里不需要),“port”输入“1884”,“username”输入你百度云mqtt的用户名,“password”输入用户秘钥,“Keep Alive interval”输入60,“Client id”随意,其他不用该,最右边一张图,输入你要订阅的主题和qos,点击“subscribe”到这,这个软件就告一段落了。使用tasker软件,对收到订阅的消息进行判定后制操作,在tasker中新建一个事件,如下图:新建一个事件,在“选择事件类别”中选择“插件”,选择“mqtt”,选择最下面的“Message Arrived”,在“事件修改”的配置中,点右侧的笔,在“topic”中选择你订阅的主题,下面是重点,“varmessage”“varmqttopic”输入变量名称,随意,但要符合变量名称的格式,比如我是这么输入的,在“varmqttopic”中输入“%mqtttp1”,在“varmessage”中输入“%mqttms1”
下面就我的tasker操作做一个说明比如,我要在node-red中发布三个mqtt信息,主题和内容分别是1)主题“家/反馈/灯”,内容是“家里卧室的灯已经打开了”,2)主题“家/安防/监控”,内容是“家里大门口的摄像头已经关闭了”,3)主题“家/安防/监控”,内容是“家里防盗门打开了”。需要我的手机分别对应以下操作:1)震动,2)发一段铃声,3)给家里人打电话。那么在手机的MQTT Client软件订阅的主题是“家/#”,在tasker软件中,事件就按照上面的操作,对应该事件的任务就是这样(不放图了):新建一个任务,1)在“任务编辑”中,点右下角的+,在“选择操作类别”选择“任务”-“if”,在“操作修改”的“条件”下,左侧填写变量名称,即“%mqtttp1”,当中选择“匹配”,右侧输入“反馈”,返回后,2)再点+,在“选择操作类别”选择“警报”-“震动”,返回3)再点+,在“选择操作类别”选择“任务”-“end if”,返回4)点+,在“选择操作类别”选择“任务”-“if”,在“操作修改”的“条件”下,左侧填写变量名称,即“%mqtttp1”,当中选择“匹配”,右侧输入“安防”,在“条件”右侧点+,新建一个变量,左侧填写变量名称,即“%mqttms1”,当中选择“匹配”,右侧输入“监控”,返回(两个之间是“与”),返回5)再点+,在“选择操作类别”选择“媒体”-“播放铃声”,选择铃声,返回6)再点+,在“选择操作类别”选择“任务”-“end if”,返回7)点+,在“选择操作类别”选择“任务”-“if”,在“操作修改”的“条件”下,左侧填写变量名称,即“%mqtttp1”,当中选择“匹配”,右侧输入“安防”,在“条件”右侧点+,新建一个变量,左侧填写变量名称,即“%mqttms1”,当中选择“匹配”,右侧输入“防盗门”,返回(两个之间是“与”),返回8)再点+,在“选择操作类别”选择“电话”-“拨打电话”,输入电话号码,返回9)再点+,在“选择操作类别”选择“任务”-“end if”,返回 至于通过taker来新建一个任务,调用mqtt插件来发送mqtt消息,再用node-red来接收mqtt消息,判定后执行自动化,大同小异了,就不再啰嗦了。






lione95678 发表于 2019-5-15 15:22:26

群里的lidicn大侠曾经发过一个教程,https://bbs.hassbian.com/forum.php?mod=viewthread&tid=6449&highlight=tasker[流程系列] node-red控制Tasker【黑科技】【开门播报手机电量】,是通过tasker的插件Tasker Network Event Server来实现的,我用这个插件实现自动朗读,但不知怎么回事手机一直不定时的无规律自动进行朗读,也不知道是http://thacthab.herokuapp.com/ 的问题还是tasker的问题,后来想到通过mqtt插件来实现,找到了MQTT Client这款软件,发现也很不错,而且如果是在局域网内,可以通过局域网内的mqtt服务器来实现订阅和发送,无需外网。但还是不死心,想试试外网的mqtt,网上找了百度和阿里云的物联mqtt教程,阿里云的我这个小白实在搞不定,还好百度云的可以了,所以就有了这个教程。

lione95678 发表于 2019-5-15 15:33:32

我这用tasker建立了几个任务来遥控ha的开关灯,用tasker的桌面小组件,直接在桌面操作,这两天也不知道怎么回事,灯一直乱开关,从tasker、node-red,一直到mosquitto一路排查,因为不知道怎么看node-red发送、接收命令的日志和mosquitto发送接收信息的日志(都是群晖docker安装),搞了很长时间,现在初步怀疑可能是黑群晖下docker安装的mosquitto(MQTT)套件出现问题,(因为手机端的MQTT Client显示收到了很多订阅的消息)。不知道有人碰到过这个问题吗?另外哪位朋友能出一个群晖docker下安装emqtt的教程(就是在下载安装时卷和变量怎么设置?),考虑要不要换一个mqtt服务器软件。

ghostist 发表于 2019-5-15 15:57:43

火钳刘明

pyy122759996 发表于 2019-5-15 19:11:59

支持!教程很详细

joykg 发表于 2019-8-20 14:21:52

:)感谢奉献!教程很详细!

angelo86 发表于 2019-8-29 14:26:26

楼主你好,varmessage”“varmqttopic”输入变量名称,在“varmqttopic”中输入“%mqtttp1”,在“varmessage”中输入“%mqttms1”,在输入这个界面输入不了%这个符号。。。:Q

Cyberton 发表于 2019-11-18 23:29:24

你好楼主,按照你的教程在node-red添加百度云mqtt信息,部署节点提示连接中,一直就这样的状态,不知道是哪里有问题,mqtt.fx连接正常

kenwrljl 发表于 2019-12-10 01:27:18

支持一下,谢谢@!

xiejianwsx 发表于 2020-6-15 11:08:42

angelo86 发表于 2019-8-29 14:26
楼主你好,varmessage”“varmqttopic”输入变量名称,在“varmqttopic”中输入“%mqtttp1”,在“varmessa ...

不用输“%"      直接变量名就好
页: [1] 2
查看完整版本: 小白教小白-通过百度云物联的mqtt连接node-red和手机tasker