Multi-device MQTT network in Raspberry Pi - Mini Project: Build & Apply
devices with these exact strings: 'pi1', 'pi2', 'pi3'.Use square brackets and quotes to create the list.
topic and set it to the string 'home/temperature'.Assign the string 'home/temperature' to the variable topic.
for loop using device to iterate over devices. Inside the loop, create a variable temperature set to 20 + devices.index(device) * 2 to simulate different readings.Use the index of the device in the list to calculate temperature.
for loop, add a print statement that outputs exactly: Publishing from {device} to {topic}: {temperature}°C using an f-string.Use an f-string to include variables inside the print message.
Practice
What is the main role of the MQTT broker in a multi-device network?
Solution
Step 1: Understand MQTT broker function
The MQTT broker acts as a central hub that receives messages from devices and forwards them to others subscribed to the same topic.Step 2: Eliminate incorrect roles
The broker does not store data permanently, assign IPs, or encrypt messages by default; its main job is message routing.Final Answer:
It routes messages between devices based on topics. -> Option AQuick Check:
MQTT broker = message router [OK]
- Thinking broker stores all data permanently
- Confusing broker with network router
- Assuming broker assigns IP addresses
Which of the following is the correct way to connect a Raspberry Pi MQTT client using the paho-mqtt Python library?
client = mqtt.Client(____)
Solution
Step 1: Identify client ID parameter
Themqtt.Client()constructor takes a unique client ID string to identify the device to the broker.Step 2: Understand other options
Broker address is used inconnect()</>, not inClient()</>. Methods likeconnect()or topics are not valid constructor arguments.Final Answer:
"unique_client_id" -> Option DQuick Check:
Client ID goes in Client() constructor [OK]
- Passing broker address to Client() instead of connect()
- Using method calls as constructor arguments
- Confusing topic names with client ID
Given this Python code snippet using paho-mqtt on a Raspberry Pi, what will be printed when a message with payload 'ON' is received on topic 'home/livingroom/light'?
def on_message(client, userdata, msg):
if msg.topic == 'home/livingroom/light':
print(f"Light status: {msg.payload.decode()}")
client = mqtt.Client("pi1")
client.on_message = on_message
client.connect("broker.local")
client.subscribe("home/livingroom/light")
client.loop_start()Solution
Step 1: Understand message payload decoding
The payload is a byte string, somsg.payload.decode()converts it to a normal string, here 'ON'.Step 2: Check print statement output
The print uses an f-string to show "Light status: ON" exactly when the topic matches.Final Answer:
Light status: ON -> Option BQuick Check:
Decoded payload prints as string [OK]
- Printing raw bytes without decoding
- Not subscribing to the correct topic
- Missing the on_message callback assignment
Identify the error in this MQTT client setup code on a Raspberry Pi:
client = mqtt.Client()
client.connect("broker.local")
client.subscribe("home/kitchen/temperature")
client.loop_forever()
# Missing on_message callback assignmentSolution
Step 1: Check callback assignment
Without assigningclient.on_message, received messages have no handler and won't be processed.Step 2: Verify other parts
Client ID is optional but recommended; subscribe syntax is correct; loop_forever() must be after connect().Final Answer:
The on_message callback is not assigned, so messages won't be processed. -> Option AQuick Check:
Missing on_message means no message handling [OK]
- Ignoring on_message callback assignment
- Thinking client ID is mandatory
- Calling loop_forever() before connect()
You want to control multiple Raspberry Pi devices in different rooms using MQTT. Each device should only receive messages for its room. Which is the best way to organize MQTT topics and client IDs?
- Device 1 in living room
- Device 2 in kitchen
Choose the best topic and client ID setup.
Solution
Step 1: Organize topics by room
Using hierarchical topics likehome/livingroom/#andhome/kitchen/#lets devices subscribe only to their room's messages.Step 2: Assign unique client IDs
Unique client IDs likepi_livingroomandpi_kitchenavoid connection conflicts and identify devices clearly.Final Answer:
Use topics like home/livingroom/# and home/kitchen/# with client IDs pi_livingroom and pi_kitchen. -> Option CQuick Check:
Unique IDs + room topics = clean multi-device MQTT [OK]
- Using same client ID for multiple devices
- Subscribing all devices to a single topic
- Not organizing topics by device location
Ready to prove it?
Pass the test and this pattern moves unknown
