0

我有一个运行 Linux 的自定义嵌入式硬件设备,由 Python 代码控制。我想创建一个 Android 客户端,它会自动在本地网络上查找我的任何设备、配置设备并显示来自它们的数据。

我想让我的实现尽可能简单,并利用尽可能多的开源软件来快速实现(强烈倾向于积极维护/支持代码)。

到目前为止,我的研究使我倾向于使用UPnP实现,使用SSDP查找我的设备并让 UPnP在我的 Android 客户端和 Python 控制的 Linux 设备之间通过SOAP进行通信。

  1. UPnP 是这个用例的好选择吗(我不是传统的 UPNP 设备)?还是我应该考虑其他基于标准的方法?
  2. 假设 UPnP 是合理的:
    • (a) 在 Android 和我的 Python/Linux 设备上使用哪些合理的库?
    • (b) 我应该实现一个自定义的 UPNP“设备”,还是应该尝试将我的解决方案硬塞到看起来像一个 MediaServer?

目前,我正在尝试在Android 端使用Cling并在 Python 端使用Coherence来实现,这两者都没有我希望的那么简单,这让我想知道我是否采取了一种聪明的方法。

4

1 回答 1

1

为此使用 UPnP 没有任何问题。这里有两个问题——相关但仍然独立:

  • 您如何发现服务?SSDP 是一种有效的技术,但 zeroconf 也是如此:我不知道 Android 实现,但我认为会存在。
  • 找到 uri 后如何公开 API?UPnP 现在有点老派了,但工作正常,如果你使用一个像样的库,它很容易但非常强大。根据您的需要,您也可以使用普通的 REST Web 服务,或者使用 SOAP 而无需使用 UPnP。

这些问题是否真的无关取决于您使用的库——我不知道例如 Cling 是否允许您仅将 SSDP 用于非 UPnP 用例。

  1. 对于 UPnP 问题:

    • (a) 我对 Android 方面不是很熟悉,但对于 linux UPnP,我建议使用 GUPnP(虽然我有偏见,因为我参与了它的开发):它是一个稳定且经过良好测试的库。Python 绑定没有像应有的那样有据可查,但它们存在:from gi.repository import GUPnP. 如果您愿意,GUPnP 也可以让您只做 SSDP:请参阅 GSSDP 库。

    • (b) 如果您找不到合适的现有匹配项,则绝对是定制设备,这就是 UPnP 的设计目的。在 GUPnP 情况下,您将编写设备和服务描述(在 xml 中,参见源代码中的示例)并使用RootDevice加载它们。这负责设备/服务发现和托管描述文档。然后,您只需要实现您在服务描述中的操作。

于 2014-04-25T08:29:51.757 回答