A powerful command-line tool for efficiently processing and analyzing ENEMETER energy measurement data.
This tool processes data from ENEMETER devices, which measure various electrical parameters such as voltage, current, and temperature. The tool is designed to handle large CSV files efficiently and provide meaningful energy metrics for analysis.
- Process large CSV files efficiently with streaming mode
- Filter data by time range, temperature, voltage, or current
- Sample data to reduce processing requirements
- Extract specific metrics for targeted analysis
- Export results in multiple formats (text, JSON, CSV)
- Calculate energy consumption metrics and statistics
- Analyze battery charging/discharging patterns
- Evaluate solar panel contribution
The easiest way to install is to download pre-compiled binaries from the GitHub Releases page.
Choose the appropriate binary for your platform:
enemeter-data-processing-linuxfor Linuxenemeter-data-processing.exefor Windowsenemeter-data-processing-macfor macOS
If you prefer to build from source:
- Go 1.23 or later
git clone https://github.com/MonDesa/enemeter-data-processing.git
cd enemeter-data-processing
make buildProcess a CSV file with required parameters:
./enemeter-data-processing process --input=data/esp32.csv --start="2023-04-01 08:00:00"The --start parameter specifies the starting time of the measurements and is required.
Important: You must include both the date AND time of day in the format "YYYY-MM-DD HH:MM:SS".
Save results to a text file:
./enemeter-data-processing process --input=data/esp32.csv --start="2023-04-01 08:00:00" --output=esp32_report.txt--input=<path>: Path to the input CSV file--start=<time>: Start time for measurements (format: YYYY-MM-DD HH:MM:SS) - must include time of day
--output=<path>: Path to save the output report--format=<text|json|csv>: Output format (default: text)
--stream: Use memory-efficient streaming mode for large files--sample=<N>: Process every Nth record (default: 1, process all records)--max=<N>: Maximum number of records to process (default: 0, no limit)
--start=<time>: (Required) Start time for measurements (format: YYYY-MM-DD HH:MM:SS) - must include time of day--end=<time>: End time for filtering (format: YYYY-MM-DD HH:MM:SS)--window=<duration>: Time window to process (e.g., 1h, 30m, 24h)
--min-temp=<value>: Minimum temperature threshold in millicelsius--volt-min=<value>: Minimum voltage threshold in microvolts--volt-max=<value>: Maximum voltage threshold in microvolts--curr-min=<value>: Minimum current threshold in nanoamperes--curr-max=<value>: Maximum current threshold in nanoamperes
--metric=<name>: Extract a specific metric (see below)
total_energy: Total energy consumption in joulesaverage_power: Average power in wattspeak_power: Peak power in wattstemperature: Temperature statisticsenergy_by_hour: Energy consumption by hourvoltage_stats: Voltage statisticscurrent_stats: Current statisticsbattery_discharge: Battery discharge statisticssolar_contribution: Solar panel contribution
Process a CSV file and display all metrics:
./enemeter-data-processing process --input=data/esp32.csv --start="2023-04-01 08:00:00"Use streaming mode with sampling for very large files:
./enemeter-data-processing process --input=big-data.csv --start="2023-04-01 10:15:30" --stream --sample=10This processes only every 10th record, reducing memory requirements.
To analyze data from a specific time period:
# Analyze data between specific dates and times
./enemeter-data-processing process --input=esp32.csv --start="2023-04-01 08:00:00" --end="2023-04-02 17:30:00"
# Analyze data for a specific duration
./enemeter-data-processing process --input=esp32.csv --start="2023-04-01 12:45:00" --window=24hGet only temperature statistics in JSON format:
./enemeter-data-processing process --input=esp32.csv --start="2023-04-01 08:00:00" --metric=temperature --format=jsonExtract hourly energy consumption in CSV format:
./enemeter-data-processing process --input=esp32.csv --start="2023-04-01 08:00:00" --metric=energy_by_hour --format=csvProcess only records with voltage between specified values:
./enemeter-data-processing process --input=esp32.csv --start="2023-04-01 08:00:00" --volt-min=3500000 --volt-max=4200000Process only records where temperature is above a certain threshold:
./enemeter-data-processing process --input=esp32.csv --start="2023-04-01 08:00:00" --min-temp=25000