【问题标题】:Simple Device Discovery and Web Services简单的设备发现和 Web 服务
【发布时间】:2014-04-25 01:30:48
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: python soap upnp ssdp cling


    【解决方案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 加载它们。这负责设备/服务发现和托管描述文档。然后,您只需要实现服务描述中的操作即可。

    【讨论】:

    • 谢谢。好资料。没有考虑过zeroconf。确实考虑过 REST。 GUPnP 很有趣,但我想将语言的数量限制为 Java 和 Python。如果我可以使用 XML 在 GUPnP 中完全实现并运行一个可执行文件,我会考虑这样做,但看起来我仍然需要write code
    • 澄清一下:您可以使用 GUPnP 在 python 中实现 UPnP 服务(参考文档仅适用于 C)。仅在 XML 中实现服务没有任何意义——您无法以这种方式实现任何重要的服务。
    • 感谢您的澄清。 UPnP 和 Cling 都比我希望的要复杂,所以我目前正在使用 REST 和 zeroconfig。如果成功,我会在几天后接受您的回答,因为这似乎是正确的建议。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多