跳转到主要内容

纯Python asyncio连接器,用于Art-Net DMX宇宙

项目描述

GitHub Actions Workflow Status PyPI version

aioartnet 是一个纯Python asyncio连接器,用于免费Art-Net协议,该协议是一种通过以太网(UDP)传输和接收DMX-512照明控制协议的传输方式。该协议是直接连接复杂灯具的现代标准,并为特定局部区域分支单个宇宙以控制经典DMX-512 XLR电缆互联灯具提供了一种方式。开放和专有照明控制系统都可以直接发出Art-Net。

这个库旨在简单且健壮,可以同时将数据输入到Art-Net,也可以从"artnet"输出到用户代码。它构建了一个动态的网络Art-Net节点模型,它们的端口和被控制的DMX-512宇宙。完全类型提示,符合PEP-561。无非核心依赖,测试套件在Python 3.9到3.11上运行。

它还可以用于 被动 构建网络模型,而无需作为Art-Net节点加入。

我们还提供了一套专有的iOS/Xcode组件,可供商业授权,它使用与该代码相同的基于事件驱动的API,构建在苹果的Networking框架NWProtocolUDP之上。对于大多数项目来说,这将比libartnet提供一个更优越的起点。

安装 & 示例

使用pip安装来自pypi的包

$ pip install aioartnet
$ python -m aioartnet.main
INFO:aioartnet:preferred interfaces: [(1, 'wlp4s0'), (10, 'br-ee82b9af434e'), (10, 'docker0'), (10, 'lo')]
INFO:aioartnet:using interface wlp4s0 with ip 192.168.1.205 broadcast ip 192.168.1.255
INFO:aioartnet:configured own port Port<Input,DMX,0:0:1>
INFO:aioartnet:configured own port Port<Output,DMX,0:0:5>
status:
  ArtNetNode<aioartnet,192.168.1.205:6454>                     [Port<Input,DMX,0:0:1>, Port<Output,DMX,0:0:5>]
  ArtNetNode<ODE Mk3,192.168.1.238:6454>                       [Port<Output,DMX,0:0:0>, Port<Output,DMX,0:0:1>]
  ArtNetNode<DMX Monitor,192.168.1.222:6454>                   []
 0:0:1 pubs:[ArtNetNode<aioartnet,192.168.1.205:6454>] subs:[ArtNetNode<ODE Mk3,192.168.1.238:6454>]
 0:0:5 pubs:[] subs:[ArtNetNode<aioartnet,192.168.1.205:6454>]
 0:0:0 pubs:[] subs:[ArtNetNode<ODE Mk3,192.168.1.238:6454>]

入门

  1. 导入库并创建一个ArtNetClient
    from aioartnet import ArtNetClient
    client = ArtNetClient()
  1. 使用set_port_config()在客户端配置所需的输入/输出端口,每次调用都返回ArtNetUniverse对象。使用这些对象可选地设置作为ArtNet输入的宇宙的初始发布值
    u1 = client.set_port_config("0:0:1", isinput=True)
    u5 = client.set_port_config("0:0:5", isoutput=True)
    u1.last_data[:] = list(range(128))*4
  1. 在一个异步IO上下文中等待协程client.connect(),例如
    async def main() -> None:
        client = ArtNetClient()
        u1 = client.set_port_config("0:0:1", isinput=True)
        u5 = client.set_port_config("0:0:5", isoutput=True)
        u1.last_data[:] = list(range(128))*4
        await client.connect()

    if __name__ == "__main__":
        logging.basicConfig(level=logging.INFO)
        asyncio.run(main())
        asyncio.get_event_loop().run_forever()
  1. 一旦客户端连接,您就可以添加/配置更多端口,读取DMX数据的宇宙,并更改发布值。

  2. client.connect()的返回值是一个asyncio.DatagramTransport。如果您调用此传输上的close(),周期性任务也将被取消。

网络

有三种方式可以配置网络

自动

不带参数创建一个ArtNetClient将在connect()期间执行发现,通过迭代可用接口,检查它们是否有IPv4地址(即AF_INET族)并优先考虑某些属性。具体来说,我们优先选择2.x.x.x子网和255.0.0.0子网掩码,然后是配置的以太网(接口名enp*),然后是配置的WiFi接口(wlp*),最后是任何其他剩余的AF_INET接口。优先顺序由aioartnet.PREFERED_INTERFACES_ORDER设置,如果需要可以对其进行猴子补丁。

通过指定接口手动

将接口名传递给构造函数ArtNetClient(interface="en0"),或者在调用connect()之前设置client.interface="en0"将强制使用特定接口,跳过接口选择逻辑。然后通过ioctl调用查询接口以确定要使用的IP、广播和监听地址。

通过指定单播和广播IP手动

如果客户端手动设置了两个所需的IP地址(我们的,广播),则不会执行发现。这将是最便携的方法,因为我们实际上直接将参数提供给asyncio。

client = ArtNetClient()
client.unicast_ip = '192.168.1.15'
client.broadcast_ip = '192.168.1.255'
await client.connect()

功能

消息 接收 传输
节点和宇宙发现 :heavy_check_mark :heavy_check_mark
15位端口地址 :heavy_check_mark :heavy_check_mark
>4个端口(bindIndex)在同一IP上 :heavy_check_mark :heavy_check_mark
接收器中的merge模式(LTP/HTP) - -
RDM命令用于枚举灯具 - -
时间码 - -
多宇宙同步消息 - -
通过API本地节点重新配置 :heavy_check_mark :heavy_check_mark
远程重新配置(通过ArtAddress等) - -
灯具固件升级消息 未计划 未计划

实现的消息

消息 接收 传输
ArtPoll :heavy_check_mark :heavy_check_mark
ArtPollReply :heavy_check_mark :heavy_check_mark
ArtDMX :heavy_check_mark :heavy_check_mark
ArtIpProg / ArtIpProgReply - -
ArtAddress - -
ArtDataRequest / ArtDataReply - -
ArtDiagData - -
ArtTimeCode - -
ArtCommand - -
ArtTrigger - -
ArtSync - -
RDM ArtTodRequest / ArtTodData / ArtTodControl / ArtRdm / ArtRdmSub - -

Art-Net

本应用程序旨在完全兼容Art-Net设备。我们已经测试了它与

Art-Net logo Art-Net™ 由Artistic Licence Engineering Ltd.设计并版权所有。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包的信息

源分布

aioartnet-0.1.2.tar.gz (23.0 kB 查看哈希值)

上传时间

构建分布

aioartnet-0.1.2-py3-none-any.whl (14.5 kB 查看哈希值)

上传时间 Python 3

由以下提供支持