我在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();
});
你的家庭網絡中有一臺服務器,你可以從液滴ssh到?在這種情況下,你可以建立一個SSH隧道。或者你家裏的互聯網調制解調器/路由器支持傳入的VPN,你可以從DO連接。 – robertklep