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 | Безвозвратно отозвано |
Приём данных
Поддержка протоколов
| Протокол | Обработчик | Сценарий применения |
|---|---|---|
| MQTT | MQTTHandler | Маломощные датчики, pub/sub |
| CoAP | CoAPHandler | Ограниченные устройства, 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,
}