Odroid PowerMate Logger and Plotter
This directory contains two Python scripts to log power data from an Odroid PowerMate device and visualize it.
logger.py: Connects to the device's web server, authenticates, and logs real-time power data from its WebSocket to a CSV file.csv_2_plot.py: Reads the generated CSV file and creates a plot image of the power, voltage, and current data over time.
Prerequisites
1. Clone this example
git clone https://github.com/hardkernel/odroid-powermate.git
cd odroid-powermate/example/logger
2. Python and Virtual Environment
It is highly recommended to use a Python virtual environment to manage project dependencies and avoid conflicts with other projects.
Ensure you have Python 3 installed.
-
Create a virtual environment: Open your terminal in this directory and run:
python3 -m venv venvThis will create a
venvdirectory containing the Python interpreter and libraries. -
Activate the virtual environment:
- On Windows:
.\venv\Scripts\activate - On macOS and Linux:
source venv/bin/activate
Your terminal prompt should now show
(venv)at the beginning, indicating that the virtual environment is active. - On Windows:
3. Install Required Libraries
With the virtual environment activated, install the necessary Python packages:
pip3 install requests websockets protobuf pandas matplotlib python-dateutil
4. Protobuf Generated File
The logger.py script uses Google Protocol Buffers (Protobuf) to decode real-time data from the WebSocket. This requires a Python file, status_pb2.py, which is generated from a Protobuf definition file (status.proto).
How to Generate status_pb2.py:
-
Install Protobuf Compiler Tools: You need the
grpcio-toolspackage, which includes theprotoccompiler and Python plugins. You can install it via pip:pip3 install grpcio-tools -
Locate the
.protofile: Ensure you have thestatus.protofile in the current directory. This file defines the structure of the data messages. -
Run the Compiler: Execute the following command in your terminal. This command tells
protocto look forstatus.protoin the directory (-I../../proto) and generate the Python output file (--python_out=.) in the same place.python3 -m grpc_tools.protoc -I../../proto --python_out=. status.proto
After running this command, the status_pb2.py file will be created, and logger.py will be able to use it.
Usage
The process is a two-step workflow: first log the data, then plot it.
Step 1: Log Power Data with logger.py
Run logger.py to connect to your Odroid Smart Power device and save the data to a CSV file.
Syntax:
python3 logger.py <host> -u <username> -p <password> -o <output_file.csv>
Arguments:
host: The IP address or hostname of the Odroid Smart Power device (e.g.,192.168.1.50).-u,--username: The username for logging in.-p,--password: The password for logging in.-o,--output: The path to save the output CSV file. This is required if you want to generate a plot.
Example:
This command will log in and save the power data to power_log.csv.
python3 logger.py 192.168.1.50 -u admin -p mypassword -o power_log.csv
The script will continue to log data until you stop it with Ctrl+C.
Step 2: Generate a Plot with csv_2_plot.py
Once you have a CSV log file, you can use csv_2_plot.py to create a visual graph.
You can also use the csv file recorded from PowerMate Web.
Syntax:
python3 csv_2_plot.py <input.csv> <output.png> [options]
Arguments:
input_csv: The path to the CSV file generated bylogger.py.output_image: The path to save the output plot image (e.g.,plot.png).
Optional Arguments:
-t,--type: Specify which plots to generate. Choices arepower,voltage,current. Default is all three.-s,--source: Specify which power sources to include. Choices arevin,main,usb. Default is all three.
Example 1: Default Plot
This command reads power_log.csv and generates a plot containing power, voltage, and current for all sources, saving it as power_graph.png.
python3 csv_2_plot.py power_log.csv power_graph.png
Example 2: Custom Plot
This command generates a plot showing only the power and current for the MAIN and USB sources.
# main, usb power consumption
python csv_2_plot.py power_log.csv custom_plot.png --type power --source main usb
Example Output
Running the plot script will generate an image file similar to this:
The 5-unit scale is highlighted with a blue dotted line, and the 10-unit scale is highlighted with a red dotted line.
