我正在构建一个 IoT 解决方案,我将在其中将多个设备连接到我想要连接到控制我的解决方案的集线器的本地网络。
连接新设备后,我想将其与集线器连接并为其命名以识别它。我想以自动方式实现检测(所以我不必手动输入 IP 地址)。例如,当网络中存在 Chromecast 时,我可以在手机的流媒体应用程序中看到它。所以我想做一些类似的事情来将集线器与设备连接起来。
到目前为止,我的想法是有两种方法:
- 集线器扫描网络以查找新设备(定期或当我说存在新设备时)。
- 一旦连接,设备就会扫描网络以找到集线器。
这些方法中的任何一种都比另一种更喜欢吗?在这种情况下,为什么?
在进行扫描时,无论我选择什么方向,最有效的扫描方式是什么?我正在使用 Java 进行实现,到目前为止我所拥有的是:
int timeout = 100;
for (int i = 1; i < 255; i++)
{
String host = subnet + "." + i;
if (InetAddress.getByName(host).isReachable(timeout))
{
String hostname = InetAddress.getByName(host).getHostName();
String canonicalHostName = InetAddress.getByName(host).getCanonicalHostName();
System.out.println(host + " is reachable. Hostname: " + hostname + ", CanonicalHostName: " + canonicalHostName);
}
}
我在这里看到的是,对于我网络中的大多数内容,返回的主机名只是 IP 地址,而不是我在路由器中看到的主机名。我想我可以使用主机名作为识别器来检测特定设备并了解它们在哪里 - 但是这个小 poc 似乎不起作用。那么如何才能很好地识别设备呢?
Java(或Javascript)和ESP8266是否有任何库/解决方案可以做到这一点?(如果实施“智能家居”设备,感觉就像一个常见问题)。