Övning 27 / 29
JSON-telemetri
Beräknad tid: 20 min
Varför
En temperatur är ett tal, men en sensor skickar oftast flera fält tillsammans. JSON är samma textform som i övning 24 — nu åker den över MQTT i stället för till en fil.
Den nya idén
Telemetri — mätvärden som skickas från en enhet. I den här övningen är enheten ditt program, och värdena kan vara slumpade.
json.dumps tar en dictionary och ger en sträng. Den strängen är payload. Brokern förstår inte JSON — den flyttar bara text. Mottagaren tolkar den senare.
import json
data = {"temp": 21, "fukt": 40}
print(json.dumps(data))publish.single(
"nackademin/sam/telemetry",
payload=json.dumps(data),
hostname="mqtt.progress42.com",
port=1883,
)Använd ett eget topic som slutar på /telemetry. Då krockar du inte med hello-övningen, och övning 28 kan lyssna just där.
Uppgift
Skapa filen telemetri.py som gör följande:
- Importerar json, random och paho.mqtt.publish.
- Bygger tre dictionaries med temp (heltal 18–28) och fukt (heltal 30–60).
- Publicerar varje dictionary som JSON till nackademin/<ditt-namn>/telemetry på mqtt.progress42.com:1883.
- Skriver ut den JSON-sträng som skickades, en rad per mätning.
Du får återanvända idén från ny_matning i övning 24. Tre anrop till publish.single i en loop räcker — du behöver inte hålla anslutningen öppen.
Förväntat resultat
Tre rader JSON. Nycklarna ska heta temp och fukt. Talen varierar. Exempel på en möjlig körning:
{"temp": 21, "fukt": 44}
{"temp": 27, "fukt": 38}
{"temp": 19, "fukt": 51}