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 элемент имеет следующие поля:
Каждое реле описывается следующими полями:
Группы любви описывают множества реле, которые всегда включаются вместе. Если хотя бы одно реле из группы любви включается, то включаются все реле из этой группы.
Группы ненависти описывают множества реле, в которых одновременно может быть включено не более одного реле.
Если группы любви пересекаются, то они объединяются. Включение любого реле из пересечённых групп включает эти группы целиком.
Конфигурация, в которой два или более реле одновременно входят вместе в одни и те же группы ненависти и группы любви, является ошибочной.