本帖最后由 sephrioth 于 2020-12-21 14:29 编辑
其实场景是想检测人是否在电脑房间, 这样可以联动多个自动化(灯光, 空调等等)。 也不想增加新的硬件, 所以把眼光直接放在了电脑上, 因为我的 iMac 电脑是从不关机的, 所以能否用 macOS 休眠与否来进行判断,如果没休眠, 那大概率都是宅在电脑前的, 如果休眠了,估计就去别的房间了..
那时还没有 Homeassistant for macOS 的客户端, 网上搜了一圈用了 Hammerspoon (这货非常强大,有机会再分享)来进行检测系统状态并把状态传回到 HA 的 sensor。 一方面麻烦不说(要专门写代码), 而且有时会有bug, 需要重载 Hammerspoon 的配置才能解决。
后来发现官方出了 HA for macOS 的客户端, 然后马上研究了下, 发现可以满足需求。安装客户端后你会多一个 binary_sensor.mac_active 的 sensor, 看名字就是监控你的 macOS 是否在激活 active 状态, on 就是激活中, off 就是未激活, 然后就直接用了这个 binary sensor 去做自动化的 trigger, 某天在电脑看电影的时候发现突然灯,空调什么的全关了, 然后一脸懵逼, 仔细研究下, 推测这个 active 只是说你如果一段时间内不操作电脑, 状态就会自动变为 off,看视频的时候这种情况非常常见, 所以单纯依赖这个 binary sensor 行不通。
然后仔细看了下这个 binary sensor 的预设属性,
Fast User Switched: false
Idle: false
Locked: true
Screen Off: true
Screensaver: false
Sleeping: true
friendly_name: iMac
icon: mdi:desktop-mac
发现最适合拿来做 trigger 的应该就是 Sceen Off 这个属性, 就是判断屏幕是否关闭。 为了后续方便, 把这个属性单独拿出来自定义了另外一个 binary sensor。 这里为了理解更符合常识, 我加了 not 这个操作, 如果不加的话, 那最终表现就是这个 sensor 为 off 的时候电脑是亮的, 为 on 的时候是息屏的, 和常识不一致; 然后因为这个属性 Screen Off 中间有空格, 所以还需要加 []
binary_sensor:
- platform: template
sensors:
imac_on:
value_template: "{{ not states.binary_sensor.mac_active.attributes['Screen Off'] }}" #如果这个Screen Off的属性为false的时候该sensor为true
friendly_name: iMac
有了这个, 就很好做后续的自动化了, 比如下面这个例子就是灯的, 如果电脑亮屏, 并且时间在日落后, 则打开该房间的灯, 如果息屏则关灯;当然你也可以根据自己的需求加入一定的延时,这里我就不举例了; 还可以做空调的, 方法都是一样。
- alias: 'Playroom Light Control'
trigger:
- platform: state
entity_id: binary_sensor.imac_on
action:
- service_template: >
{% if (states.binary_sensor.imac_on.state == 'on') and (states.sun.sun.state == 'below_horizon') %}
light.turn_on
{% else %}
light.turn_off
{% endif %}
entity_id: light.xxx
最新版本的下载在这里,其实除了这个active的sensor外, 还有很多别的sensor, 比如电量啊,空间啊什么的,不是本帖重点就不介绍了, 大家可以自行研究。
https://github.com/home-assistant/iOS/releases
|