#iot #scada #api-bindings

rsiot-influxdb

Компонент для сохранения данных в БД InfluxDB

25 releases

0.0.71 Mar 7, 2024
0.0.70 Mar 6, 2024
0.0.64 Feb 29, 2024
0.0.43 Jan 30, 2024

#910 in GUI

Download history 1/week @ 2024-01-26 22/week @ 2024-02-02 307/week @ 2024-02-09 361/week @ 2024-02-16 400/week @ 2024-02-23 1079/week @ 2024-03-01 180/week @ 2024-03-08 40/week @ 2024-03-15 1/week @ 2024-03-22 21/week @ 2024-03-29

69 downloads per month

MIT/Apache

86KB
1.5K SLoC

Компоненты для построения системы сбора и обработки данных

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

Поддерживаемые архитектуры (подробнее):

  • x86_64-unknown-linux-gnu - 64-bit Linux - использование в бекенд (target_arch = "x86_64")
  • aarch64-unknown-linux-gnu - ARM64 Linux - использование в бекенд (target_arch = "aarch64")
  • wasm32-unknown-unknown - WebAssembly - для создания веб-интерфейсов (target_arch = "wasm32")
  • riscv32imc-esp-espidf - RISC-V ESP-IDF - микроконтроллеры ESP32 на базе процессора RISC-V (target_arch = "riscv32")

Зачем это надо

Обзор

Компоненты

Взаимодействие с устройствами нижнего уровня

modbus-client

Взаимодейтсвие с устройствами, поддерживающими протокол Modbus TCP сервер / Modbus RTU slave.

http-client

Взаимодействие с устройствами, имеющими HTTP API.

websocket-client

Взаимодействие с устройствами, поддерживющими функциональность Websocket сервера.

TODO opcua-client

Взаимодействие с контроллерами, имеющими функциональность OPC UA сервера.

TODO s7-client

Взаимодействие с контроллерами Siemens по протоколу S7.

esp

Компоненты для взаимодействия с HAL (hardware access level) микроконтроллера ESP32.

Взаимодействие с системами верхнего уровня

http-server

Поддержка HTTP API, через который внешние клиенты могут получать и вводить данные.

websocket-server

Поддержка Websocket сервера, к которому могут подключаться внешние клиенты.

TODO telegram

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

redis-client

Подписка и публикация сообщения в Redis.

TODO mqtt

Сохранение данных в БД

timescaledb-storing

Сохрание сообщений в виде временных рядов в TimescaleDB.

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

leptos

Веб-интерфейс. Используется фреймворк leptos.

Вспомогательные крейты

plc

Выполнение произвольной логики в "стиле PLC".

env-vars

Чтение конфигурации из файла .env.

logging

Настройка логгирования

Описание

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

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

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

TODO - компонент для симуляции

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

Флаги feature:

TODO Написать про роутинг сообщений

Dependencies

~8–22MB
~315K SLoC