Home Assistant 篇一:从Node-RED与微信推送谈起
追加修改(2021-08-02 15:39:51):
注意:文中遗漏了重要的一步,一定要放一个服务端节点在流当中,并选择我们填好的配置,然后再部署,否则这个服务是相当于没有启动的。谢谢评论区的小伙伴,是大家帮忙找到了错漏之处,非常感谢!!!
到
从本篇开始,将慢慢来完善Home Assistant这个系列。
为何由此谈起?
大家可能会比较好奇,既然是写Home Assistant,为何却从Node-RED与微信推送谈起,因为Home Assistant涉及到的内容比较宽泛,如果第一篇就写如何搭建它,可能会显得比较空洞,之前没有接触过的童鞋不太好接受,毕竟搭建并不是核心的内容,找不到成就感 。所以本文先从Node-RED谈起,并在其中完成一个简单实用的流(只有4个节点),为后续的内容建立基础。
当我们谈智能家居时,究竟在谈什么?
顾名思义,智能家居的关键是智能。如果你看过某些宣传片或者听别人讲起也或正在使用,那么可能会有所感受,我个人觉得智能家居的核心是自动化,而不是手机或者语音控制,既是根据场景、行为、环境等条件尽可能减少人工操作而达到预期的家居控制。最简单的例子:人离开自动关闭灯光。
而在自动化这条路上,目前个人用的比较多的,也是比较推荐的就是Node-RED,这也是篇一选择从它谈起的原因,当然它和Home Assistant的联动,我们后面再说,本篇暂时不提。
作者家的平台接入了哪些 ?
从图上可以看出,其实我家接入的设备并不多,因为平台是在装修完成几年后才搭建的,现在接入的设备也是逐渐替换掉了老的设备才接入的。所以大家若有兴趣,也可以像我一样,先搭好平台,在家居的设备需要更换的时候,再更换为能接入平台的新设备,不必在意现在的是否能完全接入。
Node-RED是什么?如何安装?
引用两段百度到的内容:
Node-RED是一个物联网编程工具,它以新颖和有趣的方式,将硬件设备、应用接口和在线服务连接到一起。. 它不仅提供了一个基于浏览器的编程环境和丰富的节点类型,使流程的创建变得非常容易,而且还为流程的运行提供了运行环境,实现了一键部署的能力.
Node-RED 是构建物联网(IOT, Internet of Things)应用程序的一个强大工具,其重点是简化代码块的“连接”以执行任务。它使用可视化编程方法,允许开发人员将预定义的代码块(称为“节点”,Node)连接起来执行任务。连接的节点,通常是输入节点、处理节点和输出节点的组合,当它们连接在一起时,构成一个“流”(Flows)。
如果不能理解,先继续往下看,全篇看完以后相信就能有一定的了解。
我们先在群晖中安装Node-RED,打开群晖中的Docker,在注册表中搜索nodered,下载nodered/node-red这个镜像,参考下面的截图:
下载完成后我们双击该镜像,然后点击高级设置先配置下
勾上启用自动重新启动
继续点击存储空间,添加文件夹,按下图进行设置,在添加过程中新建docker目录下的nodered文件夹即可:
接着点击端口设置,按下图设置端口(后期我们需要用到反向代理把它给开放到公网,所以本地端口先用1881端口,1880留到反向代理用):
接着点击环境,单击加号,添加环境变量,可变填写“TZ”,值为“Asia/Shanghai”,用来解决容器与主机的时间相差8小时的问题。
点击应用,回到常规设置页面,取消勾选“向导完成后运行此容器”
第三步:在File Station中找到第二步新建的 docker/nodered 文件夹,并对该文件夹增加 Everyone 的完全控制权限。右键nodered文件夹,属性->权限->新增,在权限编辑器中的用户或组找到Everyone,然后设置读取和写入权限,然后点击完成即可,参考下图:
设置好后,我们回到docker中把刚刚配置好的容器启动起来。然后访问http://你的群晖IP:1881,就能看到庐山真面目啦 :
一个界面的介绍:
默认情况下Node-RED是不需要密码进行访问的,所以现在还不能把它开放到公网,我们需要给它设置使用密码登录,请大家参考它的官方文档
说起来其实也不复杂,先停止容器,找到docker/nodered目录中的settings.js文件,取消注释下面的内容:
adminAuth: {
type: "credentials",
users: [
{
username: "admin",
password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
permissions: "*"
}
]
}
password后面的字符串需要自己用想设置的密码去生成一个,在线生成链接:,Rounds默认就好:
用生成好的字符串替换掉文件中的字符串,然后再启动Node-RED即可看到需要密码进行登陆了:
账号admin,密码为你设置的密码,登陆以后我们先把微信推送的插件安装上,点击右上角三横线,点击设置:
点击控制板->安装->搜索栏输入biz,然后在搜索结果中安装截图中的插件:
安装完成后,暂时不要关闭页面,一会儿再回来继续配置。接下来我们说说企业微信。
为什么要用企业微信?如何注册企业微信?
在智能家居中,或多或少都需要消息通知的功能。既然是通知,那么时效要求就比较高,并且及时能被相应的人员看到。所以我选择使用企业微信,因为它的推送服务稳定 ,当然如邮件、短信等等方式也行,这里只谈企业微信。
首先注册,官网在这里,打开官网后直接点击立即注册即可。个人注册不用进行认证,使用也不会产生费用,注册流程很简单,这里就不截图了。
注册完成后,需要在应用管理中,创建自建应用:
接着上传应用logo,可以网上找个图片,填写应用名称,选择可见范围(直接选择整个组织即可):
接下来就是配置环境了,稍微有点麻烦,大家一定要看仔细,我们需要在企业微信中首先获取到企业ID:
然后点击应用管理,往下滑动,点开我们刚刚创建的应用,先记录下AgentID,然后点击Secret后面的查看(这里需要自己先在手机上安装好企业微信,用完后可以卸载掉):
然后找到接收消息,点击设置API接收(截图上是因为配置过了,所以显示的是已启用API接收):
按照下图对API接收消息进行设置(设置完成后不要点击保存,点了也没用,需要先配置到Node-RED,这边点击保存的时候会进行验证):
这样我们就在企业微信中拿到了所有需要的信息,不要关闭页面。
现在回到Node-RED进行配置,在页面左边往下滑动,找到企业微信中的推送节点,拖动到工作区中,然后双击它,打开编辑对话框,点击铅笔按钮进行配置:
接下来就把我们在企业微信中记录到的信息全部填进去。这里需要注意,前面在企业微信中填写的URL是加了端口号的,这里URL和端口需要分开填写,同时还要保证这个URL外网能访问到,也就是必须得有公网哦:
填写完成后,依次点击左上角添加->完成->部署。然后再回到企业微信点击保存,若配置没有问题即可保存成功,若有问题可根据错误提示进行排查,也可在评论里留言咨询 。
保存成功后,在微信中关注下企业微信插件,点击我的企业->微信插件,用手机微信扫描该页面的二维码:
关注后就能看到该企业和应用了,我是置顶了的:
接下来先记下自己企业微信的账号,在通讯录中:
记下后就可以关掉企业微信后台。
Node-RED配置
回到Node-RED,向工作区添加一个http in的节点,并双击进行编辑:
继续添加http response节点,无需编辑,保持默认:
继续添加function节点,并双击进行编辑,输入以下内容:
msg.payload = msg.payload.text;
msg.touser = '前边获取到你的微信账号'; //这样推送信息就只会发送你,如果要发送给所有人就使用:@all
return msg;
再双击推送,修改下它的标题
接着把这些节点连接起来,并点击部署:
到此Node-RED也配置完成。
群晖短信服务配置
打开群晖后台,控制面板->通知设置->短信->新增短信服务提供商,注意IP地址和端口哈,和自己的一致:
https://192.168.1.10:1881/Home_NAS?to=886888888888&text=Hello world
点击下一步后,点新增,这步是为了验证Node-RED的权限,先生成一个加密的字符串,这里用的是Base64加密,可以在这里生成https://base64.us/,假如我们Node-RED的密码是admin:
参数填入:Authorization,值填入:Basic YWRtaW4=
点击保存,然后继续下一步,照图中进行选择:
点击完成,回到短信页面后随便填入个电话号码,然后点击寄送测试短信:
这时手机就会收到消息:
最后至于需要推送哪些内容,就看自己的规则了:
快去试试吧
写在最后
写了这么多,只实现了一个小小的功能,只放在这个场景甚至可以说是可有可无的功能,因为邮件同样可以,使用邮件客户端也能正常推送。但正因为有了这些点滴的积累,后面的使用才会越来越顺畅,自动化的复杂度在该系列的后续中也会越来越高,在复杂度提高了以后现在的积累也会让大家更加容易理解。
同时本篇的推送服务在后续篇章中也非常常用,如电费不足的通知、燃气费缴费的通知等等。要跟着作者继续下去这篇是的必备的基础哦。
好了,今天就到这里,同样欢迎收藏、评论、点赞。对了,还有打赏 ,下次再见
。
![](https://res.smzdm.com/pc/pc_shequ/dist/img/the-end.png)
林里克斯
校验提示文案
Marshmallow2016
校验提示文案
犹豫会败北
校验提示文案
wildiwld
疑问:NR的端口是1880,那3001端口是什么作用,连接bizwechat的吗?
另外发现一个问题,我的NR端口如果设置了反向代理,登录成功后NR页面就会一直提示和服务器断开连接,如果取消反代就不会。
校验提示文案
值友6777261677
校验提示文案
有一个入坑的值友
校验提示文案
值友3355492349
校验提示文案
夜影小窝
校验提示文案
噼里啪啦Bomb
校验提示文案
最香君
在群晖设置nodered反代理是1881和1880两个端口吗
校验提示文案
camarts
这一句怎么理解,卡在这里了
校验提示文案
两个字
校验提示文案
v黑洞a
大神,我到这步就不成功了,怎么新建短信服务器呀,上面这个网址我只改IP地址后,提示URL需要4个参数,配置不成功呀。。
校验提示文案
东街小东东
校验提示文案
ygxsg
校验提示文案
爆锤小黄
校验提示文案
土豆Plus
校验提示文案
猪是念倒
校验提示文案
dufenmiao
1,在群晖 Docker 容器里停掉 nodered,编辑-添加3001到3001端口的映射;
2,开启 Docker 容器里的 nodered;
3,nodered 管理页面,把左侧下面企业微信-服务端 拖到中间,按上面“推送”的参数填,port 是 3001.
4,完成,部署;
5,浏览器直接访问域名:3001,页面返回如下:
bizwechat(企业微信版本的pushbear)
欢迎使用由 flashsoft 大佬 ,F 大佬 , smarthomefans 提供的企业微信版本的pushbear。如果你看到这个界面证明你已经安装成功了
如需发现更多好玩的智能家居玩法请访问这里
校验提示文案
我心坚定
校验提示文案
bebetter2008
校验提示文案
值友6366820994
校验提示文案
值友1049094430
校验提示文案
值友1181616891
校验提示文案
Mechanic-H
校验提示文案
值友8075034593
校验提示文案
wkyo
校验提示文案
有皮器的枯叶
用内网ip或者外网域名都可以打开3001的那个文字页面。
企业微信那边ip白名单也添加了。
路由器端口映射也做了对应调整。
但是群晖点击测试消息nr就是没反应。
然后我把所有的网络部署设置切换到之前docker安装的nr再测试就能正常发送消息。
不知道是HA安装的nr和DOCKER安装的NR有什么设置的区别吗?
校验提示文案
值友8823418139
校验提示文案
值友1428191122
校验提示文案
值友1428191122
校验提示文案
蜗牛菌本菌
校验提示文案
無鸣晓竹
校验提示文案
無鸣晓竹
校验提示文案
dufenmiao
1,在群晖 Docker 容器里停掉 nodered,编辑-添加3001到3001端口的映射;
2,开启 Docker 容器里的 nodered;
3,nodered 管理页面,把左侧下面企业微信-服务端 拖到中间,按上面“推送”的参数填,port 是 3001.
4,完成,部署;
5,浏览器直接访问域名:3001,页面返回如下:
bizwechat(企业微信版本的pushbear)
欢迎使用由 flashsoft 大佬 ,F 大佬 , smarthomefans 提供的企业微信版本的pushbear。如果你看到这个界面证明你已经安装成功了
如需发现更多好玩的智能家居玩法请访问这里
校验提示文案
值友9597127289
校验提示文案
值友9597127289
校验提示文案
值友9597127289
校验提示文案
猪是念倒
校验提示文案
猪是念倒
校验提示文案