0Pricing
AI Agents · Pelajaran

Protokol MQTT untuk Integrasi Agen

Penyiapan perantara, langganan topik, dan aktivasi agen berbasis pesan.

Protokol MQTT untuk Integrasi Agen adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.

MQTT dan Agen IoT

MQTT (Transportasi Telemetri Antrean Pesan) adalah protokol publikasi-langganan ringan yang dirancang untuk lingkungan IoT dengan lebar pita rendah dan latensi tinggi. Agen dapat berlangganan topik MQTT untuk menerima data sensor waktu nyata dan menerbitkan perintah kembali ke perangkat.

Memasang paho-mqtt

Pustaka paho-mqtt adalah klien MQTT standar untuk Python. Pasang pustaka ini dengan pip. Pustaka ini mendukung MQTT 3.1.1 dan 5.0, enkripsi TLS, serta ketiga tingkat QoS.

# pip install paho-mqtt

import paho.mqtt.client as mqtt

# Create a client instance
client = mqtt.Client(client_id='agent_001', protocol=mqtt.MQTTv311)

# Optional: set credentials if broker requires authentication
client.username_pw_set(username='agent_user', password='YOUR_PASSWORD')

# Optional: enable TLS for secure connections
# client.tls_set('/path/to/ca.crt')

print('MQTT client created:', client._client_id)

Menghubungkan ke Server Perantara

Hubungkan ke server perantara MQTT (misalnya Mosquitto, HiveMQ, EMQX, atau perantara awan). Panggilan connect tidak memblokir; gunakan loop_start() untuk menjalankan loop jaringan di utas latar belakang.

import paho.mqtt.client as mqtt
import time

BROKER_HOST = 'broker.hivemq.com'  # public test broker
BROKER_PORT = 1883
KEEP_ALIVE_SECONDS = 60

def on_connect(client, userdata, flags, rc):
    status = {
        0: 'Connected successfully',
        1: 'Refused: wrong protocol',
        2: 'Refused: client ID rejected',
        3: 'Refused: server unavailable',
        4: 'Refused: bad credentials',
        5: 'Refused: not authorised'
    }
    print(f'Connect result: {status.get(rc, f"Unknown code {rc}")}')

client = mqtt.Client(client_id='agent_001')
client.on_connect = on_connect
client.connect(BROKER_HOST, BROKER_PORT, keepalive=KEEP_ALIVE_SECONDS)
client.loop_start()  # background thread
time.sleep(1)  # wait for connection

Berlangganan ke Topik

Topik adalah string hierarkis seperti sensors/temperature atau factory/line1/pressure. Gunakan # sebagai wildcard untuk semua subtopik, atau + sebagai wildcard untuk satu tingkat. Pasang callback on_message untuk memproses pesan yang masuk.

import json

class FakeMsg:
    def __init__(self, topic, payload):
        self.topic = topic
        self.payload = payload

class FakeMQTTClient:
    def __init__(self):
        self.on_message = None
        self.userdata = {}
    def user_data_set(self, userdata):
        self.userdata = userdata
    def subscribe(self, topic, qos=0):
        print(f'Subscribed to {topic} (qos={qos})')
    def simulate_message(self, topic, payload_bytes):
        self.on_message(self, self.userdata, FakeMsg(topic, payload_bytes))

class Agent:
    def process_sensor_data(self, topic, payload):
        print(f'Agent processing {topic} -> {payload}')

def on_message(client, userdata, msg):
    topic = msg.topic
    try:
        payload = json.loads(msg.payload.decode('utf-8'))
    except (json.JSONDecodeError, UnicodeDecodeError):
        payload = msg.payload.decode('utf-8', errors='replace')

    print(f'Received on {topic}: {payload}')
    userdata['agent'].process_sensor_data(topic, payload)

agent_state = {'agent': Agent()}
client = FakeMQTTClient()
client.user_data_set(agent_state)
client.on_message = on_message

client.subscribe('sensors/temperature', qos=1)
client.subscribe('sensors/+/humidity', qos=1)
client.subscribe('factory/#', qos=1)

client.simulate_message('sensors/temperature', b'{"value": 21.5}')

Penjelasan Tingkat QoS

MQTT memiliki tiga tingkat Kualitas Layanan: QoS 0 — kirim dan lupakan (paling cepat, pesan mungkin hilang), QoS 1 — setidaknya sekali (pesan dikonfirmasi, mungkin terduplikasi), QoS 2 — tepat sekali (dijamin, paling lambat). Pilih berdasarkan toleransi Anda terhadap kehilangan data dan latensi.

# QoS level guidelines for IoT agents:

# QoS 0 — temperature readings updated every second
# (loss of one reading is acceptable)
client.subscribe('sensors/temperature', qos=0)

# QoS 1 — alert notifications (must arrive, duplicates are OK)
client.subscribe('sensors/alerts', qos=1)

# QoS 2 — billing/counting events (each event must be processed exactly once)
client.subscribe('meters/energy_consumed', qos=2)

# When publishing, specify QoS:
client.publish(
    topic='agents/response',
    payload='{"action": "turn_on_cooling"}',
    qos=1,
    retain=False
)
print('Published command with QoS 1')

Pesan Tersimpan

Pesan tersimpan adalah nilai terakhir yang dipublikasikan untuk suatu topik, yang disimpan oleh broker lalu segera dikirim kepada setiap pelanggan baru. Ini ideal untuk topik status sensor: instans agen baru yang bergabung ke jaringan langsung mengetahui nilai sensor saat ini tanpa harus menunggu pembaruan berikutnya.

# Publishing with retain=True persists the last value on the broker
client.publish(
    topic='sensors/thermostat/current_temp',
    payload='{"value": 22.5, "unit": "celsius"}',
    qos=1,
    retain=True  # broker stores this message
)

# Any new subscriber will receive this immediately on subscribe,
# even if it was published hours ago.

# To clear a retained message, publish empty payload:
client.publish(
    topic='sensors/thermostat/current_temp',
    payload='',  # empty payload clears retention
    retain=True
)
print('Retained message cleared')

Membangun Agen Sensor MQTT

Agen sensor berlangganan ke topik sensor mentah, memvalidasi data yang masuk, lalu memutuskan apakah perlu memicu suatu tindakan. Logika keputusan hanya menggunakan LLM untuk kasus yang kompleks; pemeriksaan ambang batas sederhana ditangani dalam Python murni demi kecepatan.

import anthropic

class SensorAgent:
    def __init__(self, mqtt_client, llm_api_key: str):
        self.client = mqtt_client
        self.llm = anthropic.Anthropic(api_key=llm_api_key)
        self.readings = []

    def process_sensor_data(self, topic: str, payload: dict):
        value = payload.get('value')
        if value is None:
            return
        self.readings.append({'topic': topic, 'value': value})
        # Fast path: simple threshold
        if topic == 'sensors/temperature' and value > 35:
            self._trigger_action('COOLING_ON', f'Temperature {value}C exceeds threshold')
        # Slow path: complex reasoning via LLM
        elif len(self.readings) >= 10:
            self._llm_analyze()

    def _trigger_action(self, action: str, reason: str):
        payload = '{"action": "' + action + '", "reason": "' + reason + '"}'
        self.client.publish('agents/actions', payload, qos=1)
        print(f'Action triggered: {action} — {reason}')

    def _llm_analyze(self):
        summary = str(self.readings[-10:])
        result = self.llm.messages.create(
            model='claude-opus-4-5', max_tokens=128,
            messages=[{'role': 'user', 'content':
                f'Sensor readings: {summary}. Any anomalies?'}]
        )
        print('LLM analysis:', result.content[0].text)
        self.readings = []

MQTT melalui WebSocket

MQTT melalui WebSocket (port 8083 atau 8084 untuk TLS) memungkinkan dasbor dan agen berbasis browser terhubung ke broker MQTT tanpa koneksi TCP asli. Konfigurasikan paho-mqtt agar menggunakan transportasi WebSocket dengan opsi transport='websockets'.

import paho.mqtt.client as mqtt

# MQTT over WebSocket configuration
ws_client = mqtt.Client(
    client_id='dashboard_agent',
    transport='websockets',  # use WS instead of TCP
    protocol=mqtt.MQTTv311
)

# WebSocket path (broker-specific)
ws_client.ws_set_options(path='/mqtt', headers=None)

# TLS over WebSocket (WSS, port 8084)
# ws_client.tls_set()  # uses system CA store

ws_client.connect(
    host='broker.hivemq.com',
    port=8884,  # WSS port
    keepalive=60
)
ws_client.loop_start()
print('Connected via WebSocket')

Pesan Wasiat dan Wasiat Terakhir

Last Will and Testament (LWT) MQTT memungkinkan broker menerbitkan pesan atas nama Client jika Client terputus secara tiba-tiba. Gunakan ini untuk memberi tahu agen lain bahwa agen sensor sedang luring, sehingga mereka dapat beralih ke mode cadangan.

import paho.mqtt.client as mqtt

client = mqtt.Client(client_id='agent_001')

# Set LWT before connecting
client.will_set(
    topic='agents/status/agent_001',
    payload='{"status": "offline", "reason": "unexpected_disconnect"}',
    qos=1,
    retain=True  # retain so new subscribers see the last known status
)

def on_connect(client, userdata, flags, rc):
    if rc == 0:
        # Publish 'online' status on connect (overrides LWT retain)
        client.publish(
            'agents/status/agent_001',
            '{"status": "online"}',
            qos=1, retain=True
        )

client.on_connect = on_connect
client.connect('broker.hivemq.com', 1883, keepalive=60)
client.loop_start()

Praktik Terbaik untuk Merancang Topik

Perancangan topik yang baik membuat kode agen mudah dipelihara dan diskalakan. Gunakan hierarki: location/device_type/device_id/measurement. Hindari spasi dan karakter khusus. Buat topik tetap singkat — topik menambah overhead pada setiap pesan.

# Good topic hierarchy examples:
# factory/line1/sensor_042/temperature
# home/living_room/thermostat_01/setpoint
# agents/agent_001/commands/turn_on
# agents/agent_001/status

TOPIC_SCHEMA = {
    'sensor_data': '{location}/{device_type}/{device_id}/{measurement}',
    'agent_command': 'agents/{agent_id}/commands/{action}',
    'agent_status': 'agents/{agent_id}/status',
    'alert': 'alerts/{severity}/{location}'
}

def build_topic(schema_key: str, **kwargs) -> str:
    template = TOPIC_SCHEMA[schema_key]
    return template.format(**kwargs)

# Usage:
topic = build_topic('sensor_data',
                    location='factory', device_type='temp_sensor',
                    device_id='042', measurement='celsius')
print(topic)  # factory/temp_sensor/042/celsius

Pemutusan dan Penyambungan Kembali yang Rapi

Agen dalam lingkungan IoT harus menangani gangguan jaringan dengan baik. Gunakan logika penyambungan kembali bawaan paho-mqtt: tetapkan reconnect_on_failure=True dan berlangganan kembali setiap kali tersambung kembali, karena langganan tidak dipertahankan secara default (kecuali menggunakan sesi persisten).

import paho.mqtt.client as mqtt
import time

SUBSCRIPTIONS = [
    ('sensors/temperature', 1),
    ('sensors/humidity', 1),
    ('agents/commands', 2)
]

def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print('Connected — re-subscribing to topics')
        for topic, qos in SUBSCRIPTIONS:
            client.subscribe(topic, qos=qos)
    else:
        print(f'Connection failed with code {rc}')

client = mqtt.Client(client_id='agent_reliable', clean_session=True)
client.on_connect = on_connect
client.reconnect_delay_set(min_delay=1, max_delay=30)
client.connect_async('broker.hivemq.com', 1883, keepalive=60)
client.loop_start()

# Graceful shutdown:
# client.disconnect()
# client.loop_stop()

Uji Pemahaman

Tingkat QoS mana yang menjamin bahwa pesan dikirim tepat sekali?

Ringkasan: MQTT untuk Integrasi Agen

Sangat baik! Hal-hal yang Anda pelajari dalam pelajaran ini:

  • paho-mqtt: connect(), loop_start(), subscribe(), publish()
  • Tingkat QoS: 0 = paling banyak sekali, 1 = setidaknya sekali, 2 = tepat sekali
  • Pesan tersimpan: broker menyimpan nilai terakhir; pelanggan baru langsung menerimanya
  • LWT: broker menerbitkan pesan luring saat terjadi pemutusan yang tidak terduga
  • Penyambungan kembali: berlangganan kembali dalam on_connect; gunakan reconnect_delay_set

Berikutnya: memproses aliran data deret waktu — jendela bergulir, rata-rata bergerak, dan deteksi lonjakan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Protokol MQTT untuk Integrasi Agen” gratis?

Ya — teks lengkap “Protokol MQTT untuk Integrasi Agen” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Protokol MQTT untuk Integrasi Agen”?

Penyiapan perantara, langganan topik, dan aktivasi agen berbasis pesan. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Agents?

Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Protokol MQTT untuk Integrasi Agen” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?

Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Protokol MQTT untuk Integrasi Agen
  2. Pemrosesan Data Deret Waktu dalam Agen
  3. Respons Otomatis terhadap Peristiwa Sensor
  4. Penerapan Agen Ringan di Perangkat Tepi
← Kembali ke AI Agents