物联网应用程序如何检测设备是否本地?

问题描述:

在其他设备中,我有一个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关闭并且主机名不能解析,也不应该因为一切都是本地的。

我该如何去做这件事?

您的应用程序首先尝试连接到192.168.10.25(或您选择的任何本地地址)的Web服务器。如果在合理的时间内没有答案(5秒钟就够了),则连接到外部网络服务器。

为了安全起见,您可能需要确保192.168.10.25的网络服务器实际上是您的网络服务器。您可以使用质询和响应以及公钥加密来实现此目的。如果您愿意,我可以提供更多细节。

您可以尝试通过查看手机的IP地址来避免等待(不存在的)本地网络服务器。如果它不是192.168.x.y,你可以假设你不是本地的,直接进入外部网站。

如果您直接在应用中嵌入192.168.10.25,则不需要主机查找。