如何远程连接后端服务与飞利浦 Hue Bridge?

Posted

技术标签:

【中文标题】如何远程连接后端服务与飞利浦 Hue Bridge?【英文标题】:How to connect backend service with philips hue bridge remotely? 【发布时间】:2013-11-22 22:02:39 【问题描述】:

我希望编写一个飞利浦 Hue 服务,该服务需要允许用户向我的服务注册他们的 Hue 桥。该服务将根据事件改变灯泡的颜色。我知道我可以使用 IFTTT,但在这种情况下,我不想使用 IFTTT,我想用 philips hue 的应用程序注册我的网站。

知道我该怎么做吗?非常感激你的帮助。谢谢!

编辑:不知道为什么我被否决了,但我确实做了我的研究。我查看了 philips hue 的开发者网站,在他们的 API 上找不到任何明确的内容。我还查看了 ios SDK,没有看到任何会触发远程设备配对例程的方法。到目前为止,我有这个工作的唯一例子(飞利浦产品之外的是 IFTTT 服务,它允许在“我的应用程序”部分添加一个条目)。

【问题讨论】:

【参考方案1】:

TLDR:我写了一个 API:https://github.com/jarvisinc/PhilipsHueRemoteAPI

我在我的技术博客 (http://blog.paulshi.me/technical/2013/11/27/Philips-Hue-Remote-API-Explained.html) 上回答了这个问题,我将在此处发布:

这个问题实际上分为两部分:

身份验证 远程控制

认证

我还没有找到一种可靠的方法来自动进行身份验证。以下程序需要自动化: 想法是伪装成官方iOS APP,启用后可以远程控制。我们需要得到BRIDGEIDACCESSTOKEN才能通过远程控制的认证步骤。

    从https://www.meethue.com/api/nupnp 找到您的BRIDGEID。 (或在 meethue 网站上的 My bridge 页面中点击“显示更多”)

    获取ACCESSTOKEN

    www.meethue.com/en-US/api/gettoken?devicename=iPhone+5&appid=hueapp&deviceid=**BRIDGEID**
    

    右键点击“返回应用”并在重定向到的链接中写下ACCESSTOKEN

    phhueapp://sdk/login/**ACCESSTOKEN**
    

基本上,获取访问令牌是一种黑客行为。你将你的应用伪装成官方的 iOS Hue 应用,然后以这种方式请求访问令牌。我不确定是否有更简单的方法,如果您知道,请在下面发表评论。

您可以通过模拟登录会话来自动化它,并通过抓取页面内容来获取ACCESSTOKEN。但我认为它非常不可靠,因为对官方页面的任何更改都可能会破坏它。

我写了这个script,它允许从今天开始自动获取ACCESSTOKEN,但由于我上面解释的原因,我不保证它明天会起作用:P

目前,此 OAUTH 流程仅适用于官方应用。他们可能会向其他 3rd 方应用程序打开它。

遥控器

一旦认证完成,这部分可以自动完成。有 2 个已知的私有端点用于发送控制命令并获取与 hue 桥相关的所有状态。

发送命令端点:

POST https://www.meethue.com/api/sendmessage

获取状态端点:

GET https://www.meethue.com/api/getbridge

发送命令端点

网址:https://www.meethue.com/api/sendmessage

方法:POST

网址参数:

token=**ACCESSTOKEN** (which you obtained earlier)

请求头

content-type=application/x-www-form-urlencoded

身体

clipmessage= bridgeId: "**BRIDGEID**", clipCommand:  url: "/api/0/**APIENDPOINT**", method: "**METHOD**", body: **JSONCOMMAND**  
BRIDGEID 与您之前获得的相同 APIENDPOINT 与官方 API /api/<username>/*** 相同,只是去掉了 /api/<usename>/ 部分 METHODPUT/GET/POST/DELETE 和官方API一样的4个方法。尽管 GET 确实不起作用,因为来自 Sending Command Endpoint 的所有响应都是 200,在下面的部分中进行了解释,而 DELETE 没有经过测试 JSONCOMMAND 实际的命令体例如"on":true

获取状态端点

网址:https://www.meethue.com/api/getbridge

方法:GET

网址参数:

token=**ACCESSTOKEN**
bridgeid=**BRIDGEID**

请求头

content-type=application/x-www-form-urlencoded

限制

目前的限制是您无法像官方 API 那样立即从响应中知道您的控制命令是否成功。如果您操作正确,您从调用发送命令端点获得的所有响应几乎总是<200>。但是您始终可以从 Getting Status Endpoint 中提取与 Hue 桥相关的所有状态。

远程控制接口

我写了Philips HUE Remote API专门解决遥控问题。

享受:)

完整的文档请参考这篇优秀的论文:

Hacking Lightbulbs: Security Evaluation of the Philips Hue Personal Wireless Lighting SystemNitesh Dhanjani

【讨论】:

“虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。” @zero323 我试图有一个更长的回复,但由于这是我的第一个回复,我不能包含多个链接,这些链接需要更详细地解释。我现在添加了博客文章的链接。 这很有帮助,谢谢!如果您正在构建另一个应用程序,您如何获得另一个令牌? @PapaBurgundy Philips Hue 并不关心您是否使用相同的访问令牌从多个位置访问 API 端点。它会起作用的。这篇文章的底部有一个“远程控制 API”部分。这将帮助您设置一个 API,允许您通过在云上运行来远程控制。然后,您将该远程 API 用作多个应用程序的传递层。【参考方案2】:

我按照@paul-jianer-shi 的步骤进行了一些调查,但是访问令牌未显示在生成的 HTML 中。 我认为 Hue 门户已经更新并删除了它可能显示访问令牌的方式。

我写了一个blog post,关于通过重用另一个应用程序的访问令牌来执行远程色调操作,比如 IFTTT。主要变化是如何获得该访问令牌。 Hue 门户的“我的应用程序”部分中显示的令牌。检查(停用)链接。它包含访问令牌。

下一步是让 Hue Portal 信任我自己的应用。

【讨论】:

【参考方案3】:

飞利浦计划将远程 API 提供给第三方(IFTTT 和 meethue.com 已经使用它)。

目前在开发者网站上有一个申请提前访问的表格(必须登录): http://www.developers.meethue.com/content/remote-api

【讨论】:

以上是关于如何远程连接后端服务与飞利浦 Hue Bridge?的主要内容,如果未能解决你的问题,请参考以下文章

飞利浦 HUE SDK 在 Swift 中

飞利浦HUE未使用'飞利浦Hue娱乐'(通过DTLS)回复

使用室内地理围栏控制飞利浦 Hue 灯泡

使用 Applescript 和 cURL 控制飞利浦 Hue 照明系统

三星智能电视应用程序将 HUE 用作流光溢彩

csharp 飞利浦Hue API