Renogy Rover Monitoring with the Raspberry Pi

The information, below, was posted on the Renogy Forum by a user with the screenname lindsey.  The forum recently moved and the documentation was temporarily lost.  The information was reposted; but I wanted to put it here for easy reference in case it gets lost again.

This information is about connecting the Renogy Rover to the Raspberry Pi for monitoring.

First, here is a general link discussing connection of the Raspberry Pi to a solar battery charger.

Here is the wiring diagram that the Renogy Forum post provided:

Here is a sample output on an Android from the Python scripts.

Here is a sample database query.


The diagram, below, is a diagram of how the Rover’s RJ-12 port splits out into RS-232 signals.  Note that only TX, RX, and ground are used.

The link below was put together by lindsey.  It describes the needed hardware (in addition to the Pi) as well as the general functionality of the Python code.

Raspberry PI Writeup

Finally, here is a zip file with the Python code.  Unfortunately, I do not have a way to contact lindsey.  The code comments say that her name is Lindsey Crawford.  If anyone knows how to contact her, please let me know.


One thought on “Renogy Rover Monitoring with the Raspberry Pi”

  1. Hello James,

    Your guide was very helpful to me when setting up my Raspberry Pi to read data from my SRNE ML4860 Charge controller. I noticed you were unable to determine what some of the registers were meant to do. I managed to find and decipher a Modbus Protocol datasheet for SRNE devices which explains what each of the registers does, so I figured I’d let you and anyone else who finds this know about my findings.

    Registers 24-31 are actually supposed to be doubled up. Your code is only reading the last 2 bytes of the values. I noticed this when the code said that my total power generation was only 6KWh, which I know is impossible and lead me to discover that if you want to read these doubled up registers you need to do something like this:

    str(round(float((r.registers[28]*65536 + r.registers[29])*0.001), 3)) + “KWh”)

    where the first register is multiplied by 65536 since it is intended to be placed in front of the second one.

    There were some other issues which I managed to correct thanks to the datasheet. I published my code and a copy of the datasheet I used at

Leave a Reply

Your email address will not be published. Required fields are marked *