2014-10-29 32 views
2

在其他設備中,我有一個Belkin WeMo開關和一個3M WiFi恆溫器。兩者都帶有Android應用程序。當我在家中打開應用程序(與設備在同一個WiFi子網上打電話)時,該應用程序稱設備是「本地」的,或者應用程序「直接」連接到設備。我所做的任何更改都直接反映在設備上。物聯網應用程序如何檢測設備是否本地?

如果我從我家門外的任何地方連接,它會「知道」設備不在本地。如果我理解正確,那麼它會在某處更新自己的服務器,最終家中的設備會得到更新。

應用程序如何做到這一點?我想複製該功能。

基本上,我有一個樹莓派,讓我們說,做一些GPIO,我可以通過訪問一個網頁觸發該行動。在我的家庭網絡上,可通過http://192.168.10.25/do_something訪問網頁...在我的家庭網絡外,網頁可在http://my_custom_name.some_free_dynamic_dns.com:8080/do_something訪問。我已經設置了我的路由器,將廣域網上的8080端口連接到局域網上的192.168.10.25:80。這工作。

如何避免有2頁?我想寫一個應用程序,它有效地顯示我192.168.10.25/do_something URL。當我在家時,它應該「自動」檢測到手機與URL位於同一網絡上,並直接打開192.168.10.25/do_something ......當我在外面時,它應該「自動」檢測到並啓動http://my_custom_name.some_Free_dynamaic_dns.com:8080/do_something

這裏的關鍵部分是,在家時,即使我的ISP關閉並且主機名不能解析,也不應該因爲一切都是本地的。

我該如何去做這件事?

回答

1

您的應用程序首先嚐試連接到192.168.10.25(或您選擇的任何本地地址)的Web服務器。如果在合理的時間內沒有答案(5秒鐘就夠了),則連接到外部網絡服務器。

爲了安全起見,您可能需要確保192.168.10.25的網絡服務器實際上是您的網絡服務器。您可以使用質詢和響應以及公鑰加密來實現此目的。如果您願意,我可以提供更多細節。

您可以嘗試通過查看手機的IP地址來避免等待(不存在的)本地網絡服務器。如果它不是192.168.x.y,你可以假設你不是本地的,直接進入外部網站。

如果您直接在應用中嵌入192.168.10.25,則不需要主機查找。

相關問題