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

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: Arsitektur IoT Cloud Platform
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚          ARSITEKTUR IoT CLOUD PLATFORM                  β”‚
β”‚                                                         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”                            β”‚
β”‚  β”‚ESP32 β”‚ β”‚Raspi β”‚ β”‚Sensorβ”‚    DEVICES                  β”‚
β”‚  β”‚      β”‚ β”‚      β”‚ β”‚ Hub  β”‚    (MQTT/HTTP)              β”‚
β”‚  β””β”€β”€β”¬β”€β”€β”€β”˜ β””β”€β”€β”¬β”€β”€β”€β”˜ β””β”€β”€β”¬β”€β”€β”€β”˜                            β”‚
β”‚     β”‚        β”‚        β”‚                                 β”‚
β”‚  ═══β•ͺ════════β•ͺ════════β•ͺ══════════════════════           β”‚
β”‚     β”‚   DEVICE GATEWAY β”‚                                β”‚
β”‚     β”‚   (MQTT Broker)  β”‚                                β”‚
β”‚  ═══β•ͺ════════β•ͺ════════β•ͺ══════════════════════           β”‚
β”‚     β–Ό        β–Ό        β–Ό                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                           β”‚
β”‚  β”‚    RULES ENGINE          β”‚                           β”‚
β”‚  β”‚  (Filter, Route, Transform)β”‚                         β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                           β”‚
β”‚           β”‚                                             β”‚
β”‚     β”Œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                           β”‚
β”‚     β–Ό     β–Ό     β–Ό          β–Ό                           β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”                     β”‚
β”‚  β”‚ DB  β”‚β”‚Alarmβ”‚β”‚Analytβ”‚β”‚Machine β”‚                      β”‚
β”‚  β”‚Storeβ”‚β”‚     β”‚β”‚  ics β”‚β”‚Learningβ”‚                      β”‚
β”‚  β””β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜                      β”‚
β”‚                                                         β”‚
β”‚              CLOUD SERVICES                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2. AWS IoT Core

AWS IoT Core adalah platform IoT dari Amazon Web Services yang mendukung miliaran perangkat dan triliunan pesan. AWS IoT Core menyediakan broker MQTT terkelola, device management, rules engine, dan integrasi mendalam dengan seluruh ekosistem AWS.

Fitur Utama AWS IoT Core

FiturPenjelasan
MQTT BrokerBroker MQTT 3.1.1 dan 5.0 yang fully managed, mendukung QoS 0 dan 1
Device ShadowVirtual representation dari device β€” bisa set/mendapatkan state meski device offline
Rules EngineFilter dan route data ke 20+ layanan AWS (Lambda, DynamoDB, S3, SNS)
SecurityX.509 certificates, mutual TLS, IAM policies, fine-grained authorization
Device DefenderMonitoring keamanan perangkat, deteksi anomali
Fleet ProvisioningOtomatis provisioning ribuan device baru
JobsOTA update dan remote actions ke perangkat

Setup AWS IoT Core dengan ESP32

Arduino β€” AWS IoT ESP32
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>

// AWS IoT Configuration
const char* AWS_IOT_ENDPOINT = "xxxxxxxxxxxx-ats.iot.ap-southeast-1.amazonaws.com";
const char* THING_NAME = "sensor_gedung1_001";

// WiFi
const char* SSID = "WiFi-Rumah";
const char* PASSWORD = "password123";

// Topics
const char* PUBLISH_TOPIC = "gedung1/sensor/001/data";
const char* SUBSCRIBE_TOPIC = "gedung1/sensor/001/cmd";
const char* SHADOW_UPDATE = "$aws/thing/sensor_gedung1_001/shadow/update";
const char* SHADOW_GET = "$aws/thing/sensor_gedung1_001/shadow/get";

// TLS Certificates (downloaded from AWS IoT console)
// Simpan di SPIFFS atau PROGMEM
const char AMAZON_ROOT_CA1[] PROGMEM = R"EOF(
-----BEGIN CERTIFICATE-----
... your AmazonRootCA1.pem ...
-----END CERTIFICATE-----
)EOF";

const char CERTIFICATE[] PROGMEM = R"EOF(
-----BEGIN CERTIFICATE-----
... your device-certificate.pem.crt ...
-----END CERTIFICATE-----
)EOF";

const char PRIVATE_KEY[] PROGMEM = R"EOF(
-----BEGIN RSA PRIVATE KEY-----
... your private.pem.key ...
-----END RSA PRIVATE KEY-----
)EOF";

WiFiClientSecure net;
PubSubClient client(net);

void connectWiFi() {
    WiFi.mode(WIFI_STA);
    WiFi.begin(SSID, PASSWORD);
    Serial.print("Connecting to WiFi");
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    Serial.println(" Connected!");
}

void connectAWS() {
    net.setCACert(AMAZON_ROOT_CA1);
    net.setCertificate(CERTIFICATE);
    net.setPrivateKey(PRIVATE_KEY);

    client.setServer(AWS_IOT_ENDPOINT, 8883);
    client.setCallback(messageHandler);

    Serial.print("Connecting to AWS IoT Core");
    while (!client.connected()) {
        if (client.connect(THING_NAME)) {
            Serial.println(" Connected!");
            client.subscribe(SUBSCRIBE_TOPIC);
            client.subscribe(SHADOW_GET_ACCEPTED);
        } else {
            Serial.printf(" Failed (rc=%d), retrying...\n", client.state());
            delay(3000);
        }
    }
}

void messageHandler(char* topic, byte* payload, unsigned int length) {
    StaticJsonDocument<512> doc;
    deserializeJson(doc, payload, length);

    // Handle shadow response
    if (String(topic).endsWith("/shadow/get/accepted")) {
        JsonObject state = doc["state"]["desired"];
        int interval = state["interval"] | 5;
        Serial.printf("Shadow interval: %d detik\n", interval);
    }

    // Handle command
    if (String(topic) == SUBSCRIBE_TOPIC) {
        const char* action = doc["action"];
        Serial.printf("Command: %s\n", action);
    }
}

void publishSensorData(float suhu, float lembab) {
    StaticJsonDocument<256> doc;
    doc["device_id"] = THING_NAME;
    doc["timestamp"] = millis();
    doc["suhu"] = suhu;
    doc["kelembaban"] = lembab;

    char jsonBuffer[256];
    serializeJson(doc, jsonBuffer);
    client.publish(PUBLISH_TOPIC, jsonBuffer);
}

void updateShadow(float suhu) {
    StaticJsonDocument<512> doc;
    doc["state"]["reported"]["suhu"] = suhu;
    doc["state"]["reported"]["status"] = "online";
    doc["state"]["reported"]["firmware"] = "2.1.0";

    char jsonBuffer[512];
    serializeJson(doc, jsonBuffer);
    client.publish(SHADOW_UPDATE, jsonBuffer);
}

void setup() {
    Serial.begin(115200);
    connectWiFi();
    connectAWS();
}

void loop() {
    if (!client.connected()) connectAWS();
    client.loop();

    float suhu = 25.5;  // Baca sensor
    publishSensorData(suhu, 65.0);
    updateShadow(suhu);
    delay(5000);
}
πŸ’‘ Tips

Device Shadow di AWS IoT adalah fitur powerful yang memungkinkan aplikasi cloud mengatur state device bahkan saat device sedang offline. Shadow terdiri dari desired (apa yang diinginkan) dan reported (apa yang dilaporkan device). AWS akan menyinkronkan keduanya saat device online kembali.

3. Azure IoT Hub

Azure IoT Hub adalah layanan cloud terkelola dari Microsoft yang bertindak sebagai central message hub untuk komunikasi dua arah antara aplikasi IoT dan perangkat. Azure IoT Hub mendukung jutaan perangkat dan miliaran pesan per hari.

Fitur Utama Azure IoT Hub

FiturPenjelasan
Device TwinsDokumen JSON yang menyimpan state device β€” mirip AWS Device Shadow
Direct MethodsPanggilan RPC dari cloud ke device secara real-time
File UploadUpload file dari device ke Azure Blob Storage
Message RoutingRoute messages ke berbagai endpoint berdasarkan filter
IoT EdgeJalankan workload cloud di edge device
DPSDevice Provisioning Service β€” zero-touch provisioning
MonitoringIntegrasi Azure Monitor untuk observabilitas penuh

Koneksi ke Azure IoT Hub

Python β€” Azure IoT Hub
from azure.iot.device import IoTHubDeviceClient, Message
import json, time, random

# Connection string dari Azure Portal
CONNECTION_STRING = "HostName=myhub.azure-devices.net;DeviceId=sensor001;SharedAccessKey=..."

# Buat client
client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING)
client.connect()

def send_telemetry():
    data = {
        "suhu": round(random.uniform(20, 35), 2),
        "kelembaban": round(random.uniform(40, 80), 2),
        "tekanan": round(random.uniform(1010, 1020), 2)
    }
    msg = Message(json.dumps(data))
    msg.content_encoding = "utf-8"
    msg.content_type = "application/json"
    msg.custom_properties["sensor_type"] = "BME280"

    client.send_message(msg)
    print(f"Sent: {data}")

def handle_method(request):
    print(f"Method: {request.name}, Payload: {request.payload}")
    if request.name == "reboot":
        # Handle reboot command
        client.send_method_response(
            MethodResponse(request.request_id, 200, {"status": "rebooting"})
        )

client.on_method_request_received = handle_method

try:
    while True:
        send_telemetry()
        time.sleep(5)
except KeyboardInterrupt:
    client.disconnect()

4. Google Cloud IoT

Google Cloud IoT menawarkan ekosistem layanan yang terintegrasi untuk membangun solusi IoT end-to-end. Meskipun Google Cloud IoT Core telah di-deprecate pada Agustus 2023, Google merekomendasikan alternatif seperti MQTT bridge ke Pub/Sub menggunakan solusi pihak ketiga.

Arsitektur Google Cloud IoT Sekarang

KomponenLayanan Google CloudFungsi
IngestionCloud Pub/SubMessage broker global untuk data masuk
ProcessingDataflow, Cloud FunctionsReal-time stream processing
StorageBigQuery, Bigtable, FirestorePenyimpanan data time-series dan analitik
AnalyticsLooker, Data StudioVisualisasi dan dashboard
MLVertex AI, Edge TPUMachine learning untuk prediksi dan anomaly
GatewayMQTT-to-Pub/Sub bridgeKonektivitas device via MQTT

MQTT Bridge ke Pub/Sub

Python β€” GCP Pub/Sub IoT
from google.cloud import pubsub_v1
import json, time, random

# Setup Pub/Sub publisher
PROJECT_ID = "my-gcp-project"
TOPIC_ID = "iot-sensor-data"

publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(PROJECT_ID, TOPIC_ID)

def publish_sensor_data(device_id, suhu, lembab):
    data = {
        "device_id": device_id,
        "suhu": suhu,
        "kelembaban": lembab,
        "timestamp": int(time.time())
    }
    # Pub/Sub menerima data bytes
    future = publisher.publish(
        topic_path,
        json.dumps(data).encode("utf-8"),
        device_id=device_id,  # Attribute untuk filtering
        sensor_type="BME280"
    )
    print(f"Published: {future.result()}")

# Kirim data setiap 5 detik
for i in range(100):
    publish_sensor_data(
        "sensor_gedung1_001",
        round(random.uniform(20, 35), 2),
        round(random.uniform(40, 80), 2)
    )
    time.sleep(5)
⚠️ Peringatan

Google Cloud IoT Core telah di-deprecate sejak Agustus 2023. Untuk proyek baru di GCP, gunakan arsitektur MQTT-to-Pub/Sub bridge menggunakan EMQX Cloud, HiveMQ, atau MQTT broker lain yang meng-publish data langsung ke Cloud Pub/Sub.

5. Perbandingan Platform

Memilih platform cloud yang tepat adalah keputusan arsitektural penting. Berikut perbandingan mendalam dari tiga platform utama.

Tabel Perbandingan Komprehensif

AspekAWS IoT CoreAzure IoT HubGCP (Pub/Sub)
ProtokolMQTT, HTTP, LoRaWANMQTT, AMQP, HTTPHTTP, (MQTT via bridge)
MQTTNative (3.1.1 & 5.0)Native (3.1.1)Via bridge pihak ketiga
Device Shadowβœ… Device Shadowβœ… Device Twins❌ (custom implementation)
Rules Engineβœ… IoT Rulesβœ… Message Routingβœ… Dataflow + Functions
KeamananX.509, IAM, Custom AuthX.509, SAS Token, IAMJWT, OAuth2
Edge ComputingGreengrassIoT EdgeEdge TPU
ML IntegrationSageMakerAzure MLVertex AI
Free Tier250K msg/bulan8K msg/hariTergantung usage
Vendor Lock-in🟑 Sedang🟑 Sedang🟒 Rendah
Kemudahan🟑 Sedang🟑 SedangπŸ”΄ Perlu setup lebih

Kapan Memilih Platform Mana?

πŸ’‘ Panduan Pemilihan
  • AWS IoT Core β€” Sudah pakai AWS ecosystem, butuh MQTT native, skala enterprise
  • Azure IoT Hub β€” Enterprise Windows/Office365, butuh IoT Edge untuk hybrid, integrasi Power BI
  • Google Cloud β€” Butuh analytics/ML berat (BigQuery), prefer open-source compatibility
  • Self-hosted β€” Budget terbatas, butuh full control, data sovereignty

6. MQTT Bridge dan Gateway

MQTT Bridge adalah komponen yang menghubungkan broker MQTT lokal dengan cloud platform. Bridge berfungsi sebagai jembatan antara jaringan lokal (edge) dan cloud, memungkinkan data mengalir dari device ke cloud tanpa device harus terkoneksi langsung ke cloud.

Peran MQTT Bridge

Diagram: MQTT Bridge Architecture
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              MQTT BRIDGE ARCHITECTURE                   β”‚
β”‚                                                         β”‚
β”‚  LOCAL NETWORK              INTERNET     CLOUD          β”‚
β”‚                                                         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”                β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
β”‚  β”‚ESP32 │──publish──►    β”‚        β”‚   β”‚          β”‚     β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”˜                β”‚  MQTT  │──►│  AWS IoT β”‚     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”                β”‚ Bridge β”‚   β”‚  Core    β”‚     β”‚
β”‚  β”‚Raspi │──publish──►    β”‚ Gatewayβ”‚   β”‚          β”‚     β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”˜                β”‚        │◄──│          β”‚     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”                β”‚ (EMQX  β”‚   β”‚          β”‚     β”‚
β”‚  β”‚Sensor│──publish──►    β”‚ Mosquitβ”‚   β”‚          β”‚     β”‚
β”‚  β”‚ Hub  β”‚                β”‚ to)    β”‚   β”‚          β”‚     β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”˜                β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
β”‚                                                         β”‚
β”‚  βœ… Device tidak perlu koneksi langsung ke cloud        β”‚
β”‚  βœ… Bridge bisa batching, filtering, transform data     β”‚
β”‚  βœ… Berfungsi sebagai firewall antara local & cloud     β”‚
β”‚  βœ… Bisa offline buffering jika koneksi terputus        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

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" }
  }
}

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: IoT Data Pipeline
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              IoT DATA PIPELINE                          β”‚
β”‚                                                         β”‚
β”‚  Devices ──► Gateway ──► Ingestion ──► Processing       β”‚
β”‚                                    β”‚                    β”‚
β”‚                              β”Œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”              β”‚
β”‚                              β–Ό     β–Ό     β–Ό              β”‚
β”‚                          β”Œβ”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”         β”‚
β”‚                          β”‚Real β”‚β”‚Storeβ”‚β”‚Batch β”‚         β”‚
β”‚                          β”‚Time β”‚β”‚     β”‚β”‚Proc. β”‚         β”‚
β”‚                          β””β”€β”€β”¬β”€β”€β”˜β””β”€β”€β”¬β”€β”€β”˜β””β”€β”€β”¬β”€β”€β”€β”˜         β”‚
β”‚                             β”‚     β”‚      β”‚              β”‚
β”‚                             β–Ό     β–Ό      β–Ό              β”‚
β”‚                          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”           β”‚
β”‚                          β”‚   Dashboard &    β”‚           β”‚
β”‚                          β”‚   Alerting       β”‚           β”‚
β”‚                          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

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