如何远程连接后端服务与飞利浦 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,启用后可以远程控制。我们需要得到BRIDGEID
和ACCESSTOKEN
才能通过远程控制的认证步骤。
从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>/
部分
METHOD
PUT/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?的主要内容,如果未能解决你的问题,请参考以下文章