异步upnp客户端

async-upnp-client的Python项目详细描述


用于python/asyncio的asyncio upnp客户端库。

最初编写用于Home Assistant以驱动支持dlna dmr的设备,但对其他项目也很有用。

状态

https://img.shields.io/travis/StevenLooman/async_upnp_client.svghttps://img.shields.io/pypi/v/async_upnp_client.svghttps://img.shields.io/pypi/format/async_upnp_client.svghttps://img.shields.io/pypi/pyversions/async_upnp_client.svghttps://img.shields.io/pypi/l/async_upnp_client.svg

贡献

请参见contribution.rst

用法

有关如何使用异步upnp_客户端的示例,请参见examples/

upnp客户端

通过upnp客户端脚本提供命令行界面。此脚本可用于:

  • 采取行动
  • 订阅服务并收听活动
  • 显示从设备到设备的UPNP流量(–调试流量)
  • 显示打印精美的json(–pprint)以提高可读性
  • 搜索设备
  • 收听广告

脚本的输出是每个操作调用或订阅事件的一行json。有关详细信息,请参阅程序帮助。

调用操作的示例:

$ upnp-client --pprint call-action http://192.168.178.10:49152/description.xml RC/GetVolume InstanceID=0 Channel=Master
{
    "timestamp": 1531482271.5603056,
    "service_id": "urn:upnp-org:serviceId:RenderingControl",
    "service_type": "urn:schemas-upnp-org:service:RenderingControl:1",
    "action": "GetVolume",
    "in_parameters": {
        "InstanceID": 0,
        "Channel": "Master"
    },
    "out_parameters": {
        "CurrentVolume": 70
    }
}

订阅所有服务的一个示例,请注意程序在停止前一直运行(ctrl-c):

$ upnp-client --pprint subscribe http://192.168.178.10:49152/description.xml \*
{
    "timestamp": 1531482518.3663802,
    "service_id": "urn:upnp-org:serviceId:RenderingControl",
    "service_type": "urn:schemas-upnp-org:service:RenderingControl:1",
    "state_variables": {
        "LastChange": "<Event xmlns=\"urn:schemas-upnp-org:metadata-1-0/AVT_RCS\">\n<InstanceID val=\"0\">\n<Mute channel=\"Master\" val=\"0\"/>\n<Volume channel=\"Master\" val=\"70\"/>\n</InstanceID>\n</Event>\n"
    }
}
{
    "timestamp": 1531482518.366804,
    "service_id": "urn:upnp-org:serviceId:RenderingControl",
    "service_type": "urn:schemas-upnp-org:service:RenderingControl:1",
    "state_variables": {
        "Mute": false,
        "Volume": 70
    }
}
...

您可以通过提供这些名称或缩写名称订阅服务列表,例如:

$ upnp-client --pprint subscribe http://192.168.178.10:49152/description.xml RC AVTransport

搜索设备的示例:

$ upnp-client --pprint search
{
    "cache-control": "max-age=3600",
    "date": "Sat, 27 Oct 2018 10:43:42 GMT",
    "ext": "",
    "location": "http://192.168.178.1:49152/description.xml",
    "opt": "\"http://schemas.upnp.org/upnp/1/0/\"; ns=01",
    "01-nls": "906ad736-cfc4-11e8-9c22-8bb67c653324",
    "server": "Linux/4.14.26+, UPnP/1.0, Portable SDK for UPnP devices/1.6.20.jfd5",
    "x-user-agent": "redsonic",
    "st": "upnp:rootdevice",
    "usn": "uuid:e3a17dd5-9d85-3131-3c34-b827eb498d72::upnp:rootdevice",
    "_timestamp": "2018-10-27 12:43:09.125408"
}

收听广告的示例:

$ upnp-client --print advertisements
{
    "Host": "239.255.255.250:1900",
    "Cache-Control": "max-age=30",
    "Location": "http://192.168.178.1:1900/WFADevice.xml",
    "NTS": "ssdp:alive",
    "Server": "POSIX, UPnP/1.0 UPnP Stack/2013.4.3.0",
    "NT": "urn:schemas-wifialliance-org:device:WFADevice:1",
    "USN": "uuid:99cb221c-1f15-c620-dc29-395f415623c6::urn:schemas-wifialliance-org:device:WFADevice:1",
    "_timestamp": "2018-12-23 11:22:47.154293",
    "_address": "('192.168.178.1', 1900)",
    "_udn": "uuid:99cb221c-1f15-c620-dc29-395f415623c6",
    "_source": "advertisement"
}

摘要

  • DLNA数字媒体渲染器(DLNA DMR)设备 -主要用于Home Assistant,但在其他项目中也可能有用。
  • Internet网关设备(IGD)
  • 打印机

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java的目标是从我的项目中删除不起作用的文件   java对for循环的理解   java我完成了在作业要求的位置查找字符的部分,但是如何从我找到的字符串中删除字符呢?   基于帧时的java动画   java请求无效。缺少XGoogUploadCommand标头   java如何在viewsource模式下使用openStream?   grpc grpc_ARG_KEEPALIVE_PERMIT_而不调用java服务器?   java如何通过Junit测试Web服务调用   如何在java中获取鼠标中键?   使用junit在spring测试中加载属性文件   Java中用于类的类修饰符   java多色文本图像   sql无法调试Java中的“连接到数据库失败”异常   java如何指定hibernate连接映射?   java Android工具栏不显示   java仿射转换不同的图形对象   使用终端的java问题   Java在tomcat上查找127.0.0.1失败