简单的设备发现和Web服务



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

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

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

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

目前,我正在尝试在Android端使用Cling和在Python端使用Coherence来实现,这两种方法都没有我希望的那么简单,这让我怀疑我是否采取了明智的方法。

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

  • 您如何发现服务?SSDP是一种有效的技术,但zeroconf:我不知道Android实现,但我认为它会存在
  • 一旦找到uri,如何公开您的API?UPnP现在有点过时了,但运行良好,如果你使用一个像样的图书馆,它很容易,但功能相当强大。根据您的需要,您也可以使用类似于普通REST Web服务的服务,或者使用SOAP而不必使用UPnP

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

  1. 对于UPnP问题:

    • (a) 我对安卓方面不是很熟悉,但对于linux UPnP,我建议使用GUPnP(尽管我有偏见,因为我参与了它的开发):它是一个稳定且测试良好的库。Python绑定没有像应有的那样得到很好的文档记录,但它们确实存在:from gi.repository import GUPnP。GUPnP还允许您根据需要执行SSDP:查看GSSDP库。

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

相关内容

  • 没有找到相关文章

最新更新