我正在创建一个使用覆盆子pi的IoT设备。它是由同一个RPi提供的web应用程序控制的。我想用uPnP发布这个网络应用程序,允许任何与uPnP兼容的设备列出并打开它,但我无法实现它。
该服务是用python 3编写的,我尝试使用iot模块。我从这个例子开始,但是它既没有显示在我的PC上的VLC中,也没有显示在我的android手机中的DMS Explorer中。
我怎么发动汽车呢?
这就是我当前配置服务的方式:只是一个没有导出任何有用的测试,只是为了看看它是否有效:
import upnp
class UPNPAnnouncer(object):
def __init__(self):
self._loop = None
self._device = upnp.Device({
'deviceType': 'urn:sadmin-fr:device:demo:1',
'friendlyName': 'UPnP Test',
'uuid': '00a56575-78fa-40fe-b107-8f4b5043a2b0',
'manufacturer': 'BONNET',
'manufacturerURL': 'http://sadmin.fr'
})
self._service = upnp.Service({
'serviceType': 'sadmin-fr:service:dummy',
'serviceId': 'sadmin-fr:serviceId:1',
})
self._device.addService(self._service)
def configure(self, loop):
self._loop = loop
self._server = upnp.Annoncer(self._device)
self._server.initLoop(loop)
loop.create_task(self._send_announces())
async def _send_announces(self):
while True:
print("Notify upnp")
self._server.notify()
await asyncio.sleep(2)发布于 2022-07-01 13:34:10
正如注释中所说的,实现UPnP设备和服务并不是那么简单。似乎特定库的目标是做大量繁重的工作,但是它的文档非常糟糕,缺少API文档之外的用法示例和说明。
尽管如此,以下是一些建议:
upnpresources.zip非常有用。M-SEARCH消息的UDP端口1900,并回复它们。这是客户了解设备/服务的主要方式。您还应该定期通过SSDP NOTICE消息为自己做广告。http.server或库的嵌入式服务器,但是如果已经运行了一个one服务器,也可以使用Apache。这个库已经执行了多少上面的操作?使用网络嗅探器,如tcpdump,找出并填写缺失的部分!
最后但并非最不重要的一点是,客户端可能只列出支持他们感兴趣的服务的设备: VLC和智能电视只关心媒体服务器,而且很可能忽略Internet网关设备(家庭路由器)等等。为了进行测试,您需要一个通用的UPnP客户端扫描器/资源管理器,它列出网络上的所有设备和服务
https://stackoverflow.com/questions/63485475
复制相似问题