Bird
Raised Fist0
Raspberry Piprogramming~20 mins

InfluxDB for time-series data in Raspberry Pi - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
InfluxDB Time-Series Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this InfluxDB query?

Given the following InfluxDB query executed on a Raspberry Pi collecting temperature data every minute, what will be the output?

SELECT mean("value") FROM "temperature" WHERE time > now() - 1h GROUP BY time(10m)

Assume the data has consistent temperature readings every minute for the last hour.

ARaw temperature values for every minute in the last hour
BA list of average temperature values for each 10-minute interval in the last hour
CAn error because GROUP BY time requires a fill() clause
DA single average temperature value for the entire last hour
Attempts:
2 left
💡 Hint

Think about how GROUP BY time() works in InfluxDB queries.

🧠 Conceptual
intermediate
1:30remaining
Which InfluxDB data type is best for storing Raspberry Pi CPU temperature?

You want to store the Raspberry Pi CPU temperature readings in InfluxDB. Which data type should you use for the temperature field?

AFloat
BBoolean
CString
DInteger
Attempts:
2 left
💡 Hint

Temperature values can have decimal points.

🔧 Debug
advanced
2:30remaining
Why does this InfluxDB write command fail on Raspberry Pi?

Consider this Python code snippet trying to write a temperature point to InfluxDB:

from influxdb_client import InfluxDBClient, Point
client = InfluxDBClient(url="http://localhost:8086", token="my-token", org="my-org")
write_api = client.write_api()
point = Point("temperature").tag("device", "raspberry_pi").field("value", "45.3")
write_api.write(bucket="sensors", record=point)

It raises a type error. What is the cause?

AThe bucket name "sensors" does not exist
BThe tag key "device" is invalid
CThe field value is a string instead of a float
DThe client URL is incorrect
Attempts:
2 left
💡 Hint

Check the data type passed to the field method.

📝 Syntax
advanced
2:00remaining
Which InfluxDB Flux query correctly calculates max temperature per hour?

Choose the correct Flux query to get the maximum temperature per hour from the "temperature" measurement.

Afrom(bucket: "sensors") |> range(start: -24h) |> filter(fn: (r) => r._measurement == "temperature") |> aggregateWindow(every: 1h, fn: max)
Bfrom(bucket: "sensors") |> range(start: -24h) |> filter(fn: (r) => r._measurement == "temperature") |> window(every: 1h) |> max()
Cfrom(bucket: "sensors") |> range(start: -24h) |> filter(fn: (r) => r._measurement == "temperature") |> max(every: 1h)
Dfrom(bucket: "sensors") |> range(start: -24h) |> filter(fn: (r) => r._measurement == "temperature") |> aggregateWindow(every: 1h, fn: mean)
Attempts:
2 left
💡 Hint

aggregateWindow is used to group data by time intervals and apply aggregation.

🚀 Application
expert
3:00remaining
How many points are stored after this batch write?

You run this Python code on your Raspberry Pi to write temperature data points to InfluxDB:

from influxdb_client import InfluxDBClient, Point
client = InfluxDBClient(url="http://localhost:8086", token="token", org="org")
write_api = client.write_api()
data = [
  Point("temperature").field("value", 20.1).tag("device", "pi1"),
  Point("temperature").field("value", 21.3).tag("device", "pi2"),
  Point("temperature").field("value", 19.8).tag("device", "pi1"),
  Point("humidity").field("value", 55).tag("device", "pi1")
]
write_api.write(bucket="sensors", record=data)

How many points are stored in the "sensors" bucket?

A1 point
B3 points
C2 points
D4 points
Attempts:
2 left
💡 Hint

Each Point object represents one data point.

Practice

(1/5)
1. What is the main purpose of InfluxDB when used with a Raspberry Pi?
easy
A. To run a web server for hosting websites
B. To control GPIO pins directly
C. To compile Python programs
D. To store and manage time-series data like sensor readings

Solution

  1. Step 1: Understand InfluxDB's role

    InfluxDB is designed to store time-series data, which means data points collected over time, such as sensor readings.
  2. Step 2: Compare with other options

    Running a web server, compiling Python, or controlling GPIO pins are not the main functions of InfluxDB.
  3. Final Answer:

    To store and manage time-series data like sensor readings -> Option D
  4. Quick Check:

    InfluxDB = time-series data storage [OK]
Hint: InfluxDB is for time-stamped data storage [OK]
Common Mistakes:
  • Confusing InfluxDB with web servers
  • Thinking InfluxDB compiles code
  • Assuming InfluxDB controls hardware pins
2. Which Python code snippet correctly writes a data point to InfluxDB on a Raspberry Pi?
easy
A. client.write_point('temperature', tags={'room':'kitchen'}, fields={'value':22.5})
B. client.write_points([{'measurement':'temperature','tags':{'room':'kitchen'},'fields':{'value':22.5}}])
C. client.write('temperature', {'room':'kitchen'}, 22.5)
D. client.insert_point('temperature', {'room':'kitchen'}, {'value':22.5})

Solution

  1. Step 1: Recall correct method name and parameters

    The InfluxDB Python client uses the method write_points to write data points, and it expects a list of dictionaries with keys 'measurement', 'tags', and 'fields'.
  2. Step 2: Check each option

    client.write_points([{'measurement':'temperature','tags':{'room':'kitchen'},'fields':{'value':22.5}}]) matches the correct method and data structure. Options B, C, and D use incorrect method names or parameter formats.
  3. Final Answer:

    client.write_points([{'measurement':'temperature','tags':{'room':'kitchen'},'fields':{'value':22.5}}]) -> Option B
  4. Quick Check:

    Use write_points with list of dicts [OK]
Hint: Use write_points with list of dicts for data [OK]
Common Mistakes:
  • Using wrong method names like write_point or insert_point
  • Passing dict instead of list of dicts
  • Incorrect parameter structure
3. Given this Python code on Raspberry Pi using InfluxDB client:
data = [{"measurement": "humidity", "tags": {"room": "bedroom"}, "fields": {"value": 45}}]
client.write_points(data)
result = client.query('SELECT * FROM humidity WHERE room = \'bedroom\'')
print(list(result.get_points()))
What will be the output?
medium
A. SyntaxError
B. []
C. [{'time': '...', 'room': 'bedroom', 'value': 45}]
D. None

Solution

  1. Step 1: Understand data insertion

    The code writes one data point with measurement 'humidity', tag 'room'='bedroom', and field 'value'=45. This data is stored in InfluxDB.
  2. Step 2: Query and print results

    The query selects all points from 'humidity' where 'room'='bedroom'. Since the data was just inserted, the query returns that point. Printing the list of points shows a list with one dictionary containing time, room, and value keys.
  3. Final Answer:

    [{'time': '...', 'room': 'bedroom', 'value': 45}] -> Option C
  4. Quick Check:

    Inserted data queried returns list with one point [OK]
Hint: Inserted points appear in query results as dicts [OK]
Common Mistakes:
  • Expecting empty list if data was inserted
  • Confusing syntax error with query result
  • Assuming None is returned from query
4. This Python code snippet on Raspberry Pi tries to write data to InfluxDB but fails:
data = {'measurement': 'temperature', 'tags': {'room': 'office'}, 'fields': {'value': 21.0}}
client.write_points(data)
What is the error and how to fix it?
medium
A. Error: write_points expects a list of points; fix by wrapping data in a list
B. Error: 'fields' key missing; fix by adding 'fields' key
C. Error: 'measurement' must be a string; fix by converting to string
D. No error; code works fine

Solution

  1. Step 1: Identify method parameter requirements

    The write_points method requires a list of data points, even if only one point is written.
  2. Step 2: Analyze given code

    The code passes a single dictionary instead of a list containing that dictionary, causing an error.
  3. Final Answer:

    Error: write_points expects a list of points; fix by wrapping data in a list -> Option A
  4. Quick Check:

    write_points needs list of dicts [OK]
Hint: Always pass a list to write_points even for one point [OK]
Common Mistakes:
  • Passing dict instead of list to write_points
  • Missing 'fields' key in data point
  • Assuming no error occurs
5. You want to store temperature readings from multiple rooms on a Raspberry Pi using InfluxDB. Which Python code correctly writes two points with tags and fields in one call?
hard
A. client.write_points([ {'measurement': 'temperature', 'tags': {'room': 'living'}, 'fields': {'value': 20}}, {'measurement': 'temperature', 'tags': {'room': 'bedroom'}, 'fields': {'value': 22}} ])
B. client.write_points({ 'measurement': 'temperature', 'tags': {'room': ['living', 'bedroom']}, 'fields': {'value': [20, 22]} })
C. client.write_points([ {'measurement': 'temperature', 'tags': {'room': 'living', 'bedroom'}, 'fields': {'value': 20, 22}} ])
D. client.write_points('temperature', tags={'room': ['living', 'bedroom']}, fields={'value': [20, 22]})

Solution

  1. Step 1: Understand data structure for multiple points

    Each data point must be a dictionary with 'measurement', 'tags', and 'fields'. Multiple points are passed as a list of such dictionaries.
  2. Step 2: Evaluate options

    client.write_points([ {'measurement': 'temperature', 'tags': {'room': 'living'}, 'fields': {'value': 20}}, {'measurement': 'temperature', 'tags': {'room': 'bedroom'}, 'fields': {'value': 22}} ]) correctly uses a list of two dictionaries, each with proper tags and fields. Options A, B, and C misuse data structures or method parameters.
  3. Final Answer:

    client.write_points([ {'measurement': 'temperature', 'tags': {'room': 'living'}, 'fields': {'value': 20}}, {'measurement': 'temperature', 'tags': {'room': 'bedroom'}, 'fields': {'value': 22}} ]) -> Option A
  4. Quick Check:

    List of dicts for multiple points [OK]
Hint: Send multiple points as list of dicts with tags and fields [OK]
Common Mistakes:
  • Passing lists inside tags or fields instead of separate points
  • Incorrect method parameters
  • Combining tags incorrectly in one dict
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard