ArtRelay используется для управления реле при помощи протокола Art-Net. Приложение написано на Python и работает под ОС Linux на Raspberry Pi.
ArtRelay реализует разрешение конфликтов между реле. Например, в конфигурации можно запретить совместное включение двух реле (hate), и тогда одновременно можно будет включить только одно из них. Также допускается указать, какие реле не могут быть включены друг без друга (love).
Для конфигурации используется файл config.json, находящийся в той же директории, что и main.py
Приложение автоматически сгенерирует конфигурацию по умолчанию при загрузке, если файла config.json не существует. Если файл содержит ошибки, в том числе ошибки в связях реле (например, реле, которые друг друга ненавидят, описываются в том числе как любящие друг друга), то приложение будет завершено с ошибкой, но файл изменён не будет. Для перезагрузки конфигурации приложение нужно перезапустить. Пример файла config.json:
{ "host": "0.0.0.0", "port": 6454, "universe": 0, "subnet": 0, "relays": [ { "pin": 37, "inverse": 1, "debounce": 0.2, "threshold": 127, "channel": 0 }, { "pin": 38, "inverse": 1, "debounce": 0.2, "threshold": 127, "channel": 0 }, { "pin": 40, "inverse": 1, "debounce": 0.2, "threshold": 127, "channel": 0 } ], "love": [ [38, 40] ], "hate": [ [37, 38] ] }
Везде, где нужно сослаться на реле, для ссылки используется номер пина, который управляет этим реле. Это касается hate и love (см. далее).
Корневой JSON элемент имеет следующие поля:
Каждое реле описывается следующими полями:
Группы любви описывают множества реле, которые всегда включаются вместе. Если хотя бы одно реле из группы любви включается, то включаются все реле из этой группы.
Группы ненависти описывают множества реле, в которых одновременно может быть включено не более одного реле.
Если группы любви пересекаются, то они объединяются. Включение любого реле из пересечённых групп включает эти группы целиком.
Конфигурация, в которой два или более реле одновременно входят вместе в одни и те же группы ненависти и группы любви, является ошибочной.