2016-11-29 120 views
1

我在Node.js/Express服务器上使用node-hue-api包来使用Hue API。我已经建立了一个网站的管理部分,只有我可以访问我想要用来控制我的Hue灯。这在我的开发环境中工作正常,因为我的本地主机显然与桥相同的网络/ IP上运行。在其他网络上的生产Web应用程序中查找Phillips Hue Bridge

我认为问题是,当我将我的更改推送到我的生产环境中 - 该数据在不同IP的数字海洋液滴上运行时,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); 
}); 

我再经过渲染功能lightsObject传递给我的管理页面,通过返回的对象中每个光循环依次做了,然后显示基于对象的状态有些拨动开关。然后onchange,我在这里运行一个jQuery AJAX调用app.put方法,它运行node-hue-api代码来设置灯的状态,从管理页面的切换值属性传递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(); 
}); 
+0

你的家庭网络中有一台服务器,你可以从液滴ssh到?在这种情况下,你可以建立一个SSH隧道。或者你家里的互联网调制解调器/路由器支持传入的VPN,你可以从DO连接。 – robertklep

回答

1

按照FAQs in the Phillips Hue API documentation pages

哪里API在什么位置?

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

...

我能到色调的远程访问(例如比IFTTT等)?

计划我们将有一个远程API用于访问因特网上的色调 。 现在唯一可用的选项是使用IFTTT 接口。

(强调)

所以你要么需要公开您的家庭服务器上创建的一些自定义的API,或者使用IFTTT(我相信制造商通道可以做你想要的这里,但我之前没有与之合作过,所以我不太确定),如果这个FAQ是可信的。

+0

对于将来的答案搜索者,我使用maker.ifttt.com为每个灯光设置了一个Recipe(Maker触发Hue),然后将Maker Web请求URL插入到我现有的AJAX请求中。 Maker Applet并不完美,因为我无法获取灯光的活动状态,响应时间大约需要6秒钟,而Hue API的响应时间<1秒,但对于我的网站而言,它将起作用。另外,我从生产服务器中删除了所有node-hue-api代码,但选择将其保存在我的开发环境中。目前使用它与fs.writeFile更新JSON文件以用作后备。希望这可以帮助。 – jeremytripp

相关问题