Побитовая обработка состояний входов

Evgeny6 years ago

Здравствуйте, Антон!
Во-первых хотел поблагодарить вас за великолепный продукт и во-вторых принести свои извинения за вопрос на русском языке.

Суть вопроса такова: устройство отдает в атрибуте "input" состояние своих логических входов. Входы 3, 4 и 5 принимают состояние логической единицы не одновременно, но в то же время могут находиться в таком состоянии в любой комбинации.
Я пытаюсь обрабатывать их состояние с помощью трех вычисляемых атрибутов примерно так:

Event
input ? ((input & 4) != 0) ? "Требование остановки" : null
String
Event
input ? ((input & 8) != 0) ? "Передняя дверь открыта" : null
String
Event
input ? ((input & 16) != 0) ? "Задняя дверь открыта" : null
String

Однако такой подход работает только в том случае, если входы принимают состояние логической единицы эксклюзивно.
В противном же случае, если, к примеру, приходит позиция с битом 4 в состоянии логической единицы, а следом приходит позиция с состоянием логической единицы для битов 4 и 5, то атрибут event позиции как был в состоянии "Передняя дверь открыта", так и останется. Определенную сложность также привносит неопределённость последовательности обработки вычисляемых атрибутов (кажется, я об этом читал где-то в документации).

Собственно, хотелось бы попросить подсказать верное решение данной задачи в рамках архитектуры проекта. Более того, в идеале хотелось бы регистрировать не только "передний фронт", но и обратную смену состояния на входах. Но тут, как я понимаю, без введения чего-то навроде "Custom events" не обойтись.

Anton Tananaev6 years ago

Думаю что вычисляемых атрибутов будет не достаточно чтобы реализовать то что вы хотите. Надо код править.

Evgeny6 years ago

Что же. Благодарю за ответ. Ушел курить код...
И еще один вопрос вдогонку. В документации видел такой график:

Здесь по оси X фигурирует напряжение на батарее, а не скорость как в стандартном варианте. Я так понимаю есть возможность строить графики по произвольным параметрам?

P.S.
Если кто-то будет пробовать использовать код для вычисляемых атрибутов выше, то не стоит этого делать. В нем ошибка ибо писал по памяти. Должно быть как-то так:

input ? (((input & 4) != 0) ? "Требование остановки" : null) : null
Evgeny6 years ago

Упс. Ну и тупой же я вопрос задал.
Диалог конфигурации меняется для каждого типа отчета...
Прошу прощения)