📖 Scenario: You are working with a smart home system that uses MQTT to communicate between devices and a central server. To organize messages clearly, you need to create a topic structure that helps devices publish and subscribe to the right information.Think of MQTT topics like folders in a filing cabinet. Each device and message type has its own place so everyone knows where to look.
🎯 Goal: Build a simple MQTT topic pattern dictionary that maps device types to their topic paths. Then, add a configuration for a location prefix. Finally, create full topic paths by combining the location and device topics, and print the result.
📋 What You'll Learn
Create a dictionary called device_topics with exact keys and values for device types and their MQTT topic suffixes.
Add a string variable called location_prefix with the exact value home/livingroom.
Use a dictionary comprehension to create a new dictionary called full_topics that combines location_prefix and each topic suffix from device_topics.
Print the full_topics dictionary exactly as shown.
💡 Why This Matters
🌍 Real World
MQTT topic design is essential for organizing messages in IoT systems, making it easier to manage devices and data flow.
💼 Career
Understanding topic patterns helps DevOps engineers and IoT developers set up scalable and maintainable communication between devices and servers.
Progress0 / 4 steps
1
Create the MQTT topic suffix dictionary
Create a dictionary called device_topics with these exact entries: 'temperature_sensor': 'sensor/temperature', 'humidity_sensor': 'sensor/humidity', 'light_switch': 'actuator/light'.
IOT Protocols
Hint
Use curly braces {} to create a dictionary. Each key and value should be a string exactly as shown.
2
Add the location prefix variable
Add a string variable called location_prefix and set it to 'home/livingroom'.
IOT Protocols
Hint
Use a simple assignment to create the variable with the exact string value.
3
Create full MQTT topic paths
Use a dictionary comprehension to create a new dictionary called full_topics that combines location_prefix and each topic suffix from device_topics separated by a slash /. Use for device, topic in device_topics.items() in the comprehension.
IOT Protocols
Hint
Use an f-string inside the comprehension to join location_prefix and topic with a slash.
4
Print the full topic dictionary
Write a print statement to display the full_topics dictionary exactly as it is.
IOT Protocols
Hint
Use print(full_topics) to show the dictionary.
Practice
(1/5)
1. What is the main purpose of using topic design patterns in IoT communication?
easy
A. To increase the battery life of sensors
B. To encrypt messages for security
C. To reduce the size of IoT devices
D. To organize messages clearly and make communication scalable
Solution
Step 1: Understand the role of topics in IoT
Topics help organize messages by categorizing them into levels separated by slashes.
Step 2: Identify the benefit of good topic design
Good topic design makes communication clear and scalable, allowing easy message filtering and management.
Final Answer:
To organize messages clearly and make communication scalable -> Option D
Quick Check:
Topic design = Clear, scalable communication [OK]
Hint: Topics organize messages for clarity and scale [OK]
Common Mistakes:
Confusing topic design with security features
Thinking topic design affects device hardware
Assuming topic design saves battery life
2. Which of the following is the correct syntax for a multi-level wildcard subscription in MQTT topics?
easy
A. home/#/temperature/+
B. home/temperature/+/+
C. home/+/temperature/#
D. home/temperature/#/+
Solution
Step 1: Recall MQTT wildcard rules
The plus sign (+) matches one topic level, and the hash (#) matches multiple levels at the end.
Step 2: Check syntax correctness
home/+/temperature/# uses + for one level and # at the end for multiple levels, which is valid syntax.
Final Answer:
home/+/temperature/# -> Option C
Quick Check:
Multi-level wildcard ends with # [OK]
Hint: Use + for single level, # only at end [OK]
Common Mistakes:
Placing # in the middle of the topic
Using + to match multiple levels
Mixing order of + and # incorrectly
3. Given the subscription topic building/+/floor1/#, which published topic will NOT be received by the subscriber?
medium
A. building/roomC/floor2/temperature
B. building/roomB/floor1/humidity
C. building/room/floor1/temperature
D. building/roomA/floor1/temperature
Solution
Step 1: Analyze the subscription pattern
The + matches exactly one level after 'building', and # matches any levels after 'floor1'.
Step 2: Test each published topic
Options A, B, and C match 'building/roomX/floor1/...' correctly. building/roomC/floor2/temperature has 'floor2' instead of 'floor1', so it does not match.
Final Answer:
building/roomC/floor2/temperature -> Option A
Quick Check:
Subscription requires floor1 level [OK]
Hint: Check each topic level matches + and # rules [OK]
Common Mistakes:
Ignoring the exact match required by + wildcard
Assuming # matches levels before floor1
Confusing floor1 and floor2 levels
4. Identify the error in this MQTT subscription topic: home/+/+/temperature/#/humidity
medium
A. The # wildcard is not allowed in the middle of the topic
B. Using multiple + wildcards consecutively is invalid
C. The topic must start with a slash
D. Wildcards cannot be combined with normal topic levels
Solution
Step 1: Review MQTT wildcard placement rules
The # wildcard must be the last character in the topic filter and can only appear once.
Step 2: Check the given topic
The # wildcard appears in the middle before /humidity, which is invalid syntax.
Final Answer:
The # wildcard is not allowed in the middle of the topic -> Option A
Quick Check:
# only at end of topic [OK]
Hint: # wildcard only at topic end [OK]
Common Mistakes:
Thinking multiple + wildcards are invalid
Believing topics must start with slash
Assuming wildcards can't mix with normal levels
5. You want to design MQTT topics to monitor sensors in multiple buildings, floors, and rooms. Which topic pattern best supports scalable subscription to all temperature sensors on floor 2 across all buildings?
hard
A. building/+/+/floor2/temperature
B. building/+/floor2/+/temperature
C. building/#/floor2/temperature
D. building/+/floor2/temperature/#
Solution
Step 1: Understand the hierarchy needed
Topics should include building, floor, room, and sensor type levels.
Step 2: Analyze each option for scalability and correctness
building/+/floor2/+/temperature uses + to match any building and any room on floor2, then temperature sensor, which is clear and scalable. building/#/floor2/temperature misplaces # wildcard. building/+/+/floor2/temperature has extra + before floor2, which breaks hierarchy. building/+/floor2/temperature/# places # after temperature, which is unnecessary and less clear.
Final Answer:
building/+/floor2/+/temperature -> Option B
Quick Check:
Use + for flexible levels, keep clear order [OK]
Hint: Use + for each flexible level, keep order clear [OK]
Common Mistakes:
Misplacing # wildcard inside topic
Adding extra + levels breaking hierarchy
Using # after sensor type unnecessarily
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.