#iot #scada #api-bindings

rsiot

Метакрейт, импортирующий все другие крейты через флаги feature

74 releases

0.0.82 Jul 8, 2024
0.0.81 Apr 17, 2024
0.0.78 Mar 25, 2024
0.0.64 Feb 29, 2024
0.0.16 Nov 30, 2023

#238 in GUI

MIT/Apache and maybe GPL-3.0-only…

7.5MB
12K SLoC

Contains (Zip file, 3MB) .xdp-..com.vivaldi.Vivaldi.Fs84b5-dWf6a8

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

Документация

Обзор

Описание

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

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:

Dependencies

~5–56MB
~1M SLoC