检测第四代 Apple TV 何时从睡眠中醒来
Detecting when an Apple TV 4th generation has woken from sleep
我正在研究一些家庭自动化程序,我希望能够做的一件事是检测我的第 4 代 Apple TV 何时从睡眠中醒来。这通常只会在有人按下 Siri 遥控器上的按钮将其唤醒时才会发生。
我有一台带有 Pulse-Eight USB-CEC 适配器的 PC(连接到与 Apple TV 相同的电视),所以我尝试的第一件事自然是使用 CEC 来确定 Apple TV 何时唤醒。不幸的是,它并不可靠,因为监控 Apple TV 的电源状态以查看它何时唤醒会产生误报。 (我应该注意,我没有在 Apple TV 上启用 "Control TVs and Receivers",并且无法为我正在处理的特定项目打开它,因为我需要 Apple TV 不更改电视的输入。)
我正在想一些其他的方法来做到这一点。我对任何可能性持开放态度,包括:
- 在 Apple TV 上使用私有 API
- 运行 Apple TV 后台的一个 'always on' 程序,它会在 Apple TV 唤醒时发送信号,如果可能的话。 (我怀疑不是。)
- 监控 Siri Remote 和 Apple TV 之间的蓝牙通信,如果可能的话
- 以某种方式过滤 HDMI-CEC 命令以便我可以打开 'Control TVs and Receivers',允许 Apple TV 的 CEC 命令打开和关闭电视,并排除更改电视输入的命令。
- 任何其他方法,无论多么 hacky 或荒谬,只要有效!
有人有什么建议吗?我 运行 无事可做!
我终于找到了一种似乎始终如一的方法。这种方法非常老套,完全不是我喜欢的那种方法,但它是迄今为止我发现的唯一一种始终如一的方法。
我拿了一个旧的 USB 网络摄像头并将其固定在我的 Apple TV 的前面,这样它的镜头就直接在 Apply TV 的前置灯前面。每当 Apple TV 处于休眠状态时,我只需通过从相机拍摄图像并分析它们的平均亮度来检查灯是否打开。由于镜头就在灯的旁边,当它打开时,它会在图像中产生一个巨大的白色圆圈,非常容易检测到。
只要 Apple TV 处于睡眠状态,灯亮起似乎 100% 的时间都表明它已经醒来。我还没有发现任何一起假阳性或假阴性事件。
由于按下 Siri 遥控器上的按钮会导致此灯闪烁,这也意味着我可以在 Apple TV 处于唤醒状态时通过查找灯的变化来检测按钮是否被按下。它不是 100% 准确,因为某些按钮的按下速度比我糟糕的旧 USB 网络摄像头的帧速率更快,但它运行良好。
我非常希望找到一种更好的方法来执行此操作,例如通过 LAN 向 Apple TV 发出请求,其中的响应清楚地表明它是醒着还是睡着了,但到目前为止看起来还不是这样可能。
我试图 post 下面的 apple 讨论/支持社区,但被告知我无权 post 此内容。也许这个小组中有人可以成功做到:
Apple TV 4 CEC integration is great when it works, but it doesn't work all the time and not with all the various equipment out there, you can do a search across forums and you will see lots of unhappy users. I would like to use a raspberry PI to detect when my AppleTV goes to sleep and wakes up and programmatically turn my tv on or off using its RS232C or custom CEC commands.
I used a bonjour services explorer and compared every single result between sleep and on states and there are no differences whatsoever. I would have expected Apple to welcome such automation projects and make this information readily available with a variable such as status: sleep or status: on.
Is there a way I could tell the two states apart via the network connection?
If not, could one build a TvOS app which runs on the background and makes this information available to clients somehow?
我正在研究一些家庭自动化程序,我希望能够做的一件事是检测我的第 4 代 Apple TV 何时从睡眠中醒来。这通常只会在有人按下 Siri 遥控器上的按钮将其唤醒时才会发生。
我有一台带有 Pulse-Eight USB-CEC 适配器的 PC(连接到与 Apple TV 相同的电视),所以我尝试的第一件事自然是使用 CEC 来确定 Apple TV 何时唤醒。不幸的是,它并不可靠,因为监控 Apple TV 的电源状态以查看它何时唤醒会产生误报。 (我应该注意,我没有在 Apple TV 上启用 "Control TVs and Receivers",并且无法为我正在处理的特定项目打开它,因为我需要 Apple TV 不更改电视的输入。)
我正在想一些其他的方法来做到这一点。我对任何可能性持开放态度,包括:
- 在 Apple TV 上使用私有 API
- 运行 Apple TV 后台的一个 'always on' 程序,它会在 Apple TV 唤醒时发送信号,如果可能的话。 (我怀疑不是。)
- 监控 Siri Remote 和 Apple TV 之间的蓝牙通信,如果可能的话
- 以某种方式过滤 HDMI-CEC 命令以便我可以打开 'Control TVs and Receivers',允许 Apple TV 的 CEC 命令打开和关闭电视,并排除更改电视输入的命令。
- 任何其他方法,无论多么 hacky 或荒谬,只要有效!
有人有什么建议吗?我 运行 无事可做!
我终于找到了一种似乎始终如一的方法。这种方法非常老套,完全不是我喜欢的那种方法,但它是迄今为止我发现的唯一一种始终如一的方法。
我拿了一个旧的 USB 网络摄像头并将其固定在我的 Apple TV 的前面,这样它的镜头就直接在 Apply TV 的前置灯前面。每当 Apple TV 处于休眠状态时,我只需通过从相机拍摄图像并分析它们的平均亮度来检查灯是否打开。由于镜头就在灯的旁边,当它打开时,它会在图像中产生一个巨大的白色圆圈,非常容易检测到。
只要 Apple TV 处于睡眠状态,灯亮起似乎 100% 的时间都表明它已经醒来。我还没有发现任何一起假阳性或假阴性事件。
由于按下 Siri 遥控器上的按钮会导致此灯闪烁,这也意味着我可以在 Apple TV 处于唤醒状态时通过查找灯的变化来检测按钮是否被按下。它不是 100% 准确,因为某些按钮的按下速度比我糟糕的旧 USB 网络摄像头的帧速率更快,但它运行良好。
我非常希望找到一种更好的方法来执行此操作,例如通过 LAN 向 Apple TV 发出请求,其中的响应清楚地表明它是醒着还是睡着了,但到目前为止看起来还不是这样可能。
我试图 post 下面的 apple 讨论/支持社区,但被告知我无权 post 此内容。也许这个小组中有人可以成功做到:
Apple TV 4 CEC integration is great when it works, but it doesn't work all the time and not with all the various equipment out there, you can do a search across forums and you will see lots of unhappy users. I would like to use a raspberry PI to detect when my AppleTV goes to sleep and wakes up and programmatically turn my tv on or off using its RS232C or custom CEC commands.
I used a bonjour services explorer and compared every single result between sleep and on states and there are no differences whatsoever. I would have expected Apple to welcome such automation projects and make this information readily available with a variable such as status: sleep or status: on.
Is there a way I could tell the two states apart via the network connection?
If not, could one build a TvOS app which runs on the background and makes this information available to clients somehow?