rsiot/lib.rs
1//! Компоненты для построения системы сбора, обработки и визуализации данных
2//!
3//! Документация по платформам:
4//!
5//! - [x86_64-unknown-linux-gnu](../../x86_64-unknown-linux-gnu/rsiot/index.html)
6//! - [aarch64-linux-android](../../aarch64-linux-android/rsiot/index.html)
7//! - [aarch64-unknown-linux-gnu](../../aarch64-unknown-linux-gnu/rsiot/index.html)
8//! - [riscv32imc-esp-espidf](../../riscv32imc-esp-espidf/rsiot/index.html)
9//! - [wasm32-unknown-unknown](../../wasm32-unknown-unknown/rsiot/index.html)
10//!
11//! ## Обзор
12//!
13//! Набор компонентов для создания системы управления и диспетчиризации.
14//!
15//! Клиентское подключение:
16//!
17//! - cmp_http_client_wasm
18//! - cmp_http_client
19//! - cmp_modbus_client
20//! - cmp_websocket_client_wasm
21//! - cmp_websocket_client
22//!
23//! Сервера:
24//!
25//! - cmp_http_server_esp
26//! - cmp_http_server
27//! - cmp_websocket_server
28//!
29//! Брокеры сообщений:
30//!
31//! - cmp_esp_mqtt_client
32//! - cmp_mqtt_client
33//! - cmp_redis_client
34//!
35//! Интерфейс пользователя:
36//!
37//! - cmp_leptos
38//! - cmp_slint
39//!
40//! Авторизация:
41//!
42//! - cmp_auth
43//!
44//! Сохранение данных:
45//!
46//! - cmp_esp_nvs
47//! - cmp_influxdb
48//! - cmp_surrealdb
49//! - cmp_timescaledb
50//! - cmp_webstorage
51//!
52//! Взаимодействие с аппаратной частью:
53//!
54//! - cmp_esp_adc
55//! - cmp_esp_gpio
56//! - cmp_esp_i2c_master
57//! - cmp_esp_i2c_slave
58//! - cmp_esp_led
59//! - cmp_esp_mqtt_client
60//! - cmp_esp_spi_master
61//! - cmp_esp_wifi
62//! - cmp_raspberrypi_gpio
63//!
64//! Логика исполнения
65//!
66//! - cmp_plc
67//!
68//! Систеная информация
69//!
70//! - cmp_system_info
71//!
72//! Служебные компоненты:
73//!
74//! - cmp_add_input_stream
75//! - cmp_add_output_stream
76//! - cmp_derive
77//! - cmp_external_fn_process
78//! - cmp_inject_periodic
79//! - cmp_logger
80//!
81#![doc = include_str!("../doc/Новая концепция-2024-01-03-10-46.svg")]
82//! 
83//!
84//!
85//! ## Описание
86//!
87//! **Компоненты** представляют собой асинхронные функции. У всех функций три аргумента:
88//!
89//! ```rust
90//! # use tokio;
91//! # use rsiot_messages_core::IMessage;
92//! async fn component<TMessage, TConfig>(
93//! input: Option<tokio::sync::mpsc::Receiver<TMessage>>,
94//! output: Option<tokio::sync::mpsc::Sender<TMessage>>,
95//! config: TConfig,
96//! ) -> ()
97//! where
98//! TMessage: IMessage
99//! {}
100//! ```
101//!
102//! Сообщения между компонентами передаются через каналы "many producers to a single consumer"
103//! библиотеки `tokio`.
104//!
105//! Входной или выходной потоки могут быть не заданы, поэтому каналы обернуты в Option.
106//!
107//! Структура конфигурации типа `TConfig` у каждого компонента своя.
108//!
109//! Компоненты ничего не возвращают (точнее, возвращают тип `()`). Если в компоненте возникает
110//! ошибка, логику перезапуска необходимо реализовать внутри данной функции. TODO - пересмотреть,
111//! возможно стоит возвращать Result при критических ошибках.
112//!
113//! **Сообщения** представляют собой тип enum, например:
114//!
115//! ```rust
116//! use rsiot_messages_core::eav::EavModel;
117//! use rsiot_messages_core::IMessage;
118//! use serde::{Deserialize, Serialize};
119//!
120//! [derive(Clone, Debug, Deserialize, Serialize)]
121//! enum Message {
122//! /// Текущее значение температуры
123//! Temperature(f64),
124//! /// Задание уставки
125//! ChangeSetpoint(f64),
126//! }
127//!
128//! impl IMessage for Message {
129//! fn into_eav(self) -> Vec<EavModel> {
130//! vec![]
131//! }}
132//! ```
133//!
134//! Трейт `IMessage` реализует основные методы - см. документацию по крейту
135//! [rsiot-messages-core](https://docs.rs/rsiot-messages-core/latest)
136//!
137//! Для упрощения компоненты можно создавать и объединять в **цепочку компонентов**.
138//!
139//!
140//! - может генерировать сообщения как на основе входных сообщений
141//! - может генерировать сообщения периодически
142//!
143//! ## Флаги `feature`:
144#![doc = document_features::document_features!()]
145#![cfg_attr(docsrs, feature(doc_auto_cfg))]
146#![warn(rustdoc::bare_urls)]
147#![warn(missing_docs)]
148
149pub mod components_config;
150pub mod message;
151
152#[cfg(feature = "executor")]
153pub mod components;
154
155#[cfg(any(feature = "cmp_esp", feature = "cmp_raspberrypi"))]
156pub mod drivers_i2c;
157
158#[cfg(feature = "env_vars")]
159pub mod env_vars;
160
161#[cfg(feature = "executor")]
162pub mod executor;
163
164#[cfg(feature = "logging")]
165pub mod logging;
166
167#[cfg(feature = "rustdoc")]
168pub mod doc;
169
170pub mod serde_utils;
171
172mod utils;