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 connectionBerlangganan 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/celsiusPemutusan 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; gunakanreconnect_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
- Protokol MQTT untuk Integrasi Agen
- Pemrosesan Data Deret Waktu dalam Agen
- Respons Otomatis terhadap Peristiwa Sensor
- Penerapan Agen Ringan di Perangkat Tepi