纯Python asyncio连接器,用于Art-Net DMX宇宙
项目描述
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>]
入门
- 导入库并创建一个
ArtNetClient
from aioartnet import ArtNetClient
client = ArtNetClient()
- 使用
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
- 在一个异步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()
-
一旦客户端连接,您就可以添加/配置更多端口,读取DMX数据的宇宙,并更改发布值。
-
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设备。我们已经测试了它与
- QLC+照明控制器
- Enttec ODE Mk3
- iOS DMX Monitor应用程序
- 许多其他iOS应用程序
Art-Net™ 由Artistic Licence Engineering Ltd.设计并版权所有。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包的信息。
源分布
构建分布
aioartnet-0.1.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ca1c4ea76199f61caaed45fbf34a88151d4e4496c31657d0a32ff431fc63a3f7 |
|
MD5 | 91a27db46906e20bb30483001900f173 |
|
BLAKE2b-256 | a52c70029fadfe4b45a0ad443b1d40879a7dd524e342acded306462d26271c01 |
aioartnet-0.1.2-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3e3e2854319010636e7a3f222f18aa6aa75c6f2d127c646360d420cc5514e3d7 |
|
MD5 | d21796459a4e377b65829ae39411f1af |
|
BLAKE2b-256 | 9ac8084c72a14b1168604bc2dc8b9c6fb371ae7f3c1420256c938d3be7e5bf10 |