2016-11-29 51 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

相關問題