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
| Komponen | Fungsi | Contoh Layanan |
|---|---|---|
| Device Gateway | Titik masuk komunikasi device ke cloud | MQTT broker, HTTP endpoint |
| Device Registry | Database identitas perangkat | Thing Registry, Device Twin |
| Message Broker | Routing pesan antara device dan layanan | IoT Core MQTT, IoT Hub |
| Rules Engine | Filter dan transform data secara real-time | IoT Rules, Stream Analytics |
| Data Storage | Penyimpanan data time-series dan dokumen | DynamoDB, Cosmos DB, Bigtable |
| Analytics | Pemrosesan dan visualisasi data | QuickSight, Power BI, Data Studio |
| Security | Autentikasi, otorisasi, enkripsi | X.509, SAS Token, IAM |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β 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
| Fitur | Penjelasan |
|---|---|
| MQTT Broker | Broker MQTT 3.1.1 dan 5.0 yang fully managed, mendukung QoS 0 dan 1 |
| Device Shadow | Virtual representation dari device β bisa set/mendapatkan state meski device offline |
| Rules Engine | Filter dan route data ke 20+ layanan AWS (Lambda, DynamoDB, S3, SNS) |
| Security | X.509 certificates, mutual TLS, IAM policies, fine-grained authorization |
| Device Defender | Monitoring keamanan perangkat, deteksi anomali |
| Fleet Provisioning | Otomatis provisioning ribuan device baru |
| Jobs | OTA update dan remote actions ke perangkat |
Setup AWS IoT Core dengan 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);
}
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
| Fitur | Penjelasan |
|---|---|
| Device Twins | Dokumen JSON yang menyimpan state device β mirip AWS Device Shadow |
| Direct Methods | Panggilan RPC dari cloud ke device secara real-time |
| File Upload | Upload file dari device ke Azure Blob Storage |
| Message Routing | Route messages ke berbagai endpoint berdasarkan filter |
| IoT Edge | Jalankan workload cloud di edge device |
| DPS | Device Provisioning Service β zero-touch provisioning |
| Monitoring | Integrasi Azure Monitor untuk observabilitas penuh |
Koneksi ke 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
| Komponen | Layanan Google Cloud | Fungsi |
|---|---|---|
| Ingestion | Cloud Pub/Sub | Message broker global untuk data masuk |
| Processing | Dataflow, Cloud Functions | Real-time stream processing |
| Storage | BigQuery, Bigtable, Firestore | Penyimpanan data time-series dan analitik |
| Analytics | Looker, Data Studio | Visualisasi dan dashboard |
| ML | Vertex AI, Edge TPU | Machine learning untuk prediksi dan anomaly |
| Gateway | MQTT-to-Pub/Sub bridge | Konektivitas device via MQTT |
MQTT Bridge ke Pub/Sub
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)
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
| Aspek | AWS IoT Core | Azure IoT Hub | GCP (Pub/Sub) |
|---|---|---|---|
| Protokol | MQTT, HTTP, LoRaWAN | MQTT, AMQP, HTTP | HTTP, (MQTT via bridge) |
| MQTT | Native (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 |
| Keamanan | X.509, IAM, Custom Auth | X.509, SAS Token, IAM | JWT, OAuth2 |
| Edge Computing | Greengrass | IoT Edge | Edge TPU |
| ML Integration | SageMaker | Azure ML | Vertex AI |
| Free Tier | 250K msg/bulan | 8K msg/hari | Tergantung usage |
| Vendor Lock-in | π‘ Sedang | π‘ Sedang | π’ Rendah |
| Kemudahan | π‘ Sedang | π‘ Sedang | π΄ Perlu setup lebih |
Kapan Memilih Platform Mana?
- 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
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β 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
# /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
# 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
| Tahap | Aktivitas | Cloud Service |
|---|---|---|
| Provisioning | Daftarkan device, buat credential, assign ke grup | AWS Fleet Provisioning, Azure DPS |
| Configuration | Kirim konfigurasi awal ke device | Device Shadow, Device Twin |
| Monitoring | Pantau status, health, connectivity | CloudWatch, Azure Monitor |
| Maintenance | OTA firmware update, konfigurasi remote | AWS Jobs, Azure IoT Hub Direct Methods |
| Decommission | Cabut credential, hapus dari registry | Certificate revocation, device delete |
OTA Update dengan AWS IoT Jobs
#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
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β IoT DATA PIPELINE β β β β Devices βββΊ Gateway βββΊ Ingestion βββΊ Processing β β β β β βββββββΌββββββ β β βΌ βΌ βΌ β β βββββββββββββββββββββ β β βReal ββStoreββBatch β β β βTime ββ ββProc. β β β ββββ¬βββββββ¬βββββββ¬ββββ β β β β β β β βΌ βΌ βΌ β β ββββββββββββββββββββ β β β Dashboard & β β β β Alerting β β β ββββββββββββββββββββ β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
AWS 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
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
| Aspek | Best Practice | Hindari |
|---|---|---|
| Keamanan | Gunakan X.509 certificate, TLS 1.2+ | Shared password, tanpa TLS |
| Device ID | Gunakan MAC address atau UUID | ID sequential atau hardcoded |
| Payload | Kompres, gunakan format standar (JSON/CBOR) | Payload besar tanpa kompresi |
| Topic Design | Hierarki logis, gunakan wildcards | Flat topic structure |
| Monitoring | Device health metrics, connection monitoring | Blind deploy tanpa monitoring |
| Cost | Batch data, gunakan QoS 0 untuk data periodik | Semua data pakai QoS 2 |
| Scalability | Gunakan message queue untuk burst traffic | Direct processing tanpa buffering |
11. Studi Kasus: Smart Farming
# 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: