☀️Siang
IoT

☁️ IoT Cloud Platform: Panduan Lengkap

Panduan lengkap IoT Cloud Platform — AWS IoT Core, Azure IoT Hub, Google Cloud IoT, MQTT bridge, device management, dan integrasi cloud untuk sistem IoT skala enterprise

Artikel: Iot Cloud Platform Artikel: Iot Cloud Platform

1. Pengenalan IoT Cloud Platform

IoT Cloud Platform adalah layanan cloud yang menyediakan infrastruktur lengkap untuk menghubungkan, mengelola, dan memproses data dari jutaan perangkat IoT. Platform ini menangani kompleksitas di balik layar seperti keamanan, skalabilitas, penyimpanan data, dan analytics sehingga developer bisa fokus pada logika bisnis.

Tanpa platform cloud, Anda harus membangun dan mengelola server MQTT sendiri, database untuk menyimpan data sensor, API untuk komunikasi, dan infrastruktur keamanan — semuanya dari nol. IoT Cloud Platform menyediakan semua ini sebagai layanan terkelola (managed service).

Komponen Utama IoT Cloud

KomponenFungsiContoh Layanan
Device GatewayTitik masuk komunikasi device ke cloudMQTT broker, HTTP endpoint
Device RegistryDatabase identitas perangkatThing Registry, Device Twin
Message BrokerRouting pesan antara device dan layananIoT Core MQTT, IoT Hub
Rules EngineFilter dan transform data secara real-timeIoT Rules, Stream Analytics
Data StoragePenyimpanan data time-series dan dokumenDynamoDB, Cosmos DB, Bigtable
AnalyticsPemrosesan dan visualisasi dataQuickSight, Power BI, Data Studio
SecurityAutentikasi, otorisasi, enkripsiX.509, SAS Token, IAM
Diagram: MQTT BRIDGE ARCHITECTURE

AWS IoT Core

MQTT Bridge Gateway (EMQX Mosquit to)

Sensor Hub

Raspi

Mosquitto Bridge ke AWS IoT

Config — Mosquitto Bridge
# /etc/mosquitto/conf.d/aws-bridge.conf

# Bridge connection ke AWS IoT Core
connection aws-iot-bridge
address xxxxxxxxxx-ats.iot.ap-southeast-1.amazonaws.com:8883

# Topics: publish local data ke AWS
topic sensor/+/data out 1 $aws/things/+/shadow/update
topic sensor/+/status out 0

# Topics: subscribe dari AWS (commands)
topic cmd/+ in 1

# TLS/SSL Configuration
bridge_cafile /etc/mosquitto/certs/AmazonRootCA1.pem
bridge_certfile /etc/mosquitto/certs/device-certificate.pem.crt
bridge_keyfile /etc/mosquitto/certs/private.pem.key

# Connection settings
bridge_protocol_version mqttv311
cleansession true
notifications true
restart_timeout 30
keepalive_interval 60

# Local broker tetap berjalan
listener 1883
allow_anonymous false
password_file /etc/mosquitto/passwd

EMQX sebagai MQTT Gateway

Config — EMQX Cloud Bridge
# EMQX mendukung bridging ke multiple cloud secara native
# Konfigurasi via EMQX Dashboard atau emqx.conf

# Bridge ke AWS IoT Core
bridges {
  aws_iot {
    enable = true
    server = "xxxxx-ats.iot.ap-southeast-1.amazonaws.com:8883"
    clientid = "emqx-bridge"
    ssl {
      enable = true
      cacertfile = "etc/certs/AmazonRootCA1.pem"
      certfile = "etc/certs/device.pem.crt"
      keyfile = "etc/certs/device.pem.key"
    }
    ingress {
      remote_topic = "cmd/#"
      local_topic = "cloud/${topic}"
    }
    egress {
      local_topic = "sensor/#"
      remote_topic = "devices/${topic}"
    }
  }

  # Bridge ke Azure IoT Hub
  azure_iot_hub {
    enable = true
    server = "myhub.azure-devices.net:8883"
    clientid = "sensor001"
    username = "myhub.azure-devices.net/sensor001/api-version=2021-04-12"
    password = "SAS_TOKEN_HERE"
    ssl { enable = true }
  }

  # Bridge ke GCP Pub/Sub via webhook
  gcp_pubsub {
    enable = true
    type = "http"
    url = "https://pubsub.googleapis.com/v1/projects/my-project/topics/iot-data:publish"
    method = "post"
    headers = { "Authorization" = "Bearer TOKEN" }
  }
}
 ad-slot-wide">

7. Device Management

Device management adalah kemampuan untuk mengelola lifecycle perangkat IoT secara remote — mulai dari provisioning (pendaftaran), monitoring, konfigurasi, firmware update, hingga decommission.

Device Lifecycle

TahapAktivitasCloud Service
ProvisioningDaftarkan device, buat credential, assign ke grupAWS Fleet Provisioning, Azure DPS
ConfigurationKirim konfigurasi awal ke deviceDevice Shadow, Device Twin
MonitoringPantau status, health, connectivityCloudWatch, Azure Monitor
MaintenanceOTA firmware update, konfigurasi remoteAWS Jobs, Azure IoT Hub Direct Methods
DecommissionCabut credential, hapus dari registryCertificate revocation, device delete

OTA Update dengan AWS IoT Jobs

Arduino — OTA Update ESP32
#include <WiFiClientSecure.h>
#include <MQTTClient.h>
#include <ArduinoJson.h>
#include <Update.h>

// AWS IoT Jobs - OTA Update Handler
WiFiClientSecure net;
MQTTClient client(512);

String currentFirmware = "2.1.0";

void handleJobExecution(String& payload) {
    StaticJsonDocument<512> doc;
    deserializeJson(doc, payload);

    JsonObject job = doc["execution"]["jobDocument"];
    String url = job["url"];
    String version = job["version"];

    Serial.printf("OTA Update: v%s → v%s\n",
                  currentFirmware.c_str(), version.c_str());

    // Download dan flash firmware
    HTTPClient http;
    http.begin(url);
    int httpCode = http.GET();

    if (httpCode == 200) {
        int contentLength = http.getSize();
        if (Update.begin(contentLength)) {
            Update.writeStream(*http.getStreamPtr());
            if (Update.end()) {
                Serial.println("Update berhasil! Rebooting...");
                ESP.restart();
            }
        }
    }

    // Report result ke AWS IoT
    String statusTopic = "$aws/things/" + String(THING_NAME) +
                        "/jobs/" + String(doc["execution"]["jobId"]) +
                        "/update";
    String status = "{\"status\":\"SUCCEEDED\",\"version\":\"" +
                    version + "\"}";
    client.publish(statusTopic.c_str(), status.c_str());
}

8. Data Pipeline dan Analytics

Setelah data sampai di cloud, Anda perlu memproses, menyimpan, dan menganalisisnya. Data pipeline IoT mengubah data mentah sensor menjadi insight yang actionable.

Arsitektur Data Pipeline

Diagram

Dashboard dan Alerting

Real Time

Store

AWS IoT Rules Engine

SQL — IoT Rules Engine
-- Rule 1: Simpan semua data sensor ke DynamoDB
SELECT
  topic(2) as device_id,
  timestamp() as ts,
  suhu, kelembaban, tekanan
FROM 'sensor/+/data'

-- Rule 2: Kirim alarm jika suhu > 35°C
SELECT
  topic(2) as device_id,
  suhu as current_temp,
  35 as threshold,
  'HIGH_TEMPERATURE' as alarm_type
FROM 'sensor/+/data'
WHERE suhu > 35

-- Rule 3: Transform data untuk analytics
SELECT
  topic(2) as device_id,
  timestamp() as epoch,
  suhu * 9/5 + 32 as suhu_fahrenheit,
  ROUND(kelembaban, 0) as humidity_pct,
  CASE
    WHEN suhu > 35 THEN 'CRITICAL'
    WHEN suhu > 30 THEN 'WARNING'
    ELSE 'NORMAL'
  END as status
FROM 'sensor/+/data'

9. Serverless IoT Architecture

Arsitektur serverless sangat cocok untuk IoT karena Anda hanya membayar untuk eksekusi yang benar-benar terjadi — ideal untuk data sensor yang intermittent dan volume yang bervariasi.

Contoh: AWS Lambda untuk IoT

Python — Lambda IoT Handler
import json
import boto3
from datetime import datetime

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('IoT_SensorData')
sns = boto3.client('sns')

def lambda_handler(event, context):
    """Dipanggil oleh IoT Rules Engine setiap ada data sensor."""

    device_id = event['device_id']
    suhu = float(event['suhu'])
    kelembaban = float(event['kelembaban'])
    timestamp = event.get('ts', int(datetime.now().timestamp()))

    # 1. Simpan ke DynamoDB
    table.put_item(Item={
        'device_id': device_id,
        'timestamp': timestamp,
        'suhu': suhu,
        'kelembaban': kelembaban
    })

    # 2. Cek threshold dan kirim alarm
    if suhu > 35.0:
        sns.publish(
            TopicArn='arn:aws:sns:region:account:iot-alerts',
            Subject=f'⚠️ SUHU TINGGI - {device_id}',
            Message=f'Device {device_id}: Suhu {suhu}°C melebihi threshold 35°C!'
        )

    # 3. Hitung rata-rata per jam
    check_hourly_average(device_id)

    return {'statusCode': 200, 'body': 'OK'}

def check_hourly_average(device_id):
    """Cek rata-rata suhu per jam, trigger alert jika abnormal."""
    from boto3.dynamodb.conditions import Key
    import time

    one_hour_ago = int(time.time()) - 3600
    response = table.query(
        KeyConditionExpression=Key('device_id').eq(device_id) &
                               Key('timestamp').gte(one_hour_ago)
    )
    items = response['Items']
    if items:
        avg_temp = sum(i['suhu'] for i in items) / len(items)
        if avg_temp > 32:
            sns.publish(
                TopicArn='arn:aws:sns:region:account:iot-alerts',
                Subject=f'📊 Rata-rata suhu tinggi - {device_id}',
                Message=f'Rata-rata suhu 1 jam: {avg_temp:.1f}°C'
            )

10. Best Practices

AspekBest PracticeHindari
KeamananGunakan X.509 certificate, TLS 1.2+Shared password, tanpa TLS
Device IDGunakan MAC address atau UUIDID sequential atau hardcoded
PayloadKompres, gunakan format standar (JSON/CBOR)Payload besar tanpa kompresi
Topic DesignHierarki logis, gunakan wildcardsFlat topic structure
MonitoringDevice health metrics, connection monitoringBlind deploy tanpa monitoring
CostBatch data, gunakan QoS 0 untuk data periodikSemua data pakai QoS 2
ScalabilityGunakan message queue untuk burst trafficDirect processing tanpa buffering

11. Studi Kasus: Smart Farming

Diagram — Smart Farming Architecture
# ARSITEKTUR SMART FARMING DENGAN IoT CLOUD
#
# LAYER 1: FIELD SENSORS
# ├── ESP32 #1: Suhu, Kelembaban tanah, Cahaya
# ├── ESP32 #2: pH tanah, Nutrisi (EC), Suhu air
# └── ESP32 #3: Kamera (pest detection), Curah hujan
#
# LAYER 2: GATEWAY
# └── Raspberry Pi 4
#     ├── MQTT Broker (Mosquitto) — lokal
#     ├── Data buffering (SQLite) — offline mode
#     ├── MQTT Bridge ke AWS IoT Core
#     └── Rule engine lokal (irrigasi otomatis)
#
# LAYER 3: CLOUD (AWS IoT Core)
# ├── Rules Engine → DynamoDB (data storage)
# ├── Rules Engine → Lambda → SNS (alert)
# ├── Rules Engine → S3 (data archive)
# └── Device Shadow (remote config)
#
# LAYER 4: DASHBOARD & ALERTING
# ├── Grafana Dashboard (monitoring real-time)
# ├── Mobile App (React Native)
# ├── Email/SMS Alerts (via SNS)
# └── Prediksi panen (SageMaker ML)
#
# DATA FLOW:
# Sensor → ESP32 → MQTT → Gateway → AWS IoT → DynamoDB
# Commands: Dashboard → AWS IoT → MQTT → Gateway → ESP32 → Relay

12. Quiz: Uji Pemahamanmu!

Setelah membaca tutorial di atas, jawablah 5 pertanyaan berikut untuk menguji pemahamanmu tentang IoT Cloud Platform:

Pertanyaan 1: Apa fungsi utama dari Device Shadow / Device Twin?

a) Mengenkripsi data sensor
b) Menyimpan virtual state device yang bisa diakses meski device offline
c) Menggantikan MQTT broker
d) Menghitung biaya cloud

Pertanyaan 2: Apa yang dilakukan MQTT Bridge dalam arsitektur IoT?

a) Menggantikan broker MQTT lokal
b) Menghubungkan broker MQTT lokal dengan cloud platform
c) Menghapus pesan MQTT yang tidak diperlukan
d) Mengubah MQTT menjadi HTTP

Pertanyaan 3: Platform mana yang sekarang TIDAK lagi menyediakan layanan IoT Core secara langsung?

a) AWS IoT Core
b) Azure IoT Hub
c) Google Cloud IoT Core
d) Semua masih aktif

Pertanyaan 4: Mengapa arsitektur serverless cocok untuk IoT?

a) Karena server IoT selalu online 24/7
b) Karena bayar hanya untuk eksekusi yang terjadi, cocok untuk data intermittent
c) Karena tidak perlu internet
d) Karena lebih lambat dari server tradisional

Pertanyaan 5: Metode keamanan apa yang direkomendasikan untuk autentikasi device IoT ke cloud?

a) Username dan password yang sama untuk semua device
b) X.509 certificate dengan mutual TLS
c) API key yang di-hardcode di firmware
d) Tidak perlu autentikasi untuk device kecil
🔍 Zoom
100%
🎨 Tema