Пользовательский редактор рабочего процесса на C # - PullRequest
0 голосов
/ 16 октября 2018

В свободное время я стараюсь сделать свой проект домашней автоматизации «легко» настраиваемым.Так что я могу объяснить своим детям, как все работает.

Текущее состояние проекта: у меня есть устройства (arduino), которые выполняют функцию, например, управление светодиодом или запирание и отпирание дверей.

Эти устройства обмениваются данными через MQTT-брокер с моим настольным клиентом, на котором запущена программа C #.

Каждое устройство имеет уникальный идентификатор (MACAddress) и набор функций: светодиодный индикатор, светодиодный индикатор и т. Д.

Я создаю XML-файл, который состоит из каждого устройства в сети.Выглядеть так:

<?xml version="1.0"?>
<DeviceList>
    <Device>
        <FriendlyName>LockFrontdoor</FriendlyName>
        <Uid>D1-56-D4-93-94-EC</Uid>
        <ControllerType>Doorlock</ControllerType>
        <ControlList>
            <Control>
                <Name>LockOn</Name>
                <Command>/Lock/On</Command>
            </Control>
            <Control>
                <Name>LockOff</Name>
                <Command>/Lock/Off</Command>
            </Control>
            <Control>
                <Name>getLockState</Name>
                <Command>/Lock/getState</Command>
            </Control>
            <Control>
                <Name>getDoorState</Name>
                <Command>/Door/getState</Command>
            </Control>
            <Control>
                <Name>getDeviceState</Name>
                <Command>/getState</Command>
            </Control>
        </ControlList>
        <EventList>
            <Event>
                <Name>Disconnected</Name>
                <Command>/Disconnected</Command>
            </Event>
            <Event>
                <Name>Connected</Name>
                <Command>/Connected</Command>
            </Event>
            <Event>
                <Name>LockStateOn</Name>
                <Command>/Lockstate/On</Command>
            </Event>
            <Event>
                <Name>LockStateOff</Name>
                <Command>/Lockstate/Off</Command>
            </Event>
            <Event>
                <Name>DoorOpen</Name>
                <Command>/Doorstate/Open</Command>
            </Event>
            <Event>
                <Name>DoorClosed</Name>
                <Command>/Doorstate/Closed</Command>
            </Event>
        </EventList>
    </Device>
    <Device>
        <FriendlyName>LightFrontdoor</FriendlyName>
        <Uid>89-C9-7C-D8-B5-34</Uid>
        <ControllerType>Led</ControllerType>
        <ControlList>
            <Control>
                <Name>On</Name>
                <Command>/LED/On</Command>
            </Control>
            <Control>
                <Name>Off</Name>
                <Command>/LED/Off</Command>
            </Control>
            <Control>
                <Name>Blink</Name>
                <Command>/LED/Blink</Command>
            </Control>
            <Control>
                <Name>Color</Name>
                <Command>/LED/Color/1-255,1-255,1-255</Command>
            </Control>
            <Control>
                <Name>Intensity</Name>
                <Command>/LED/Intensity/1-255</Command>
            </Control>
            <Control>
                <Name>getState</Name>
                <Command>/LED/getState</Command>
            </Control>
            <Control>
                <Name>getDeviceState</Name>
                <Command>/getState</Command>
            </Control>
        </ControlList>
        <EventList>
            <Event>
                <Name>Disconnected</Name>
                <Command>/Disconnected</Command>
            </Event>
            <Event>
                <Name>Connected</Name>
                <Command>/Connected</Command>
            </Event>
            <Event>
                <Name>LedStateOn</Name>
                <Command>/LedState/On</Command>
            </Event>
            <Event>
                <Name>LedStateOff</Name>
                <Command>/LedState/Off</Command>
            </Event>
            <Event>
                <Name>LedStateBlink</Name>
                <Command>/LedState/Blink</Command>
            </Event>
        </EventList>
    </Device>
    <Device>
        <FriendlyName>SpeakerFrontDoor</FriendlyName>
        <Uid>F8-87-66-D3-81-E0</Uid>
        <ControllerType>Audio</ControllerType>
        <ControlList>
            <Control>
                <Name>PlaySound1</Name>
                <Command>/Audio/PlaySound1</Command>
            </Control>
            <Control>
                <Name>PlaySound2</Name>
                <Command>/Audio/PlaySound2</Command>
            </Control>
            <Control>
                <Name>getState</Name>
                <Command>/Audio/getState</Command>
            </Control>
            <Control>
                <Name>getDeviceState</Name>
                <Command>/getState</Command>
            </Control>
        </ControlList>
        <EventList>
            <Event>
                <Name>Disconnected</Name>
                <Command>/Disconnected</Command>
            </Event>
            <Event>
                <Name>Connected</Name>
                <Command>/Connected</Command>
            </Event>
            <Event>
                <Name>SoundStatePlaying</Name>
                <Command>/Audio/On</Command>
            </Event>
            <Event>
                <Name>SoundStateNotPlaying</Name>
                <Command>/Audio/Off</Command>
            </Event>
        </EventList>
    </Device>
</DeviceList>
    

Я также создал последовательность parralel (Пример): Диаграмма действий UML для проекта автоматизации

Теперь, что я хочу сделать, это создать редактор, который может импортировать мой XML и где вы можете создавать / редактировать UML и экспортировать этот UML в формат, который я могу импортировать в мой клиент C # для работы с устройствами.

Я знаю, что этовероятно, действительно сложно, но я не уверен, с чего начать.Есть ли программное обеспечение, которое уже может сделать это по нормальной цене?Или есть способ сделать это легко?

Я искал в Google и нашел https://workflowengine.io, который кажется идеальным решением.Однако мне нужно было бы заплатить 5000 долларов, чего я не могу сейчас.Хотя у меня достаточно свободного времени.

Итак, что было бы хорошим подходом для создания этого?Или есть фреймворк или программное обеспечение, которое уже делает это?

...