Компоненты для построения системы сбора и обработки данных
Поддерживаемые архитектуры (подробнее):
- x86_64-unknown-linux-gnu - 64-bit Linux - использование в бекенд (target_arch = "x86_64")
- aarch64-unknown-linux-gnu - ARM64 Linux - использование в бекенд (target_arch = "aarch64")
- wasm32-unknown-unknown - WebAssembly - для создания веб-интерфейсов (target_arch = "wasm32")
- riscv32imc-esp-espidf - RISC-V ESP-IDF - микроконтроллеры ESP32 на базе процессора RISC-V (target_arch = "riscv32")
Зачем это надо
Обзор
Компоненты
Взаимодействие с устройствами нижнего уровня
Взаимодейтсвие с устройствами, поддерживающими протокол Modbus TCP сервер / Modbus RTU slave.
Взаимодействие с устройствами, имеющими HTTP API.
Взаимодействие с устройствами, поддерживющими функциональность Websocket сервера.
TODO opcua-client
Взаимодействие с контроллерами, имеющими функциональность OPC UA сервера.
TODO s7-client
Взаимодействие с контроллерами Siemens по протоколу S7.
Компоненты для взаимодействия с HAL (hardware access level) микроконтроллера ESP32.
Взаимодействие с системами верхнего уровня
Поддержка HTTP API, через который внешние клиенты могут получать и вводить данные.
Поддержка Websocket сервера, к которому могут подключаться внешние клиенты.
TODO telegram
Брокеры сообщений
Подписка и публикация сообщения в Redis.
TODO mqtt
Сохранение данных в БД
Сохрание сообщений в виде временных рядов в TimescaleDB.
Интерфейсы пользователя
Веб-интерфейс. Используется фреймворк leptos.
Вспомогательные крейты
Выполнение произвольной логики в "стиле PLC".
Чтение конфигурации из файла .env
.
Настройка логгирования
Описание
Компоненты представляют собой асинхронные функции. У всех функций три аргумента:
async
Сообщения между компонентами передаются через каналы "many producers to a single consumer"
библиотеки tokio
.
Входной или выходной потоки могут быть не заданы, поэтому каналы обернуты в Option.
Структура конфигурации типа TConfig
у каждого компонента своя.
Компоненты ничего не возвращают (точнее, возвращают тип ()
). Если в компоненте возникает
ошибка, логику перезапуска необходимо реализовать внутри данной функции. TODO - пересмотреть,
возможно стоит возвращать Result при критических ошибках.
Сообщения представляют собой тип enum, например:
use EavModel;
use IMessage;
use ;
Трейт IMessage
реализует основные методы - см. документацию по крейту
rsiot-messages-core
Для упрощения компоненты можно создавать и объединять в цепочку компонентов.
TODO - компонент для симуляции
- может генерировать сообщения как на основе входных сообщений
- может генерировать сообщения периодически
Флаги feature
:
TODO Написать про роутинг сообщений