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