Перейти к основному содержимому

IoT-коннектор

IoT-коннектор Savitri позволяет устройствам Интернета вещей передавать данные датчиков в блокчейн. Он предоставляет функции управления устройствами, приёма данных, граничной обработки, пакетной оптимизации и корпоративный уровень безопасности.

Архитектура

IoT Devices (sensors, actuators, gateways)


Protocol Handlers (MQTT, CoAP)
│ parse, validate, authenticate

Edge Processing Engine
│ rules engine, anomaly detection, aggregation

Batch Processor
│ compress, aggregate, schedule

Blockchain Interface (savitri_sendRawTransaction)
│ submit batch as IoT TX (0.00005 SAVT fee)

On-chain Oracle Feed

Управление устройствами

Типы устройств

ТипОписаниеПример
SensorИсточник данных только для чтенияДатчик температуры
ActuatorУправляемое устройствоУмный клапан
GatewayГраничная точка агрегацииRaspberry Pi хаб
EdgeNodeБлок локальной обработкиГраничный ML-сервер
MobileМобильное устройствоСмартфон
IndustrialПромышленное оборудованиеПЛК/SCADA

Регистрация устройства

pub struct Device {
pub id: DeviceId,
pub owner: [u8; 32], // owner address
pub public_key: [u8; 32], // device signing key
pub device_type: DeviceType,
pub capabilities: Vec<String>,
pub status: DeviceStatus,
pub metadata: HashMap<String, String>,
}

Устройства регистрируются on-chain с публичным ключом для аутентификации. Группами устройств можно управлять коллективно.

Статус устройства

СтатусОписание
ActiveНормальная работа
InactiveВременно отключено
SuspendedПриостановлено владельцем/управлением
BannedБезвозвратно отозвано

Приём данных

Поддержка протоколов

ПротоколОбработчикСценарий применения
MQTTMQTTHandlerМаломощные датчики, pub/sub
CoAPCoAPHandlerОграниченные устройства, UDP

Оба реализуют трейт ProtocolHandler:

pub trait ProtocolHandler: Send + Sync {
async fn handle_connection(&self, stream: TcpStream) -> Result<()>;
fn parse_data(&self, raw: &[u8]) -> Result<IoTData>;
fn validate_device(&self, device_id: &str, signature: &[u8]) -> Result<bool>;
}

Формат данных IoT

pub struct IoTData {
pub device_id: String,
pub timestamp: u64,
pub data_type: String, // "temperature", "humidity", etc.
pub value: DataValue,
pub unit: String, // "celsius", "percent", etc.
pub quality: f64, // 0.0-1.0 (data quality score)
pub metadata: HashMap<String, String>,
}

pub enum DataValue {
Float(f64),
Integer(i64),
Boolean(bool),
String(String),
Binary(Vec<u8>),
Struct(HashMap<String, DataValue>),
Array(Vec<DataValue>),
}

Граничная обработка

Модуль граничной обработки фильтрует, преобразует и агрегирует данные перед отправкой.

Движок правил

// Example rule: alert if temperature > 40
Rule {
condition: Condition::GT("temperature", 40.0),
action: ProcessingAction::CriticalAlert,
}

// Logical operators
Condition::AND(vec![
Condition::GT("temperature", 35.0),
Condition::LT("humidity", 20.0),
])

Операторы: EQ, NEQ, GT, LT, GTE, LTE, CONTAINS, IN, AND, OR.

Обнаружение аномалий

Модуль граничной обработки выполняет обнаружение аномалий на входящих данных:

  • Статистическое обнаружение выбросов
  • Распознавание паттернов
  • Инференс ML-модели (локальные модели)

Аномалии инициируют автоматическую отправку независимо от расписания пакетной обработки.

Агрегация данных

СтратегияОписание
AverageСреднее значений в окне
SumСумма значений
Min / MaxЭкстремальные значения
MedianМедианное значение
Percentile(p)P-й перцентиль

Пакетная обработка

Отдельные показания датчиков объединяются в пакеты для снижения затрат на транзакции:

pub struct BatchProcessor {
pub batch_size: usize, // max readings per batch
pub max_delay_ms: u64, // max time before forced submit
pub compression: bool, // compress batch payload
pub aggregation: bool, // aggregate before submit
}

Триггеры пакета

ТриггерОписание
Достигнут размерНакоплено batch_size показаний
Максимальная задержкаС первого показания прошло max_delay_ms
Критический приоритетОбнаружена аномалия или критическое оповещение

Пакетирование сокращает количество транзакций в блокчейне до 90% по сравнению с отправкой каждого показания отдельно.

Безопасность

Аутентификация

Три метода аутентификации, которые можно комбинировать:

МетодОписание
СертификатПроверка цепочки сертификатов X.509
ТокенAPI-токен со сроком действия
БиометрияБиометрическая верификация устройства

Шифрование данных

  • Шифрование AES-256 для данных при передаче и хранении
  • Хеширование целостности для обнаружения подделки
  • Проверка отзыва сертификатов

Конфигурация коннектора

pub struct ConnectorConfig {
pub max_requests_per_second: u32,
pub timeout_ms: u64,
pub retry_attempts: u32,
}

Интеграция с блокчейном

Данные IoT отправляются в виде транзакций с тарифом IoT:

let tx = TransactionBuilder::new()
.oracle_call(
"iot_oracle_address",
"submit_sensor_data",
&batch_payload,
)
.nonce(nonce)
.fee(50_000_000_000_000) // 0.00005 SAVT (IoT rate)
.build_and_sign(&device_wallet)?;

Интеграция с потоком оракула

Отправленные данные IoT становятся доступны в виде потоков оракула:

// Request latest sensor reading
let tx = oracle.request_data(
&iot_oracle_address,
"temperature",
b"sensor_001",
).await?;

Метрики коннектора

pub struct ConnectorMetrics {
pub requests_served: u64,
pub errors_count: u64,
pub average_response_time: f64,
}