小白教小白-通过百度云物联的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消息,判定后执行自动化,大同小异了,就不再啰嗦了。
|