TriStar MPPT Modbus
Implementation-oriented knowledge bundle for the TriStar MPPT-45/60 Modbus specification
Open source Repository Open in the app JSON README (API)
About
# TriStar MPPT Modbus
Implementation knowledge derived from Morningstar's TriStar MPPT Modbus Specification V10.2.
## Contents
- [Communication](communication.md)
- [RAM registers](ram-registers.md)
- [EEPROM settings](eeprom-settings.md)
- [Coils and commands](coils.md)
- [Scaling and word order](scaling.md)
- [Faults and alarms](faults-alarms.md)
- [Curated machine-readable register definitions](registers.json)
- [Source and maintenance](source.md)
## Implementation rules
Treat PDU addresses as the 0-based addresses listed in the specification. PDU addresses
and Logical Addresses are distinct and must not be conflated. Follow each field's stated
HI/LO order for multi-word values.
EEPROM writes, slave control, and fixed array-voltage control have operational impact.
Keep them separate from read-only operations and require an explicit write call.
Details
- Kind
- OKF bundles
- Topic
- IoT & hardware
- Publisher
- dodo5522
- Origin
- okf_github
- Category
- dados
- Version
- 0.2
- Stars
- 4
- Forks
- 1
- Last push
- 2026-09-04T13:53:14Z
- Repository state
- ativo
- Language
- Python
- Added
- 2026-09-08 22:08:51
- Updated
- 2026-09-08 22:08:51
- Origin id
dodo5522/tsmppt60_driver:docs/okf/tsmppt-modbus/index.md
README
# TS-MPPT-60 driver module
This is python driver module to get the following status of TS-MPPT-60.
* Amp Hours
* Array Current
* Array Voltage
* Battery Temperature
* Battery Voltage
* Charge Current
* Heat Sink Temperature
* Kilowatt Hours
* Output Power
* Sweep Pmax
* Sweep Vmp
* Sweep Voc
* Target Voltage
# Requirement
* requests
# How to install
```bash
pip install tsmppt60-driver
```
# How to use
SystemStatus class object is iterator containing all live status data of TS-MPPT-60. Try the following line.
```python
print(SystemStatus("192.168.1.20").get())
```
The result is like following.
```
{'Amp Hours': {'group': 'Counter', 'unit': 'Ah', 'value': 18097.9},
'Array Current': {'group': 'Array', 'unit': 'A', 'value': 1.4},
'Array Voltage': {'group': 'Array', 'unit': 'V', 'value': 53.41},
'Battery Voltage': {'group': 'Battery', 'unit': 'V', 'value': 23.93},
'Charge Current': {'group': 'Battery', 'unit': 'A', 'value': 3.2},
'Heat Sink Temperature': {'group': 'Temperature', 'unit': 'C', ...},
'Kilowatt Hours': {'group': 'Counter', 'unit': 'kWh', 'value': 237.0},
'Target Voltage': {'group': 'Battery', 'unit': 'V', 'value': 28.6}}
```
The above data is limited information. You can disable the limitter by setting False to the second argument as SystemStatus() class.
```python
print(SystemStatus("192.168.1.20").get(False))
```
The result is like following.
```
{'Amp Hours': {'group': 'Counter', 'unit': 'Ah', 'value': 18097.8},
'Array Current': {'group': 'Array', 'unit': 'A', 'value': 1.3},
'Array Voltage': {'group': 'Array', 'unit': 'V', 'value': 53.41},
'Battery Temperature': {'group': 'Temperature', 'unit': 'C', ...},
'Battery Voltage': {'group': 'Battery', 'unit': 'V', 'value': 24.01},
'Charge Current': {'group': 'Battery', 'unit': 'A', 'value': 3.2},
'Heat Sink Temperature': {'group': 'Temperature', 'unit': 'C', ...},
'Kilowatt Hours': {'group': 'Counter', 'unit': 'kWh', 'value': 237.0},
'Output Power': {'group': 'Battery', 'unit': 'W', 'value': 76.0},
'Sweep Pmax': {'group': 'Array', 'unit': 'W', 'value': 73.0},
'Sweep Vmp': {'group': 'Array', 'unit': 'V', 'value': 53.41},
'Sweep Voc': {'group': 'Array', 'unit': 'V', 'value': 60.05},
'Target Voltage': {'group': 'Battery', 'unit': 'V', 'value': 28.6}}
```
JSON string can be got with following code.
```bash
$ python -c "from tsmppt60_driver import *; import json; print(json.dumps(SystemStatus('192.168.1.20').get()))" | jq '."Battery Voltage"'
{
"group": "Battery",
"value": 28.6,
"unit": "V"
}
```