0Pricing
AI Agents · Ders

Aracı Entegrasyonu İçin MQTT Protokolü

Aracı kurulumu, konu aboneliği ve mesaj güdümlü aracı etkinleştirme.

Aracı Entegrasyonu İçin MQTT Protokolü, CoddyKit'te ücretsiz bir AI Agents dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Agents öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Agents kursu toplamda 4 dersten oluşur.

MQTT ve IoT Ajanları

MQTT (Mesaj Kuyruklama Telemetrisi Taşıması), düşük bant genişlikli ve yüksek gecikmeli IoT ortamları için tasarlanmış hafif bir yayımla-abone ol protokolüdür. Ajanlar, gerçek zamanlı sensör verilerini almak için MQTT konularına abone olabilir ve cihazlara geri komut yayımlayabilir.

paho-mqtt Kurulumu

paho-mqtt kitaplığı, standart Python MQTT istemcisidir. Bu kitaplığı pip ile kurun. MQTT 3.1.1 ve 5.0'ı, TLS şifrelemesini ve üç QoS düzeyinin tümünü destekler.

# 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)

Aracı Sunucuya Bağlanma

Bir MQTT aracı sunucusuna bağlanın (ör. Mosquitto, HiveMQ, EMQX veya bir bulut aracı sunucusu). connect çağrısı engelleyici değildir; ağ döngüsünü bir arka plan iş parçacığında çalıştırmak için loop_start() kullanın.

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

Bir Konuya Abone Olma

Konular, sensors/temperature veya factory/line1/pressure gibi hiyerarşik dizelerdir. Tüm alt konular için joker karakter olarak #, tek düzeyli joker karakter olarak + kullanın. Gelen mesajları işlemek için bir on_message geri çağrısı ekleyin.

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}')

QoS Düzeyleri Açıklaması

MQTT'de üç Hizmet Kalitesi düzeyi vardır: QoS 0 — gönder ve unut (en hızlıdır, mesajlar kaybolabilir), QoS 1 — en az bir kez (mesaj onaylanır, yinelenebilir), QoS 2 — tam olarak bir kez (garantilidir, en yavaştır). Veri kaybına ve gecikmeye ilişkin toleransınıza göre seçim yapın.

# 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')

Saklanan Mesajlar

Saklanan mesaj, aracının bir konu için yayımlanan son değeri saklayıp yeni abonelere hemen göndermesini sağlar. Bu özellik sensör durumu konuları için idealdir: ağa katılan yeni bir ajan, bir sonraki güncellemeyi beklemeden mevcut sensör değerini hemen öğrenir.

# 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')

MQTT Sensör Ajanı Oluşturma

Bir sensör ajanı ham sensör konularına abone olur, gelen verileri doğrular ve bir eylemi tetikleyip tetiklemeyeceğine karar verir. Karar mantığı LLM'yi yalnızca karmaşık durumlarda kullanır; basit eşik denetimleri hız için saf Python'da gerçekleştirilir.

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 = []

WebSocket Üzerinden MQTT

WebSocket üzerinden MQTT (TLS için 8083 veya 8084 numaralı bağlantı noktası), tarayıcı tabanlı gösterge panolarının ve ajanların yerel bir TCP bağlantısı olmadan MQTT aracılarına bağlanmasını sağlar. WebSocket aktarımını kullanması için paho-mqtt'yi transport='websockets' seçeneğiyle yapılandırın.

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')

Son İstek ve Vasiyetname

MQTT'nin Son İstek ve Vasiyetnamesi (LWT), istemci beklenmedik şekilde bağlantısını keserse aracının istemci adına bir mesaj yayımlamasını sağlar. Bir sensör ajanının çevrimdışı kaldığını diğer ajanlara bildirmek ve onların yedek çalışma moduna geçmesini sağlamak için bunu kullanın.

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()

Konu Tasarımı için En İyi Uygulamalar

İyi konu tasarımı, ajan kodunun bakımını ve ölçeklenmesini kolaylaştırır. Şu hiyerarşiyi kullanın: location/device_type/device_id/measurement. Boşluklardan ve özel karakterlerden kaçının. Konuları kısa tutun — her mesaja ek yük getirirler.

# 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

Temiz Bağlantı Kesme ve Yeniden Bağlanma

IoT ortamlarındaki ajanlar ağ kesintilerini sorunsuz biçimde ele almalıdır. paho-mqtt'nin yerleşik yeniden bağlanma mantığını kullanın: reconnect_on_failure=True ayarını yapın ve her yeniden bağlanmada yeniden abone olun; kalıcı oturumlar kullanılmadıkça abonelikler varsayılan olarak kalıcı tutulmaz.

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()

Bilgi Kontrolü

Bir mesajın tam olarak bir kez teslim edilmesini hangi QoS düzeyi garanti eder?

Özet: Ajan Entegrasyonu için MQTT

Harika! Bu derste öğrendikleriniz:

  • paho-mqtt: connect(), loop_start(), subscribe(), publish()
  • QoS düzeyleri: 0 = en fazla bir kez, 1 = en az bir kez, 2 = tam olarak bir kez
  • Saklanan mesajlar: aracı son değeri saklar; yeni aboneler bu değeri hemen alır
  • LWT: beklenmedik bağlantı kesilmesinde aracı çevrimdışı mesajı yayımlar
  • Yeniden bağlanma: on_connect içinde yeniden abone olun; reconnect_delay_set kullanın

Sırada: kayan pencereler, hareketli ortalamalar ve sıçrama algılama ile zaman serisi veri akışlarını işleme.

Sıkça Sorulan Sorular

“Aracı Entegrasyonu İçin MQTT Protokolü” dersi ücretsiz mi?

Evet — “Aracı Entegrasyonu İçin MQTT Protokolü” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Agents kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Agents kursu toplamda 4 dersten oluşur.

“Aracı Entegrasyonu İçin MQTT Protokolü” dersinde ne öğreneceğim?

Aracı kurulumu, konu aboneliği ve mesaj güdümlü aracı etkinleştirme. AI Agents ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

AI Agents öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te AI Agents, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Aracı Entegrasyonu İçin MQTT Protokolü” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu AI Agents dersinde kod yazıp çalıştırabilir miyim?

Evet. Her AI Agents dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Aracı Entegrasyonu İçin MQTT Protokolü
  2. Aracılarda Zaman Serisi Verisi İşleme
  3. Sensör Olaylarına Otomatik Yanıt
  4. Hafif Aracıların Uçta Dağıtımı
← AI Agents Sayfasına Dön