MQTT-protokollen for agentintegrasjon
Konfigurer megler, abonner på emner og aktiver agenter basert på meldinger.
MQTT-protokollen for agentintegrasjon er en gratis leksjon i AI-agenter på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i AI-agenter, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i AI-agenter inneholder totalt 4 leksjoner.
MQTT- og IoT-agenter
MQTT (Message Queuing Telemetry Transport) er en lettvektsprotokoll for publisering og abonnement, utviklet for IoT-miljøer med lav båndbredde og høy forsinkelse. Agenter kan abonnere på MQTT-emner for å motta sensordata i sanntid og publisere kommandoer tilbake til enheter.
Installere paho-mqtt
Biblioteket paho-mqtt er standardklienten for MQTT i Python. Installer det med pip. Det støtter MQTT 3.1.1 og 5.0, TLS-kryptering og alle tre QoS-nivåene.
# 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)Koble til broker
Koble til en MQTT-broker (f.eks. Mosquitto, HiveMQ, EMQX eller en skybasert broker). Kallet connect er ikke-blokkerende; bruk loop_start() til å kjøre nettverksløkken i en bakgrunnstråd.
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 connectionAbonnere på et topic
Topic-er er hierarkiske strenger som sensors/temperature eller factory/line1/pressure. Bruk # som jokertegn for alle underliggende topic-er, eller + som jokertegn for ett enkelt nivå. Knytt en on_message-callback til for å behandle innkommende meldinger.
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-nivåer forklart
MQTT har tre Quality of Service-nivåer: QoS 0 — send og glem (raskest, meldinger kan gå tapt), QoS 1 — minst én gang (meldingen bekreftes, men kan bli duplisert), QoS 2 — nøyaktig én gang (garantert, tregest). Velg nivå basert på hvor mye datatap og ventetid som kan aksepteres.
# 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')Retained-meldinger
En retained message er den sist publiserte verdien for et topic som brokeren lagrer og umiddelbart sender til alle nye abonnenter. Dette er ideelt for topic-er som beskriver sensortilstand: Når en ny agentinstans kobler seg til nettverket, kjenner den den gjeldende sensorverdien umiddelbart uten å måtte vente på neste oppdatering.
# 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')Bygge en MQTT-sensoragent
En sensoragent abonnerer på rå sensortopic-er, validerer innkommende data og avgjør om en handling skal utløses. Beslutningslogikken bruker LLM-en bare i komplekse tilfeller; enkle terskelsjekker håndteres i ren Python for å oppnå høy hastighet.
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 over WebSocket
MQTT over WebSocket (port 8083 eller 8084 for TLS) gjør at nettleserbaserte dashbord og agenter kan koble seg til MQTT-brokere uten en innebygd TCP-tilkobling. Konfigurer paho-mqtt til å bruke WebSocket-transporten med alternativet 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')Last Will and Testament
MQTTs Last Will and Testament (LWT) gjør at brokeren publiserer en melding på vegne av en klient hvis klienten kobles fra uventet. Bruk dette til å varsle andre agenter om at en sensoragent har gått offline, slik at de kan bytte til en reservemodus.
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()Beste praksis for topic-design
God topic-design gjør agentkoden enklere å vedlikeholde og skalere. Bruk et hierarki: location/device_type/device_id/measurement. Unngå mellomrom og spesialtegn. Hold topic-ene korte — de legger til overhead i hver melding.
# 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/celsiusKorrekt frakobling og gjenoppkobling
Agenter i IoT-miljøer må håndtere nettverksavbrudd på en robust måte. Bruk den innebygde gjenoppkoblingslogikken i paho-mqtt: angi reconnect_on_failure=True og abonner på nytt ved hver gjenoppkobling, siden abonnementer ikke lagres som standard (med mindre det brukes persistente økter).
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()Kunnskapssjekk
Hvilket QoS-nivå garanterer at en melding leveres nøyaktig én gang?
Oppsummering: MQTT for agentintegrasjon
Utmerket! Dette lærte De i denne leksjonen:
- paho-mqtt:
connect(),loop_start(),subscribe(),publish() - QoS-nivåer: 0 = høyst én gang, 1 = minst én gang, 2 = nøyaktig én gang
- Retained-meldinger: brokeren lagrer den siste verdien, og nye abonnenter mottar den umiddelbart
- LWT: brokeren publiserer en offlinemelding ved uventet frakobling
- Gjenoppkobling: abonner på nytt i
on_connect; brukreconnect_delay_set
Neste tema: behandling av tidsseriedatastrømmer — rullerende vinduer, glidende gjennomsnitt og deteksjon av topper.
Lær deg AI-agenter med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 60
- Leksjoner
- 239
Ofte stilte spørsmål
Er leksjonen «MQTT-protokollen for agentintegrasjon» gratis?
Ja – hele teksten i «MQTT-protokollen for agentintegrasjon» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av AI-agenter-kurset, kan du oppgradere til CoddyKit PRO. Kurset i AI-agenter inneholder totalt 4 leksjoner.
Hva lærer jeg i «MQTT-protokollen for agentintegrasjon»?
Konfigurer megler, abonner på emner og aktiver agenter basert på meldinger. Du øver på AI-agenter med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med AI-agenter?
Ingen tidligere erfaring er nødvendig. AI-agenter på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «MQTT-protokollen for agentintegrasjon»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne AI-agenter-leksjonen?
Ja. Alle AI-agenter-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- MQTT-protokollen for agentintegrasjon
- Behandling av tidsseriedata i agenter
- Automatiserte svar på sensorhendelser
- Distribusjon av lette agenter på edge-enheter