5

我目前正在从事一个项目,我试图通过面向 Internet 的网站控制嵌入式设备。这个想法是用户可以访问网站并告诉该设备执行某种操作。网站上的操作将被转换为一系列 CLI 命令,然后发送到设备。未来通信可能会双向进行,但现在我专注于服务器到设备。

Web 服务器是使用 Python (Django) 的 LAMP 堆栈,我尝试与之通信的设备是运行 eLinux 的 Beagle Board。任何时候都只有一个设备与服务器通信。

我已经在服务器和设备端编写了所有功能部分,但是我在弄清楚如何编写通信层时遇到了一些麻烦。我的一个大问题是该设备将是移动的,并且每隔几天就会移动一次位置。所以,我不能保证设备的静态 IP 地址。我的网络编程知识非常少,所以我不知道从哪里开始。

有没有人对我如何开始发展这种交流有任何想法/资源?

谢谢!

4

4 回答 4

3

您可以使用DynDNS之类的提供程序简单地注册一个动态主机名,并让设备在该网站上更新它的 IP,这样动态主机名总是指向设备 IP - 有大量的客户端、脚本等可用于 Linux 可以做到这一点.

于 2010-09-27T23:32:11.027 回答
3

如果服务器将是静态的,您始终可以让设备与服务器建立连接以报告其 IP 地址。

您可以为设备编写一个简单的 UDP 服务器来侦听传入的通信,然后在 python 中编写一个客户端供您的 Web 服务器调用。

于 2010-09-27T23:33:25.903 回答
2

我的正常行为模式(当然因为它可能必须通过 NAT 等)是让设备设置一个反向 SSH 隧道,它只是“回家”: http: //www.howtoforge.com/reverse-ssh -隧道

请注意,SSH 连接不时中断,所以我会在服务器上设置一个心跳方法,如果客户端(Beagle Board)错过了一定数量的心跳,让它破坏隧道并创建一个新的。

于 2010-09-27T23:44:36.240 回答
0

该设备将是移动的,并且每隔几天就会移动一次位置。所以,我不能保证设备的静态 IP 地址。

您的设备可以是网站的客户端。

您的网站有两个界面。

  1. 人的 HTML 界面。

  2. 设备的非 HTML 界面。作为网站的客户端,设备需要一个 HTTP 客户端库来向网站发送请求。此请求将包括设备的 IP 地址,以及隐藏在 HTTP 请求中的所有常见问题。(在请求中发送了一堆标准标头)

设备发出初始请求后,您的网站可以保存设备的当前状态,如果您愿意,可以通过其他协议与其通信。(我猜“我把所有的功能部分都写在服务器端和设备端”意味着你有一些其他的协议来控制设备,而且这个协议不是基于 HTTP 的。)

从长远来看,让设备轮询网站以获取命令或更新或事物可能是最简单的。这样,设备就是一个仅使用 HTTP 的纯 Web 客户端,而您的网站是一个纯 Web 服务器,仅使用 HTTP。那么你就不需要更专业的第二个协议了。仅使用 HTTP 意味着您可以使用 SSL 来确保安全通信。

如果您的设备使用 HTTP 来获取命令和更新,则您需要为可以轻松编码为 HTTP 请求和响应的数据制定一个可用的表示。选项包括 XML、JSON 和 YAML。您总是可以发明自己的数据格式;但是,您可能会更乐意调试像 JSON 这样的标准化格式。

在 Django 中构建这两个接口非常简单。您将拥有一些用于人员的 URL,以及一些用于您的设备的 URL。您将为返回 HTML 页面的人员提供查看功能,并为您的设备提供返回 JSON 或 XML 消息的查看功能。

于 2010-09-28T10:12:15.570 回答