简单的设备发现和Web服务

时间:2014-04-25 01:30:48

标签: python soap upnp ssdp cling

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

我希望尽可能简化我的实施,并尽可能利用开源软件进行快速实施(强烈倾向于积极维护/支持代码)。

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

  1. UPnP是这个用例的好选择(我不是传统的UPNP设备)吗?或者我应该考虑其他基于标准的方法吗?
  2. 假设UPnP合理:
    • (a)在Android和我的Python / Linux设备中使用哪些合理的库?
    • (b)我应该实施自定义UPNP“设备”还是应该尝试将我的解决方案变成看起来像MediaServer?
  3. 目前我正在尝试使用Android端的Cling和Python端的Coherence来实现,这两者都不像我希望的那样简单,这让我想知道我是否采取聪明的方法。

1 个答案:

答案 0 :(得分: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加载它们。它负责设备/服务发现和托管描述文档。然后,您只需要实施服务说明中的操作。