Ö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.

En mätning som JSON
import json

data = {"temp": 21, "fukt": 40}
print(json.dumps(data))
Skicka strängen som payload — skiss
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:

  1. Importerar json, random och paho.mqtt.publish.
  2. Bygger tre dictionaries med temp (heltal 18–28) och fukt (heltal 30–60).
  3. Publicerar varje dictionary som JSON till nackademin/<ditt-namn>/telemetry på mqtt.progress42.com:1883.
  4. 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:

python3
{"temp": 21, "fukt": 44}
{"temp": 27, "fukt": 38}
{"temp": 19, "fukt": 51}

Kör fast?