homeassistant与传感器的应用,自动化创建
- WARNING:
- 2023-09-18更新 安装HAOS
- Home Assistant简介
- 为什么用
- 开始进行配置
- 登录HA网关
- 传感器接入
- sonoff传感器接入
- 安装zigbee2mqtt插件
- zigbee2mqtt插件接入sonoff传感器
- mqtt数据发送
- 绿米传感器接入
- 绿米传感器接入绿米网关
- HA网关接入homekit
- 绿米网关和传感器接入homekit
- 博联遥控器配置
- 博联遥控器了接入HA网关
- 红外或射频学习
- 自动化配置
- node-red插件安装与配置
- nodered配置
- nodered节点介绍
- nodered使用方法
- 后期缓慢更新的东西
- 工作日判断
- 参考
WARNING:
我就没想着截图,下面的说明里基本就没几张图片,但是我会尽量做到用文字描述清楚。请知悉。
2023-09-18更新 安装HAOS
https://www.home-assistant.io/installation/linux ←官方给的,直接做好的虚拟机镜像文件,按照说明安装即可。 更新:对,安好了,也成功出现homeassistant的命令行界面了。然后就是无穷无尽的8123端口等待中…去log查看当前状态,显示正在下载镜像…我去他的,google和百度这是个普遍情况,都说耐心的等十几个小时算了,初步怀疑和时区时钟有点关系,先不管了,挂一晚上再说。
Home Assistant简介
Home Assistant 是一款基于 Python 的智能家居开源系统,支持众多品牌的智能家居设备,可以轻松实现设备的语音控制、自动化等。
Home Assistant 运行在 Python 3.5.3 及以上 环境下,一般来说,符合 Python 运行条件的系统皆可安装 Home Assistant(下称HA网关)。
为什么用
我这里的需求是传感器和控制器,既能完成我需要的自动化控制,又能将这些数据按照我想要的方式传输到我的mqtt服务器中去做记录。(别问为什么不直接用nodered,没硬件,而且不会接入
这里因为是测试需要,就没有用闲置的硬件去搭建HA网关,直接购买了人家的成品。我需要使用sonoff传感器,绿米传感器和HA网关共同组建成一套自动化的控制,遥控器本来买的涂鸦的,结果接入发现了点问题,后来又申请购买了博联的RM4PRO遥控器。
开始进行配置
登录HA网关
因为我使用的是购买的硬件(不提供购买的信息,可以自行淘宝搜索,挺多的),所以直接省去了所有的环境搭建过程,只需要把HA网关通过网线接入路由器即可。通上网线后它会自动向路由器中申请它的域名与IP的对应,一般情况下只需要访问homeassistant.local:8123就可以登录其管理后台。(如果没法登录的话,就去路由器中查看一下设备的IP,然后IP:端口号登录吧)
进入后应该能看到提示创建账户的界面,基本全部保持默认选项即可。全部完成后我们会进入到主界面,就算完成了。
传感器接入
要想在HA中接收传感器的数据,首要前提就是将传感器接入到HA中(默认配置下你可以认为就像上图中概览界面能够看到传感器,就为成功)。下面以我接入的两套为基准。
sonoff传感器接入
最开始我是想用sonoff网关进行集成接入的。因为最开始的时候饶了点弯子就没使用这个方案,当时使用的是zigbee2mqtt插件进行接入(真的不是因为懒,我觉得还挺好用的
HA又没有zigbee协议的接收器,所以我们需要先为HA网关购买一个usb zigbee网关,将其连接至HA网关上。
安装zigbee2mqtt插件
- 打开HA网关主界面,左边列表中找到 配置 ,依次点击 加载项, 加载项商店 ,点击右上角的三个点,点击 仓库(Repo)。
- 弹出对话框,将zigbee2mqtt的插件地址写入,添加。https://github.com/zigbee2mqtt/hassio-zigbee2mqtt(如果出现错误,就接着试.jpg)
- 添加成功后,将会在加载项商店中出现zigbee2mqtt的插件信息,点击 zigbee2mqtt 插件,安装。
- 安装成功后,自动进入到zigbee2mqtt的相关界面中,将自启动,守护,在侧边栏显示三个选项打开。
- 接下来需要对mqtt进行配置(下面以本地mqtt为例),回到homeassistant主界面,依次点击 配置, 加载项,找到Mosquitto broker,进去点击配置,在Logins选项卡中配置mqtt的账号密码,例如
- username: mqtt
password: mqtt
- 保存后,回到信息选项卡中,也是将自启动,守护,在侧边栏显示三个选项打开。然后点击启动。至此本地mqtt已经配置完毕了。
- 接下来我们将mqtt添加到集成中,回到HA网关主界面,依次点击 配置, 设备与服务,添加设备,出现的弹窗搜索“mqtt”。点击mqtt,输入服务器127.0.0.1,用户名密码都是刚才设置的mqtt,点击提交。
- 然后就可以正式开始配置zigbee2mqtt了。老样子,依次点击 配置, 加载项,zigbee2mqtt, 配置选项卡 mqtt 栏填写
base_topic: zigbee2mqtt
server: mqtt://x.x.x.x:1883
user: mqtt
password: mqtt
- serial栏填写
port: /dev/ttyUSB0
- 然后等一会吧。之后点击HA网关主界面中侧边栏的zigbee2mqtt,如果成功进入到界面中就完成了配置。右上方的国旗图标可以修改语言。
zigbee2mqtt插件接入sonoff传感器
再将z2m插件配置完毕后,就可以接入sonoff传感器了。
- 打开zigbee2mqtt选项卡,点击右上方的“允许添加新设备(所有)”
- 根据sonoff的各个传感器的说明书,去启动它的zigbee协议匹配(一般为长按reset后松开)。过一会应该就能看到z2m的界面中出现了传感器了。我们也可以点击这个设备右边的编辑按钮,更改它的名称方便我们辨认。
- 如果顺利的话,我们是可以在HA网关的概览中直接看到这个传感器相关的数据了。(这里有个坑,如果你使用的是别人公网上公开的mqtt服务器的话,很可能无法在概览中看到传感器,就等于没把传感器接入进来。猜测是因为公共服务期的topic太多了,检测出现了问题。)
- 如果你一定要使用公开的mqtt服务器,而且还没法自动识别,就只能手动的一个一个导入了。方法如下:
HA网关主界面侧边栏 File editor,找到`/config/configuration.yaml`文件,在其中写入规则,我下面以sonoff传感器的温湿度为例:
mqtt:
sensor:
- name: "温度"
state_topic: "zigbee2mqtt/无线温度计1"
unit_of_measurement: "°C"
value_template: "{{ value_json.temperature }}"
- name: "湿度"
state_topic: "zigbee2mqtt/无线温度计1"
unit_of_measurement: "%"
value_template: "{{ value_json.humidity }}"
mqtt数据发送
传感器接入进来了,mqtt确实也接收到了sonoff传感器的json数据。但是我之后在添加绿米传感器的时候发现了问题,它看起来不太兼容z2m,测试下来发现经常数据缺失或者压根就没反应,并且已经确认传感器本身一直在正常工作。所以不是所有东西都适配z2m插件的。
绿米传感器接入
那好了,绿米传感器既然通过z2m接入会出现问题,那就只能选别的方式了。于是就只能试试绿米网关的集成了。这里用到了homekit的协议。
绿米传感器接入绿米网关
首先,得准备一台苹果手机或平板,之后我们需要用到它。(仅配置的时候使用,实际上运作不需要它)
我是用的是绿米的M2网关,按照绿米网关的说明把绿米传感器全部接入到网关中,并测试其可用性。
HA网关接入homekit
依次点击 配置, 设备与服务,添加集成,出现的弹窗搜索“homekit”,选择homekit选项。之后大部分默认确定提交即可(建议在传感器选择里,把sensor和bianary_sensor选中一下)。添加成功集成后,在HA网关侧边栏的通知里我们应该能看到生成了一个二维码和代码,使用苹果设备,打开苹果家庭,添加配件,将HA网关一步一步添加到苹果家庭中。这个时候HA网关就有了homekit相关的信息配置了。
绿米网关和传感器接入homekit
如果网关和传感器你之前已经添加到homekit中了,请在苹果家庭中将其删除,或是在HA网关中彻底将传感器及网关的实例删除掉再添加,不然自动识别后会存在无法读取数据的问题。另外就是如果你的传感器或者网关是基于wifi的homekit设备,并且还没有添加过homekit,那也需要先添加一次再删除。
- 依次点击 配置, 设备与服务,添加集成,出现的弹窗搜索“homekit”,选择“homekit控制器”选项。
- 弹窗选择对应的homekit设备,填写homekit pin,一般在要添加设备的标签上。
至此,如果一切顺利,你应该可以在HA网关的概览中看到绿米的传感器数据了。到这里,我拥有的所有传感器已经全部接入到了HA网关中。
博联遥控器配置
传感器数据有了,为了实现自动化控制,我们还需要一个控制端。我这里是为了控制电视的红外信号,以及窗户的射频信号而选用了博联的RM4PRO控制器。
博联遥控器了接入HA网关
这步很简单,还是添加集成那一套,搜索broadlink,正常添加即可。添加之后就能在概览中看到了。
红外或射频学习
我还没有学习怎么把博联app中的指令学习到HA中,下面仅说一下怎么手动配置。
我们直接使用HA网关提供的工具进行学习。
- 点击HA网关侧边栏的 开发者选项, 进入服务选项卡。
- 服务: 搜索 “遥控:Learn Command”,并选中。(下面说的所有选项,如果使用,请在前面打对勾)
- 目标:+选择实体,里面选择上面我们添加的博联遥控器。
- Device:学习的设备名称,自定义。
- Command:学习的指令的名称,自定义。
- Command Type:遥控类型,ir为红外,rf为射频。
- Alternative:按钮存在两种状态需为true,如开关类按钮。
- Timeout:命令学习时间,用于防止接收错误射频而学习错误的指令,一般设置为5s。
- 上面的选项选择完毕之后,点击右下角调用服务,我们在通知里可以看到HA网关对于学习的提示,拿着遥控器按照流程学习就行了。 10.学习之后我们可以去HA网关的文件中确认一下。 HA网关侧边栏Terminal,打开linux命令行,进入/config/.storage文件夹下,可以看到一个名称为“broadlink_remote_xxxxxxx_codes”的文件,里面存放的就是我们学习的指令码。
到这里就学完指令了。如果不放心可以使用服务:遥控:Send Command进行测试,方法差不多和学习一样,自己玩一下就会了。
自动化配置
至此,我们已经有了传感器和遥控器,并且他们都已经全部接入到了HA网关中。接下来有两种自动化实现的方式:
- HA提供的自动化功能
- node-red
还记得之前说的吗?所有的传感器我不仅需要自动化控制,还都需要接入到mqtt服务器中。但是绿米本身的传感器数据在绿米网关中正常,在z2m插件中有问题,所以才把绿米网关接入到了HA网关中。但是这么一来绿米传感器的数据就没法发送到mqtt中了。所以我最后还是去学习了node-red的使用方式,结果发现…这玩意是真特娘的好用啊
接下来转入nodered环节
node-red插件安装与配置
好巧啊,我买的这个HA网关已经帮我安好了,那我不客气了直接用。
nodered配置
我先说下,我还是这几天对着各种教程啃的,就只会点基本用法,各位大佬轻喷啊
nodered节点介绍
events:state →用作传感器数据触发。因为接入HA后传感器的entity中只有字符串形式的单个值,可以以它作为触发器使用。
current state →用于中途判断某传感器的当前状态。状态为HA中获取的该实体的最后一次数据。
switch →用于流程的选择,可根据不同的输入执行不同的流程。没有output properties属性,不会对传入的值进行更改。
function →执行函数语句,本质为JavaScript语法。可在里面对msg数据进行修改并传输至下一个节点。
delay →用于延时触发。
mqtt out →用于发布mqtt消息至mqtt服务器
mqtt in →用于接收mqtt服务器的消息,一般作为触发器使用。
call service →用于触发HA中的服务,比如我们之前设置的遥控器就可以在这里进行设置自动化触发。
debug →一般用于调试,不用自己写function来看数据。
inject →用于作为触发节点,可设置循环型触发。
time range →用于时间段筛选,以时间段分割出一天。时间段内为in,时间段外为off
LS filter →用于替换time range节点的,通过node-red-contrib-light-scheduler安装。可以一周为单位进行计划控制。
wait until →用于阻塞整个流程进行,直到wait until条件成立时才继续执行(里面的timeout我没弄懂,我本来以为是超过timeout就强制返回一个值并进行流程,实际上我只要设置了timeout,wait until条件就不会被触发了)
nodered使用方法
其实看到就差不多明白了,首先创建节点,然后根据自己需要的流程,将节点之间使用线连接起来。将数据当做电流,可以认为这些线就是根导线。结点需要一个触发器作为开始,而没有规定具体结束方式。
到这里整个nodered怎么使用你已经学会了,快来试试吧!(不是)
比如我们需要一个检测人员活动开关灯的操作,只需要以人体感应器作为起始节点,中途判断人员的状态来选择当前是开灯还是关灯即可。之后的事情只是优化这套流程,比如设置延时防止一次误检测没人就关灯,或是将传感器数据发送至mqtt服务器用于数据统计等等。
完
后期缓慢更新的东西
工作日判断
借用论坛大佬的帖子:分享个【自动判断】Node Red节假日传感器 使用了免费开源的API,注意其中一个方法使用到了国内镜像仓库coding,现在需要登录才能调用API,故舍弃。 调用https://github.com/NateScarlet/holiday-cn API的方法(就是二楼更新的方法)我这里测试的那天正好是周末的上班调休,结果输出结果是“节假日”,因本人调试了半天没发现原因,所以还是用了二楼本楼的不稳定接口,使用方式就和二楼说的一样,放在/config/configuration.yaml里面。
rest:
- scan_interval: 3600
resource_template: http://tool.bitefu.net/jiari/?d={{ now().strftime('%Y%m%d') }}
sensor:
- name: cn_workdays
value_template: >-
{% if value == '0' %}
工作日
{% elif value == '1' %}
假日
{% elif value == '2' %}
节日
{% else %}
unknown
{% endif %}
之后重启HA网关就能在概览中看到对应实例。Node-red中也可以使用“current state”节点调用到对应状态并设置流程即可。
参考
https://www.home-assistant.io/docs/mqtt/discovery/https://www.home-assistant.io/docs/configuration/https://www.zigbee2mqtt.io/supported-devices/#s=aqara[基础教程] 【经验分享】HA官方推荐的博联遥控器学习射频和红外方法https://www.home-assistant.io/integrations/mqtt_statestream/[教程系列] 新手配置node-red遇到的几个难题,及完成第一个时间触发的…Home Assistant中接入博联WiFi智能遥控https://www.zigbee2mqtt.io/advanced/support-new-devices/01_support_new_devices.html