메인 콘텐츠로 건너뛰기

IoT 커넥터

Savitri IoT 커넥터는 사물인터넷(IoT) 기기가 센서 데이터를 온체인으로 전송할 수 있게 합니다. 기기 관리, 데이터 수집, 엣지 처리, 배치 최적화, 엔터프라이즈급 보안을 제공합니다.

아키텍처

IoT 기기 (센서, 액추에이터, 게이트웨이)


프로토콜 핸들러 (MQTT, CoAP)
│ 파싱, 검증, 인증

엣지 처리 엔진
│ 규칙 엔진, 이상 감지, 집계

배치 프로세서
│ 압축, 집계, 스케줄링

블록체인 인터페이스 (savitri_sendRawTransaction)
│ IoT TX로 배치 전송 (수수료 0.00005 SAVT)

온체인 오라클 피드

기기 관리

기기 유형

유형설명예시
Sensor읽기 전용 데이터 생산자온도 센서
Actuator제어 가능한 기기스마트 밸브
Gateway엣지 집계 포인트Raspberry Pi 허브
EdgeNode로컬 처리 장치엣지 ML 서버
Mobile모바일 기기스마트폰
Industrial산업용 장비PLC/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>,
}

기기는 인증을 위한 공개 키와 함께 온체인에 등록됩니다. 기기 그룹은 집합적으로 관리될 수 있습니다.

기기 상태

상태설명
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>),
}

엣지 처리

엣지 처리 엔진은 전송 전에 데이터를 필터링, 변환, 집계합니다.

규칙 엔진

// 규칙 예시: 온도 > 40이면 경보
Rule {
condition: Condition::GT("temperature", 40.0),
action: ProcessingAction::CriticalAlert,
}

// 논리 연산자
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% 줄입니다.

보안

인증

조합 가능한 세 가지 인증 방법:

방법설명
CertificateX.509 인증서 체인 검증
Token만료 기능이 있는 API 토큰
Biometric기기 생체인식 검증

데이터 암호화

  • 전송 중 및 저장 중 데이터를 위한 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 데이터는 오라클 피드로 사용 가능해집니다:

// 최신 센서 측정값 요청
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,
}