Python client for EG4 solar inverter monitoring with async/sync support
Project description
EG4 Inverter Python Client
eg4_python is a Python library that provides both async and sync methods to interact with the EG4 Inverter cloud API. It handles login, data retrieval, and session management efficiently — ideal for integration with Home Assistant, MCP, automation platforms, or custom monitoring solutions.
Caveats
Features
✅ Asynchronous and synchronous support (via asyncio and sync wrappers)
✅ Automatic re-authentication on session expiry (401 errors)
✅ Modular structure for future expandability
✅ Supports DISCOVERING multiple inverters from a single account
Installation
Using PyPI (Recommended)
pip install eg4_python
Development Version (Editable Mode)
git clone https://github.com/yourusername/eg4_python.git
cd eg4_python
pip install -e .[dev] # For development and testing
Usage
Example Code
You can look at the "test" function in client.py
import asyncio
from eg4_python import EG4InverterAPI
async def main():
api = EG4InverterAPI(username="username", password="password", base_url="https://monitor.eg4electronics.com")
await api.login(ignore_ssl=True)
# Display Inverters
for index, inverter in enumerate(api.get_inverters()):
print(f"Inverter {index}: {inverter}")
print("Selecting Inverter 0")
api.set_selected_inverter(inverterIndex=0)
# Fetch Runtime Data
runtime_data = await api.get_inverter_runtime_async()
print("Runtime Data:", runtime_data)
# Fetch Energy Data
energy_data = await api.get_inverter_energy_async()
print("Energy Data:", energy_data)
# Fetch Battery Data
battery_data = await api.get_inverter_battery_async()
print("Battery Data:", battery_data)
await api.close()
asyncio.run(main())
Configuration
Environment Variables (Recommended for Secrets)
Create a .env file:
USERNAME=your_username
PASSWORD=your_password
SERIAL_NUMBER=
PLANT_ID=
BASE_URL=https://monitor.eg4electronics.com
Example .env Loading in Code
import os
from dotenv import load_dotenv
load_dotenv()
USERNAME = os.getenv("USERNAME")
PASSWORD = os.getenv("PASSWORD")
API Methods
Authentication & Session Management
async def login()– Handles login and saves the JSESSIONID cookie. Accepts ignore_ssl=[true|false]async def close()– Gracefully closes the HTTP session.
Setup
get_inverters()- list the inverters associated with the account, after loginset_selected_inverter(inverterIndex=index)- Selects an inverter from the list of invertersset_selected_inverter(plantId=plantId, serialNum=serialNum)- Explicitly sets the selected inverter
Data Retrieval
async def get_inverter_runtime_async()– Retrieves inverter runtime data.async def get_inverter_energy_async()– Retrieves inverter energy data.async def get_inverter_battery_async()– Retrieves battery data, including individual battery units.
Parameters read/write
async def read_settings_async()– reads parameters.async def write_settings_async()– writes a parameter value.
Sync Methods (Wrappers)
get_inverter_runtime()get_inverter_energy()get_inverter_battery()read_settings()write_settings()
Running Tests
Ensure you have development dependencies installed:
pip install -e .[dev]
Then run the test suite:
pytest tests/
Roadmap
- ✅ Initial EG4 API implementation
- ✅ Async/Sync support
- ✅ Setting inverter values
- 🔜 ...Full Home Assistant Integration
- 🔜 ...You tell me
License
This project is licensed under the APACHE License.
Contributing
Contributions are welcome! Please open issues, suggest improvements, or submit pull requests.
- Fork the repository
- Create your feature branch (
git checkout -b feature/awesome-feature) - Commit your changes (
git commit -m 'Add an awesome feature') - Push to the branch (
git push origin feature/awesome-feature) - Open a Pull Request
Author
Garreth Jeremiah
GitHub Profile
Acknowledgments
Special thanks to DAB Ultimate beer!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file eg4_python-0.1.2.tar.gz.
File metadata
- Download URL: eg4_python-0.1.2.tar.gz
- Upload date:
- Size: 18.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
50326fa09b3c6ee11b0daf06af0de5ab1b794a2504dc11ecf052321785f67ad0
|
|
| MD5 |
f7addc2d6e909e32796b4c4bb1250126
|
|
| BLAKE2b-256 |
fb633f8712c339e3eb66eae9bea0b3e787bf1670c1202cde6f8d2da5fb5523c2
|
File details
Details for the file eg4_python-0.1.2-py3-none-any.whl.
File metadata
- Download URL: eg4_python-0.1.2-py3-none-any.whl
- Upload date:
- Size: 16.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
631559e1045581761008f5184409f69d788fa5a2fde0d51569b6cf3b5cf37ba9
|
|
| MD5 |
4009e007bf6a0bc36278ab0469faabda
|
|
| BLAKE2b-256 |
eb515cc2320854e8e348de5328ce32b30ffb775519e73c83f6ae038d9b91c556
|