Expand description
Компоненты для построения системы сбора данных Документация
§Зачем это надо
§Обзор
§Компоненты
§Взаимодействие с устройствами нижнего уровня
Взаимодейтсвие с устройствами, поддерживающими протокол 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.
§Интерфейсы пользователя
TODO leptos
§Вспомогательные крейты
Выполнение произвольной логики в “стиле PLC”.
Чтение конфигурации из файла .env
.
Настройка логгирования
§Описание
Компоненты представляют собой асинхронные функции. У всех функций три аргумента:
async fn component<TMessage, TConfig>(
input: Option<tokio::sync::mpsc::Receiver<TMessage>>,
output: Option<tokio::sync::mpsc::Sender<TMessage>>,
config: TConfig,
) -> ()
where
TMessage: IMessage
{}
Сообщения между компонентами передаются через каналы “many producers to a single consumer”
библиотеки tokio
.
Входной или выходной потоки могут быть не заданы, поэтому каналы обернуты в Option.
Структура конфигурации типа TConfig
у каждого компонента своя.
Компоненты ничего не возвращают (точнее, возвращают тип ()
). Если в компоненте возникает
ошибка, логику перезапуска необходимо реализовать внутри данной функции. TODO - пересмотреть,
возможно стоит возвращать Result при критических ошибках.
Сообщения представляют собой тип enum, например:
use rsiot_messages_core::IMessage;
use serde::{Deserialize, Serialize};
[derive(Clone, Debug, Deserialize, Serialize)]
enum Message {
/// Текущее значение температуры
Temperature(f64),
/// Задание уставки
ChangeSetpoint(f64),
}
impl IMessage for Message {}
Трейт IMessage
реализует основные методы - см. документацию по крейту
rsiot-messages-core
Для упрощения компоненты можно создавать и объединять в цепочку компонентов.
TODO - компонент для симуляции
- может генерировать сообщения как на основе входных сообщений
- может генерировать сообщения периодически
§Флаги feature
:
components
— Базовые компонентыenv-vars
— Конфигурирование через переменныеhttp-client
— Компонент http-клиентhttp-client-wasm
— Компонент http-клиент для платформы WASMhttp-server
— Компонент http-серверinfluxdb
— Компонент сохранения в БД InfluxDBleptos
— Компонент для создания интерфейсов на базе Leptosmodbus-client
— Компонент Modbus клиентredis-client
— Компонент клиента Redistimescaledb-storing
— Компонент сохранения в БД TimescaleDBwebsocket-client
— Компонент websocket клиентаwebsocket-client-wasm
— Компонент websocket клиентаwebsocket-server
— Компонент websocket сервераsingle-thread
— Работа в одном потоке, в LocalSet TODO Написать про роутинг сообщений
Modules§
- component_core
components
- env_vars
env-vars
- Реэкспорт необходимых модулей