Przejdź do głównej zawartości

MQTT

Opracowano na podstawie:

Install Mosquitto Broker Raspberry Pi

Instalacja

sudo apt install -y mosquitto mosquitto-clients

Autostart on boot:

sudo systemctl enable mosquitto.service

Sprawdzenie statusu:

mosquitto -v

Konfiguracja Mosquitto / MQTT

sudo nano /etc/mosquitto/mosquitto.conf

Sprawdzenie / dodanie opcji

listener 1883
allow_anonymous true

screen

Restart serwisu

sudo systemctl restart mosquitto

Test Mosquitto / MQTT

Nadawanie:

mosquitto_pub -h 192.168.0.134 -t "mytopic/test" -m "Hello"

Odbiór:

mosquitto_sub -h "192.168.0.134" -t mytopic/test

Aplikacja chat

import paho.mqtt.client as mqtt
import threading
import time

BROKER = "192.168.0.242" # lub "localhost"
PORT = 1883
TOPIC = "chat/room"

nickname = input("Podaj swój nick: ")

client = mqtt.Client()

def on_connect(client, userdata, flags, rc):
if rc == 0:
print("[MQTT] Połączono z brokerem.")
client.subscribe(TOPIC)
else:
print("[MQTT] Błąd połączenia. Kod:", rc)

def on_message(client, userdata, msg):
message = msg.payload.decode()
if not message.startswith(nickname + ":"):
print("\n" + message + "\n> ", end='')

def send_messages():
while True:
msg = input("> ")
if msg.lower() in ("exit", "quit"):
client.disconnect()
break
full_msg = f"{nickname}: {msg}"
client.publish(TOPIC, full_msg)

client.on_connect = on_connect
client.on_message = on_message

client.connect(BROKER, PORT, keepalive=60)

# Uruchom wątek do wysyłania wiadomości
threading.Thread(target=send_messages, daemon=True).start()

client.loop_forever()