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 -%}