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

3

我有Belkin WeMo开关和3M WiFi恒温器等多种设备,这些设备都配备了Android应用程序。当我在家时(手机与设备位于同一WiFi子网中),打开应用程序时,应用程序会显示设备为“本地”,或者说应用程序直接连接到设备。我所做的任何更改都将直接反映在设备上。

如果我从房子外的任何地方连接,它会“知道”该设备不是本地设备。如果我理解正确,它会更新自己的服务器,在某个时间点,家里的设备也会得到更新。

应用程序如何实现这一点?我想复制这个功能。

基本上,我有一个Raspberry Pi,例如通过GPIO执行某些操作,并且我可以通过访问网页来触发该操作。在我的家庭网络中,可以在http://192.168.10.25/do_something访问该网页……在家庭网络之外,可以在http://my_custom_name.some_free_dynamic_dns.com:8080/do_something访问该网页。我已经设置好路由器将WAN上的8080端口转发到LAN上的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个回答

2

首先,让你的应用程序尝试连接到本地地址192.168.10.25(或任何您选择的本地地址)。如果在合理的时间内没有响应(5秒应该足够),那么就连接到外部Web服务器。

出于安全原因,您可能希望确保192.168.10.25上的Web服务器实际上是您的Web服务器。您可以使用挑战-响应和公钥加密来实现此目的。如果需要,我可以提供更多详细信息。

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

如果您直接嵌入192.168.10.25,则无需进行主机查找。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接