Crate rsiot

Source
Expand description

Компоненты для построения системы сбора, обработки и визуализации данных

Документация по платформам:

§Обзор

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

Клиентское подключение:

  • cmp_http_client_wasm
  • cmp_http_client
  • cmp_modbus_client
  • cmp_websocket_client_wasm
  • cmp_websocket_client

Сервера:

  • cmp_http_server_esp
  • cmp_http_server
  • cmp_websocket_server

Брокеры сообщений:

  • cmp_esp_mqtt_client
  • cmp_mqtt_client
  • cmp_redis_client

Интерфейс пользователя:

  • cmp_leptos
  • cmp_slint

Авторизация:

  • cmp_auth

Сохранение данных:

  • cmp_esp_nvs
  • cmp_influxdb
  • cmp_surrealdb
  • cmp_timescaledb
  • cmp_webstorage

Взаимодействие с аппаратной частью:

  • cmp_esp_adc
  • cmp_esp_gpio
  • cmp_esp_i2c_master
  • cmp_esp_i2c_slave
  • cmp_esp_led
  • cmp_esp_mqtt_client
  • cmp_esp_spi_master
  • cmp_esp_wifi
  • cmp_raspberrypi_gpio

Логика исполнения

  • cmp_plc

Систеная информация

  • cmp_system_info

Служебные компоненты:

  • cmp_add_input_stream
  • cmp_add_output_stream
  • cmp_derive
  • cmp_external_fn_process
  • cmp_inject_periodic
  • cmp_logger

<sodipodi:namedview id=“namedview1” pagecolor=“#ffffff” bordercolor=“#000000” borderopacity=“0.25” inkscape:showpageshadow=“2” inkscape:pageopacity=“0.0” inkscape:pagecheckerboard=“0” inkscape:deskcolor=“#d1d1d1” inkscape:zoom=“0.69842878” inkscape:cx=“411.63825” inkscape:cy=“481.07983” inkscape:window-width=“2560” inkscape:window-height=“988” inkscape:window-x=“0” inkscape:window-y=“0” inkscape:window-maximized=“1” inkscape:current-layer=“g1”> <inkscape:page x=“0” y=“0” inkscape:label=“1” id=“page1” width=“793.70087” height=“1122.5197” margin=“0” bleed=“0” /> </sodipodi:namedview>

§Описание

Компоненты представляют собой асинхронные функции. У всех функций три аргумента:

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::eav::EavModel;
use rsiot_messages_core::IMessage;
use serde::{Deserialize, Serialize};

[derive(Clone, Debug, Deserialize, Serialize)]
enum Message {
    /// Текущее значение температуры
    Temperature(f64),
    /// Задание уставки
    ChangeSetpoint(f64),
}

impl IMessage for Message {
    fn into_eav(self) -> Vec<EavModel> {
        vec![]
    }}

Трейт IMessage реализует основные методы - см. документацию по крейту rsiot-messages-core

Для упрощения компоненты можно создавать и объединять в цепочку компонентов.

  • может генерировать сообщения как на основе входных сообщений
  • может генерировать сообщения периодически

§Флаги feature:

  • env_vars — Конфигурирование через переменные
  • executor — Базовые компоненты
  • logging — Настройка логгирования сообщений
  • single-thread — Работа в однопоточном режиме
  • cmp_auth — Компонент аутентификации
  • cmp_esp — Компоненты для работы с микроконтроллером ESP
  • cmp_http_client — Компонент http-клиент
  • cmp_http_client_wasm — Компонент http-клиент для платформы WASM
  • cmp_http_server — Компонент http-сервер
  • cmp_influxdb — Компонент сохранения в БД InfluxDB
  • cmp_filesystem — Комонент сохранения данных в файловой системе
  • cmp_leptos — Компонент для создания интерфейсов на базе Leptos
  • cmp_linux_spi_master — Комонент для коммуникации через порт SPI
  • cmp_linux_uart_master — Комонент для коммуникации через порт UART
  • cmp_modbus_client — Компонент Modbus клиент
  • cmp_mqtt_client — Комонент клиента MQTT
  • cmp_os_process — Выполнение процесса ОС
  • cmp_plc — Компонент ПЛК
  • cmp_raspberrypi — Работа с периферией Raspberry Pi
  • cmp_redis_client — Компонент клиента Redis
  • cmp_slint — Компонент пользовательского интерфейса, реализованного с помощью библиотеки Slint
  • cmp_surrealdb — Компонент доступа к БД SurrealDB
  • cmp_system_info — Компонент получает системную информацию
  • cmp_telegram — Компонент бота telegram
  • cmp_timescaledb — Компонент сохранения в БД TimescaleDB
  • cmp_websocket_client — Компонент websocket клиента
  • cmp_websocket_client_wasm — Компонент websocket клиента для платформы WASM
  • cmp_websocket_server — Компонент websocket сервера
  • cmp_webstorage — Хранение и загрузка сообщений используя Web Storage API браузера
  • rustdoc — Компиляция документации TODO - какая-то проблема в tokio

Modules§

  • Компоненты
  • Структуры для конфигурации компонентов.
  • Дополнительная документация
  • Драйверы для протокола I2C
  • Загрузка переменных среды из ОС и из файла .env
  • Исполнитель - структура для запуска компонентов
  • Настройки логгирования для разных платформ.
  • Представление сообщений в системе.
  • Утилиты для сериализации / десериализации