Övning 26 / 29
Prenumerera på ett ämne
Beräknad tid: 20 min
Varför
Publicera lämnar ett meddelande hos brokern. Prenumerera är den andra halvan: ett program som står kvar och skriver ut det som kommer. Utan en lyssnare ser du inte att MQTT faktiskt flyttar data.
Den nya idén
Subscribe — att be brokern skicka hit alla meddelanden på ett visst topic. Prenumerationen lever så länge programmet körs.
Callback — en funktion du skriver, som paho anropar när något händer. Vid subscribe.callback anropas den varje gång ett meddelande kommer.
payload är bytestext. decode() gör den till en vanlig sträng så att å, ä och ö syns. Utan decode får du b'...' i utskriften.
import paho.mqtt.subscribe as subscribe
def visa(client, userdata, message):
print(message.payload.decode())
print("Lyssnar. Avbryt med Ctrl+C.")
subscribe.callback(
visa,
"nackademin/sam/hello",
hostname="mqtt.progress42.com",
port=1883,
)Starta lyssnaren först. MQTT med vanlig QoS 0 sparar inte meddelanden som skickades innan någon lyssnade. Två terminalfönster: ett för prenumerera, ett för publicera.
subscribe.callback lämnar inte tillbaka kontrollen. Det är meningen. Tryck Ctrl+C när du är klar.
Uppgift
Skapa filen prenumerera.py som prenumererar på samma topic som i övning 25 (nackademin/<ditt-namn>/hello). För varje meddelande: skriv ut payload som text.
- Öppna två terminaler i samma mapp.
- Kör prenumerera.py i den första. Låt den stå.
- Kör publicera.py i den andra (eller skriv en ny publicering).
- Kontrollera att texten syns i lyssnarfönstret.
Vill du se en klasskamrats meddelande: byt topic till deras namn och be dem publicera igen.
Förväntat resultat
Lyssnaren skriver först en rad om att den väntar. När du publicerar kommer payload på nästa rad. Exempel om publicera.py skickade Hej från Sam:
Lyssnar. Avbryt med Ctrl+C.
Hej från Sam