在其他网络上的生产Web应用程序中找到Phillips Hue Bridge

时间:2016-11-29 15:11:14

标签: javascript node.js express philips-hue

我在Node.js / Express服务器上使用node-hue-api包来使用Hue API。我已经建立了一个网站的管理部分,只有我可以访问,我想用来控制我的Hue灯。这在我的开发环境中工作正常,因为我的localhost显然在与Bridge相同的网络/ IP上运行。

我认为问题在于,当我将我的更改推送到我的生产环境时 - 这是在Bridge未连接或不知道的不同IP的Digital Ocean Droplet上运行,它显然无法找到Bridge - 返回空数组作为响应: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);
});

然后我通过render函数将lightsObject传递给我的管理页面,执行for循环以遍历返回对象中的每个灯光,然后根据对象中的状态显示一些切换开关。然后onchange,我在这里对app.put方法运行一个jQuery AJAX调用,它运行node-hue-api代码来设置灯的状态,从管理页面的toggle的value属性传递lightId 。这是一张显示工作情况的照片。

Hue UI

app.put代码。可能可以将这些结合起来,但我希望单独调用,以防我想在on状态下做一些更有创意的事情。

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();
});

1 个答案:

答案 0 :(得分:1)

根据FAQs in the Phillips Hue API documentation pages

  

API位于何处?

     

可以在本地网络上访问网桥中的hue API。那是   要说,可以通过本地WiFi或有线网络访问   无法直接在该网络外访问。这也使你的   色调系统安全。色调桥,一旦安装在您的网络上,   将由您的本地路由器设置自己的IP地址。这是   将命令发送到RESTful API时将使用的IP地址。

     

...

     

我是否可以远程访问hue(例如IFTTT以外的其他人)?

     

我们计划拥有一个用于访问hue的远程API   互联网。 目前唯一可用的选项是使用IFTTT   接口

(强调补充)

所以你要么需要在你的家庭服务器上公开你创建的一些自定义API,要么使用IFTTT(我相信制造商频道可以在这里做你想要的,但我之前没有合作过,所以不是如果可以相信这个常见问题,我真的很确定。