在其他网络上的生产Web应用程序中查找Phillips Hue Bridge
我在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。这是一张照片来显示工作。
而且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();
});
按照FAQs in the Phillips Hue API documentation pages:
哪里API在什么位置?
网桥中的色调API可在本地网络*问。那就是 说,它可以在您的本地WiFi或有线网络*问,并且 不能在该网络外部直接访问。这也使你的 色调系统的安全。一旦安装在您的网络上,色调网桥 将拥有自己的IP地址,由您的本地路由器设置。这是将命令发送到RESTful API时将使用的IP地址 。
...
我能到色调的远程访问(例如比IFTTT等)?
计划我们将有一个远程API用于访问因特网上的色调 。 现在唯一可用的选项是使用IFTTT 接口。
(强调)
所以你要么需要公开您的家庭服务器上创建的一些自定义的API,或者使用IFTTT(我相信制造商通道可以做你想要的这里,但我之前没有与之合作过,所以我不太确定),如果这个FAQ是可信的。
对于将来的答案搜索者,我使用maker.ifttt.com为每个灯光设置了一个Recipe(Maker触发Hue),然后将Maker Web请求URL插入到我现有的AJAX请求中。 Maker Applet并不完美,因为我无法获取灯光的活动状态,响应时间大约需要6秒钟,而Hue API的响应时间 jeremytripp
你的家庭网络中有一台服务器,你可以从液滴ssh到?在这种情况下,你可以建立一个SSH隧道。或者你家里的互联网调制解调器/路由器支持传入的VPN,你可以从DO连接。 – robertklep