HomeAssistant设备接入
HomeAssistant设备接入功能其实很强大,能想到的几乎都能办到,不局限于智能硬件,当然也需要很强的动手能力。
简单介绍下我用到的一些“设备”的接入,只是接入的话,显示出来很杂乱,下一篇会讲到怎么整理。
小米智能开关基础版
因为拿到手是没有配置wifi接入的,需要下载米家App按步骤配置好。
获取token,尝试了miio --discover
并不行,需要有root权限的模拟器或者root权限的android手机,参考https://home-assistant.cc/component/xiaomi/wifi/
然后就可以在配置文件里加上switch。
switch:
- platform: xiaomi_miio
name: Xiaomi Switch One
host: 192.168.2.196
token: e0c4ff4f**************
如果不再使用米家App可以在路由器屏蔽这两个设备访问外网,也许可以保护隐私吧。
Padavan固件路由器
发现更新不及时,而且对路由器登录请求太多,更换了**nmap_tracker**(需安装nmap)方式,还可以设置排除的ip,就不会把树莓派、智能设备加进去了,还有个好处就是如果接入了多个网络,可以扫描多个网络的设备。
会有断断续续的情况,还是弃用了。
某不要钱倒闭路由器刷的Padavan,Padavan基于华硕固件,但使用自带的asuswrt读不到/var/lib/misc/dnsmasq.leases
这个文件,其实在Padavan中的位置是/tmp/dnsmasq.leases
。
路由器设置里面开启telnet,然后telnet到路由器,建立软链接ln -s /tmp/dnsmasq.leases /var/lib/misc/dnsmasq.leases
,这样就可以读到了。
配置
device_tracker:
- platform: asuswrt
host: 192.168.*.1
username: admin
password: ******
protocol: telnet
port: 23
在路由器后台的日志里,可以看到多次登陆,我这边密码错误,原因不明,但是可以正常使用。
树莓派温度
这就体现出HomeAssistant的强大之处了,可以把各种数据都变成传感器设备。
这里的cat /sys/class/thermal/thermal_zone0/temp
就是打印树莓派温度值,通过模板除以1000保留一位小数获得结果。
sensor
中添加
- platform: command_line
name: Pi
command: "cat /sys/class/thermal/thermal_zone0/temp"
unit_of_measurement: "°C"
value_template: '{{ value | multiply(0.001) | round(1) }}'
温度传感器
和上面类似,打印命令里面过滤了结果,传感器安装参考的这篇文章。
'sensor'中添加
- platform: command_line
name: Temp
command: "cat /sys/bus/w1/devices/28-01131650ab0a/w1_slave |grep t= | cut -d '=' -f 2"
unit_of_measurement: "°C"
value_template: '{{ value | multiply(0.001) | round(1) }} '
彩云天气
用到了这个文件:caiyun.py
将文件放入配置文件夹/custom_components/sensor/
。
'sensor'中添加
- platform: caiyun
name: Caiyun
这是自定义了一个传感器组件,只要会写代码,就可以创造自己的组件,获取任何信息。
月相
(好像没啥用)
这里用到了value_template,通过if语句判断,显示不同的结果,其实是对自带的sensor.moon
进行了汉化。
sensor
中添加
- platform: template
sensors:
moon_phase:
value_template: '{% if is_state("sensor.moon", "New moon") %}新月{% elif is_state("sensor.moon", "Waxing crescent") %}娥眉月{% elif is_state("sensor.moon", "First quarter") %}上弦月{% elif is_state("sensor.moon", "Waxing gibbous") %}盈凸月{% elif is_state("sensor.moon", "Full moon") %}满月{% elif is_state("sensor.moon", "Waning gibbous") %}亏凸月{% elif is_state("sensor.moon", "Last quarter") %}下弦月{% else %}残月{% endif %}'
friendly_name: '月相'
树莓派的信息
参考的官方文档。
sensor
中添加
- platform: systemmonitor
resources:
- type: disk_use
arg: /
- type: disk_use_percent
arg: /
- type: memory_use
- type: memory_use_percent
- type: since_last_boot
- type: last_boot
但是这个since_last_boot
启动时间的格式很长1 day, 14:37:44.809441
,用value_template给它格式化一下。
放在月相一起,- platform: template
里面的sensors
下面。
relative_alarm_time:
friendly_name: '设定时间'
value_template: >
{% set relative_time = (states.input_number.alarmhour.state|float|multiply(60) + states.input_number.alarmminutes.state|float) + (now().hour|float|multiply(60) + now().minute|float) %}
{%- if relative_time > 1440 -%}
{{((relative_time-1920) |int |multiply(60)) | timestamp_custom("%H:%M")}}
{%- else -%}
{{((relative_time-480) |int |multiply(60)) | timestamp_custom("%H:%M")}}
{%- endif %}
unit_of_measurement: "min"
since_last_boot_templated:
value_template: >-
{%- set slb = states.sensor.since_last_boot.state.split(' ') -%}
{%- set count = slb | length -%}
{%- set hms = slb[count - 1] -%}
{%- set hms_trimmed = hms.split('.')[0] -%}
{%- set hms_split = hms_trimmed.split(':') -%}
{%- set hours = hms_split[0] | int -%}
{%- if count == 3 -%}
{{ slb[0] ~ ' ' ~ slb[1] ~ ' ' }}
{%- endif -%}
{%- if hours > 0 -%}
{%- if hours == 1 -%}
1 hour
{%- else -%}
{{ hours }} hours
{%- endif -%}
{%- endif -%}