Back to the catalog

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"
}
```

More