emon_tools
emon-tools is a Python library that provides a streamlined API interface for seamless interactions with EmonCMS, along with tools designed to analyze and visualize PhpFina files.
Explore the project Wiki for detailed documentation and guides: emon_tools Wiki.
Table of Contents
Installation
The emon-tools package offers flexible installation options tailored to various use cases. Depending on your requirements, you can choose to install the complete package or specific subsets of dependencies.
Best Practices for Installation
-
Environment Management: Always use a virtual environment (e.g.,
venvorconda) to isolate your dependencies and prevent conflicts with other projects. -
Upgrading Dependencies: Keep your dependencies up to date by running
pip install --upgrade emon-toolsperiodically. -
Check Requirements: Review the module's requirements in the
setup.cfgfile or on the PyPI page to ensure compatibility with your system.
Global Installation
To install the entire emon-tools package along with all dependencies—and to ensure you get the latest version—run:
pip install emon-tools["all"] --upgrade
Included Dependencies:
- aiohttp
- numpy
- pandas
- matplotlib
Tip: This is the best option if you plan to use all features, including data manipulation and visualization.
Module-Specific Installation
You can install specific modules and their dependencies as needed. For example:
- To enable
emon_finamodule:
pip install emon-tools["fina"] --upgrade
- To enable pandas time-series output functionality:
pip install emon-tools["fina, time_series"] --upgrade
- To include graph plotting capabilities:
pip install emon-tools["fina, plot"] --upgrade
- To enable
emon_apimodule:
pip install emon-tools["api"] --upgrade
- To enable
emon_finaandemon_apimodules:
pip install emon-tools["api, fina"] --upgrade
Modules
emon_tools is modular, allowing you to install and use individual components as needed.
1. emon_fina
The emon_fina module facilitates the analysis and processing of time-series data, particularly from PhpFina file formats.
Features
- Data Reading: Efficiently read data from PhpFina file formats.
- Time-Series Analysis: Compute daily statistics such as min, max, mean, and more.
- Filtering: Validate and filter data based on custom thresholds.
- Utilities: Timestamp manipulation and interval computation tools.
Usage Example
from emon_tools.fina_time_series import FinaDataFrame
from emon_tools.emon_fina.fina_plot import PlotData
from emon_tools.emon_fina.fina_models import FinaByTimeParamsModel
fdf = FinaDataFrame(
file_name="1",
data_dir="/path/to/phpfina/files"
)
# Access metadata of the .meta file:
print("Meta: ", fdf.meta)
# get height days of data points from meta start_time
ts = fdf.get_df_data(
props=FinaByTimeParamsModel(
start_time=fr.meta.start_time,
time_window=8 * 24 * 3600,
time_interval=10
)
)
PlotData.plot(data=ts)
2. emon_api
The emon_api module is Emoncms python api interface, used to easy interract with an EmonCMS instance via its JSON API.
Features
- Streamlined Interface: A user-friendly Python API for EmonCMS.
- RESTful Communication: Perform seamless data exchanges with EmonCMS through JSON APIs.
- Data Management: Retrieve and manage feeds, inputs, and other EmonCMS structures with ease.
Usage Example
from emon_tools.emon_api.emon_api import EmonFeedsApi
cli = EmonApi(
url="http://127.0.0.1:8080",
api_key="MyAPIKey123"
)
# Get current inputs and feeds on Emoncms server
inputs = cli.list_inputs()
print("Inputs: ", inputs)
feeds = cli.list_feeds()
print("Feeds: ", feeds)
- Wiki: See
emon_apimodule wiki section. - Examples: Explore api_bulk_structure for input and feed supervision, as well as posting bulk dummy data.
🚀 Full-Stack Visualization App Deployment
This optional full-stack application offers a graphical interface to visualize data from any EmonCMS instance and explore archived PhpFina file backups. It comprises:
- FastAPI Backend: Exposes the
emon-toolsfunctionalities via a RESTful API. - Vite React Frontend: A modern dashboard built using React, TypeScript, and Tailwind CSS.
Overview
The full-stack app enables users to:
- Interactively browse and monitor live data from EmonCMS instances.
- Visualize historical time-series data from archived PhpFina files.
- Manage EmonCMS feeds and inputs via an intuitive web interface.
🧰 Prerequisites
Ensure the following are installed on your system:
- Docker
- Docker Compose
📦 Deployment Steps
This repository now includes a Docker Compose example that leverages the provided Dockerfiles for both backend and frontend. This approach is ideal for quickly deploying the full-stack app in a containerized environment.
- Clone the Repository
git clone https://github.com/vemonitor/emon_tools.git
cd emon_tools
- Set Up Environment Variables
Navigate to the Docker Compose development directory and create a .env file by copying the provided example:
cd docker-compose\dev
copy .example_env .env
Edit the .env file to replace placeholder values (changethis) with your actual configuration:
MYSQL_HOST=your_mysql_host
MYSQL_PORT=3306
MYSQL_DB=your_database_name
MYSQL_USER=your_username
MYSQL_PASSWORD=your_password
MYSQL_ROOT_PASSWORD=your_root_password
Note: The
.envfile is utilized by Docker Compose for variable substitution in thedocker-compose.ymlfile. Ensure all required variables are defined to prevent runtime errors.
- Build containers and start the containers:
From the docker-compose/dev directory, execute:
docker-compose up --build
This command builds the Docker images and starts the containers as defined in the docker-compose.yml file.
- Access the Application
Once the containers are running:
- Frontend: Access the React dashboard at http://localhost:3000
- Backend: Access the FastAPI backend at http://localhost:8000
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
🪟 Accessing from Windows Host (WSL2 Users)
If you're running Docker within WSL2 and need to access the application from your Windows host:
-
Determine the IP address of your WSL2 instance:
ip addr show eth0 | grep inet
Look for an output similar to:
inet 172.20.39.89/20 brd 172.20.47.255 scope global eth0
-
Use the extracted IP address to access the application from your Windows browser:
-
Frontend: http://172.20.39.89:3000
-
Backend: http://172.20.39.89:8000
Note: WSL2 has a separate network interface, so
localhoston Windows does not directly map tolocalhostwithin WSL2. Using the WSL2 IP address bridges this gap.
Running Tests
To ensure everything is functioning correctly, run the test suite:
pytest -v
Contributing
Contributions are welcome! To contribute:
- Fork the repository.
- Create a feature branch.
- Submit a pull request with a clear description.
License
This project is licensed under the MIT License. See LICENSE for more details.
Metadata
Release files for emon-tools 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| emon_tools-0.3.1.tar.gz | 51.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| emon_tools-0.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 111.6 kB
Release files / emon_tools-0.3.1.tar.gz
| Download URL | emon_tools-0.3.1.tar.gz |
|---|---|
| Size | 51.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ff9ea94de0dc65180fd322d16a090d69e9029dff08cee37f10715a75945b95eb
|
|
BLAKE2b-256 checksum How to use checksums |
47c42d47ef45f0ed1f2afe15bd07dbd3661b9220c4fb9b6cb8fd51343a3daebf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.9.22
|
Release files / emon_tools-0.3.1-py3-none-any.whl
| Download URL | emon_tools-0.3.1-py3-none-any.whl |
|---|---|
| Size | 60.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
860bd1c8d39a0123eea351cae043400ec30b830c2cc5131dcf28852c11c80956
|
|
BLAKE2b-256 checksum How to use checksums |
b3c71f7537f2a2dd8d5a38fee640e1d23b67338122a0df0b68bd1f6182a7ec2f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.9.22
|