A terminal user interface (TUI) application for monitoring and controlling APsystems EZ1 microinverters, built with Go and Bubbletea.
- Real-time Dashboard: Current power output, daily energy generation, and lifetime statistics
- Device Information: Device ID, firmware version, IP address, WiFi SSID, and power specifications
- Alarm Monitoring: Grid faults, PV short circuits, and output errors
- Power Control: Remote power management (ON/OFF) and adjustable power limits
- APsystems EZ1-M microinverter with local API enabled
- Network access to the microinverter
brew tap-new niclaszll/homebrew-tap
brew install niclaszll/tap/ez1-tuiDownload the latest release for your platform from the releases page.
go install github.com/niclaszll/apsystems-ez1-tui/cmd/ez1-tui@latestgit clone https://github.com/niclaszll/apsystems-ez1-tui.git
cd apsystems-ez1-tui
make buildBefore using this application, you must enable the local API on your APsystems EZ1 microinverter:
- Connect to the microinverter using the "Direct Connection" method in the APsystems app
- Navigate to Settings → Local Mode
- Enable local mode and select "Continuous"
- Note the IP address displayed (you'll need this to run the application)
For detailed setup instructions with screenshots, see the APsystems EZ1-API repository.
ez1-tui -host 192.168.1.100ez1-tui -host 192.168.1.100 -port 8050-host(required): IP address or hostname of your microinverter-port(optional): API port number (default: 8050)-version: Show version information
Tab: Switch between views (Dashboard → Device Info → Alarms → Power Control)r: Refresh data immediately?: Toggle help menuqorCtrl+C: Quit application
o: Turn device ONf: Turn device OFF+or=: Increase max power limit by 50W-or_: Decrease max power limit by 50W
The project is structured as follows:
.
├── cmd/
│ └── ez1-tui/ # Main application entry point
│ └── main.go
├── pkg/
│ └── apsystems/ # APsystems EZ1 API client library
│ ├── client.go # HTTP client and request handling
│ ├── types.go # Data structures for API responses
│ └── api.go # API endpoint implementations
└── internal/
└── tui/ # Terminal UI implementation
└── tui.go # Bubbletea model and views
The pkg/apsystems package can be used independently as a Go client library for the APsystems EZ1 API:
package main
import (
"context"
"fmt"
"github.com/niclaszll/apsystems-ez1-tui/pkg/apsystems"
)
func main() {
client := apsystems.NewClient("192.168.1.100", 8050)
stats, err := client.GetStatistics(context.Background())
if err != nil {
panic(err)
}
fmt.Printf("Current Power: %d W\n", stats.TotalPower)
fmt.Printf("Energy Today: %.3f kWh\n", stats.TotalEnergyToday)
}GetDeviceInfo(ctx): Device details (serial, IP, firmware, etc.)GetAlarmInfo(ctx): Alarm status for all monitored parametersGetOutputData(ctx): Current power and energy readingsGetStatistics(ctx): Aggregated statistics from both PV inputsGetMaxPower(ctx): Current maximum power limit settingSetMaxPower(ctx, watts): Set maximum power limit (30-800W)GetDevicePowerStatus(ctx): Current power status (ON/OFF)SetDevicePowerStatus(ctx, status): Change power status
If you can't connect to your microinverter:
- Make sure the sun is shining
- Verify the microinverter is on the same network
- Check that local API mode is enabled (see Setup section)
- Confirm the IP address is correct
Contributions are welcome! Please feel free to submit issues or pull requests.
This project is based on the APsystems-EZ1-API Python library by Sonnenladen GmbH. Special thanks to them for documenting the API.
MIT License - see LICENSE file for details
This is an unofficial tool and is not affiliated with or endorsed by APsystems. Use at your own risk.