Bird
Raised Fist0
Raspberry Piprogramming~30 mins

InfluxDB for time-series data in Raspberry Pi - Mini Project: Build & Apply

Choose your learning style10 modes available
InfluxDB for Time-Series Data on Raspberry Pi
📖 Scenario: You have a Raspberry Pi collecting temperature data every minute. You want to store this data in InfluxDB, a database designed for time-series data. This project will guide you to create a simple Python script that writes temperature readings to InfluxDB and then queries the stored data.
🎯 Goal: Build a Python script that connects to InfluxDB, writes temperature data points, and retrieves the stored data to display it.
📋 What You'll Learn
Use the influxdb-client Python library to connect to InfluxDB
Create a data point with measurement, tags, fields, and timestamp
Write data points to InfluxDB
Query data points from InfluxDB
Print the queried data
💡 Why This Matters
🌍 Real World
Storing and analyzing sensor data like temperature, humidity, or CPU usage over time on a Raspberry Pi.
💼 Career
Skills in time-series databases and IoT data handling are valuable for roles in data engineering, IoT development, and system monitoring.
Progress0 / 4 steps
1
Setup InfluxDB Client Connection
Import InfluxDBClient from influxdb_client and create a client instance called client connecting to "http://localhost:8086" with token "my-token" and org "my-org".
Raspberry Pi
Hint

Use InfluxDBClient constructor with url, token, and org parameters.

2
Create Write API and Prepare Data Point
Create a write API instance called write_api from client.write_api(). Then create a data point string called point with measurement "temperature", tag location="office", field value=23.5, and current timestamp using InfluxDB line protocol format.
Raspberry Pi
Hint

Use client.write_api() to get the write API. The data point string uses the format: measurement,tag=value field=value.

3
Write Data Point to InfluxDB
Use write_api.write() to write the point to bucket "my-bucket" and org "my-org".
Raspberry Pi
Hint

Call write_api.write() with bucket, org, and record parameters.

4
Query and Print Stored Temperature Data
Create a query API instance called query_api from client.query_api(). Write a Flux query string query to select all temperature values from bucket "my-bucket" in the last 1 hour. Use query_api.query() to run the query and print each record's _time and _value.
Raspberry Pi
Hint

Use client.query_api() to get the query API. Write a Flux query string to select data from the last hour. Loop through results and print time and value.

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