#iot #scada #api-bindings

rsiot

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

73 releases

new 0.0.81 Apr 17, 2024
0.0.80 Apr 12, 2024
0.0.78 Mar 25, 2024
0.0.64 Feb 29, 2024
0.0.16 Nov 30, 2023

#150 in GUI

Download history 30/week @ 2024-01-01 61/week @ 2024-01-08 9/week @ 2024-01-15 24/week @ 2024-01-22 10/week @ 2024-01-29 34/week @ 2024-02-05 592/week @ 2024-02-12 373/week @ 2024-02-19 501/week @ 2024-02-26 1699/week @ 2024-03-04 802/week @ 2024-03-11 254/week @ 2024-03-18 140/week @ 2024-03-25 165/week @ 2024-04-01 137/week @ 2024-04-08 150/week @ 2024-04-15

595 downloads per month

MIT/Apache and maybe GPL-3.0-only…

380KB
7K SLoC

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

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

Обзор

Описание

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

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

~4–56MB
~1M SLoC