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 | 영구적으로 폐지됨 |
데이터 수집
프로토콜 지원
| 프로토콜 | 핸들러 | 사용 사례 |
|---|---|---|
| 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>),
}
엣지 처리
엣지 처리 엔진은 전송 전에 데이터를 필터링, 변환, 집계합니다.
규칙 엔진
// 규칙 예시: 온도 > 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% 줄입니다.
보안
인증
조합 가능한 세 가지 인증 방법:
| 방법 | 설명 |
|---|---|
| Certificate | X.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,
}