在其他网络上的生产 Web 应用程序中查找 Phillips Hue Bridge
Find Phillips Hue Bridge in Production Web App on Other Network
我在 Node.js/Express 服务器上使用 node-hue-api 包来处理 Hue API。我已经建立了一个只有我可以访问的网站的管理部分,我想用它来控制我的 Hue 灯。这在我的开发环境中工作正常,因为我的本地主机显然 运行ning 在与 Bridge 相同的 network/IP 上。
我认为问题是当我将更改推送到我的生产环境时——运行在另一个 IP 的 Digital Ocean droplet 上Bridge 未连接或未意识到,显然无法找到 Bridge -- returns 空数组作为响应:Hue Bridges Found: []
我不是第一个遇到这个问题的人,但一般来说,Hue 的文档很少。我已经在进行 UPnP 和 N-UPnP 搜索,但我看到有人提到进行 IP 扫描,您可以在其中设置特定的 IP 来查找(我知道 IP),但实际上没有相关文档.有什么想法吗?
由于文档很少而且这已经接近工作了,这里是我的代码中有用的部分,以防它帮助其他人或表明我做错了什么。
hue = require("node-hue-api");
//===== Hue =====
var HueApi = require("node-hue-api").HueApi,
lightState = hue.lightState,
timeout = 5000;
var displayResult = function(result) {
console.log(JSON.stringify(result, null, 2));
};
var displayError = function(err) {
console.error(err);
};
var displayBridges = function(bridge) {
console.log("Hue Bridges Found: " + JSON.stringify(bridge));
};
hue.nupnpSearch().then(displayBridges).done();
hue.upnpSearch(timeout).then(displayBridges).done();
var hostname = "my-ip-address",
username = "my-registered-user-hash",
api = new HueApi(hostname, username),
state = lightState.create(),
lightsObject;
//Get all lights attached to the bridge
api.lights(function(err, lights) {
if (err) throw err;
lightsObject = lights;
displayResult(lightsObject);
console.log(lightsObject);
});
然后我通过渲染函数将 lightsObject 传递到我的管理页面,做一个 for 循环来遍历返回对象中的每个灯,然后根据对象中的状态显示一些切换开关。然后onchange
,我运行一个jQueryAJAX调用这里的app.put方法,其中运行是node-hue-api 设置灯状态的代码,从管理页面的切换的值属性传递 lightId。这是一张图片,展示了它的工作原理。
和 app.put
代码。可能会结合这些,但我想要单独调用,以防我想在开启状态下做一些更有创意的事情。
app.put('/lighton', function(req, res) {
//Set the state of the light
api.setLightState(req.body.lightId, state.on())
.fail(displayError)
.done();
});
app.put('/lightoff', function(req, res) {
//Set the state of the light
api.setLightState(req.body.lightId, state.off())
.fail(displayError)
.done();
});
根据FAQs in the Phillips Hue API documentation pages:
Where is the API located?
The hue API in the bridge is accessible on your local network. That is
to say, it is accessible on your local WiFi or wired network and
cannot be accessed directly outside that network. This also makes your
hue system secure. The hue bridge, once installed on your network,
will have its own IP address set up by your local router. This is the
IP address you will use when sending commands to the RESTful API.
...
Can I get remote access to hue (e.g. other than IFTTT)?
It is planned that we will have a remote API for accessing hue across
the Internet. For now the only option available is to use the IFTTT
interface.
(强调)
所以你要么需要在你的家庭服务器上公开你创作的一些自定义 API,要么使用 IFTTT(我相信制造商频道可以在这里做你想做的事,但我没有工作之前有一个所以我不太确定),如果这个常见问题是可信的。
我在 Node.js/Express 服务器上使用 node-hue-api 包来处理 Hue API。我已经建立了一个只有我可以访问的网站的管理部分,我想用它来控制我的 Hue 灯。这在我的开发环境中工作正常,因为我的本地主机显然 运行ning 在与 Bridge 相同的 network/IP 上。
我认为问题是当我将更改推送到我的生产环境时——运行在另一个 IP 的 Digital Ocean droplet 上Bridge 未连接或未意识到,显然无法找到 Bridge -- returns 空数组作为响应:Hue Bridges Found: []
我不是第一个遇到这个问题的人,但一般来说,Hue 的文档很少。我已经在进行 UPnP 和 N-UPnP 搜索,但我看到有人提到进行 IP 扫描,您可以在其中设置特定的 IP 来查找(我知道 IP),但实际上没有相关文档.有什么想法吗?
由于文档很少而且这已经接近工作了,这里是我的代码中有用的部分,以防它帮助其他人或表明我做错了什么。
hue = require("node-hue-api");
//===== Hue =====
var HueApi = require("node-hue-api").HueApi,
lightState = hue.lightState,
timeout = 5000;
var displayResult = function(result) {
console.log(JSON.stringify(result, null, 2));
};
var displayError = function(err) {
console.error(err);
};
var displayBridges = function(bridge) {
console.log("Hue Bridges Found: " + JSON.stringify(bridge));
};
hue.nupnpSearch().then(displayBridges).done();
hue.upnpSearch(timeout).then(displayBridges).done();
var hostname = "my-ip-address",
username = "my-registered-user-hash",
api = new HueApi(hostname, username),
state = lightState.create(),
lightsObject;
//Get all lights attached to the bridge
api.lights(function(err, lights) {
if (err) throw err;
lightsObject = lights;
displayResult(lightsObject);
console.log(lightsObject);
});
然后我通过渲染函数将 lightsObject 传递到我的管理页面,做一个 for 循环来遍历返回对象中的每个灯,然后根据对象中的状态显示一些切换开关。然后onchange
,我运行一个jQueryAJAX调用这里的app.put方法,其中运行是node-hue-api 设置灯状态的代码,从管理页面的切换的值属性传递 lightId。这是一张图片,展示了它的工作原理。
和 app.put
代码。可能会结合这些,但我想要单独调用,以防我想在开启状态下做一些更有创意的事情。
app.put('/lighton', function(req, res) {
//Set the state of the light
api.setLightState(req.body.lightId, state.on())
.fail(displayError)
.done();
});
app.put('/lightoff', function(req, res) {
//Set the state of the light
api.setLightState(req.body.lightId, state.off())
.fail(displayError)
.done();
});
根据FAQs in the Phillips Hue API documentation pages:
Where is the API located?
The hue API in the bridge is accessible on your local network. That is to say, it is accessible on your local WiFi or wired network and cannot be accessed directly outside that network. This also makes your hue system secure. The hue bridge, once installed on your network, will have its own IP address set up by your local router. This is the IP address you will use when sending commands to the RESTful API.
...
Can I get remote access to hue (e.g. other than IFTTT)?
It is planned that we will have a remote API for accessing hue across the Internet. For now the only option available is to use the IFTTT interface.
(强调)
所以你要么需要在你的家庭服务器上公开你创作的一些自定义 API,要么使用 IFTTT(我相信制造商频道可以在这里做你想做的事,但我没有工作之前有一个所以我不太确定),如果这个常见问题是可信的。