IoT

πŸ–₯️ Edge Computing untuk IoT: Panduan Lengkap

Panduan lengkap Edge Computing untuk IoT β€” perbandingan edge vs cloud, latency optimization, Fog computing, edge AI, edge gateway, dan arsitektur hybrid

1. Pengenalan Edge Computing

Edge Computing adalah paradigma komputasi yang memproses data sedekat mungkin dengan sumber data (di "edge" / tepi jaringan), bukan mengirim semuanya ke cloud yang jauh. Dalam konteks IoT, edge computing berarti memproses data sensor di perangkat lokal (ESP32, Raspberry Pi, gateway) sebelum β€” atau bahkan tanpa β€” mengirimnya ke cloud.

Edge computing muncul karena keterbatasan model cloud-only: latency tinggi, bandwidth terbatas, biaya transfer data yang besar, dan kebutuhan akan operasi yang berkelanjutan meski koneksi internet terputus.

Mengapa Edge Computing Penting?

AlasanPenjelasanContoh
Low LatencyRespons real-time tanpa round-trip ke cloudAutonomous vehicle, robot industri
Bandwidth SavingsFilter dan kompres data sebelum kirim ke cloudVideo surveillance, sensor array
Offline OperationTetap berfungsi tanpa internetPertambangan, kapal laut, drone
PrivacyData sensitif diproses lokal, tidak ke cloudKesehatan, keamanan wajah
Cost ReductionKurangi biaya transfer data dan compute cloudHigh-frequency sensor data
ReliabilitySistem tetap jalan meski jaringan downSistem keselamatan, alarm kebakaran
Diagram: Evolusi Komputasi IoT
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚           EVOLUSI KOMPUTASI IoT                         β”‚
β”‚                                                         β”‚
β”‚  ERA 1: Cloud-Only (2010-an)                           β”‚
β”‚  Devices ──────────────► Cloud ──────► User             β”‚
β”‚  (Semua data ke cloud)  (Proses)  (Dashboard)           β”‚
β”‚  ❌ Latency tinggi, bandwidth mahal, offline = mati     β”‚
β”‚                                                         β”‚
β”‚  ERA 2: Edge-Cloud Hybrid (2020-an)                     β”‚
β”‚  Devices ──► Edge ──► Cloud ──► User                    β”‚
β”‚             (Proses   (Analytics                        β”‚
β”‚              lokal)    & archive)                        β”‚
β”‚  βœ… Latency rendah, hemat bandwidth, offline-capable    β”‚
β”‚                                                         β”‚
β”‚  ERA 3: Edge-Native (masa depan)                        β”‚
β”‚  Devices ──► Edge AI ──► Cloud (opsional)               β”‚
β”‚             (AI/ML di   (Sync &                          β”‚
β”‚              device)     training)                       β”‚
β”‚  βœ… Real-time AI, minimal bandwidth, autonomous         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2. Edge vs Cloud Computing

Memahami perbedaan mendasar antara edge dan cloud computing membantu Anda menentukan kapan harus memproses data di mana.

Perbandingan Komprehensif

AspekEdge ComputingCloud Computing
LokasiDi dekat device / lokalData center jauh
Latency🟒 < 10msπŸ”΄ 50-200ms+
Bandwidth🟒 Minim (data sudah difilter)πŸ”΄ Tinggi (raw data)
Compute Power🟑 Terbatas (ARM, RISC)🟒 Tak terbatas (GPU/TPU)
Storage🟑 Terbatas (GB)🟒 Tak terbatas (TB/PB)
SkalabilitasπŸ”΄ Terbatas per device🟒 Elastis, auto-scaling
Biaya🟒 Fixed (hardware sekali beli)🟑 Variable (pay-per-use)
Offlineβœ… Tetap berfungsi❌ Tidak bisa
Keamanan Dataβœ… Data tetap lokal🟑 Data di jaringan & cloud
Update/DeployπŸ”΄ Perlu ke device (OTA)🟒 Centralized, mudah
Analytics KompleksπŸ”΄ Terbatas🟒 Big data, ML heavy

Kapan Harus di Edge vs Cloud?

πŸ’‘ Decision Guide
  • Proses di EDGE jika: latency < 100ms diperlukan, bandwidth terbatas, harus offline-capable, data sensitif/privacy
  • Proses di CLOUD jika: butuh compute besar (ML training), analytics lintas device, storage besar, akses dari mana saja
  • Gunakan HYBRID jika: real-time processing di edge + historical analytics di cloud. Ini skenario terbaik untuk mayoritas IoT.

3. Latency dan Responsiveness

Latency adalah waktu yang diperlukan data untuk berpindah dari titik A ke titik B. Dalam IoT, latency menentukan seberapa cepat sistem merespons perubahan di dunia nyata. Edge computing mengurangi latency secara drastis dengan memproses data secara lokal.

Anatomi Latency

Diagram: Latency Breakdown
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              LATENCY BREAKDOWN                          β”‚
β”‚                                                         β”‚
β”‚  CLOUD PROCESSING:                                      β”‚
β”‚  Sensor β†’ ADC(1ms) β†’ WiFi(5ms) β†’ Internet(50ms) β†’      β”‚
β”‚  Cloud Process(20ms) β†’ Response(50ms) β†’ WiFi(5ms) β†’     β”‚
β”‚  Actuator(1ms) = ~132ms total                           β”‚
β”‚                                                         β”‚
β”‚  EDGE PROCESSING:                                       β”‚
β”‚  Sensor β†’ ADC(1ms) β†’ Local Process(2ms) β†’               β”‚
β”‚  Actuator(1ms) = ~4ms total                             β”‚
β”‚                                                         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚  Cloud Path:  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 132ms     β”‚   β”‚
β”‚  β”‚  Edge Path:   β–ˆβ–ˆ 4ms                             β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                         β”‚
β”‚  Edge computing mengurangi latency hingga 30x lipat!    β”‚
β”‚                                                         β”‚
β”‚  LATENCY REQUIREMENTS PER APPLICATION:                  β”‚
β”‚  β”œβ”€ Autonomous vehicle:    < 5ms                        β”‚
β”‚  β”œβ”€ Industrial automation: < 10ms                       β”‚
β”‚  β”œβ”€ AR/VR:                 < 20ms                       β”‚
β”‚  β”œβ”€ Smart home:            < 100ms                      β”‚
β”‚  β”œβ”€ Monitoring dashboard:  < 1000ms                     β”‚
β”‚  └─ Data logging:          < 5000ms (tidak kritis)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Bandwidth Optimization

StrategiDeskripsiPenghematan Bandwidth
Data FilteringKirim hanya data yang berubah signifikan50-90%
AggregationKirim rata-rata per menit, bukan per detik80-99%
Edge AnalyticsKirim insight, bukan raw data90-99%
CompressionKompres data sebelum kirim30-70%
Event-basedKirim hanya saat threshold terlampaui95-99%
Python β€” Edge Data Aggregation
import time
import statistics

class EdgeAggregator:
    """Mengagregasi data sensor di edge sebelum kirim ke cloud."""

    def __init__(self, send_interval=60):
        self.buffer = []
        self.last_send = time.time()
        self.send_interval = send_interval  # detik
        self.last_sent_value = None
        self.change_threshold = 0.5  # Kirim jika berubah > 0.5

    def add_reading(self, sensor_type, value):
        self.buffer.append({
            'type': sensor_type,
            'value': value,
            'ts': time.time()
        })

        # Cek apakah waktunya kirim
        if time.time() - self.last_send >= self.send_interval:
            return self.aggregate_and_send()
        return None

    def aggregate_and_send(self):
        if not self.buffer:
            return None

        # Hitung statistik
        values = [r['value'] for r in self.buffer]
        result = {
            'min': min(values),
            'max': max(values),
            'avg': round(statistics.mean(values), 2),
            'stdev': round(statistics.stdev(values), 2) if len(values) > 1 else 0,
            'count': len(values),
            'duration_sec': self.send_interval
        }

        # Event-based: kirim alert jika anomali
        if result['max'] > 40 or result['min'] < 0:
            result['alert'] = True
            result['alert_type'] = 'THRESHOLD_EXCEEDED'

        self.buffer.clear()
        self.last_send = time.time()

        # Kirim 1 record per menit, bukan 60 record per detik!
        # Penghematan: 60x lipat
        return result

# Penggunaan
agg = EdgeAggregator(send_interval=60)

while True:
    suhu = read_sensor()  # Baca setiap detik
    result = agg.add_reading('suhu', suhu)

    if result:
        # Kirim aggregated data ke cloud
        mqtt_client.publish('cloud/suhu/stats', json.dumps(result))
        # Bukan: mqtt_client.publish('sensor/suhu', str(suhu))

4. Fog Computing

Fog Computing adalah ekensi dari edge computing yang memperkenalkan lapisan komputasi tambahan antara device dan cloud. Istilah "fog" dipopulerkan oleh Cisco pada tahun 2014 sebagai "cloud yang lebih dekat ke tanah".

Edge vs Fog Computing

AspekEdge ComputingFog Computing
LokasiDi device itu sendiriDi gateway / node lokal dalam jaringan
Compute PowerSangat terbatas (MCU)Lebih besar (gateway, server lokal)
SkalaPer devicePer jaringan / area lokal
TopologyFlat (device-centric)Hierarchical (multi-layer)
KonektivitasLangsung ke actuatorKe device di sekitarnya + ke cloud
ContohMCU menjalankan ML inferenceRaspberry Pi gateway di pabrik

Hierarchical Architecture: Device β†’ Edge β†’ Fog β†’ Cloud

Diagram: Fog Computing Hierarchy
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚          FOG COMPUTING HIERARCHY                        β”‚
β”‚                                                         β”‚
β”‚  CLOUD LAYER (Data Center)                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”‚
β”‚  β”‚  Big Data Analytics, ML Training,           β”‚       β”‚
β”‚  β”‚  Global Dashboard, Long-term Storage        β”‚       β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β”‚
β”‚                        β”‚ Internet                       β”‚
β”‚  FOG LAYER (Local Network)                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚       β”‚
β”‚  β”‚  β”‚ Gateway  β”‚  β”‚ Gateway  β”‚  β”‚ Gateway  β”‚  β”‚       β”‚
β”‚  β”‚  β”‚ Gedung 1 β”‚  β”‚ Gedung 2 β”‚  β”‚ Gedung 3 β”‚  β”‚       β”‚
β”‚  β”‚  β”‚ Rasp Pi  β”‚  β”‚ Rasp Pi  β”‚  β”‚ Rasp Pi  β”‚  β”‚       β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜  β”‚       β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”˜       β”‚
β”‚          β”‚ Local WiFi / Ethernet / LoRa                 β”‚
β”‚  EDGE LAYER (Devices)                                   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”       β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”    β”‚       β”‚
β”‚  β”‚  β”‚ ESP32  β”‚    β”‚ ESP32  β”‚    β”‚ ESP32  β”‚    β”‚       β”‚
β”‚  β”‚  β”‚ + ML   β”‚    β”‚ + ML   β”‚    β”‚ + ML   β”‚    β”‚       β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚       β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚       β”‚
β”‚  β”‚  β”‚Sensor  β”‚    β”‚Sensor  β”‚    β”‚Sensor  β”‚    β”‚       β”‚
β”‚  β”‚  β”‚ Array  β”‚    β”‚ Array  β”‚    β”‚ Array  β”‚    β”‚       β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚       β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β”‚
β”‚                                                         β”‚
β”‚  Edge: ML inference, sensor reading, real-time control  β”‚
β”‚  Fog:  Aggregation, local rules, short-term cache       β”‚
β”‚  Cloud: Analytics, ML training, global management       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

5. Arsitektur Edge Computing

Arsitektur edge computing yang baik mendefinisikan dengan jelas apa yang diproses di mana, bagaimana data mengalir, dan bagaimana edge dan cloud berkoordinasi.

Pola Arsitektur Edge

PolaDeskripsiCocok Untuk
Thin EdgeDevice hanya kumpulkan data, semua proses di gateway/cloudSensor sederhana
Thick EdgeDevice melakukan ML inference dan filtering sendiriSmart camera, voice assistant
Store-and-ForwardData disimpan lokal, dikirim ke cloud saat ada koneksiRemote monitoring, offline areas
Edge-FirstKeputusan real-time di edge, analytics di cloudIndustrial automation
CollaborativeMulti-device edge berkolaborasi, cloud sebagai koordinatorSmart city, autonomous fleet
Python β€” Edge Gateway Architecture
import json
import time
import sqlite3
import threading

class EdgeGateway:
    """Edge gateway yang memproses data lokal dan meneruskan ke cloud."""

    def __init__(self):
        self.local_rules = []
        self.cloud_buffer = []
        self.db = sqlite3.connect('edge_data.db')
        self.db.execute('''CREATE TABLE IF NOT EXISTS sensor_data
                          (ts REAL, device TEXT, type TEXT, value REAL)''')
        self.db.execute('''CREATE TABLE IF NOT EXISTS pending_sync
                          (ts REAL, data TEXT, synced INTEGER DEFAULT 0)''')
        self.is_connected = False

    def add_rule(self, rule_fn, action_fn):
        """Tambahkan rule lokal (dieksekusi di edge)."""
        self.local_rules.append({'condition': rule_fn, 'action': action_fn})

    def process_sensor_data(self, device_id, sensor_type, value):
        """Proses data sensor di edge."""
        ts = time.time()

        # 1. Simpan ke database lokal
        self.db.execute(
            'INSERT INTO sensor_data VALUES (?, ?, ?, ?)',
            (ts, device_id, sensor_type, value)
        )

        # 2. Evaluasi rules lokal (real-time, tanpa cloud!)
        for rule in self.local_rules:
            if rule['condition'](device_id, sensor_type, value):
                rule['action'](device_id, sensor_type, value)
                print(f"Rule triggered: {device_id} {sensor_type}={value}")

        # 3. Buffer untuk kirim ke cloud
        record = json.dumps({
            'ts': ts, 'device': device_id,
            'type': sensor_type, 'value': value
        })

        if self.is_connected:
            self._send_to_cloud(record)
        else:
            # Simpan untuk sync nanti (store-and-forward)
            self.db.execute(
                'INSERT INTO pending_sync (ts, data) VALUES (?, ?)',
                (ts, record)
            )

        self.db.commit()

    def _send_to_cloud(self, record):
        """Kirim data ke cloud (MQTT/HTTP)."""
        try:
            mqtt_client.publish('cloud/data', record)
        except:
            # Gagal kirim, simpan untuk nanti
            self.db.execute(
                'INSERT INTO pending_sync (ts, data) VALUES (?, ?)',
                (time.time(), record)
            )

    def sync_pending(self):
        """Sync data yang tertunda saat koneksi pulih."""
        if not self.is_connected:
            return

        cursor = self.db.execute(
            'SELECT rowid, data FROM pending_sync WHERE synced = 0 ORDER BY ts'
        )
        for rowid, data in cursor.fetchall():
            self._send_to_cloud(data)
            self.db.execute(
                'UPDATE pending_sync SET synced = 1 WHERE rowid = ?', (rowid,)
            )
        self.db.commit()
        print("Sync selesai!")

# Setup edge gateway
gateway = EdgeGateway()

# Tambah rules lokal
gateway.add_rule(
    condition=lambda d, t, v: t == 'suhu' and v > 35,
    action=lambda d, t, v: trigger_alarm(d, 'HIGH_TEMP', v)
)
gateway.add_rule(
    condition=lambda d, t, v: t == 'lembab' and v > 80,
    action=lambda d, t, v: trigger_fan(d, True)
)

# Proses data
gateway.process_sensor_data('sensor_001', 'suhu', 36.5)
# β†’ Rule triggered! Alarm tanpa perlu cloud!

6. Edge Hardware

Pemilihan hardware sangat menentukan kemampuan edge computing Anda. Berikut perbandingan berbagai platform yang umum digunakan.

Perbandingan Edge Hardware

PlatformCPURAMML SupportHargaCocok Untuk
ESP32240MHz dual-core520KBTinyML (TFLite Micro)~$5Simple edge rules, sensor fusion
Raspberry Pi 41.5GHz quad-core ARM2-8GBTFLite, ONNX~$35-75Gateway, edge AI, local dashboard
Jetson Nano1.4GHz quad-core ARM + 128-core GPU4GBCUDA, TensorRT~$150Video analytics, complex ML
Google CoralARM + Edge TPU1-4GBEdge TPU (4 TOPS)~$60-150ML inference berkecepatan tinggi
Intel NUCx86 Core i3-i74-32GBOpenVINO~$200-600Industrial edge, heavy compute
BeagleBone1GHz ARM Cortex-A8512MBTFLite (terbatas)~$55Industrial I/O, real-time Linux
πŸ’‘ Panduan Pemilihan Hardware
  • Rules sederhana + sensor β†’ ESP32 (murah, hemat daya, bisa TinyML)
  • Gateway + basic ML β†’ Raspberry Pi 4 (serbaguna, komunitas besar)
  • Video/computer vision β†’ Jetson Nano (GPU CUDA untuk inference)
  • High-perf ML di edge β†’ Google Coral (Edge TPU khusus inference)
  • Industrial compute berat β†’ Intel NUC (x86, container support)

7. Edge AI dan TinyML

Edge AI adalah menjalankan model kecerdasan buatan (AI/ML) langsung di perangkat edge, tanpa mengirim data ke cloud untuk inference. TinyML adalah subset Edge AI yang menjalankan ML di microcontroller ultra-low-power seperti ESP32 dan Arduino.

Mengapa Edge AI?

KeunggulanPenjelasan
Real-timeInference dalam milidetik, tanpa latency jaringan
PrivacyData (gambar, suara) tidak pernah meninggalkan device
BandwidthKirim hanya hasil inference, bukan raw data (gambar/audio)
OfflineAI tetap berfungsi tanpa internet
BiayaTidak perlu GPU cloud untuk setiap inference

TinyML Pipeline

Diagram: TinyML Workflow
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              TinyML PIPELINE                            β”‚
β”‚                                                         β”‚
β”‚  TRAIN (di PC/Cloud):                                   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚Data  │──►│  Train   │──►│ Convert  │──►│ Deploy β”‚  β”‚
β”‚  β”‚Collectβ”‚   β”‚  Model   β”‚   β”‚ TFLite   β”‚   β”‚ to MCU β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”˜   β”‚(TensorFlowβ”‚   β”‚  Micro   β”‚   β”‚        β”‚  β”‚
β”‚             β”‚  PyTorch) β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚             β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                β”‚
β”‚                                                         β”‚
β”‚  RUN (di Microcontroller):                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”              β”‚
β”‚  β”‚ Sensor │──►│ Inference│──►│  Action  β”‚              β”‚
β”‚  β”‚ Input  β”‚   β”‚  (TFLite β”‚   β”‚  Output  β”‚              β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚   Micro) β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β”‚
β”‚               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                              β”‚
β”‚                                                         β”‚
β”‚  Contoh:                                                β”‚
β”‚  β”œβ”€ Audio β†’ Keyword detection ("Hey ESP")               β”‚
β”‚  β”œβ”€ IMU β†’ Activity recognition (jalan, lari, jatuh)     β”‚
β”‚  β”œβ”€ Camera β†’ Object detection (orang, kendaraan)        β”‚
β”‚  └─ Sensor β†’ Anomaly detection (mesin abnormal)         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

TinyML di ESP32

Arduino β€” TinyML ESP32
#include <TensorFlowLite_ESP32.h>
#include "tensorflow/lite/micro/all_ops_resolver.h"
#include "tensorflow/lite/micro/micro_interpreter.h"
#include "tensorflow/lite/schema/schema_generated.h"

// Model yang sudah di-train dan di-convert ke TFLite Micro
#include "model_data.h"  // Hasil export dari TensorFlow

// Arena memory untuk TFLite
constexpr int kTensorArenaSize = 32 * 1024;  // 32KB
uint8_t tensor_arena[kTensorArenaSize];

const tflite::Model* model;
tflite::MicroInterpreter* interpreter;
TfLiteTensor* input;
TfLiteTensor* output;

void setup() {
    Serial.begin(115200);

    // Load model
    model = tflite::GetModel(model_data);
    static tflite::AllOpsResolver resolver;

    static tflite::MicroInterpreter static_interpreter(
        model, resolver, tensor_arena, kTensorArenaSize
    );
    interpreter = &static_interpreter;

    // Allocate tensors
    interpreter->AllocateTensors();

    // Get input/output tensors
    input = interpreter->input(0);
    output = interpreter->output(0);

    Serial.println("TinyML model loaded!");
    Serial.printf("Input size: %d\n", input->bytes);
    Serial.printf("Arena used: %d bytes\n", interpreter->arena_used_bytes());
}

void loop() {
    // Baca sensor (contoh: 3-axis accelerometer)
    float ax = readAccelX();  // -1.0 to 1.0
    float ay = readAccelY();
    float az = readAccelZ();

    // Normalisasi dan isi input tensor
    input->data.f[0] = ax;
    input->data.f[1] = ay;
    input->data.f[2] = az;

    // Jalankan inference
    unsigned long start = micros();
    interpreter->Invoke();
    unsigned long elapsed = micros() - start;

    // Baca hasil
    // Misal: 0=diam, 1=jalan, 2=lari, 3=jatuh
    int predicted_class = -1;
    float max_score = -1;
    for (int i = 0; i < output->bytes / sizeof(float); i++) {
        if (output->data.f[i] > max_score) {
            max_score = output->data.f[i];
            predicted_class = i;
        }
    }

    const char* labels[] = {"Diam", "Jalan", "Lari", "Jatuh"};
    Serial.printf("Activity: %s (%.2f) - Inference: %lu us\n",
                  labels[predicted_class], max_score, elapsed);

    // Edge action: trigger alarm jika "Jatuh"
    if (predicted_class == 3 && max_score > 0.8) {
        Serial.println("⚠️ FALL DETECTED! Sending alert...");
        // Kirim alert ke cloud (bukan raw sensor data!)
        mqtt_publish("alert/fall", "sensor_001");
    }

    delay(100);  // 10 Hz inference rate
}

8. Edge Gateway

Edge Gateway adalah perangkat yang menghubungkan jaringan sensor lokal dengan cloud. Gateway bertindak sebagai translator, aggregator, dan filter antara device resource-constrained dan cloud.

Fungsi Edge Gateway

FungsiPenjelasan
Protocol TranslationKonversi antar protokol: BLE→MQTT, Zigbee→HTTP, Modbus→MQTT
Data AggregationKumpulkan data dari banyak sensor, kirim summary ke cloud
Edge RulesJalankan aturan lokal untuk respons cepat
Local StorageBuffer data saat offline, sync saat online
SecurityFirewall antara jaringan lokal dan internet
Device ManagementOTA update, monitoring, konfigurasi device lokal
Python β€” Raspberry Pi Edge Gateway
import paho.mqtt.client as mqtt
import json, time, sqlite3
from threading import Thread

class IoTGateway:
    def __init__(self):
        # Local broker (ke device lokal)
        self.local = mqtt.Client("gateway-local")
        self.local.connect("localhost", 1883)

        # Cloud broker (ke AWS/Azure)
        self.cloud = mqtt.Client("gateway-cloud")
        self.cloud.tls_set("ca.crt", "client.crt", "client.key")
        self.cloud.connect("aws-iot-endpoint", 8883)

        # Local database
        self.db = sqlite3.connect('gateway.db')
        self.db.execute('''CREATE TABLE IF NOT EXISTS buffer
                          (ts REAL, topic TEXT, data TEXT, sent INT DEFAULT 0)''')

        # Rules engine
        self.rules = [
            {'topic': 'sensor/+/suhu', 'threshold': 35, 'action': 'alarm'},
            {'topic': 'sensor/+/suhu', 'threshold': 0, 'below': True, 'action': 'alarm'}
        ]

    def on_local_message(self, client, userdata, msg):
        """Terima data dari device lokal."""
        data = json.loads(msg.payload.decode())

        # Simpan ke buffer
        self.db.execute('INSERT INTO buffer VALUES (?, ?, ?, 0)',
                       (time.time(), msg.topic, json.dumps(data)))
        self.db.commit()

        # Evaluasi rules lokal
        self.evaluate_rules(msg.topic, data)

        # Agregasi dan kirim ke cloud
        self.forward_to_cloud(msg.topic, data)

    def evaluate_rules(self, topic, data):
        """Evaluasi rules di edge β€” tanpa cloud dependency!"""
        if 'suhu' in data and data['suhu'] > 35:
            # Trigger alarm LOKAL (buzzer, LED, relay)
            self.local.publish('cmd/alarm', json.dumps({
                'device': data.get('device_id'),
                'type': 'HIGH_TEMP',
                'value': data['suhu']
            }))

    def forward_to_cloud(self, topic, data):
        """Teruskan data ke cloud (dengan filter)."""
        cloud_topic = topic.replace('sensor/', 'devices/')
        self.cloud.publish(cloud_topic, json.dumps(data))

    def start(self):
        self.local.on_message = self.on_local_message
        self.local.subscribe("sensor/#")

        Thread(target=self.local.loop_forever).start()
        Thread(target=self.cloud.loop_forever).start()

        # Periodic sync
        while True:
            self.sync_buffered()
            time.sleep(60)

gateway = IoTGateway()
gateway.start()

9. Arsitektur Hybrid Edge-Cloud

Arsitektur hybrid menggabungkan keunggulan edge (low latency, offline) dan cloud (compute besar, global access) dalam satu sistem yang koheren.

Pembagian Kerja Edge vs Cloud

TugasDi EdgeDi Cloud
Data Collectionβœ… Sensor reading❌ (via edge)
Preprocessingβœ… Filter, normalize, validate❌
Real-time Rulesβœ… Threshold, interlock❌
ML Inferenceβœ… Simple models (TFLite)βœ… Complex models (GPU)
ML Training❌ (resource terbatas)βœ… (GPU/TPU cluster)
Historical Analytics❌ (storage terbatas)βœ… (data warehouse)
Dashboard Global❌ (lokal saja)βœ… (akses dari mana saja)
Alert & Notificationβœ… Alarm lokal (buzzer)βœ… Email, SMS, push
OTA Updatesβœ… Terima updateβœ… Push update
⚠️ Hindari Anti-Pattern
  • Cloud-only untuk real-time control β€” Latency tinggi, single point of failure
  • Edge-only untuk analytics β€” Resource terbatas, tidak scalable
  • Tanpa offline handling β€” Sistem mati saat internet putus
  • Sinkronisasi tanpa conflict resolution β€” Data inconsistency

10. Use Cases

1. Predictive Maintenance di Pabrik

Diagram β€” Predictive Maintenance
# EDGE: ESP32 dengan accelerometer pada motor industri
# - Baca getaran 1000 Hz (vibration analysis)
# - Jalankan FFT (Fast Fourier Transform) di edge
# - Jalankan anomaly detection model (TFLite)
# - Jika anomaly terdeteksi β†’ alert lokal + kirim ke cloud
#
# CLOUD: AWS/GCP
# - Terima anomaly events (bukan raw vibration data!)
# - Dashboard maintenance untuk seluruh pabrik
# - Train ulang model berdasarkan feedback teknisi
# - Push model baru ke edge device (OTA)
#
# PENGHEMATAN BANDWIDTH:
# Raw data: 1000 samples/sec Γ— 4 bytes = 4 KB/s per device
# Dengan 100 devices = 400 KB/s = 34 GB/hari!
# Edge analytics: ~1 event/menit Γ— 200 bytes = 12 KB/jam
# Penghematan: 99.97%!

2. Smart Agriculture

Diagram β€” Smart Agriculture
# EDGE (per lahan):
# - Raspberry Pi Gateway + multiple ESP32 sensors
# - Soil moisture, temperature, humidity, light, pH
# - Edge rules: if soil_moisture < 30% β†’ activate irrigation
# - Edge rules: if temp > 40 β†’ activate shade/sprinkler
# - Data aggregation: kirim rata-rata per jam ke cloud
#
# CLOUD:
# - Analytics musiman (trend analysis)
# - Rekomendasi tanam berdasarkan historical data
# - Integrasi cuaca (weather API)
# - Dashboard petani via mobile app
#
# MANFAAT:
# - Respons irigasi < 1 detik (edge rules)
# - Tetap berfungsi saat internet mati (offline)
# - Hemat bandwidth (summary per jam)
# - Data historis untuk optimasi jangka panjang

11. Best Practices

AspekBest PracticeHindari
Data FlowFilter dan agregasi di edge, kirim summary ke cloudKirim semua raw data ke cloud
Offline HandlingStore-and-forward, buffer lokalSistem mati tanpa internet
SecurityEnkripsi data di edge, TLS ke cloudData plaintext di jaringan lokal
UpdatesOTA firmware + model updateManual flash per device
MonitoringDevice health heartbeat ke cloudBlind spot tanpa monitoring
RedundancyFailover ke cloud jika edge matiSingle point of failure
Resource MgmtMonitor RAM, CPU, storage di edgeOver-provisioning tanpa monitoring

12. Quiz: Uji Pemahamanmu!

Setelah membaca tutorial di atas, jawablah 5 pertanyaan berikut untuk menguji pemahamanmu tentang Edge Computing:

Pertanyaan 1: Apa keuntungan utama edge computing dibanding cloud-only?

a) Kapasitas storage lebih besar
b) Latency lebih rendah dan bisa beroperasi offline
c) Lebih murah untuk ML training
d) Tidak perlu hardware tambahan

Pertanyaan 2: Apa perbedaan antara Edge Computing dan Fog Computing?

a) Tidak ada perbedaan, hanya istilah berbeda
b) Edge di device, Fog di gateway/node lokal dalam jaringan
c) Edge lebih cepat dari Fog
d) Fog hanya untuk industri, Edge untuk konsumen

Pertanyaan 3: Platform mana yang paling cocok untuk video analytics di edge?

a) ESP32
b) Arduino Uno
c) Jetson Nano
d) Raspberry Pi Pico

Pertanyaan 4: Apa yang dimaksud dengan "store-and-forward" dalam edge computing?

a) Menyimpan data di cloud, forward ke device
b) Menyimpan data di edge saat offline, kirim ke cloud saat koneksi pulih
c) Menghapus data lama, simpan data baru
d) Mengkompres data sebelum kirim

Pertanyaan 5: Mengapa TinyML penting untuk IoT?

a) Karena microcontroller punya GPU yang kuat
b) Karena memungkinkan AI inference di device ultra-low-power tanpa cloud
c) Karena menggantikan kebutuhan sensor
d) Karena lebih akurat dari cloud ML
πŸ” Zoom
100%
🎨 Tema