Skip to main content

rsiot/
lib.rs

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