Multi-controller supervisor library
Модуль для контроля сети H802RA узлов.
Протокол управления - Art-Net (pdf)
Контроллер - H802RA (pdf)
Лента - WS2813 (pdf)
Как это работает
На основе конфига строится экземпляр класса мультивселенная, объединяющего данные всех вселенных в сети, карту пикселей (словарь по глобальному номеру пикселя и его данным) и методы для модификации данных по номеру пикселя и формирования и отправки ArtDMX пакетов.
При изменении значения байт конкретного пикселя, данные по ссылке меняются в глобальной матрице
вселенных.
При публикации данных (метод multiverse.pub()
), данные вселенных преобразуются в ArtDMX пакеты и
отправляются по указанному адресу.
Конфигурация
Конфиг - в формате yaml.
Корневой объект nodes
содержит список узлов, каждый узел описан:
- адресом хоста (куда слать ArtDMX пакет)
- именем
- словарём выходов
- ключ: номер выхода на узле (с нуля)
- значение: строка с указанием диапазонов номеров пикселей
Пиксели нумеруются глобально с нуля.
Пример:
nodes:
# узел "box"
- host: 10.0.0.10 # адрес хоста (IP или DNS имя)
name: box # имя узла
outs: # разметка пикселей по выходам
0: 0-300 # в 0-м выходе - пиксели с 0-го по 300-й (искл.)
1: 300-600 # в 1-м выходе - пиксели с 300-го по 600-й
- host: 10.0.0.11
name: node-1
outs:
0: 901, 1001-1010
1: 600 - 725
# пустые выходы можно пропустить
3: 725- 800,1015 # диапазоны можно разделять запятой, можно указывать одиночные пиксели
- host: 10.0.0.12
name: j-50
outs:
2: 800-850
- host: 10.0.0.13
name: tail
outs:
1: 1016-1028
3: 1062
7: 850-900, 910, 911 # число выходов может быть разным на разныз узлах (тут - 8-портовый узел)
Подробнее - в комментариях к коду.
Тесты
flake8 . --show-source --statistics --max-line-length=127
python -m pytest .
Использование
Библиотека доступна через PyPi
pip install ledmx
конфигурация:
---
nodes:
- host: 10.0.0.10
name: box
outs:
0: 0-300
1: 300-600
скрипт:
# импорт класса мультивселенной
from ledmx.multiverse import Multiverse
# импорт функции парсинга конфига
from ledmx.layout import parse_file
if __name__ == '__main__':
# загружаем конфиг
layout = parse_file('layout.yaml')
# формируем мультивселенную
m_verse = Multiverse(layout)
# задаём значения цвета (GBR) для пикселей по их глобальным id
m_verse[245] = 100, 10, 10
m_verse[308] = 5, 100, 40
# задавать и считывать значения можно диапазонами
m_verse[:] = 10, 10, 10
m_verse[100:200] = 150, 32, 12
m_verse[:105:2] = 0, 20, 10
# формируем из матрицы пакеты и рассылаем их
m_verse.pub()